#include "util.h" #include #include #include #include #define FORMAT_MAX_SIZE 1024 extern int errno; void NORETURN die(char const * format, ...) { va_list vargs; va_start (vargs, format); vfprintf(stderr, format, vargs); fprintf(stderr, "\n"); va_end(vargs); exit(1); } void err(char const * format, ...) { va_list vargs; va_start (vargs, format); vfprintf(stderr, format, vargs); fprintf(stderr, "\n"); va_end(vargs); } void format_with_errno(char * buf, size_t n, char const * format) { char const * errstr = strerror(errno); char fmt_err[256]; size_t i = 0, j = 0; while(errstr[j] && i < sizeof(fmt_err) - 1) { if((fmt_err[i++] = errstr[j++]) != '%') continue; if(i < sizeof(fmt_err) - 1) { fmt_err[i++] = '%'; } else { i--; } } fmt_err[i] = '\0'; snprintf(buf, n, "%s: %s", format, fmt_err); } void NORETURN die_errno(char const * format, ...) { va_list vargs; va_start (vargs, format); char buf[FORMAT_MAX_SIZE]; format_with_errno(buf, sizeof(buf), format); vfprintf(stderr, buf, vargs); fprintf(stderr, "\n"); exit(1); va_end(vargs); } void err_errno(char const * format, ...) { va_list vargs; va_start (vargs, format); char buf[FORMAT_MAX_SIZE]; format_with_errno(buf, sizeof(buf), format); vfprintf(stderr, buf, vargs); fprintf(stderr, "\n"); va_end(vargs); }