2 * GIT - The information manager from hell
4 * Copyright (C) Linus Torvalds, 2005
6 #include "git-compat-util.h"
8 static void report(const char *prefix
, const char *err
, va_list params
)
11 vsnprintf(msg
, sizeof(msg
), err
, params
);
12 fprintf(stderr
, "%s%s\n", prefix
, msg
);
15 static NORETURN
void usage_builtin(const char *err
)
17 fprintf(stderr
, "usage: %s\n", err
);
21 static NORETURN
void die_builtin(const char *err
, va_list params
)
23 report("fatal: ", err
, params
);
27 static void error_builtin(const char *err
, va_list params
)
29 report("error: ", err
, params
);
32 static void warn_builtin(const char *warn
, va_list params
)
34 report("warning: ", warn
, params
);
37 /* If we are in a dlopen()ed .so write to a global variable would segfault
38 * (ugh), so keep things static. */
39 static void (*usage_routine
)(const char *err
) NORETURN
= usage_builtin
;
40 static void (*die_routine
)(const char *err
, va_list params
) NORETURN
= die_builtin
;
41 static void (*error_routine
)(const char *err
, va_list params
) = error_builtin
;
42 static void (*warn_routine
)(const char *err
, va_list params
) = warn_builtin
;
44 void set_usage_routine(void (*routine
)(const char *err
) NORETURN
)
46 usage_routine
= routine
;
49 void set_die_routine(void (*routine
)(const char *err
, va_list params
) NORETURN
)
51 die_routine
= routine
;
54 void set_error_routine(void (*routine
)(const char *err
, va_list params
))
56 error_routine
= routine
;
59 void set_warn_routine(void (*routine
)(const char *warn
, va_list params
))
61 warn_routine
= routine
;
65 void usage(const char *err
)
70 void die(const char *err
, ...)
74 va_start(params
, err
);
75 die_routine(err
, params
);
79 int error(const char *err
, ...)
83 va_start(params
, err
);
84 error_routine(err
, params
);
89 void warning(const char *warn
, ...)
93 va_start(params
, warn
);
94 warn_routine(warn
, params
);