diff src/os_win32.c @ 8384:764dba33605c v7.4.1484

commit https://github.com/vim/vim/commit/c25558bff4ed10d2642e6f5c016701641c494916 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Mar 3 21:02:23 2016 +0100 patch 7.4.1484 Problem: Channel "err-io" value "out" is not supported. Solution: Connect stderr to stdout if wanted.
author Christian Brabandt <cb@256bit.org>
date Thu, 03 Mar 2016 21:15:05 +0100
parents 74b15ed0a259
children 3b9a306724ec
line wrap: on
line diff
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5000,6 +5000,7 @@ mch_start_job(char *cmd, job_T *job, job
     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, job
        || !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, job
 # 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);