зеркало из https://github.com/microsoft/git.git
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:
Родитель
07af889136
Коммит
6a97da3964
38
daemon.c
38
daemon.c
|
@ -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[] = {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче