Skip to content

Commit

Permalink
Add the LAST_ARG_MUST_BE_NULL macro
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ramsay Jones authored and Junio C Hamano committed Jul 19, 2013
1 parent 8dd0ee8 commit 9fe3edc
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 5 deletions.
2 changes: 1 addition & 1 deletion argv-array.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);
Expand Down
4 changes: 2 additions & 2 deletions builtin/revert.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion exec_cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

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

0 comments on commit 9fe3edc

Please sign in to comment.