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