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
}