diff options
author | Stephan Beyer <s-beyer@gmx.net> | 2009-01-17 04:02:55 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-01-17 17:57:15 -0800 |
commit | 14e6298f1215da503f0f65b63e13d674dd781868 (patch) | |
tree | 8088ec6e580653a54324a6b253a8dd4747cee036 /run-command.c | |
parent | cf94ca8ea98373d6f5e9caaa764eca89b20bfb63 (diff) | |
download | git-14e6298f1215da503f0f65b63e13d674dd781868.tar.gz |
run_hook(): allow more than 9 hook arguments
This is done using the ALLOC_GROW macro.
Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'run-command.c')
-rw-r--r-- | run-command.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/run-command.c b/run-command.c index fc54c07a93..db9ce59204 100644 --- a/run-command.c +++ b/run-command.c @@ -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)); @@ -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; |