summaryrefslogtreecommitdiff
path: root/src/os_win32.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-03-03 21:02:23 +0100
committerBram Moolenaar <Bram@vim.org>2016-03-03 21:02:23 +0100
commitc25558bff4ed10d2642e6f5c016701641c494916 (patch)
tree8ddf1725387cda32c9acc707e09c0ec0debb5f4e /src/os_win32.c
parentd6547fc6471d9084f942bdc4ae3aedb39361751d (diff)
downloadvim-git-c25558bff4ed10d2642e6f5c016701641c494916.tar.gz
patch 7.4.1484v7.4.1484
Problem: Channel "err-io" value "out" is not supported. Solution: Connect stderr to stdout if wanted.
Diffstat (limited to 'src/os_win32.c')
-rw-r--r--src/os_win32.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/os_win32.c b/src/os_win32.c
index 28c026308..9c87346fa 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5000,6 +5000,7 @@ mch_start_job(char *cmd, job_T *job, jobopt_T *options)
HANDLE jo;
# ifdef FEAT_CHANNEL
channel_T *channel;
+ int use_out_for_err = options->jo_io[PART_ERR] == JIO_OUT;
HANDLE ifd[2];
HANDLE ofd[2];
HANDLE efd[2];
@@ -5038,13 +5039,14 @@ mch_start_job(char *cmd, job_T *job, jobopt_T *options)
|| !pSetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0)
|| !CreatePipe(&ofd[0], &ofd[1], &saAttr, 0)
|| !pSetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0)
- || !CreatePipe(&efd[0], &efd[1], &saAttr, 0)
- || !pSetHandleInformation(efd[0], HANDLE_FLAG_INHERIT, 0))
+ || (!use_out_for_err
+ && (!CreatePipe(&efd[0], &efd[1], &saAttr, 0)
+ || !pSetHandleInformation(efd[0], HANDLE_FLAG_INHERIT, 0))))
goto failed;
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = ifd[0];
si.hStdOutput = ofd[1];
- si.hStdError = efd[1];
+ si.hStdError = use_out_for_err ? ofd[1] : efd[1];
# endif
if (!vim_create_process(cmd, TRUE,
@@ -5075,10 +5077,12 @@ mch_start_job(char *cmd, job_T *job, jobopt_T *options)
# ifdef FEAT_CHANNEL
CloseHandle(ifd[0]);
CloseHandle(ofd[1]);
- CloseHandle(efd[1]);
+ if (!use_out_for_err)
+ CloseHandle(efd[1]);
job->jv_channel = channel;
- channel_set_pipes(channel, (sock_T)ifd[1], (sock_T)ofd[0], (sock_T)efd[0]);
+ channel_set_pipes(channel, (sock_T)ifd[1], (sock_T)ofd[0],
+ use_out_for_err ? INVALID_FD : (sock_T)efd[0]);
channel_set_job(channel, job);
channel_set_options(channel, options);