Mercurial > vim
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); |