daemon: use an argv_array to exec children

Our struct child_process already has its own argv_array.
Let's use that to avoid having to format options into
separate buffers.

Note that we'll need to declare the child process outside of
the run_service_command() helper to do this. But that opens
up a further simplification, which is that the helper can
append to our argument list, saving each caller from
specifying "." manually.

Signed-off-by: Jeff King <peff@peff.net>
This commit is contained in:
Jeff King 2017-03-28 15:48:10 -04:00 коммит произвёл Junio C Hamano
Родитель 07af889136
Коммит 6a97da3964
1 изменённых файлов: 17 добавлений и 21 удалений

Просмотреть файл

@ -449,46 +449,42 @@ static void copy_to_log(int fd)
fclose(fp); fclose(fp);
} }
static int run_service_command(const char **argv) static int run_service_command(struct child_process *cld)
{ {
struct child_process cld = CHILD_PROCESS_INIT; argv_array_push(&cld->args, ".");
cld->git_cmd = 1;
cld.argv = argv; cld->err = -1;
cld.git_cmd = 1; if (start_command(cld))
cld.err = -1;
if (start_command(&cld))
return -1; return -1;
close(0); close(0);
close(1); close(1);
copy_to_log(cld.err); copy_to_log(cld->err);
return finish_command(&cld); return finish_command(cld);
} }
static int upload_pack(void) static int upload_pack(void)
{ {
/* Timeout as string */ struct child_process cld = CHILD_PROCESS_INIT;
char timeout_buf[64]; argv_array_pushl(&cld.args, "upload-pack", "--strict", NULL);
const char *argv[] = { "upload-pack", "--strict", NULL, ".", NULL }; argv_array_pushf(&cld.args, "--timeout=%u", timeout);
return run_service_command(&cld);
argv[2] = timeout_buf;
snprintf(timeout_buf, sizeof timeout_buf, "--timeout=%u", timeout);
return run_service_command(argv);
} }
static int upload_archive(void) static int upload_archive(void)
{ {
static const char *argv[] = { "upload-archive", ".", NULL }; struct child_process cld = CHILD_PROCESS_INIT;
return run_service_command(argv); argv_array_push(&cld.args, "upload-archive");
return run_service_command(&cld);
} }
static int receive_pack(void) static int receive_pack(void)
{ {
static const char *argv[] = { "receive-pack", ".", NULL }; struct child_process cld = CHILD_PROCESS_INIT;
return run_service_command(argv); argv_array_push(&cld.args, "receive-pack");
return run_service_command(&cld);
} }
static struct daemon_service daemon_service[] = { static struct daemon_service daemon_service[] = {