7 char *string_duplicate(const char *str,
10 if (str_end != NULL && str > str_end) {
14 const size_t n = str_end == NULL ? strlen(str) : (size_t) (str_end - str);
15 char *dup_str = malloc(sizeof(char) * (n + 1));
16 if (dup_str == NULL) {
20 memcpy(dup_str, str, n);
26 char *trim_endline(char *s)
28 const size_t n = strlen(s);
34 if (s[n - 1] == '\n') {
41 char *string_append(char *prefix, const char *suffix)
46 return string_duplicate(suffix, NULL);
49 prefix = realloc(prefix, strlen(prefix) + strlen(suffix) + 1);
50 return strcat(prefix, suffix);