From 908ece3604b24bd78b7bc0ab677d5ecd64cf36d5 Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Tue, 26 Jan 2010 10:46:51 -0800 Subject: [PATCH] Adapt for Linux with SOCK_CLOEXEC, patch from Harald Barth --- lib/roken/roken.awk | 6 ++++++ lib/roken/roken.h.in | 1 + lib/roken/socket.c | 5 +++-- lib/roken/version-script.map | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/roken/roken.awk b/lib/roken/roken.awk index 4d263a5a8..47ae1960a 100644 --- a/lib/roken/roken.awk +++ b/lib/roken/roken.awk @@ -3,6 +3,12 @@ BEGIN { print "#include " print "#include " + print "#ifdef HAVE_SYS_TYPES_H" + print "#include " + print "#endif" + print "#ifdef HAVE_SYS_SOCKET_H" + print "#include " + print "#endif" print "" print "int main(int argc, char **argv)" print "{" diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index 33918d37b..bf0b2d37d 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -1036,6 +1036,7 @@ rk_qsort(void *, size_t, size_t, int (*)(const void *, const void *)); #if defined(__LINUX__) && SOCK_CLOEXEC && !defined(SOCKET_WRAPPER_REPLACE) #undef socket #define socket(_fam,_type,_prot) rk_socket(_fam,_type,_prot) +int ROKEN_LIB_FUNCTION rk_socket(int, int, int); #endif #ifdef SOCKET_WRAPPER_REPLACE diff --git a/lib/roken/socket.c b/lib/roken/socket.c index 121ebc1eb..bd800ac5a 100644 --- a/lib/roken/socket.c +++ b/lib/roken/socket.c @@ -317,6 +317,7 @@ socket_to_fd(rk_socket_t sock, int flags) } #ifndef HEIMDAL_SMALLER +#undef socket int rk_socket(int, int, int); @@ -326,8 +327,8 @@ rk_socket(int domain, int type, int protocol) int s; s = socket (domain, type, protocol); #ifdef SOCK_CLOEXEC - if ((SOCK_CLOEXEC & protocol) && s < 0 && errno == EINVAL) { - protocol &= ~SOCK_CLOEXEC; + if ((SOCK_CLOEXEC & type) && s < 0 && errno == EINVAL) { + type &= ~SOCK_CLOEXEC; s = socket (domain, type, protocol); } #endif diff --git a/lib/roken/version-script.map b/lib/roken/version-script.map index 0b2bdbec3..b67e82dc1 100644 --- a/lib/roken/version-script.map +++ b/lib/roken/version-script.map @@ -94,6 +94,7 @@ HEIMDAL_ROKEN_1.0 { rk_simple_execve_timed; rk_simple_execvp; rk_simple_execvp_timed; + rk_socket; rk_socket_addr_size; rk_socket_get_address; rk_socket_get_port;