comparison src/os_win32.c @ 8047:7c74cafac0a1 v7.4.1318

commit https://github.com/vim/vim/commit/7b3ca76a451b10d238ef946f3231762e0bd988e9 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 14 19:13:43 2016 +0100 patch 7.4.1318 Problem: Channel with pipes doesn't work in GUI. Solution: Register input handlers for pipes.
author Christian Brabandt <cb@256bit.org>
date Sun, 14 Feb 2016 19:15:09 +0100
parents 75e0831549f1
children 15253130abd8
comparison
equal deleted inserted replaced
8046:759a0d82475e 8047:7c74cafac0a1
5037 mch_start_job(char *cmd, job_T *job) 5037 mch_start_job(char *cmd, job_T *job)
5038 { 5038 {
5039 STARTUPINFO si; 5039 STARTUPINFO si;
5040 PROCESS_INFORMATION pi; 5040 PROCESS_INFORMATION pi;
5041 HANDLE jo; 5041 HANDLE jo;
5042 #ifdef FEAT_CHANNEL
5043 channel_T *channel;
5044
5045 channel = add_channel();
5046 if (channel == NULL)
5047 return;
5048 #endif
5042 5049
5043 jo = CreateJobObject(NULL, NULL); 5050 jo = CreateJobObject(NULL, NULL);
5044 if (jo == NULL) 5051 if (jo == NULL)
5045 { 5052 {
5046 job->jv_status = JOB_FAILED; 5053 job->jv_status = JOB_FAILED;
5047 return; 5054 goto failed;
5048 } 5055 }
5049 5056
5050 ZeroMemory(&pi, sizeof(pi)); 5057 ZeroMemory(&pi, sizeof(pi));
5051 ZeroMemory(&si, sizeof(si)); 5058 ZeroMemory(&si, sizeof(si));
5052 si.cb = sizeof(si); 5059 si.cb = sizeof(si);
5060 CREATE_NEW_CONSOLE, 5067 CREATE_NEW_CONSOLE,
5061 &si, &pi)) 5068 &si, &pi))
5062 { 5069 {
5063 CloseHandle(jo); 5070 CloseHandle(jo);
5064 job->jv_status = JOB_FAILED; 5071 job->jv_status = JOB_FAILED;
5065 } 5072 goto failed;
5066 else 5073 }
5067 { 5074
5068 if (!AssignProcessToJobObject(jo, pi.hProcess)) 5075 if (!AssignProcessToJobObject(jo, pi.hProcess))
5069 { 5076 {
5070 /* if failing, switch the way to terminate 5077 /* if failing, switch the way to terminate
5071 * process with TerminateProcess. */ 5078 * process with TerminateProcess. */
5072 CloseHandle(jo); 5079 CloseHandle(jo);
5073 jo = NULL; 5080 jo = NULL;
5074 } 5081 }
5075 ResumeThread(pi.hThread); 5082 ResumeThread(pi.hThread);
5076 CloseHandle(job->jv_proc_info.hThread); 5083 CloseHandle(job->jv_proc_info.hThread);
5077 job->jv_proc_info = pi; 5084 job->jv_proc_info = pi;
5078 job->jv_job_object = jo; 5085 job->jv_job_object = jo;
5079 job->jv_status = JOB_STARTED; 5086 job->jv_status = JOB_STARTED;
5080 } 5087
5088 #ifdef FEAT_CHANNEL
5089 # if 0
5090 /* TODO: connect stdin/stdout/stderr */
5091 job->jv_channel = channel;
5092 channel_set_pipes(channel, fd_in[1], fd_out[0], fd_err[0]);
5093 channel_set_job(channel, job);
5094
5095 # ifdef FEAT_GUI
5096 channel_gui_register(channel);
5097 # endif
5098 # endif
5099 #endif
5100 return;
5101
5102 failed:
5103 #ifdef FEAT_CHANNEL
5104 channel_free(channel);
5105 #endif
5081 } 5106 }
5082 5107
5083 char * 5108 char *
5084 mch_job_status(job_T *job) 5109 mch_job_status(job_T *job)
5085 { 5110 {