Skip to content

Commit

Permalink
use "sentinel" function attribute for variadic lists
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Jul 10, 2013
1 parent 4621085 commit eccb614
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 0 deletions.
1 change: 1 addition & 0 deletions argv-array.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);
Expand Down
2 changes: 2 additions & 0 deletions builtin/revert.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
1 change: 1 addition & 0 deletions exec_cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
1 change: 1 addition & 0 deletions run-command.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit eccb614

Please sign in to comment.