diff options
Diffstat (limited to 'ccc.c')
| -rw-r--r-- | ccc.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -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; +} |
