Mercurial > vim
changeset 7929:e44240b5a6da v7.4.1260
commit https://github.com/vim/vim/commit/a8343c1808f2f268282f3030ce4adaf22e8ade54
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Feb 4 22:09:48 2016 +0100
patch 7.4.1260
Problem: The channel feature doesn't work on Win32 GUI.
Solution: Use WSAGetLastError(). (Ken Takata)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 04 Feb 2016 22:15:04 +0100 |
parents | dc7264c48527 |
children | abea5eb9092d |
files | src/channel.c src/testdir/test_channel.vim src/version.c src/vim.h |
diffstat | 4 files changed, 17 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/channel.c +++ b/src/channel.c @@ -954,11 +954,12 @@ channel_clear(int idx) /* * Check for reading from "fd" with "timeout" msec. * Return FAIL when there is nothing to read. + * Always returns OK for FEAT_GUI_W32. */ static int channel_wait(int fd, int timeout) { -#ifdef HAVE_SELECT +#if defined(HAVE_SELECT) && !defined(FEAT_GUI_W32) struct timeval tval; fd_set rfds; int ret; @@ -1045,6 +1046,16 @@ channel_read(int idx) if (len < MAXMSGSIZE) break; /* did read everything that's available */ } +#ifdef FEAT_GUI_W32 + if (len == SOCKET_ERROR) + { + /* For Win32 GUI channel_wait() always returns OK and we handle the + * situation that there is nothing to read here. + * TODO: how about a timeout? */ + if (WSAGetLastError() == WSAEWOULDBLOCK) + return; + } +#endif /* Reading a socket disconnection (readlen == 0), or a socket error. */ if (readlen <= 0)
--- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -6,13 +6,13 @@ if !has('channel') endif " This test requires the Python command to run the test server. -" This most likely only works on Unix and Windows console. +" This most likely only works on Unix and Windows. if has('unix') " We also need the pkill command to make sure the server can be stopped. if !executable('python') || !executable('pkill') finish endif -elseif has('win32') && !has('gui_win32') +elseif has('win32') " Use Python Launcher for Windows (py.exe). if !executable('py') finish