From f032afc5fd03f45ecc346b1dbb00b9b3dc0e0e2a Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 15 Sep 2007 10:57:09 +0000 Subject: if __NR__newselect and __NR_select are unavailable, fall back to __NR_pselect6 --- libc/sysdeps/linux/common/select.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'libc/sysdeps/linux') diff --git a/libc/sysdeps/linux/common/select.c b/libc/sysdeps/linux/common/select.c index 9c065226b..03fda35b7 100644 --- a/libc/sysdeps/linux/common/select.c +++ b/libc/sysdeps/linux/common/select.c @@ -12,6 +12,27 @@ extern __typeof(select) __libc_select; +#if !defined(__NR__newselect) && !defined(__NR_select) + +# define __NR___libc_pselect6 __NR_pselect6 +_syscall6(int, __libc_pselect6, int, n, fd_set *, readfds, fd_set *, writefds, + fd_set *, exceptfds, const struct timespec *, timeout, + const sigset_t *, sigmask); + +int __libc_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout) +{ + struct timespec _ts, *ts = 0; + if (timeout) { + _ts.tv_sec = timeout->tv_sec; + _ts.tv_nsec = timeout->tv_usec * 1000; + ts = &_ts; + } + return __libc_pselect6(n, readfds, writefds, exceptfds, ts, 0); +} + +#else + #ifdef __NR__newselect # define __NR___libc_select __NR__newselect #else @@ -19,6 +40,9 @@ extern __typeof(select) __libc_select; #endif _syscall5(int, __libc_select, int, n, fd_set *, readfds, fd_set *, writefds, fd_set *, exceptfds, struct timeval *, timeout); + +#endif + libc_hidden_proto(select) weak_alias(__libc_select,select) libc_hidden_weak(select) -- cgit v1.2.3