summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamsay Jones <ramsay@ramsay1.demon.co.uk>2013-07-18 20:02:12 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-07-19 16:26:15 (GMT)
commit9fe3edc47f1f17a53272671c572c90ba71eb4f74 (patch)
treea1be4ae69fba938c0fc0b04a1fc87365e57d1b0a
parent8dd0ee823f1829a3aa228c3c73e31de5c89b5317 (diff)
downloadgit-9fe3edc47f1f17a53272671c572c90ba71eb4f74.zip
git-9fe3edc47f1f17a53272671c572c90ba71eb4f74.tar.gz
git-9fe3edc47f1f17a53272671c572c90ba71eb4f74.tar.bz2
Add the LAST_ARG_MUST_BE_NULL macro
The sentinel function attribute is not understood by versions of the gcc compiler prior to v4.0. At present, for earlier versions of gcc, the build issues 108 warnings related to the unknown attribute. In order to suppress the warnings, we conditionally define the LAST_ARG_MUST_BE_NULL macro to provide the sentinel attribute for gcc v4.0 and newer. Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--argv-array.h2
-rw-r--r--builtin/revert.c4
-rw-r--r--exec_cmd.h2
-rw-r--r--git-compat-util.h7
-rw-r--r--run-command.h2
5 files changed, 12 insertions, 5 deletions
diff --git a/argv-array.h b/argv-array.h
index e805748..85ba438 100644
--- a/argv-array.h
+++ b/argv-array.h
@@ -15,7 +15,7 @@ void argv_array_init(struct argv_array *);
void argv_array_push(struct argv_array *, const char *);
__attribute__((format (printf,2,3)))
void argv_array_pushf(struct argv_array *, const char *fmt, ...);
-__attribute__((sentinel))
+LAST_ARG_MUST_BE_NULL
void argv_array_pushl(struct argv_array *, ...);
void argv_array_pop(struct argv_array *);
void argv_array_clear(struct argv_array *);
diff --git a/builtin/revert.c b/builtin/revert.c
index b8b5174..1d2648b 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -54,7 +54,7 @@ static int option_parse_x(const struct option *opt,
return 0;
}
-__attribute__((sentinel))
+LAST_ARG_MUST_BE_NULL
static void verify_opt_compatible(const char *me, const char *base_opt, ...)
{
const char *this_opt;
@@ -71,7 +71,7 @@ static void verify_opt_compatible(const char *me, const char *base_opt, ...)
die(_("%s: %s cannot be used with %s"), me, this_opt, base_opt);
}
-__attribute__((sentinel))
+LAST_ARG_MUST_BE_NULL
static void verify_opt_mutually_compatible(const char *me, ...)
{
const char *opt1, *opt2 = NULL;
diff --git a/exec_cmd.h b/exec_cmd.h
index 307b55c..e4c9702 100644
--- a/exec_cmd.h
+++ b/exec_cmd.h
@@ -7,7 +7,7 @@ extern const char *git_exec_path(void);
extern void setup_path(void);
extern const char **prepare_git_cmd(const char **argv);
extern int execv_git_cmd(const char **argv); /* NULL terminated */
-__attribute__((sentinel))
+LAST_ARG_MUST_BE_NULL
extern int execl_git_cmd(const char *cmd, ...);
extern const char *system_path(const char *path);
diff --git a/git-compat-util.h b/git-compat-util.h
index e955bb5..10e3ba6 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -295,6 +295,13 @@ extern char *gitbasename(char *);
#endif
#endif
+/* The sentinel attribute is valid from gcc version 4.0 */
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#define LAST_ARG_MUST_BE_NULL __attribute__((sentinel))
+#else
+#define LAST_ARG_MUST_BE_NULL
+#endif
+
#include "compat/bswap.h"
#ifdef USE_WILDMATCH
diff --git a/run-command.h b/run-command.h
index 0a47679..6b985af 100644
--- a/run-command.h
+++ b/run-command.h
@@ -46,7 +46,7 @@ int finish_command(struct child_process *);
int run_command(struct child_process *);
extern char *find_hook(const char *name);
-__attribute__((sentinel))
+LAST_ARG_MUST_BE_NULL
extern int run_hook(const char *index_file, const char *name, ...);
#define RUN_COMMAND_NO_STDIN 1