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.
This commit is contained in:
Ben Woosley 2019-03-09 12:37:09 -05:00
parent 7fb886b1b1
commit b4fd0ca9be
No known key found for this signature in database
GPG key ID: 4D8CA4BA18040906
2 changed files with 36 additions and 0 deletions

View file

@ -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]) 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],,, AC_CHECK_DECLS([getifaddrs, freeifaddrs],,,
[#include <sys/types.h> [#include <sys/types.h>
#include <ifaddrs.h>] #include <ifaddrs.h>]

View file

@ -7,6 +7,9 @@
#endif #endif
#if defined(HAVE_SYS_SELECT_H) #if defined(HAVE_SYS_SELECT_H)
#ifdef HAVE_CSTRING_DEPENDENT_FD_ZERO
#include <cstring>
#endif
#include <sys/select.h> #include <sys/select.h>
// trigger: Call FD_SET to trigger __fdelt_chk. FORTIFY_SOURCE must be defined // trigger: Call FD_SET to trigger __fdelt_chk. FORTIFY_SOURCE must be defined