summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Faye-Lund <kusmabite@googlemail.com>2009-09-30 18:05:50 +0000
committerJeff King <peff@peff.net>2009-10-01 04:12:21 -0400
commit18660bc96ec0419cc096a53998d3197f2b905e8a (patch)
tree58038677551d5500049b48019bfe8debf904e2cb
parenta4f3131c07c1f601be1e24b2143ca7e2deea09b5 (diff)
downloadgit-18660bc96ec0419cc096a53998d3197f2b905e8a.tar.gz
add NORETURN_PTR for function pointers
Some compilers (including at least MSVC and ARM RVDS) supports NORETURN on function declarations, but not on function pointers. This patch makes it possible to define NORETURN for these compilers, by splitting the NORETURN macro into two - one for function declarations and one for function pointers. Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com> Signed-off-by: Jeff King <peff@peff.net>
-rw-r--r--git-compat-util.h4
-rw-r--r--usage.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/git-compat-util.h b/git-compat-util.h
index bac376f4c7..ef60803384 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -176,8 +176,10 @@ extern char *gitbasename(char *);
#ifdef __GNUC__
#define NORETURN __attribute__((__noreturn__))
+#define NORETURN_PTR __attribute__((__noreturn__))
#else
#define NORETURN
+#define NORETURN_PTR
#ifndef __attribute__
#define __attribute__(x)
#endif
@@ -192,7 +194,7 @@ extern NORETURN void die_errno(const char *err, ...) __attribute__((format (prin
extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
-extern void set_die_routine(NORETURN void (*routine)(const char *err, va_list params));
+extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
extern int prefixcmp(const char *str, const char *prefix);
extern time_t tm_to_time_t(const struct tm *tm);
diff --git a/usage.c b/usage.c
index 0555ce6ccd..c488f3afcd 100644
--- a/usage.c
+++ b/usage.c
@@ -36,12 +36,12 @@ static void warn_builtin(const char *warn, va_list params)
/* If we are in a dlopen()ed .so write to a global variable would segfault
* (ugh), so keep things static. */
-static NORETURN void (*usage_routine)(const char *err) = usage_builtin;
-static NORETURN void (*die_routine)(const char *err, va_list params) = die_builtin;
+static NORETURN_PTR void (*usage_routine)(const char *err) = usage_builtin;
+static NORETURN_PTR void (*die_routine)(const char *err, va_list params) = die_builtin;
static void (*error_routine)(const char *err, va_list params) = error_builtin;
static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
-void set_die_routine(NORETURN void (*routine)(const char *err, va_list params))
+void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params))
{
die_routine = routine;
}