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
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1260,
+/**/
     1259,
 /**/
     1258,
--- a/src/vim.h
+++ b/src/vim.h
@@ -519,7 +519,7 @@ typedef unsigned long u8char_T;	    /* l
 # ifdef HAVE_SYS_POLL_H
 #  include <sys/poll.h>
 #  define HAVE_POLL
-# elif defined(WIN32) && !defined(FEAT_GUI_W32)
+# elif defined(WIN32)
 #  define HAVE_SELECT
 # else
 #  ifdef HAVE_POLL_H