diff options
author | Preston Pan <ret2pop@gmail.com> | 2024-12-27 20:05:06 -0800 |
---|---|---|
committer | Preston Pan <ret2pop@gmail.com> | 2024-12-27 20:05:06 -0800 |
commit | 63f11aaec8d21844a07fd27003a992c102a3a297 (patch) | |
tree | 6240a2c8561642d0c1d0b95148d6c868c7855a4a /server/better_string.c | |
parent | fd14f6fbf8206589d2a0ad8f0793845cb8faf1d7 (diff) |
make directory structure for client
Diffstat (limited to 'server/better_string.c')
-rw-r--r-- | server/better_string.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/server/better_string.c b/server/better_string.c new file mode 100644 index 0000000..4413f77 --- /dev/null +++ b/server/better_string.c @@ -0,0 +1,51 @@ +#include <better_string.h> +#include <helpers.h> +#include <stdlib.h> +#include <string.h> + +string_t *init_string(const char *src) { + string_t *s = safe_calloc(1, sizeof(string_t)); + size_t len = src ? strlen(src) : DEFAULT_STR_SIZE; + size_t size = len * 2; + s->buf = safe_calloc(size, sizeof(char)); + s->buf[0] = '\0'; + + if (src) + strcpy(s->buf, src); + s->len = len; + s->size = size; + return s; +} + +void string_push(string_t *s, char c) { + if (s->len >= s->size - 2) { + s->size *= 2; + s->buf = safe_realloc(s->buf, s->size); + } + s->buf[s->len] = c; + s->len++; +} + +char string_pop(string_t *s) { + char c = s->buf[s->len]; + s->len--; + return c; +} + +void string_concat_const(string_t *s1, const char *s2) { + for (int i = 0; i < strlen(s2); i++) { + string_push(s1, s2[i]); + } +} + +void string_concat(string_t *s1, string_t *s2) { + for (int i = 0; i < s2->len; i++) { + string_push(s1, s2->buf[i]); + } +} + +void string_free(void *x) { + string_t *s = x; + free(s->buf); + free(s); +} |