aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/common.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-08-23 00:01:51 +0900
committernsfisis <nsfisis@gmail.com>2025-08-23 00:30:50 +0900
commit22cd700370d5d548a0cbd347bf1dc9cb9baad8e2 (patch)
tree2f5e501461bcec978b0d9c34aa1a313e4f750e4a /src/common.c
parent9c202a496e75903fe37e5c19cb97c98eba6e35f2 (diff)
downloadducc-22cd700370d5d548a0cbd347bf1dc9cb9baad8e2.tar.gz
ducc-22cd700370d5d548a0cbd347bf1dc9cb9baad8e2.tar.zst
ducc-22cd700370d5d548a0cbd347bf1dc9cb9baad8e2.zip
feat: allocate array dynamically in parsing
Diffstat (limited to 'src/common.c')
-rw-r--r--src/common.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/common.c b/src/common.c
index 1b89f8c..3553419 100644
--- a/src/common.c
+++ b/src/common.c
@@ -37,3 +37,30 @@ void strbuilder_append_char(StrBuilder* b, int c) {
strbuilder_reserve(b, b->len + 1 + 1);
b->buf[b->len++] = c;
}
+
+struct StrArray {
+ size_t len;
+ size_t capacity;
+ const char** data;
+};
+typedef struct StrArray StrArray;
+
+void strings_init(StrArray* strings) {
+ strings->len = 0;
+ strings->capacity = 32;
+ strings->data = calloc(strings->capacity, sizeof(const char*));
+}
+
+void strings_reserve(StrArray* strings, size_t size) {
+ if (size <= strings->capacity)
+ return;
+ strings->capacity *= 2;
+ strings->data = realloc(strings->data, strings->capacity * sizeof(const char*));
+ memset(strings->data + strings->len, 0, (strings->capacity - strings->len) * sizeof(const char*));
+}
+
+int strings_push(StrArray* strings, const char* str) {
+ strings_reserve(strings, strings->len + 1);
+ strings->data[strings->len] = str;
+ return ++strings->len;
+}