1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- From 7810e4f8027b5c4c8ceec6fefec4eb779362ebb5 Mon Sep 17 00:00:00 2001
- From: Khem Raj <raj.khem@gmail.com>
- Date: Sun, 10 Jun 2012 16:36:23 +0000
- Subject: 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>
- ---
- --- 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
- --- a/libc/sysdeps/linux/common/stubs.c
- +++ b/libc/sysdeps/linux/common/stubs.c
- @@ -93,7 +93,7 @@ make_stub(epoll_ctl)
- 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
-
|