4 * Various reporting routines.
5 * Originally copied from GIT source.
7 * Copyright (C) Linus Torvalds, 2005
12 static void report(const char *prefix
, const char *err
, va_list params
)
15 vsnprintf(msg
, sizeof(msg
), err
, params
);
16 fprintf(stderr
, " %s%s\n", prefix
, msg
);
19 static NORETURN
void usage_builtin(const char *err
)
21 fprintf(stderr
, "\n Usage: %s\n", err
);
25 static NORETURN
void die_builtin(const char *err
, va_list params
)
27 report(" Fatal: ", err
, params
);
31 static void error_builtin(const char *err
, va_list params
)
33 report(" Error: ", err
, params
);
36 static void warn_builtin(const char *warn
, va_list params
)
38 report(" Warning: ", warn
, params
);
41 /* If we are in a dlopen()ed .so write to a global variable would segfault
42 * (ugh), so keep things static. */
43 static void (*usage_routine
)(const char *err
) NORETURN
= usage_builtin
;
44 static void (*die_routine
)(const char *err
, va_list params
) NORETURN
= die_builtin
;
45 static void (*error_routine
)(const char *err
, va_list params
) = error_builtin
;
46 static void (*warn_routine
)(const char *err
, va_list params
) = warn_builtin
;
48 void set_die_routine(void (*routine
)(const char *err
, va_list params
) NORETURN
)
50 die_routine
= routine
;
53 void set_warning_routine(void (*routine
)(const char *err
, va_list params
))
55 warn_routine
= routine
;
58 void usage(const char *err
)
63 void die(const char *err
, ...)
67 va_start(params
, err
);
68 die_routine(err
, params
);
72 int error(const char *err
, ...)
76 va_start(params
, err
);
77 error_routine(err
, params
);
82 void warning(const char *warn
, ...)
86 va_start(params
, warn
);
87 warn_routine(warn
, params
);