Skip to content

Commit

Permalink
Merge branch 'cc/run-command'
Browse files Browse the repository at this point in the history
* cc/run-command:
  run-command: Redirect stderr to a pipe before redirecting stdout to stderr
  • Loading branch information
Junio C Hamano committed Mar 7, 2008
2 parents b921764 + ce2cf27 commit 792f0e7
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 10 deletions.
7 changes: 4 additions & 3 deletions Documentation/technical/api-run-command.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
14 changes: 7 additions & 7 deletions run-command.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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));
Expand Down

0 comments on commit 792f0e7

Please sign in to comment.