Clean up file descriptors when calling hooks.

When calling post-update hook, don't leave stdin and stdout connected to
the pushing connection.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Daniel Barkalow 2005-12-07 21:04:38 -05:00 committed by Junio C Hamano
parent 64224caf88
commit 128aed684d
3 changed files with 17 additions and 3 deletions

View File

@ -173,7 +173,7 @@ static void run_update_post_hook(struct command *cmd)
argc++;
}
argv[argc] = NULL;
run_command_v(argc, argv);
run_command_v_opt(argc, argv, RUN_COMMAND_NO_STDIO);
}
/*

View File

@ -2,13 +2,19 @@
#include "run-command.h"
#include <sys/wait.h>
int run_command_v(int argc, char **argv)
int run_command_v_opt(int argc, char **argv, int flags)
{
pid_t pid = fork();
if (pid < 0)
return -ERR_RUN_COMMAND_FORK;
if (!pid) {
if (flags & RUN_COMMAND_NO_STDIO) {
int fd = open("/dev/null", O_RDWR);
dup2(fd, 0);
dup2(fd, 1);
close(fd);
}
execvp(argv[0], (char *const*) argv);
die("exec %s failed.", argv[0]);
}
@ -36,6 +42,11 @@ int run_command_v(int argc, char **argv)
}
}
int run_command_v(int argc, char **argv)
{
return run_command_v_opt(argc, argv, 0);
}
int run_command(const char *cmd, ...)
{
int argc;
@ -54,5 +65,5 @@ int run_command(const char *cmd, ...)
va_end(param);
if (MAX_RUN_COMMAND_ARGS <= argc)
return error("too many args to run %s", cmd);
return run_command_v(argc, argv);
return run_command_v_opt(argc, argv, 0);
}

View File

@ -11,6 +11,9 @@ enum {
ERR_RUN_COMMAND_WAITPID_NOEXIT,
};
#define RUN_COMMAND_NO_STDIO 1
int run_command_v_opt(int argc, char **argv, int opt);
int run_command_v(int argc, char **argv);
int run_command(const char *cmd, ...);