summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkos Chandras <markos.chandras@imgtec.com>2012-10-31 16:02:49 +0000
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2013-02-20 13:45:11 +0100
commit3db05793b7b35238060f2310176f11b7df3844db (patch)
treeb00a3038a26f3445c2b08a5a7ea53472104938b6
parent257323e525f0cc2774bea4823b3518d0dce87142 (diff)
epoll: Use epoll_pwait if arch does not have the epoll_wait syscall
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--libc/sysdeps/linux/common/epoll.c11
-rw-r--r--libc/sysdeps/linux/common/stubs.c3
2 files changed, 13 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/common/epoll.c b/libc/sysdeps/linux/common/epoll.c
index b7366262a..5f1e589e9 100644
--- a/libc/sysdeps/linux/common/epoll.c
+++ b/libc/sysdeps/linux/common/epoll.c
@@ -55,4 +55,15 @@ static int __NC(epoll_pwait)(int epfd, struct epoll_event *events, int maxevents
CANCELLABLE_SYSCALL(int, epoll_pwait, (int epfd, struct epoll_event *events, int maxevents, int timeout,
const sigset_t *set),
(epfd, events, maxevents, timeout, set))
+/*
+ * If epoll_wait is not defined, then call epoll_pwait instead using NULL
+ * for sigmask argument
+ */
+# ifndef __NR_epoll_wait
+# include <stddef.h>
+int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
+{
+ return INLINE_SYSCALL(epoll_pwait, 5, epfd, events, maxevents, timeout, NULL);
+}
+# endif
#endif
diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c
index 0f000f0ed..dfbbd4215 100644
--- a/libc/sysdeps/linux/common/stubs.c
+++ b/libc/sysdeps/linux/common/stubs.c
@@ -107,7 +107,8 @@ make_stub(epoll_ctl)
make_stub(epoll_pwait)
#endif
-#if !defined __NR_epoll_wait && defined __UCLIBC_HAS_EPOLL__
+#if !defined __NR_epoll_wait && defined __UCLIBC_HAS_EPOLL__ \
+ && !defined __NR_epoll_pwait
make_stub(epoll_wait)
#endif