[PATCH] Redirect stderr to a pipe before redirecting stdout to stderr
- From
Christian Couder <chriscool@tuxfamily.org>
- Date
- Mar 3, 2008, 07:21 UTC
- Message-ID
- <20080303082111.24d3ea73.chriscool@tuxfamily.org>
With this patch, in the 'start_command' function after forking we now take care of stderr in the child process before stdout.
This way if 'start_command' is called with a 'child_process' argument like this:
.err = -1; .stdout_to_stderr = 1;
then stderr will be redirected to a pipe before stdout is redirected to stderr. So we can now get the process' stdout from the pipe (as well as its stderr).
Signed-off-by: Christian Couder <chriscool@tuxfamily.org> --- run-command.c | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-)
This patch should make my previous patch:
[PATCH 1/2] help: add "man.viewer" config var to use "woman" or "konqueror"
work as expected (at least with Emacs 21 and 22).
diff --git a/run-command.c b/run-command.c index 743757c..44100a7 100644 --- a/run-command.c +++ b/run-command.c @@ -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); - }