1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-05-02 11:10:41 -07:00

Merge from gnulib.

This commit is contained in:
Paul Eggert 2012-10-04 00:15:42 -07:00
parent 88d69b7ddc
commit bb1dfdadd5
10 changed files with 130 additions and 11 deletions

View file

@ -33,6 +33,8 @@
pointer parameter stands for no descriptors, an infinite timeout,
or an unaffected signal mask. */
#if !HAVE_PSELECT
int
pselect (int nfds, fd_set *restrict rfds,
fd_set *restrict wfds, fd_set *restrict xfds,
@ -74,3 +76,35 @@ pselect (int nfds, fd_set *restrict rfds,
return select_result;
}
#else /* HAVE_PSELECT */
# include <unistd.h>
# undef pselect
int
rpl_pselect (int nfds, fd_set *restrict rfds,
fd_set *restrict wfds, fd_set *restrict xfds,
struct timespec const *restrict timeout,
sigset_t const *restrict sigmask)
{
int i;
/* FreeBSD 8.2 has a bug: it does not always detect invalid fds. */
if (nfds < 0 || nfds > FD_SETSIZE)
{
errno = EINVAL;
return -1;
}
for (i = 0; i < nfds; i++)
{
if (((rfds && FD_ISSET (i, rfds))
|| (wfds && FD_ISSET (i, wfds))
|| (xfds && FD_ISSET (i, xfds)))
&& dup2 (i, i) != i)
return -1;
}
return pselect (nfds, rfds, wfds, xfds, timeout, sigmask);
}
#endif