Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--git-compat-util.h2
-rw-r--r--usage.c28
2 files changed, 27 insertions, 3 deletions
diff --git a/git-compat-util.h b/git-compat-util.h
index c6bd2a84e5..d5e495529c 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -479,6 +479,7 @@ NORETURN void usage(const char *err);
NORETURN void usagef(const char *err, ...) __attribute__((format (printf, 1, 2)));
NORETURN void die(const char *err, ...) __attribute__((format (printf, 1, 2)));
NORETURN void die_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
+int die_message(const char *err, ...) __attribute__((format (printf, 1, 2)));
int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
int error_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
@@ -513,6 +514,7 @@ static inline int const_error(void)
typedef void (*report_fn)(const char *, va_list params);
void set_die_routine(NORETURN_PTR report_fn routine);
+report_fn get_die_message_routine(void);
void set_error_routine(report_fn routine);
report_fn get_error_routine(void);
void set_warn_routine(report_fn routine);
diff --git a/usage.c b/usage.c
index c7d233b0de..76399ba840 100644
--- a/usage.c
+++ b/usage.c
@@ -55,6 +55,12 @@ static NORETURN void usage_builtin(const char *err, va_list params)
exit(129);
}
+static void die_message_builtin(const char *err, va_list params)
+{
+ trace2_cmd_error_va(err, params);
+ vreportf("fatal: ", err, params);
+}
+
/*
* We call trace2_cmd_error_va() in the below functions first and
* expect it to va_copy 'params' before using it (because an 'ap' can
@@ -62,10 +68,9 @@ static NORETURN void usage_builtin(const char *err, va_list params)
*/
static NORETURN void die_builtin(const char *err, va_list params)
{
- trace2_cmd_error_va(err, params);
-
- vreportf("fatal: ", err, params);
+ report_fn die_message_fn = get_die_message_routine();
+ die_message_fn(err, params);
exit(128);
}
@@ -109,6 +114,7 @@ static int die_is_recursing_builtin(void)
* (ugh), so keep things static. */
static NORETURN_PTR report_fn usage_routine = usage_builtin;
static NORETURN_PTR report_fn die_routine = die_builtin;
+static report_fn die_message_routine = die_message_builtin;
static report_fn error_routine = error_builtin;
static report_fn warn_routine = warn_builtin;
static int (*die_is_recursing)(void) = die_is_recursing_builtin;
@@ -118,6 +124,11 @@ void set_die_routine(NORETURN_PTR report_fn routine)
die_routine = routine;
}
+report_fn get_die_message_routine(void)
+{
+ return die_message_routine;
+}
+
void set_error_routine(report_fn routine)
{
error_routine = routine;
@@ -211,6 +222,17 @@ void NORETURN die_errno(const char *fmt, ...)
va_end(params);
}
+#undef die_message
+int die_message(const char *err, ...)
+{
+ va_list params;
+
+ va_start(params, err);
+ die_message_routine(err, params);
+ va_end(params);
+ return 128;
+}
+
#undef error_errno
int error_errno(const char *fmt, ...)
{