зеркало из 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);
|
||||
}
|
||||
|
||||
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[] = {
|
||||
|
|
Загрузка…
Ссылка в новой задаче