diff options
author | Jes Sorensen <Jes.Sorensen@redhat.com> | 2010-10-26 10:39:22 +0200 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2010-10-30 08:02:37 +0000 |
commit | 949d31e665e9847b2a8f24a916abd96e79353535 (patch) | |
tree | 091a23bf1fa7fbe0c8cb205580b061c63f867d31 /os-posix.c | |
parent | 70e72ce45e1f06415b5ec28439c2a87a72e5aad3 (diff) |
We only support eventfd under POSIX, move qemu_eventfd() to os-posix.c
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'os-posix.c')
-rw-r--r-- | os-posix.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/os-posix.c b/os-posix.c index 6321e990c5..612b641737 100644 --- a/os-posix.c +++ b/os-posix.c @@ -43,6 +43,10 @@ #include <sys/prctl.h> #endif +#ifdef CONFIG_EVENTFD +#include <sys/eventfd.h> +#endif + static struct passwd *user_pwd; static const char *chroot_dir; static int daemonize; @@ -329,3 +333,31 @@ void os_set_line_buffering(void) { setvbuf(stdout, NULL, _IOLBF, 0); } + +/* + * Creates an eventfd that looks like a pipe and has EFD_CLOEXEC set. + */ +int qemu_eventfd(int fds[2]) +{ +#ifdef CONFIG_EVENTFD + int ret; + + ret = eventfd(0, 0); + if (ret >= 0) { + fds[0] = ret; + qemu_set_cloexec(ret); + if ((fds[1] = dup(ret)) == -1) { + close(ret); + return -1; + } + qemu_set_cloexec(fds[1]); + return 0; + } + + if (errno != ENOSYS) { + return -1; + } +#endif + + return qemu_pipe(fds); +} |