diff options
author | Ben Woosley <ben.woosley@gmail.com> | 2019-03-09 12:37:09 -0500 |
---|---|---|
committer | Ben Woosley <ben.woosley@gmail.com> | 2019-04-13 20:21:02 -0700 |
commit | b4fd0ca9be14c81023db759c405c0f67cfa78166 (patch) | |
tree | 087c594164ddd6f2d5d96669e4cdc18b1edb67f9 | |
parent | 7fb886b1b1110de4c79478ac094e64cdcb81f3c8 (diff) |
Include cstring for sanity_test_fdelt if required
SmartOS FD_ZERO is implemented in a way that requires
an external declaration of memcpy. We can not simply
include cstring in the existing file because
sanity_test_memcpy is attempting to replace memcpy, but we can do
so here, now that the fdelt test is split out.
-rw-r--r-- | configure.ac | 33 | ||||
-rw-r--r-- | src/compat/glibc_sanity_fdelt.cpp | 3 |
2 files changed, 36 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index a3ba8ce808..579aeed49d 100644 --- a/configure.ac +++ b/configure.ac @@ -758,6 +758,39 @@ fi AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h]) +# FD_ZERO may be dependent on a declaration of memcpy, e.g. in SmartOS +# check that it fails to build without memcpy, then that it builds with +AC_MSG_CHECKING(FD_ZERO memcpy dependence) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include <cstddef> + #if HAVE_SYS_SELECT_H + #include <sys/select.h> + #endif + ]],[[ + #if HAVE_SYS_SELECT_H + fd_set fds; + FD_ZERO(&fds); + #endif + ]])], + [ AC_MSG_RESULT(no) ], + [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include <cstring> + #if HAVE_SYS_SELECT_H + #include <sys/select.h> + #endif + ]], [[ + #if HAVE_SYS_SELECT_H + fd_set fds; + FD_ZERO(&fds); + #endif + ]])], + [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CSTRING_DEPENDENT_FD_ZERO, 1, [Define this symbol if FD_ZERO is dependent of a memcpy declaration being available]) ], + [ AC_MSG_ERROR(failed with cstring include) ] + ) + ] +) + AC_CHECK_DECLS([getifaddrs, freeifaddrs],,, [#include <sys/types.h> #include <ifaddrs.h>] diff --git a/src/compat/glibc_sanity_fdelt.cpp b/src/compat/glibc_sanity_fdelt.cpp index 13661d3eef..87140d0c71 100644 --- a/src/compat/glibc_sanity_fdelt.cpp +++ b/src/compat/glibc_sanity_fdelt.cpp @@ -7,6 +7,9 @@ #endif #if defined(HAVE_SYS_SELECT_H) +#ifdef HAVE_CSTRING_DEPENDENT_FD_ZERO +#include <cstring> +#endif #include <sys/select.h> // trigger: Call FD_SET to trigger __fdelt_chk. FORTIFY_SOURCE must be defined |