9 char *string_duplicate(const char *str,
12 if (str_end != NULL && str > str_end) {
16 const size_t n = str_end == NULL ? strlen(str) : (size_t) (str_end - str);
17 char *dup_str = malloc(sizeof(char) * (n + 1));
18 if (dup_str == NULL) {
22 memcpy(dup_str, str, n);
28 char *trim_endline(char *s)
30 const size_t n = strlen(s);
36 if (s[n - 1] == '\n') {
43 char *string_append(char *prefix, const char *suffix)
48 return string_duplicate(suffix, NULL);
51 prefix = realloc(prefix, strlen(prefix) + strlen(suffix) + 1);
52 return strcat(prefix, suffix);