Browse Source

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>
Khem Raj 12 years ago
parent
commit
e118373cbb
2 changed files with 15 additions and 3 deletions
  1. 14 2
      libc/sysdeps/linux/common/eventfd.c
  2. 1 1
      libc/sysdeps/linux/common/stubs.c

+ 14 - 2
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

+ 1 - 1
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