44 lines
989 B
C
44 lines
989 B
C
#include "string_utils.h"
|
|
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
char *trim_blank_left(char *str)
|
|
{
|
|
if (str == NULL)
|
|
return NULL;
|
|
|
|
while (*str != '\0' && isblank(*str))
|
|
str++;
|
|
|
|
return str;
|
|
}
|
|
|
|
char *insert_into(char *dest, const char *src, size_t pos, size_t len)
|
|
{
|
|
size_t res_len = strlen(dest);
|
|
size_t prefix_len = pos;
|
|
size_t suffix_len = res_len - (pos + len);
|
|
size_t src_len = strlen(src);
|
|
size_t new_len = prefix_len + src_len + suffix_len;
|
|
|
|
if (dest == NULL || src == NULL || pos + len > res_len)
|
|
return NULL;
|
|
|
|
if (res_len < new_len)
|
|
{
|
|
char *p = realloc(dest, new_len + 1);
|
|
if (p == NULL)
|
|
return NULL; // allocation failure
|
|
dest = p;
|
|
}
|
|
|
|
memmove(dest + pos + src_len, dest + pos + len, suffix_len);
|
|
memcpy(dest + pos, src, src_len);
|
|
dest[new_len] = 0;
|
|
|
|
if (res_len > new_len)
|
|
return realloc(dest, new_len + 1);
|
|
return dest;
|
|
}
|