]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/uclibc/lib/contrib/uclibc/libc/sysdeps/linux/common/select.c
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / libc / sysdeps / linux / common / select.c
index 029fb08a070cb4cad81766c1e82a0f9d953bf0a1..c13bd041807dd04fd03faf2c76d7f51e8a2c7f0b 100644 (file)
@@ -9,27 +9,24 @@
 
 #include <sys/syscall.h>
 #include <sys/select.h>
-#include <stdint.h>
+#include <cancel.h>
 
-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
-#include <sysdep-cancel.h>
-#else
-#define SINGLE_THREAD_P 1
+#ifdef __NR__newselect
+# undef __NR_select
+# define __NR_select __NR__newselect
 #endif
 
-#define USEC_PER_SEC 1000000L
-
-extern __typeof(select) __libc_select;
-
-#if !defined(__NR__newselect) && !defined(__NR_select) && defined __USE_XOPEN2K
-# define __NR___libc_pselect6 __NR_pselect6
-static _syscall6(int, __libc_pselect6, int, n, fd_set *, readfds, fd_set *, writefds,
-        fd_set *, exceptfds, const struct timespec *, timeout,
-        const sigset_t *, sigmask)
+#if !defined __NR_select && defined __NR_pselect6
+# include <stdint.h>
+# define USEC_PER_SEC 1000000L
+#endif
 
-int __libc_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
-                  struct timeval *timeout)
+int __NC(select)(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+                struct timeval *timeout)
 {
+#ifdef __NR_select
+       return INLINE_SYSCALL(select, 5, n, readfds, writefds, exceptfds, timeout);
+#elif defined __NR_pselect6
        struct timespec _ts, *ts = 0;
        if (timeout) {
                uint32_t usec;
@@ -51,44 +48,14 @@ int __libc_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
 
                ts = &_ts;
        }
-
-       if (SINGLE_THREAD_P)
-               return __libc_pselect6(n, readfds, writefds, exceptfds, ts, 0);
-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
-       int oldtype = LIBC_CANCEL_ASYNC ();
-       int result = __libc_pselect6(n, readfds, writefds, exceptfds, ts, 0);
-       LIBC_CANCEL_RESET (oldtype);
-       return result;
-#endif
-
-}
-
-#else
-
-#ifdef __NR__newselect
-# define __NR___syscall_select __NR__newselect
-#else
-# define __NR___syscall_select __NR_select
-#endif
-
-static _syscall5(int, __syscall_select, int, n, fd_set *, readfds,
-               fd_set *, writefds, fd_set *, exceptfds, struct timeval *, timeout);
-
-int __libc_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
-                  struct timeval *timeout)
-{
-       if (SINGLE_THREAD_P)
-               return __syscall_select(n, readfds, writefds, exceptfds, timeout);
-
-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
-       int oldtype = LIBC_CANCEL_ASYNC ();
-       int result = __syscall_select(n, readfds, writefds, exceptfds, timeout);
-       LIBC_CANCEL_RESET (oldtype);
-       return result;
+       return INLINE_SYSCALL(pselect6, 6, n, readfds, writefds, exceptfds, ts, 0);
 #endif
 }
-
+/* we should guard it, but we need it in other files, so let it fail
+ * if we miss any of the syscalls */
+#if 1 /*defined __NR_select || defined __NR_pselect6*/
+CANCELLABLE_SYSCALL(int, select, (int n, fd_set *readfds, fd_set *writefds,
+                                 fd_set *exceptfds, struct timeval *timeout),
+                   (n, readfds, writefds, exceptfds, timeout))
+lt_libc_hidden(select)
 #endif
-
-weak_alias(__libc_select,select)
-libc_hidden_weak(select)