#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, ...) { va_list args; 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; len += strlen(arg); } va_end(args); // 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; }