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);
}
static int run_service_command(const char **argv)
static int run_service_command(struct child_process *cld)
{
struct child_process cld = CHILD_PROCESS_INIT;
cld.argv = argv;
cld.git_cmd = 1;
cld.err = -1;
if (start_command(&cld))
argv_array_push(&cld->args, ".");
cld->git_cmd = 1;
cld->err = -1;
if (start_command(cld))
return -1;
close(0);
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)
{
/* Timeout as string */
char timeout_buf[64];
const char *argv[] = { "upload-pack", "--strict", NULL, ".", NULL };
argv[2] = timeout_buf;
snprintf(timeout_buf, sizeof timeout_buf, "--timeout=%u", timeout);
return run_service_command(argv);
struct child_process cld = CHILD_PROCESS_INIT;
argv_array_pushl(&cld.args, "upload-pack", "--strict", NULL);
argv_array_pushf(&cld.args, "--timeout=%u", timeout);
return run_service_command(&cld);
}
static int upload_archive(void)
{
static const char *argv[] = { "upload-archive", ".", NULL };
return run_service_command(argv);
struct child_process cld = CHILD_PROCESS_INIT;
argv_array_push(&cld.args, "upload-archive");
return run_service_command(&cld);
}
static int receive_pack(void)
{
static const char *argv[] = { "receive-pack", ".", NULL };
return run_service_command(argv);
struct child_process cld = CHILD_PROCESS_INIT;
argv_array_push(&cld.args, "receive-pack");
return run_service_command(&cld);
}
static struct daemon_service daemon_service[] = {