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 <ppaalanen@gmail.com>
{
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);
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
{
wrapped_calls++;
-#ifdef SOCK_CLOEXEC
if (fall_back && (type & SOCK_CLOEXEC)) {
errno = EINVAL;
return -1;
}
-#endif
return real_socket(domain, type, protocol);
}
/* 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);
}