From 1d943da0cf9154e7ce78ce867cdbb91531c5d78e Mon Sep 17 00:00:00 2001 From: Matthew Sotoudeh Date: Tue, 25 Jul 2023 14:58:33 -0700 Subject: initial dietc commit --- strings.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 strings.c (limited to 'strings.c') diff --git a/strings.c b/strings.c new file mode 100644 index 0000000..9e67428 --- /dev/null +++ b/strings.c @@ -0,0 +1,31 @@ +#include "chibicc.h" + +void strarray_push(StringArray *arr, char *s) { + if (!arr->data) { + arr->data = calloc(8, sizeof(char *)); + arr->capacity = 8; + } + + if (arr->capacity == arr->len) { + arr->data = realloc(arr->data, sizeof(char *) * arr->capacity * 2); + arr->capacity *= 2; + for (int i = arr->len; i < arr->capacity; i++) + arr->data[i] = NULL; + } + + arr->data[arr->len++] = s; +} + +// Takes a printf-style format string and returns a formatted string. +char *format(char *fmt, ...) { + char *buf; + size_t buflen; + FILE *out = open_memstream(&buf, &buflen); + + va_list ap; + va_start(ap, fmt); + vfprintf(out, fmt, ap); + va_end(ap); + fclose(out); + return buf; +} -- cgit v1.2.3