/* Overengineered "die" Funktion (17Nov22) * * Usage: * * - die("Something went wrong") -> fprintf + exit * - die(":ferror") -> perror + exit * */ #include #include #include #include __attribute__((noreturn)) static void _die(char *file, unsigned line, char msg[static 1], ...) { va_list ap; assert(msg != NULL); #ifndef NDEBUG fprintf(stderr, "%s:%d: ", file, line); #endif if (msg[0] == ':') { perror(msg + 1); } else { va_start(ap, msg); vfprintf(stderr, msg, ap); va_end(ap); fputs("\n", stderr); } exit(EXIT_FAILURE); } #define die(msg, ...) _die(__FILE__, __LINE__, msg, ## __VA_ARGS__)