From 39148b1b6dc6c7a10f7e713ece084b6d5cf27537 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Sun, 16 Feb 2025 20:03:40 +0100 Subject: Initial --- string.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 string.c (limited to 'string.c') diff --git a/string.c b/string.c new file mode 100644 index 0000000..b85b46a --- /dev/null +++ b/string.c @@ -0,0 +1,41 @@ +#include +#include +#include "string.h" + + +struct string string_make(const char *str) { + struct string s; + s.len = strlen(str); + s.cap = s.len + 1; + s.data = malloc(s.cap); + memcpy(s.data, str, s.cap); + return s; +} + +void string_free(struct string s) { + free(s.data); +} + +char* string_read(struct string s) { + return s.data; +} + +size_t string_append(struct string *s, char *arg) { + const size_t arglen = strlen(arg); + if (s->len + arglen + 1 > s->cap) { + size_t newcap = s->cap * 2; + while (s->len + arglen + 1 > newcap) newcap *= 2; + s->data = realloc(s->data, newcap); + } + memcpy(s->data + s->len, arg, arglen + 1); + const size_t origlen = s->len; + s->len += arglen; + return origlen; +} + +void string_truncate(struct string *s, size_t length) { + if (length < s->len) { + s->len = length; + s->data[length] = '\0'; + } +} -- cgit v1.2.3-70-g09d2