1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 09:10:22 +02:00

Update Gnulib to 6835fc458f30b94f15d69c35a79cbc2dfabe2d06.

This commit is contained in:
Andy Wingo 2016-06-29 11:14:40 +02:00
parent bfca4367b0
commit 2b421e02e1
412 changed files with 5156 additions and 2314 deletions

View file

@ -1,7 +1,7 @@
/* Emulation for poll(2)
Contributed by Paolo Bonzini.
Copyright 2001-2003, 2006-2014 Free Software Foundation, Inc.
Copyright 2001-2003, 2006-2016 Free Software Foundation, Inc.
This file is part of gnulib.
@ -33,7 +33,6 @@
#include <errno.h>
#include <limits.h>
#include <assert.h>
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
# define WINDOWS_NATIVE
@ -45,11 +44,12 @@
# include "msvc-nothrow.h"
#else
# include <sys/time.h>
# include <sys/socket.h>
# include <sys/select.h>
# include <unistd.h>
#endif
#include <sys/select.h>
#include <sys/socket.h>
#ifdef HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
#endif
@ -59,6 +59,8 @@
#include <time.h>
#include "assure.h"
#ifndef INFTIM
# define INFTIM (-1)
#endif
@ -70,9 +72,11 @@
#ifdef WINDOWS_NATIVE
/* Optimized test whether a HANDLE refers to a console.
See <http://lists.gnu.org/archive/html/bug-gnulib/2009-08/msg00065.html>. */
#define IsConsoleHandle(h) (((intptr_t) (h) & 3) == 3)
static BOOL IsConsoleHandle (HANDLE h)
{
DWORD mode;
return GetConsoleMode (h, &mode) != 0;
}
static BOOL
IsSocketHandle (HANDLE h)
@ -331,26 +335,15 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
int maxfd, rc;
nfds_t i;
# ifdef _SC_OPEN_MAX
static int sc_open_max = -1;
if (nfd < 0
|| (nfd > sc_open_max
&& (sc_open_max != -1
|| nfd > (sc_open_max = sysconf (_SC_OPEN_MAX)))))
if (nfd < 0)
{
errno = EINVAL;
return -1;
}
# else /* !_SC_OPEN_MAX */
# ifdef OPEN_MAX
if (nfd < 0 || nfd > OPEN_MAX)
{
errno = EINVAL;
return -1;
}
# endif /* OPEN_MAX -- else, no check is needed */
# endif /* !_SC_OPEN_MAX */
/* Don't check directly for NFD too large. Any practical use of a
too-large NFD is caught by one of the other checks below, and
checking directly for getdtablesize is too much of a portability
and/or performance and/or correctness hassle. */
/* EFAULT is not necessary to implement, but let's do it in the
simplest case. */
@ -391,10 +384,17 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
{
if (pfd[i].fd < 0)
continue;
if (maxfd < pfd[i].fd)
{
maxfd = pfd[i].fd;
if (FD_SETSIZE <= maxfd)
{
errno = EINVAL;
return -1;
}
}
if (pfd[i].events & (POLLIN | POLLRDNORM))
FD_SET (pfd[i].fd, &rfds);
/* see select(2): "the only exceptional condition detectable
is out-of-band data received on a socket", hence we push
POLLWRBAND events onto wfds instead of efds. */
@ -402,18 +402,6 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
FD_SET (pfd[i].fd, &wfds);
if (pfd[i].events & (POLLPRI | POLLRDBAND))
FD_SET (pfd[i].fd, &efds);
if (pfd[i].fd >= maxfd
&& (pfd[i].events & (POLLIN | POLLOUT | POLLPRI
| POLLRDNORM | POLLRDBAND
| POLLWRNORM | POLLWRBAND)))
{
maxfd = pfd[i].fd;
if (maxfd > FD_SETSIZE)
{
errno = EOVERFLOW;
return -1;
}
}
}
/* examine fd sets */
@ -424,18 +412,13 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
/* establish results */
rc = 0;
for (i = 0; i < nfd; i++)
if (pfd[i].fd < 0)
pfd[i].revents = 0;
else
{
int happened = compute_revents (pfd[i].fd, pfd[i].events,
&rfds, &wfds, &efds);
if (happened)
{
pfd[i].revents = happened;
rc++;
}
}
{
pfd[i].revents = (pfd[i].fd < 0
? 0
: compute_revents (pfd[i].fd, pfd[i].events,
&rfds, &wfds, &efds));
rc += pfd[i].revents != 0;
}
return rc;
#else
@ -478,7 +461,7 @@ restart:
continue;
h = (HANDLE) _get_osfhandle (pfd[i].fd);
assert (h != NULL);
assure (h != NULL);
if (IsSocketHandle (h))
{
int requested = FD_CLOSE;