Skip to content
Snippets Groups Projects
Commit b336c990 authored by Florian Fainelli's avatar Florian Fainelli
Browse files

uClibc: fix uClibc implementation of eventfd

uClibc declares eventfd() as taking two arguments but doesn't properly
pass the second argument to the kernel.

The problem is discussed at:
http://lists.uclibc.org/pipermail/uclibc/2012-May/046873.html



This patch is taken from uclibc 0.9.33 git, so will presumably
be integrated in any future releases.

Signed-off-by: default avatarAndy Leiserson <andy@leiserson.org>

SVN-Revision: 33478
parent 78f4cf3d
No related branches found
No related tags found
No related merge requests found
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>
---
diff --git a/libc/sysdeps/linux/common/eventfd.c b/libc/sysdeps/linux/common/eventfd.c
index cc3f3f0..96597ab 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 4d1e26c..7af14c1 100644
--- 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
--
cgit v0.9.0.1-2-gef13
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment