summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--job.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/job.c b/job.c
index d3d63b8..0b34e17 100644
--- a/job.c
+++ b/job.c
@@ -1145,6 +1145,8 @@ start_job_command (struct child *child)
char *argv;
#else
char **argv;
+ int outfd = FD_STDOUT;
+ int errfd = FD_STDERR;
#endif
/* If we have a completely empty commandset, stop now. */
@@ -1434,6 +1436,16 @@ start_job_command (struct child *child)
parent_environ = environ;
+#ifndef NO_OUTPUT_SYNC
+ /* Divert child output if output_sync in use. */
+ if (child->output.syncout)
+ {
+ if (child->output.out >= 0)
+ outfd = child->output.out;
+ if (child->output.err >= 0)
+ errfd = child->output.err;
+ }
+#endif
# ifdef __EMX__
/* If we aren't running a recursive command and we have a jobserver
pipe, close it before exec'ing. */
@@ -1447,7 +1459,7 @@ start_job_command (struct child *child)
/* Never use fork()/exec() here! Use spawn() instead in exec_command() */
child->pid = child_execute_job (child->good_stdin ? FD_STDIN : bad_stdin,
- FD_STDOUT, FD_STDERR,
+ outfd, errfd,
argv, child->environment);
if (child->pid < 0)
{
@@ -1472,9 +1484,6 @@ start_job_command (struct child *child)
environ = parent_environ; /* Restore value child may have clobbered. */
if (child->pid == 0)
{
- int outfd = FD_STDOUT;
- int errfd = FD_STDERR;
-
/* We are the child side. */
unblock_sigs ();
@@ -1493,16 +1502,6 @@ start_job_command (struct child *child)
if (stack_limit.rlim_cur)
setrlimit (RLIMIT_STACK, &stack_limit);
#endif
-
- /* Divert child output if output_sync in use. */
- if (child->output.syncout)
- {
- if (child->output.out >= 0)
- outfd = child->output.out;
- if (child->output.err >= 0)
- errfd = child->output.err;
- }
-
child_execute_job (child->good_stdin ? FD_STDIN : bad_stdin,
outfd, errfd, argv, child->environment);
}