summaryrefslogtreecommitdiff
path: root/strings.c
diff options
context:
space:
mode:
authorMatthew Sotoudeh <matthew@masot.net>2023-07-25 14:58:33 -0700
committerMatthew Sotoudeh <matthew@masot.net>2023-07-25 14:58:33 -0700
commit1d943da0cf9154e7ce78ce867cdbb91531c5d78e (patch)
tree40c5c6c3ba7fafa6567aa5b5aa216caecf3935fc /strings.c
initial dietc commit
Diffstat (limited to 'strings.c')
-rw-r--r--strings.c31
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;
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback