mirror of
https://github.com/vim/vim
synced 2025-09-16 00:49:42 +00:00
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)
This commit is contained in:
@@ -4819,7 +4819,8 @@ WaitForChar(msec)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Wait "msec" msec until a character is available from file descriptor "fd".
|
* 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
|
* When a GUI is being used, this will not be used for input -- webb
|
||||||
* Returns also, when a request from Sniff is waiting -- toni.
|
* Returns also, when a request from Sniff is waiting -- toni.
|
||||||
* Or when a Linux GPM mouse event is waiting.
|
* 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).
|
* 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_ZERO(&efds);
|
||||||
FD_SET(fd, &rfds);
|
FD_SET(fd, &rfds);
|
||||||
# if !defined(__QNX__) && !defined(__CYGWIN32__)
|
# if !defined(__QNX__) && !defined(__CYGWIN32__)
|
||||||
@@ -5117,6 +5119,14 @@ RealWaitForChar(fd, msec, check_for_gpm)
|
|||||||
# else
|
# else
|
||||||
ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
|
ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
|
||||||
# endif
|
# 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
|
# ifdef __TANDEM
|
||||||
if (ret == -1 && errno == ENOTSUP)
|
if (ret == -1 && errno == ENOTSUP)
|
||||||
{
|
{
|
||||||
@@ -5124,7 +5134,7 @@ RealWaitForChar(fd, msec, check_for_gpm)
|
|||||||
FD_ZERO(&efds);
|
FD_ZERO(&efds);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
#endif
|
# endif
|
||||||
# ifdef FEAT_MZSCHEME
|
# ifdef FEAT_MZSCHEME
|
||||||
if (ret == 0 && mzquantum_used)
|
if (ret == 0 && mzquantum_used)
|
||||||
/* loop if MzThreads must be scheduled and timeout occurred */
|
/* loop if MzThreads must be scheduled and timeout occurred */
|
||||||
|
@@ -709,6 +709,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
295,
|
||||||
/**/
|
/**/
|
||||||
294,
|
294,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user