From: Bram Moolenaar Date: Wed, 7 Sep 2011 12:06:47 +0000 (+0200) Subject: updated for version 7.3.295 X-Git-Tag: v7.3.295 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=493c7a854109804b6a2d81d709bbf9a6dc96c197;p=vim updated for version 7.3.295 Problem: When filtering text with an external command Vim may not read all the output. Solution: When select() is interrupted loop and try again. (James Vega) --- diff --git a/src/os_unix.c b/src/os_unix.c index 7b41a90a4..d654f5f3d 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4819,7 +4819,8 @@ WaitForChar(msec) /* * Wait "msec" msec until a character is available from file descriptor "fd". - * Time == -1 will block forever. + * "msec" == 0 will check for characters once. + * "msec" == -1 will block until a character is available. * When a GUI is being used, this will not be used for input -- webb * Returns also, when a request from Sniff is waiting -- toni. * Or when a Linux GPM mouse event is waiting. @@ -5057,7 +5058,8 @@ RealWaitForChar(fd, msec, check_for_gpm) /* * Select on ready for reading and exceptional condition (end of file). */ - FD_ZERO(&rfds); /* calls bzero() on a sun */ +select_eintr: + FD_ZERO(&rfds); FD_ZERO(&efds); FD_SET(fd, &rfds); # if !defined(__QNX__) && !defined(__CYGWIN32__) @@ -5117,6 +5119,14 @@ RealWaitForChar(fd, msec, check_for_gpm) # else ret = select(maxfd + 1, &rfds, NULL, &efds, tvp); # endif +# ifdef EINTR + if (ret == -1 && errno == EINTR) + /* Interrupted by a signal, need to try again. We ignore msec + * here, because we do want to check even after a timeout if + * characters are available. Needed for reading output of an + * external command after the process has finished. */ + goto select_eintr; +# endif # ifdef __TANDEM if (ret == -1 && errno == ENOTSUP) { @@ -5124,7 +5134,7 @@ RealWaitForChar(fd, msec, check_for_gpm) FD_ZERO(&efds); ret = 0; } -#endif +# endif # ifdef FEAT_MZSCHEME if (ret == 0 && mzquantum_used) /* loop if MzThreads must be scheduled and timeout occurred */ diff --git a/src/version.c b/src/version.c index f1e7dc2f8..f3f0e931f 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 295, /**/ 294, /**/