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:
parent
88d69b7ddc
commit
bb1dfdadd5
10 changed files with 130 additions and 11 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue