🌐 AI搜索 & 代理 主页
blob: f5e652cc76d7587fd7b682eb865d3436c99b16fb [file] [log] [blame]
Linus Torvalds0fcfd162005-04-18 20:04:431/*
2 * GIT - The information manager from hell
3 *
4 * Copyright (C) Linus Torvalds, 2005
5 */
Junio C Hamano4050c0d2005-12-05 19:54:296#include "git-compat-util.h"
Linus Torvalds0fcfd162005-04-18 20:04:437
8static void report(const char *prefix, const char *err, va_list params)
9{
10 fputs(prefix, stderr);
11 vfprintf(stderr, err, params);
12 fputs("\n", stderr);
13}
14
Junio C Hamanoce88ac52006-06-24 05:44:3315static NORETURN void usage_builtin(const char *err)
Linus Torvalds0fcfd162005-04-18 20:04:4316{
17 fprintf(stderr, "usage: %s\n", err);
Linus Torvalds5d1a5c02005-10-01 20:24:2718 exit(129);
Linus Torvalds0fcfd162005-04-18 20:04:4319}
20
Junio C Hamanoce88ac52006-06-24 05:44:3321static NORETURN void die_builtin(const char *err, va_list params)
Petr Baudis39a3f5e2006-06-24 02:34:3822{
23 report("fatal: ", err, params);
24 exit(128);
25}
26
Junio C Hamanoce88ac52006-06-24 05:44:3327static void error_builtin(const char *err, va_list params)
Petr Baudis39a3f5e2006-06-24 02:34:3828{
29 report("error: ", err, params);
30}
31
Shawn O. Pearcefa39b6b2006-12-22 00:48:3232static void warn_builtin(const char *warn, va_list params)
33{
34 report("warning: ", warn, params);
35}
Petr Baudis39a3f5e2006-06-24 02:34:3836
37/* If we are in a dlopen()ed .so write to a global variable would segfault
38 * (ugh), so keep things static. */
39static void (*usage_routine)(const char *err) NORETURN = usage_builtin;
40static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin;
41static void (*error_routine)(const char *err, va_list params) = error_builtin;
Shawn O. Pearcefa39b6b2006-12-22 00:48:3242static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
Petr Baudis39a3f5e2006-06-24 02:34:3843
44void set_usage_routine(void (*routine)(const char *err) NORETURN)
45{
46 usage_routine = routine;
47}
48
49void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN)
50{
51 die_routine = routine;
52}
53
54void set_error_routine(void (*routine)(const char *err, va_list params))
55{
56 error_routine = routine;
57}
58
Shawn O. Pearcefa39b6b2006-12-22 00:48:3259void set_warn_routine(void (*routine)(const char *warn, va_list params))
60{
61 warn_routine = routine;
62}
63
Petr Baudis39a3f5e2006-06-24 02:34:3864
65void usage(const char *err)
66{
67 usage_routine(err);
68}
69
Linus Torvalds0fcfd162005-04-18 20:04:4370void die(const char *err, ...)
71{
72 va_list params;
73
74 va_start(params, err);
Petr Baudis39a3f5e2006-06-24 02:34:3875 die_routine(err, params);
Linus Torvalds0fcfd162005-04-18 20:04:4376 va_end(params);
Linus Torvalds0fcfd162005-04-18 20:04:4377}
78
79int error(const char *err, ...)
80{
81 va_list params;
82
83 va_start(params, err);
Petr Baudis39a3f5e2006-06-24 02:34:3884 error_routine(err, params);
Linus Torvalds0fcfd162005-04-18 20:04:4385 va_end(params);
86 return -1;
87}
Shawn O. Pearcefa39b6b2006-12-22 00:48:3288
Theodore Ts'o46efd2d2007-03-30 23:07:0589void warning(const char *warn, ...)
Shawn O. Pearcefa39b6b2006-12-22 00:48:3290{
91 va_list params;
92
93 va_start(params, warn);
94 warn_routine(warn, params);
95 va_end(params);
96}