From 39a3f5ea7c0352a530338d30d4e618f6b4db84e4 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Sat, 24 Jun 2006 04:34:38 +0200 Subject: Customizable error handlers This patch makes the usage(), die() and error() handlers customizable. Nothing in the git code itself uses that but many other libgit users (like Git.pm) will. This is implemented using the mutator functions primarily because you cannot directly modifying global variables of libgit from a program that dlopen()ed it, apparently. But having functions for that is a better API anyway. Signed-off-by: Petr Baudis Signed-off-by: Junio C Hamano --- usage.c | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) (limited to 'usage.c') diff --git a/usage.c b/usage.c index 1fa924c3d9..b781b0061e 100644 --- a/usage.c +++ b/usage.c @@ -12,20 +12,58 @@ static void report(const char *prefix, const char *err, va_list params) fputs("\n", stderr); } -void usage(const char *err) +void usage_builtin(const char *err) { fprintf(stderr, "usage: %s\n", err); exit(129); } +void die_builtin(const char *err, va_list params) +{ + report("fatal: ", err, params); + exit(128); +} + +void error_builtin(const char *err, va_list params) +{ + report("error: ", err, params); +} + + +/* If we are in a dlopen()ed .so write to a global variable would segfault + * (ugh), so keep things static. */ +static void (*usage_routine)(const char *err) NORETURN = usage_builtin; +static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin; +static void (*error_routine)(const char *err, va_list params) = error_builtin; + +void set_usage_routine(void (*routine)(const char *err) NORETURN) +{ + usage_routine = routine; +} + +void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN) +{ + die_routine = routine; +} + +void set_error_routine(void (*routine)(const char *err, va_list params)) +{ + error_routine = routine; +} + + +void usage(const char *err) +{ + usage_routine(err); +} + void die(const char *err, ...) { va_list params; va_start(params, err); - report("fatal: ", err, params); + die_routine(err, params); va_end(params); - exit(128); } int error(const char *err, ...) @@ -33,7 +71,7 @@ int error(const char *err, ...) va_list params; va_start(params, err); - report("error: ", err, params); + error_routine(err, params); va_end(params); return -1; } -- cgit v1.3 From ce88ac5b129dd562a1062522039366ebbf1157e1 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 23 Jun 2006 22:44:33 -0700 Subject: usage: minimum type fix. Signed-off-by: Junio C Hamano --- usage.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'usage.c') diff --git a/usage.c b/usage.c index b781b0061e..52c2e96056 100644 --- a/usage.c +++ b/usage.c @@ -12,19 +12,19 @@ static void report(const char *prefix, const char *err, va_list params) fputs("\n", stderr); } -void usage_builtin(const char *err) +static NORETURN void usage_builtin(const char *err) { fprintf(stderr, "usage: %s\n", err); exit(129); } -void die_builtin(const char *err, va_list params) +static NORETURN void die_builtin(const char *err, va_list params) { report("fatal: ", err, params); exit(128); } -void error_builtin(const char *err, va_list params) +static void error_builtin(const char *err, va_list params) { report("error: ", err, params); } -- cgit v1.3