From 3b29783dc8f0e856afce7a9edf10c0ca4d12f284 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Mon, 23 Apr 2012 12:10:45 +0300 Subject: [PATCH] os: define SOCK_CLOEXEC on Linux If it's not already defined, and we are on Linux, #define it. This gets rid of a load of #ifdefs. This should also allow to use it when the kernel supports it, but the libc does not define it. Signed-off-by: Pekka Paalanen --- src/wayland-os.c | 2 -- src/wayland-os.h | 13 +++++++++++++ tests/os-wrappers-test.c | 8 +------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/wayland-os.c b/src/wayland-os.c index 8f75976..4db8050 100644 --- a/src/wayland-os.c +++ b/src/wayland-os.c @@ -55,13 +55,11 @@ wl_os_socket_cloexec(int domain, int type, int protocol) { int fd; -#ifdef SOCK_CLOEXEC fd = socket(domain, type | SOCK_CLOEXEC, protocol); if (fd >= 0) return fd; if (errno != EINVAL) return -1; -#endif fd = socket(domain, type, protocol); return set_cloexec_or_close(fd); diff --git a/src/wayland-os.h b/src/wayland-os.h index 49adc2b..a57b3aa 100644 --- a/src/wayland-os.h +++ b/src/wayland-os.h @@ -26,4 +26,17 @@ int wl_os_socket_cloexec(int domain, int type, int protocol); +/* + * The following are for wayland-os.c and the unit tests. + * Do not use them elsewhere. + */ + +#ifdef __linux__ + +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 02000000 +#endif + +#endif /* __linux__ */ + #endif diff --git a/tests/os-wrappers-test.c b/tests/os-wrappers-test.c index aa2631b..c6bf26e 100644 --- a/tests/os-wrappers-test.c +++ b/tests/os-wrappers-test.c @@ -50,12 +50,10 @@ socket(int domain, int type, int protocol) { wrapped_calls++; -#ifdef SOCK_CLOEXEC if (fall_back && (type & SOCK_CLOEXEC)) { errno = EINVAL; return -1; } -#endif return real_socket(domain, type, protocol); } @@ -70,17 +68,13 @@ do_os_wrappers_socket_cloexec(int n) /* simply create a socket that closes on exec */ fd = wl_os_socket_cloexec(PF_LOCAL, SOCK_STREAM, 0); + assert(fd >= 0); -#ifdef SOCK_CLOEXEC /* * Must have 2 calls if falling back, but must also allow * falling back without a forced fallback. */ assert(wrapped_calls > n); -#else - assert(wrapped_calls == 1); -#endif - assert(fd >= 0); exec_fd_leak_check(nr_fds); } -- 2.7.4