From eccb614924c9067eeceffa503e4da3683f1c8b6b Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 9 Jul 2013 20:19:12 -0400 Subject: [PATCH] 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 More-Spots-Found-By: Matt Kraai Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- argv-array.h | 1 + builtin/revert.c | 2 ++ exec_cmd.h | 1 + run-command.h | 1 + 4 files changed, 5 insertions(+) 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 -- 2.45.1