diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-03 21:02:23 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-03 21:02:23 +0100 |
commit | c25558bff4ed10d2642e6f5c016701641c494916 (patch) | |
tree | 8ddf1725387cda32c9acc707e09c0ec0debb5f4e /src/os_win32.c | |
parent | d6547fc6471d9084f942bdc4ae3aedb39361751d (diff) | |
download | vim-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.c | 14 |
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); |