To: vim_dev@googlegroups.com Subject: Patch 7.4.1512 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.1512 Problem: Channel input from file not supported on MS-Windows. Solution: Implement it. (Yasuhiro Matsumoto) Files: src/os_win32.c, src/testdir/test_channel.vim *** ../vim-7.4.1511/src/os_win32.c 2016-03-06 23:06:20.671506716 +0100 --- src/os_win32.c 2016-03-08 13:47:23.024306736 +0100 *************** *** 5039,5048 **** if (use_file_for_in) { char_u *fname = options->jo_io_name[PART_IN]; ! ! // TODO ! EMSG2(_(e_notopen), fname); ! goto failed; } else if (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0) || !pSetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0)) --- 5039,5069 ---- if (use_file_for_in) { char_u *fname = options->jo_io_name[PART_IN]; ! #ifdef FEAT_MBYTE ! WCHAR *wn = NULL; ! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) ! { ! wn = enc_to_utf16(fname, NULL); ! if (wn != NULL) ! { ! ifd[0] = CreateFileW(wn, GENERIC_WRITE, FILE_SHARE_READ, ! &saAttr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ! vim_free(wn); ! if (ifd[0] == INVALID_HANDLE_VALUE ! && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) ! wn = NULL; ! } ! } ! if (wn == NULL) ! #endif ! ! ifd[0] = CreateFile((LPCSTR)fname, GENERIC_READ, FILE_SHARE_READ, ! &saAttr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ! if (ifd[0] == INVALID_HANDLE_VALUE) ! { ! EMSG2(_(e_notopen), fname); ! goto failed; ! } } else if (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0) || !pSetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0)) *************** *** 5088,5105 **** job->jv_status = JOB_STARTED; # ifdef FEAT_CHANNEL ! CloseHandle(ifd[0]); CloseHandle(ofd[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], ! use_out_for_err ? INVALID_FD : (sock_T)efd[0]); channel_set_job(channel, job, options); ! # ifdef FEAT_GUI ! channel_gui_register(channel); ! # endif # endif return; --- 5109,5129 ---- job->jv_status = JOB_STARTED; # ifdef FEAT_CHANNEL ! if (!use_file_for_in) ! CloseHandle(ifd[0]); CloseHandle(ofd[1]); if (!use_out_for_err) CloseHandle(efd[1]); job->jv_channel = channel; ! channel_set_pipes(channel, ! use_file_for_in ? INVALID_FD : (sock_T)ifd[1], ! (sock_T)ofd[0], ! use_out_for_err ? INVALID_FD : (sock_T)efd[0]); channel_set_job(channel, job, options); ! # ifdef FEAT_GUI ! channel_gui_register(channel); ! # endif # endif return; *** ../vim-7.4.1511/src/testdir/test_channel.vim 2016-03-07 22:26:24.666612809 +0100 --- src/testdir/test_channel.vim 2016-03-08 13:43:32.454709288 +0100 *************** *** 538,547 **** if !has('job') return endif - " TODO: make this work for MS-Windows. - if !has('unix') - return - endif call ch_log('Test_nl_read_file()') call writefile(['echo something', 'echoerr wrong', 'double this'], 'Xinput') let job = job_start(s:python . " test_channel_pipe.py", --- 538,543 ---- *** ../vim-7.4.1511/src/version.c 2016-03-08 12:56:29.000024462 +0100 --- src/version.c 2016-03-08 13:47:39.272137449 +0100 *************** *** 745,746 **** --- 745,748 ---- { /* Add new patch number below this line */ + /**/ + 1512, /**/ -- Everybody wants to go to heaven, but nobody wants to die. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///