]> git.lizzy.rs Git - nothing.git/blob - src/str.c
4d7b08c5d405895581f2d2ebb7bcab47ad01f471
[nothing.git] / src / str.c
1 #include <stdlib.h>
2 #include <string.h>
3 #include <assert.h>
4
5 #include "str.h"
6
7 char *string_duplicate(const char *str,
8                        const char *str_end)
9 {
10     if (str_end != NULL && str > str_end) {
11         return NULL;
12     }
13
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) {
17         return NULL;
18     }
19
20     memcpy(dup_str, str, n);
21     dup_str[n] = '\0';
22
23     return dup_str;
24 }
25
26 char *trim_endline(char *s)
27 {
28     const size_t n = strlen(s);
29
30     if (n == 0) {
31         return s;
32     }
33
34     if (s[n - 1] == '\n') {
35         s[n - 1] = '\0';
36     }
37
38     return s;
39 }
40
41 char *string_append(char *prefix, const char *suffix)
42 {
43     assert(suffix);
44
45     if (prefix == NULL) {
46         return string_duplicate(suffix, NULL);
47     }
48
49     prefix = realloc(prefix, strlen(prefix) + strlen(suffix) + 1);
50     return strcat(prefix, suffix);
51 }