summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2012-06-10 09:36:23 -0700
committerKhem Raj <raj.khem@gmail.com>2012-06-10 09:36:23 -0700
commite118373cbb58ba5ffa5fb6670957678d5b87cdb9 (patch)
tree968f30ebbb43633fdf74dc1baa3d8b02e9b41872
parent2952c70804b48bb5c87eea21df5e401969dc4ec1 (diff)
eventfd: Implement eventfd2 and fix eventfd
eventfd: evntfd assumes to take two arguments instead it should be one evntfd expects two therefore implement both syscalls with correct parameters Thanks Eugene Rudoy for reporting it and also providing the patch Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--libc/sysdeps/linux/common/eventfd.c16
-rw-r--r--libc/sysdeps/linux/common/stubs.c2
2 files changed, 15 insertions, 3 deletions
diff --git a/libc/sysdeps/linux/common/eventfd.c b/libc/sysdeps/linux/common/eventfd.c
index cc3f3f0f7..96597ab33 100644
--- a/libc/sysdeps/linux/common/eventfd.c
+++ b/libc/sysdeps/linux/common/eventfd.c
@@ -7,12 +7,24 @@
* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/
+#include <errno.h>
#include <sys/syscall.h>
#include <sys/eventfd.h>
/*
* eventfd()
*/
-#ifdef __NR_eventfd
-_syscall2(int, eventfd, int, count, int, flags)
+#if defined __NR_eventfd || defined __NR_eventfd2
+int eventfd (int count, int flags)
+{
+#if defined __NR_eventfd2
+ return INLINE_SYSCALL (eventfd2, 2, count, flags);
+#elif defined __NR_eventfd
+ if (flags != 0) {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ return INLINE_SYSCALL (eventfd, 1, count);
+#endif
+}
#endif
diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c
index 3567b0786..1fc23933c 100644
--- a/libc/sysdeps/linux/common/stubs.c
+++ b/libc/sysdeps/linux/common/stubs.c
@@ -110,7 +110,7 @@ make_stub(epoll_pwait)
make_stub(epoll_wait)
#endif
-#if !defined __NR_eventfd && defined __UCLIBC_LINUX_SPECIFIC__
+#if !defined __NR_eventfd && !defined __NR_eventfd2 && defined __UCLIBC_LINUX_SPECIFIC__
make_stub(eventfd)
#endif