From ad118caa9f690114d11384b0813f30980cc333f3 Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Tue, 4 Jun 2019 15:04:49 +0100 Subject: [PATCH] libctf: work on platforms without O_CLOEXEC. (Not tested on any such platforms, since I don't have access to any at the moment. Testing encouraged.) libctf/ * configure.ac: Check for O_CLOEXEC. * ctf-decls.h (O_CLOEXEC): Define (to 0), if need be. * config.h.in: Regenerate. --- libctf/ChangeLog | 7 +++++++ libctf/config.h.in | 3 +++ libctf/configure | 37 +++++++++++++++++++++++++++++++++++++ libctf/configure.ac | 16 ++++++++++++++++ libctf/ctf-decls.h | 4 ++++ 5 files changed, 67 insertions(+) diff --git a/libctf/ChangeLog b/libctf/ChangeLog index c51efea8bc..52c2e1e8fc 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,10 @@ +2019-06-04 Nick Alcock + + * configure.ac: Check for O_CLOEXEC. + * ctf-decls.h (O_CLOEXEC): Define (to 0), if need be. + * config.h.in: Regenerate. + * configure: Likewise. + 2019-06-04 Nick Alcock * qsort_r.c: Rename to... diff --git a/libctf/config.h.in b/libctf/config.h.in index d81c500c5c..3f45cd6d74 100644 --- a/libctf/config.h.in +++ b/libctf/config.h.in @@ -24,6 +24,9 @@ /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP +/* Whether the platform has a definition of O_CLOEXEC. */ +#undef HAVE_O_CLOEXEC + /* Define to 1 if you have the `pread' function. */ #undef HAVE_PREAD diff --git a/libctf/configure b/libctf/configure index d485b1a7ce..31f166779e 100755 --- a/libctf/configure +++ b/libctf/configure @@ -6462,6 +6462,43 @@ else fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5 +$as_echo_n "checking for O_CLOEXEC... " >&6; } +if ${ac_cv_libctf_macro_O_CLOEXEC+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #ifndef O_CLOEXEC + choke me; + #endif + +int +main () +{ +return O_CLOEXEC; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_libctf_macro_O_CLOEXEC=yes +else + ac_cv_libctf_macro_O_CLOEXEC=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libctf_macro_O_CLOEXEC" >&5 +$as_echo "$ac_cv_libctf_macro_O_CLOEXEC" >&6; } + +if test $ac_cv_libctf_macro_O_CLOEXEC = yes; then + +$as_echo "#define HAVE_O_CLOEXEC 1" >>confdefs.h + +fi + ac_config_files="$ac_config_files Makefile" ac_config_headers="$ac_config_headers config.h" diff --git a/libctf/configure.ac b/libctf/configure.ac index beb90ba75c..2a1a80b7ec 100644 --- a/libctf/configure.ac +++ b/libctf/configure.ac @@ -133,6 +133,22 @@ esac AM_CONDITIONAL(NEED_CTF_QSORT_R, test "${ac_cv_libctf_qsort_r_signature}" = unknown) +AC_CACHE_CHECK([for O_CLOEXEC], [ac_cv_libctf_macro_O_CLOEXEC], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include + #ifndef O_CLOEXEC + choke me; + #endif + ]], + [[return O_CLOEXEC;]])], + [ac_cv_libctf_macro_O_CLOEXEC=yes], + [ac_cv_libctf_macro_O_CLOEXEC=no])]) + +if test $ac_cv_libctf_macro_O_CLOEXEC = yes; then + AC_DEFINE([HAVE_O_CLOEXEC], 1, + [Whether the platform has a definition of O_CLOEXEC.]) +fi + AC_CONFIG_FILES(Makefile) AC_CONFIG_HEADERS(config.h) AC_OUTPUT diff --git a/libctf/ctf-decls.h b/libctf/ctf-decls.h index d12409e4b6..c840b793c9 100644 --- a/libctf/ctf-decls.h +++ b/libctf/ctf-decls.h @@ -62,6 +62,10 @@ void ctf_qsort_r (void *base, size_t nmemb, size_t size, void *arg); #endif +#ifndef HAVE_O_CLOEXEC +# define O_CLOEXEC 0 +#endif + #undef MAX #undef MIN #define MAX(a, b) ((a) > (b) ? (a) : (b)) -- 2.34.1