diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2026-07-21 09:17:56 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2026-07-21 09:17:56 -0400 |
| commit | ea598e719d557a876a52d0cbecb21c1fb8ff917f (patch) | |
| tree | f81bd793d686e2a6c7784e25c7118f351d3be7a7 /snag/util.c | |
| parent | 013a332a5ad21b4faea1644a6ad38b144ef22901 (diff) | |
add a bunch of util and clean up
Diffstat (limited to 'snag/util.c')
| -rw-r--r-- | snag/util.c | 55 |
1 files changed, 49 insertions, 6 deletions
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 <stdarg.h> +#include <stdlib.h> #include <string.h> +#include <stdio.h> + +#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; } |
