utils.c (1067B)
1 #include "utils.h" 2 3 #include <errno.h> 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <stdarg.h> 7 #include <string.h> 8 9 void 10 panic_at(Node* node, const char* fmt, ...) 11 { 12 va_list args; 13 int saved_errno; 14 saved_errno = errno; 15 va_start(args, fmt); 16 fprintf(stderr, "%s, [%zu:%zu] ", node->filename, node->line, node->col); 17 fprintf(stderr, "Error: "); 18 vfprintf(stderr, fmt, args); 19 fprintf(stderr, "\n"); 20 va_end(args); 21 if (fmt[0] && fmt[strlen(fmt) - 1] == ':') fprintf(stderr, " %s", strerror(saved_errno)); 22 fputc('\n', stderr); 23 exit(1); 24 } 25 26 void 27 panic(const char* fmt, ...) 28 { 29 va_list args; 30 int saved_errno; 31 saved_errno = errno; 32 va_start(args, fmt); 33 fprintf(stderr, "Error: "); 34 vfprintf(stderr, fmt, args); 35 fprintf(stderr, "\n"); 36 va_end(args); 37 if (fmt[0] && fmt[strlen(fmt) - 1] == ':') fprintf(stderr, " %s", strerror(saved_errno)); 38 fputc('\n', stderr); 39 exit(1); 40 } 41 42 void 43 softpanic(const char* fmt, ...) 44 { 45 va_list args; 46 va_start(args, fmt); 47 fprintf(stderr, "Error: "); 48 vfprintf(stderr, fmt, args); 49 fprintf(stderr, "\n"); 50 va_end(args); 51 exit(0); 52 }