aboutsummaryrefslogtreecommitdiff
path: root/snag/util.c
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2026-07-21 09:17:56 -0400
committerJack Jamison <jackqjamison@gmail.com>2026-07-21 09:17:56 -0400
commitea598e719d557a876a52d0cbecb21c1fb8ff917f (patch)
treef81bd793d686e2a6c7784e25c7118f351d3be7a7 /snag/util.c
parent013a332a5ad21b4faea1644a6ad38b144ef22901 (diff)
add a bunch of util and clean up
Diffstat (limited to 'snag/util.c')
-rw-r--r--snag/util.c55
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;
}