xref: /kvmtool/util/util.c (revision ad054a21d2e7a21971ac575d0a843994afa8d35d)
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