2018-03-29 15:49:39 +02:00
|
|
|
#include <stdlib.h>
|
|
|
|
|
2018-03-28 14:22:07 -05:00
|
|
|
#include "mem_util.h"
|
|
|
|
|
2019-05-22 04:04:10 +02:00
|
|
|
char *strcpy_alloc(const char *src)
|
2018-03-28 14:22:07 -05:00
|
|
|
{
|
2018-03-29 15:13:33 +02:00
|
|
|
char *result = NULL;
|
2019-05-22 04:04:10 +02:00
|
|
|
size_t len = src ? strlen(src) : 0;
|
2018-03-29 15:13:33 +02:00
|
|
|
|
2018-03-28 14:22:07 -05:00
|
|
|
if (len == 0)
|
|
|
|
return NULL;
|
2018-03-29 15:13:33 +02:00
|
|
|
|
2018-03-28 14:22:07 -05:00
|
|
|
result = (char*)malloc(len + 1);
|
2019-05-22 04:04:10 +02:00
|
|
|
strcpy(result, src);
|
2018-03-28 14:22:07 -05:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2019-05-22 04:04:10 +02:00
|
|
|
char *strcpy_alloc_force(const char *src)
|
2018-03-28 14:22:07 -05:00
|
|
|
{
|
2019-05-22 04:04:10 +02:00
|
|
|
char *result = strcpy_alloc(src);
|
2018-03-29 15:13:33 +02:00
|
|
|
if (!result)
|
2019-05-22 04:04:10 +02:00
|
|
|
return (char*)calloc(1, 1);
|
2018-03-28 14:22:07 -05:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2019-05-22 04:04:10 +02:00
|
|
|
void strcat_alloc(char **dst, const char *s)
|
2018-03-28 14:22:07 -05:00
|
|
|
{
|
2019-05-22 04:04:10 +02:00
|
|
|
size_t len1;
|
|
|
|
char *src = *dst;
|
2018-03-28 14:22:07 -05:00
|
|
|
|
2019-05-22 04:04:10 +02:00
|
|
|
if (!src)
|
2018-03-28 14:22:07 -05:00
|
|
|
{
|
2019-05-22 04:04:10 +02:00
|
|
|
src = strcpy_alloc_force(s);
|
|
|
|
*dst = src;
|
2018-03-28 14:22:07 -05:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-05-22 04:04:10 +02:00
|
|
|
if (!s)
|
|
|
|
return;
|
|
|
|
|
|
|
|
len1 = strlen(src);
|
|
|
|
src = (char*)realloc(src, len1 + strlen(s) + 1);
|
|
|
|
|
|
|
|
if (!src)
|
2018-03-28 14:22:07 -05:00
|
|
|
return;
|
|
|
|
|
2019-05-22 04:04:10 +02:00
|
|
|
*dst = src;
|
|
|
|
strcpy(src + len1, s);
|
2018-03-28 14:22:07 -05:00
|
|
|
}
|