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