Skip to content

Commit

Permalink
run_hook(): allow more than 9 hook arguments
Browse files Browse the repository at this point in the history
This is done using the ALLOC_GROW macro.

Signed-off-by: Stephan Beyer <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
sbeyer authored and gitster committed Jan 18, 2009
1 parent cf94ca8 commit 14e6298
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Documentation/technical/api-run-command.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Functions
The first argument is a pathname to an index file, or NULL
if the hook uses the default index file or no index is needed.
The second argument is the name of the hook.
The further arguments (up to 9) correspond to the hook arguments.
The further arguments correspond to the hook arguments.
The last argument has to be NULL to terminate the arguments list.
If the hook does not exist or is not executable, the return
value will be zero.
Expand Down
18 changes: 9 additions & 9 deletions run-command.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,23 +346,22 @@ int finish_async(struct async *async)
int run_hook(const char *index_file, const char *name, ...)
{
struct child_process hook;
const char *argv[10], *env[2];
const char **argv = NULL, *env[2];
char index[PATH_MAX];
va_list args;
int ret;
int i;
size_t i = 0, alloc = 0;

if (access(git_path("hooks/%s", name), X_OK) < 0)
return 0;

va_start(args, name);
argv[0] = git_path("hooks/%s", name);
i = 0;
do {
if (++i >= ARRAY_SIZE(argv))
die("run_hook(): too many arguments");
argv[i] = va_arg(args, const char *);
} while (argv[i]);
ALLOC_GROW(argv, i + 1, alloc);
argv[i++] = git_path("hooks/%s", name);
while (argv[i-1]) {
ALLOC_GROW(argv, i + 1, alloc);
argv[i++] = va_arg(args, const char *);
}
va_end(args);

memset(&hook, 0, sizeof(hook));
Expand All @@ -377,6 +376,7 @@ int run_hook(const char *index_file, const char *name, ...)
}

ret = start_command(&hook);
free(argv);
if (ret) {
warning("Could not spawn %s", argv[0]);
return ret;
Expand Down

0 comments on commit 14e6298

Please sign in to comment.