From ea598e719d557a876a52d0cbecb21c1fb8ff917f Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Tue, 21 Jul 2026 09:17:56 -0400 Subject: add a bunch of util and clean up --- snag/util.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) (limited to 'snag/util.c') diff --git a/snag/util.c b/snag/util.c index c4137f6..d8947a7 100644 --- a/snag/util.c +++ b/snag/util.c @@ -1,15 +1,58 @@ -#include +#include #include +#include + +#include "util.h" + +void eprintf(const char *format, ...) { + // send that shi to stderr + va_list args; + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); +} + +void error_out(const char *format, ...) { + va_list args; + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); + fprintf(stderr, "\n"); + exit(1); +} + +void* emalloc(size_t size, char* alloc_reason) { + void* d = malloc(size); + if (d == NULL) error_out("Failed to allocate %s", alloc_reason); + return d; +} + +char* vastrcat_(int dummy, ...) { -void vstrcat_(char* dest, ...) { va_list args; - va_start(args, dest); + va_list args2; + va_start(args, dummy); + va_copy(args2, args); + + // get len of output string + size_t len = 0; while (1) { char* arg = va_arg(args, char*); if (!arg) break; - memcpy(dest, arg, strlen(arg)); - dest += strlen(arg); + len += strlen(arg); } va_end(args); - *dest = 0; + + // allocate and build output + char* output = malloc(len + 1); + char* p = output; + while (1) { + char* arg = va_arg(args2, char*); + if (!arg) break; + memcpy(p, arg, strlen(arg)); + p += strlen(arg); + } + va_end(args2); + + return output; } -- cgit v1.2.3