run_hook: use argv_array API

This was a pretty straightforward use, so it really doesn't save that many lines. Still, perhaps it's a little bit more readable. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Sep 13, 2011 at 17:58 UTC 5d40a179855a39ae9e8ac22e1874720f2b98a91c
1 file changed +8 -10
run-command.c
+8 -10
@@ -1,6 +1,7 @@
1 #include "cache.h"
2 #include "run-command.h"
3 #include "exec_cmd.h"
4 +#include "argv-array.h"
5
6 static inline void close_pair(int fd[2])
7 {
@@ -609,26 +610,23 @@ int finish_async(struct async *async)
610 int run_hook(const char *index_file, const char *name, ...)
611 {
612 struct child_process hook;
612 - const char **argv = NULL, *env[2];
613 + struct argv_array argv = ARGV_ARRAY_INIT;
614 + const char *p, *env[2];
615 char index[PATH_MAX];
616 va_list args;
617 int ret;
616 - size_t i = 0, alloc = 0;
618
619 if (access(git_path("hooks/%s", name), X_OK) < 0)
620 return 0;
621
622 va_start(args, name);
622 - ALLOC_GROW(argv, i + 1, alloc);
623 - argv[i++] = git_path("hooks/%s", name);
624 - while (argv[i-1]) {
625 - ALLOC_GROW(argv, i + 1, alloc);
626 - argv[i++] = va_arg(args, const char *);
627 - }
623 + argv_array_push(&argv, git_path("hooks/%s", name));
624 + while ((p = va_arg(args, const char *)))
625 + argv_array_push(&argv, p);
626 va_end(args);
627
628 memset(&hook, 0, sizeof(hook));
631 - hook.argv = argv;
629 + hook.argv = argv.argv;
630 hook.no_stdin = 1;
631 hook.stdout_to_stderr = 1;
632 if (index_file) {
@@ -639,6 +637,6 @@ int run_hook(const char *index_file, const char *name, ...)
637 }
638
639 ret = run_command(&hook);
642 - free(argv);
640 + argv_array_clear(&argv);
641 return ret;
642 }