Merge branch 'cc/run-command'

* cc/run-command:
  run-command: Redirect stderr to a pipe before redirecting stdout to stderr
This commit is contained in:
Junio C Hamano 2008-03-07 10:53:10 -08:00
commit 792f0e7d1a
2 changed files with 11 additions and 10 deletions

View File

@ -111,9 +111,10 @@ stderr as follows:
.no_stdin, .no_stdout, .no_stderr: The respective channel is
redirected to /dev/null.
.stdout_to_stderr: stdout of the child is redirected to the
parent's stderr (i.e. *not* to what .err or
.no_stderr specify).
.stdout_to_stderr: stdout of the child is redirected to its
stderr. This happens after stderr is itself redirected.
So stdout will follow stderr to wherever it is
redirected.
To modify the environment of the sub-process, specify an array of
string pointers (NULL terminated) in .env:

View File

@ -91,6 +91,13 @@ int start_command(struct child_process *cmd)
close(cmd->in);
}
if (cmd->no_stderr)
dup_devnull(2);
else if (need_err) {
dup2(fderr[1], 2);
close_pair(fderr);
}
if (cmd->no_stdout)
dup_devnull(1);
else if (cmd->stdout_to_stderr)
@ -103,13 +110,6 @@ int start_command(struct child_process *cmd)
close(cmd->out);
}
if (cmd->no_stderr)
dup_devnull(2);
else if (need_err) {
dup2(fderr[1], 2);
close_pair(fderr);
}
if (cmd->dir && chdir(cmd->dir))
die("exec %s: cd to %s failed (%s)", cmd->argv[0],
cmd->dir, strerror(errno));