summaryrefslogtreecommitdiff
path: root/ccc.c
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2026-08-06 00:24:49 -0400
committerCarson Fleming <cflems@cflems.net>2026-08-06 00:24:49 -0400
commitb48e27f5cc31af65d8bb92d4b81cd03a60c5bcdb (patch)
tree0901fba9ff451968d758ed47b57ff99d1330fb8a /ccc.c
parenta207a7f39514f03ddfafbe39e52a3fae57a414b4 (diff)
downloadccc-b48e27f5cc31af65d8bb92d4b81cd03a60c5bcdb.tar.gz
clean up yesterday's hacks + functions in type system
Diffstat (limited to 'ccc.c')
-rw-r--r--ccc.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/ccc.c b/ccc.c
index ca4eba1..c1b1540 100644
--- a/ccc.c
+++ b/ccc.c
@@ -1,6 +1,7 @@
#include "ccc.h"
#include <stdlib.h>
#include <stdio.h>
+#include <stdarg.h>
void* ccc_alloc(integral_t sz) {
void* ptr = calloc(1, sz);
@@ -10,3 +11,24 @@ void* ccc_alloc(integral_t sz) {
}
return ptr;
}
+
+char* ccc_sprintf(const char* format, ...) {
+ va_list args;
+
+ va_start(args, format);
+ int req_sz = vsnprintf(NULL, 0, format, args);
+ va_end(args);
+
+ if (req_sz < 0) {
+ fprintf(stderr, "ccc: formatting error\n");
+ exit(1);
+ }
+ req_sz += 1; /* null terminated */
+ char* buffer = ccc_alloc(req_sz);
+
+ va_start(args, format);
+ vsnprintf(buffer, req_sz, format, args);
+ va_end(args);
+
+ return buffer;
+}