comparison 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
comparison
equal deleted inserted replaced
8383:7aa65c2cc0f5 8384:764dba33605c
4998 STARTUPINFO si; 4998 STARTUPINFO si;
4999 PROCESS_INFORMATION pi; 4999 PROCESS_INFORMATION pi;
5000 HANDLE jo; 5000 HANDLE jo;
5001 # ifdef FEAT_CHANNEL 5001 # ifdef FEAT_CHANNEL
5002 channel_T *channel; 5002 channel_T *channel;
5003 int use_out_for_err = options->jo_io[PART_ERR] == JIO_OUT;
5003 HANDLE ifd[2]; 5004 HANDLE ifd[2];
5004 HANDLE ofd[2]; 5005 HANDLE ofd[2];
5005 HANDLE efd[2]; 5006 HANDLE efd[2];
5006 SECURITY_ATTRIBUTES saAttr; 5007 SECURITY_ATTRIBUTES saAttr;
5007 5008
5036 saAttr.lpSecurityDescriptor = NULL; 5037 saAttr.lpSecurityDescriptor = NULL;
5037 if (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0) 5038 if (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0)
5038 || !pSetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0) 5039 || !pSetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0)
5039 || !CreatePipe(&ofd[0], &ofd[1], &saAttr, 0) 5040 || !CreatePipe(&ofd[0], &ofd[1], &saAttr, 0)
5040 || !pSetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0) 5041 || !pSetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0)
5041 || !CreatePipe(&efd[0], &efd[1], &saAttr, 0) 5042 || (!use_out_for_err
5042 || !pSetHandleInformation(efd[0], HANDLE_FLAG_INHERIT, 0)) 5043 && (!CreatePipe(&efd[0], &efd[1], &saAttr, 0)
5044 || !pSetHandleInformation(efd[0], HANDLE_FLAG_INHERIT, 0))))
5043 goto failed; 5045 goto failed;
5044 si.dwFlags |= STARTF_USESTDHANDLES; 5046 si.dwFlags |= STARTF_USESTDHANDLES;
5045 si.hStdInput = ifd[0]; 5047 si.hStdInput = ifd[0];
5046 si.hStdOutput = ofd[1]; 5048 si.hStdOutput = ofd[1];
5047 si.hStdError = efd[1]; 5049 si.hStdError = use_out_for_err ? ofd[1] : efd[1];
5048 # endif 5050 # endif
5049 5051
5050 if (!vim_create_process(cmd, TRUE, 5052 if (!vim_create_process(cmd, TRUE,
5051 CREATE_SUSPENDED | 5053 CREATE_SUSPENDED |
5052 CREATE_DEFAULT_ERROR_MODE | 5054 CREATE_DEFAULT_ERROR_MODE |
5073 job->jv_status = JOB_STARTED; 5075 job->jv_status = JOB_STARTED;
5074 5076
5075 # ifdef FEAT_CHANNEL 5077 # ifdef FEAT_CHANNEL
5076 CloseHandle(ifd[0]); 5078 CloseHandle(ifd[0]);
5077 CloseHandle(ofd[1]); 5079 CloseHandle(ofd[1]);
5078 CloseHandle(efd[1]); 5080 if (!use_out_for_err)
5081 CloseHandle(efd[1]);
5079 5082
5080 job->jv_channel = channel; 5083 job->jv_channel = channel;
5081 channel_set_pipes(channel, (sock_T)ifd[1], (sock_T)ofd[0], (sock_T)efd[0]); 5084 channel_set_pipes(channel, (sock_T)ifd[1], (sock_T)ofd[0],
5085 use_out_for_err ? INVALID_FD : (sock_T)efd[0]);
5082 channel_set_job(channel, job); 5086 channel_set_job(channel, job);
5083 channel_set_options(channel, options); 5087 channel_set_options(channel, options);
5084 5088
5085 # ifdef FEAT_GUI 5089 # ifdef FEAT_GUI
5086 channel_gui_register(channel); 5090 channel_gui_register(channel);