1*ad054a21SCyrill Gorcunov /* 2*ad054a21SCyrill Gorcunov * Taken from perf which in turn take it from GIT 3*ad054a21SCyrill Gorcunov */ 4*ad054a21SCyrill Gorcunov 5*ad054a21SCyrill Gorcunov #include "util.h" 6*ad054a21SCyrill Gorcunov 7*ad054a21SCyrill Gorcunov static void report(const char *prefix, const char *err, va_list params) 8*ad054a21SCyrill Gorcunov { 9*ad054a21SCyrill Gorcunov char msg[1024]; 10*ad054a21SCyrill Gorcunov vsnprintf(msg, sizeof(msg), err, params); 11*ad054a21SCyrill Gorcunov fprintf(stderr, " %s%s\n", prefix, msg); 12*ad054a21SCyrill Gorcunov } 13*ad054a21SCyrill Gorcunov 14*ad054a21SCyrill Gorcunov static NORETURN void die_builtin(const char *err, va_list params) 15*ad054a21SCyrill Gorcunov { 16*ad054a21SCyrill Gorcunov report(" Fatal: ", err, params); 17*ad054a21SCyrill Gorcunov exit(128); 18*ad054a21SCyrill Gorcunov } 19*ad054a21SCyrill Gorcunov 20*ad054a21SCyrill Gorcunov static void error_builtin(const char *err, va_list params) 21*ad054a21SCyrill Gorcunov { 22*ad054a21SCyrill Gorcunov report(" Error: ", err, params); 23*ad054a21SCyrill Gorcunov } 24*ad054a21SCyrill Gorcunov 25*ad054a21SCyrill Gorcunov static void warn_builtin(const char *warn, va_list params) 26*ad054a21SCyrill Gorcunov { 27*ad054a21SCyrill Gorcunov report(" Warning: ", warn, params); 28*ad054a21SCyrill Gorcunov } 29*ad054a21SCyrill Gorcunov 30*ad054a21SCyrill Gorcunov void die(const char *err, ...) 31*ad054a21SCyrill Gorcunov { 32*ad054a21SCyrill Gorcunov va_list params; 33*ad054a21SCyrill Gorcunov 34*ad054a21SCyrill Gorcunov va_start(params, err); 35*ad054a21SCyrill Gorcunov die_builtin(err, params); 36*ad054a21SCyrill Gorcunov va_end(params); 37*ad054a21SCyrill Gorcunov } 38*ad054a21SCyrill Gorcunov 39*ad054a21SCyrill Gorcunov int error(const char *err, ...) 40*ad054a21SCyrill Gorcunov { 41*ad054a21SCyrill Gorcunov va_list params; 42*ad054a21SCyrill Gorcunov 43*ad054a21SCyrill Gorcunov va_start(params, err); 44*ad054a21SCyrill Gorcunov error_builtin(err, params); 45*ad054a21SCyrill Gorcunov va_end(params); 46*ad054a21SCyrill Gorcunov return -1; 47*ad054a21SCyrill Gorcunov } 48*ad054a21SCyrill Gorcunov 49*ad054a21SCyrill Gorcunov void warning(const char *warn, ...) 50*ad054a21SCyrill Gorcunov { 51*ad054a21SCyrill Gorcunov va_list params; 52*ad054a21SCyrill Gorcunov 53*ad054a21SCyrill Gorcunov va_start(params, warn); 54*ad054a21SCyrill Gorcunov warn_builtin(warn, params); 55*ad054a21SCyrill Gorcunov va_end(params); 56*ad054a21SCyrill Gorcunov } 57*ad054a21SCyrill Gorcunov 58*ad054a21SCyrill Gorcunov void die_perror(const char *s) 59*ad054a21SCyrill Gorcunov { 60*ad054a21SCyrill Gorcunov perror(s); 61*ad054a21SCyrill Gorcunov exit(1); 62*ad054a21SCyrill Gorcunov } 63