projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'jc/mailinfo'
[git.git]
/
run-command.c
diff --git
a/run-command.c
b/run-command.c
index
5787a50
..
ca67ee9
100644
(file)
--- a/
run-command.c
+++ b/
run-command.c
@@
-1,15
+1,26
@@
#include "cache.h"
#include "run-command.h"
#include <sys/wait.h>
#include "cache.h"
#include "run-command.h"
#include <sys/wait.h>
+#include "exec_cmd.h"
-int run_command_v
(int argc, char **argv
)
+int run_command_v
_opt(int argc, const char **argv, int flags
)
{
pid_t pid = fork();
if (pid < 0)
return -ERR_RUN_COMMAND_FORK;
if (!pid) {
{
pid_t pid = fork();
if (pid < 0)
return -ERR_RUN_COMMAND_FORK;
if (!pid) {
- execvp(argv[0], (char *const*) argv);
+ if (flags & RUN_COMMAND_NO_STDIO) {
+ int fd = open("/dev/null", O_RDWR);
+ dup2(fd, 0);
+ dup2(fd, 1);
+ close(fd);
+ }
+ if (flags & RUN_GIT_CMD) {
+ execv_git_cmd(argv);
+ } else {
+ execvp(argv[0], (char *const*) argv);
+ }
die("exec %s failed.", argv[0]);
}
for (;;) {
die("exec %s failed.", argv[0]);
}
for (;;) {
@@
-36,10
+47,15
@@
int run_command_v(int argc, char **argv)
}
}
}
}
+int run_command_v(int argc, const char **argv)
+{
+ return run_command_v_opt(argc, argv, 0);
+}
+
int run_command(const char *cmd, ...)
{
int argc;
int run_command(const char *cmd, ...)
{
int argc;
- char *argv[MAX_RUN_COMMAND_ARGS];
+ c
onst c
har *argv[MAX_RUN_COMMAND_ARGS];
const char *arg;
va_list param;
const char *arg;
va_list param;
@@
-54,5
+70,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);
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
);
}
}