diff options
author | Matthew Sotoudeh <matthew@masot.net> | 2023-07-25 14:58:33 -0700 |
---|---|---|
committer | Matthew Sotoudeh <matthew@masot.net> | 2023-07-25 14:58:33 -0700 |
commit | 1d943da0cf9154e7ce78ce867cdbb91531c5d78e (patch) | |
tree | 40c5c6c3ba7fafa6567aa5b5aa216caecf3935fc /strings.c |
initial dietc commit
Diffstat (limited to 'strings.c')
-rw-r--r-- | strings.c | 31 |
1 files changed, 31 insertions, 0 deletions
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; +} |