From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/332 Path: news.gmane.org!not-for-mail From: Serge Ziryukin Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH] add eventfd syscall wrapper and helper abstractions as in glibc Date: Thu, 5 May 2011 08:30:18 +0300 Message-ID: <1304573418-18499-1-git-send-email-ftrvxmtrx@gmail.com> References: Reply-To: musl@lists.openwall.com NNTP-Posting-Host: lo.gmane.org X-Trace: dough.gmane.org 1312595728 11623 80.91.229.12 (6 Aug 2011 01:55:28 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sat, 6 Aug 2011 01:55:28 +0000 (UTC) Cc: Serge Ziryukin To: musl@lists.openwall.com Original-X-From: envelope-from@hidden Thu May 05 05:32:14 2011 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; DomainKey-Signature: a=rsa-sha1; c=nofws; X-Mailer: git-send-email 1.7.5 In-Reply-To: Xref: news.gmane.org gmane.linux.lib.musl.general:332 Archived-At: abstractions are: typedef uint64_t eventfd_t; int eventfd_read(int fd, eventfd_t *value); int eventfd_write(int fd, eventfd_t value); these are trying to hide the details of reading and writing on an eventfd descriptor. Signed-off-by: Serge Ziryukin --- include/sys/eventfd.h | 25 +++++++++++++++++++++++++ src/linux/eventfd.c | 7 +++++++ src/linux/eventfd_read.c | 7 +++++++ src/linux/eventfd_write.c | 7 +++++++ 4 files changed, 46 insertions(+), 0 deletions(-) create mode 100644 include/sys/eventfd.h create mode 100644 src/linux/eventfd.c create mode 100644 src/linux/eventfd_read.c create mode 100644 src/linux/eventfd_write.c diff --git a/include/sys/eventfd.h b/include/sys/eventfd.h new file mode 100644 index 0000000..13bc9c4 --- /dev/null +++ b/include/sys/eventfd.h @@ -0,0 +1,25 @@ +#ifndef _SYS_EVENTFD_H +#define _SYS_EVENTFD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef uint64_t eventfd_t; + +#define EFD_SEMAPHORE 1 +#define EFD_CLOEXEC 02000000 +#define EFD_NONBLOCK 04000 + +int eventfd(unsigned int, int); +int eventfd_read(int, eventfd_t *); +int eventfd_write(int, eventfd_t); + + +#ifdef __cplusplus +} +#endif + +#endif /* sys/eventfd.h */ diff --git a/src/linux/eventfd.c b/src/linux/eventfd.c new file mode 100644 index 0000000..2ddfc68 --- /dev/null +++ b/src/linux/eventfd.c @@ -0,0 +1,7 @@ +#include +#include "syscall.h" + +int eventfd(unsigned int count, int flags) +{ + return syscall(SYS_eventfd2, count, flags); +} diff --git a/src/linux/eventfd_read.c b/src/linux/eventfd_read.c new file mode 100644 index 0000000..969e661 --- /dev/null +++ b/src/linux/eventfd_read.c @@ -0,0 +1,7 @@ +#include +#include + +int eventfd_read(int fd, eventfd_t *value) +{ + return (sizeof(*value) == read(fd, value, sizeof(*value))) ? 0 : -1; +} diff --git a/src/linux/eventfd_write.c b/src/linux/eventfd_write.c new file mode 100644 index 0000000..734fa36 --- /dev/null +++ b/src/linux/eventfd_write.c @@ -0,0 +1,7 @@ +#include +#include + +int eventfd_write(int fd, eventfd_t value) +{ + return (sizeof(value) == write(fd, &value, sizeof(value))) ? 0 : -1; +} -- 1.7.5