diff options
author | Jeff King <peff@peff.net> | 2013-07-09 20:19:12 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-07-09 22:23:09 -0700 |
commit | eccb614924c9067eeceffa503e4da3683f1c8b6b (patch) | |
tree | 153f2b480f11456aa7678052a02fd975a89218c7 | |
parent | 4621085b7eb2f4cffe16d508988ff9b4a874b4ef (diff) | |
download | git-eccb614924c9067eeceffa503e4da3683f1c8b6b.tar.gz |
use "sentinel" function attribute for variadic lists
This attribute can help gcc notice when callers forget to
add a NULL sentinel to the end of the function. This is our
first use of the sentinel attribute, but we shouldn't need
to #ifdef for other compilers, as __attribute__ is already a
no-op on non-gcc-compatible compilers.
Suggested-by: Bert Wesarg <bert.wesarg@googlemail.com>
More-Spots-Found-By: Matt Kraai <kraai@ftbfs.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | argv-array.h | 1 | ||||
-rw-r--r-- | builtin/revert.c | 2 | ||||
-rw-r--r-- | exec_cmd.h | 1 | ||||
-rw-r--r-- | run-command.h | 1 |
4 files changed, 5 insertions, 0 deletions
diff --git a/argv-array.h b/argv-array.h index 40248d424c..e8057483af 100644 --- a/argv-array.h +++ b/argv-array.h @@ -15,6 +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)) 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 0401fdb02c..b8b51746de 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -54,6 +54,7 @@ static int option_parse_x(const struct option *opt, return 0; } +__attribute__((sentinel)) static void verify_opt_compatible(const char *me, const char *base_opt, ...) { const char *this_opt; @@ -70,6 +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)) 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 e2b546b615..307b55cbad 100644 --- a/exec_cmd.h +++ b/exec_cmd.h @@ -7,6 +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)) extern int execl_git_cmd(const char *cmd, ...); extern const char *system_path(const char *path); diff --git a/run-command.h b/run-command.h index 221ce33140..0a47679c42 100644 --- a/run-command.h +++ b/run-command.h @@ -46,6 +46,7 @@ int finish_command(struct child_process *); int run_command(struct child_process *); extern char *find_hook(const char *name); +__attribute__((sentinel)) extern int run_hook(const char *index_file, const char *name, ...); #define RUN_COMMAND_NO_STDIN 1 |