From 14e6298f1215da503f0f65b63e13d674dd781868 Mon Sep 17 00:00:00 2001 From: Stephan Beyer Date: Sat, 17 Jan 2009 04:02:55 +0100 Subject: run_hook(): allow more than 9 hook arguments This is done using the ALLOC_GROW macro. Signed-off-by: Stephan Beyer Signed-off-by: Junio C Hamano --- run-command.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'run-command.c') 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; -- cgit v1.2.1