diff options
author | Eli Zaretskii <eliz@gnu.org> | 2014-10-01 18:26:28 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2014-10-01 18:26:28 +0300 |
commit | 86a058029beb8c5516eed4293de2a8b9131f3438 (patch) | |
tree | f4ff15f06cdbb0eb4439b863b07f0eced1444cae | |
parent | 0a3a0756b987e2f7f06322de746c3da5fef4c9ed (diff) | |
download | gunmake-86a058029beb8c5516eed4293de2a8b9131f3438.tar.gz |
Treat redirection of standard handles on Windows as it is done on Unix.
* job.c (start_job_command) [WINDOWS32]: Compute outfd and errfd
as on Posix platforms, and pass the results to process_easy.
* function.c (windows32_openpipe) [WINDOWS32]: Accept an
additional argument ERRFD and use it for redirecting the standard
error handle passed to the subprocess.
(func_shell_base) [WINDOWS32]: Pass the computed errfd to
windows32_openpipe.
-rw-r--r-- | function.c | 6 | ||||
-rw-r--r-- | job.c | 18 |
2 files changed, 14 insertions, 10 deletions
@@ -1454,7 +1454,7 @@ int shell_function_pid = 0, shell_function_completed; int -windows32_openpipe (int *pipedes, pid_t *pid_p, char **command_argv, char **envp) +windows32_openpipe (int *pipedes, int errfd, pid_t *pid_p, char **command_argv, char **envp) { SECURITY_ATTRIBUTES saAttr; HANDLE hIn = INVALID_HANDLE_VALUE; @@ -1500,7 +1500,7 @@ windows32_openpipe (int *pipedes, pid_t *pid_p, char **command_argv, char **envp return -1; } } - tmpErr = GetStdHandle (STD_ERROR_HANDLE); + tmpErr = (HANDLE)_get_osfhandle (errfd); if (DuplicateHandle (GetCurrentProcess (), tmpErr, GetCurrentProcess (), &hErr, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) @@ -1729,7 +1729,7 @@ func_shell_base (char *o, char **argv, int trim_newlines) return o; } #elif defined(WINDOWS32) - windows32_openpipe (pipedes, &pid, command_argv, envp); + windows32_openpipe (pipedes, errfd, &pid, command_argv, envp); /* Restore the value of just_print_flag. */ just_print_flag = j_p_f; @@ -1639,14 +1639,18 @@ start_job_command (struct child *child) sync_Path_environment (); #ifndef NO_OUTPUT_SYNC - /* Divert child output if output_sync in use. Don't capture - recursive make output unless we are synchronizing "make" mode. */ - if (child->output.syncout) - hPID = process_easy (argv, child->environment, - child->output.out, child->output.err); - else + /* 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; + } +#else + outfd = errfd = -1; #endif - hPID = process_easy (argv, child->environment, -1, -1); + hPID = process_easy (argv, child->environment, outfd, errfd); if (hPID != INVALID_HANDLE_VALUE) child->pid = (pid_t) hPID; |