]> www.infradead.org Git - users/dwmw2/openconnect.git/commitdiff
Clean up memset_s() detection a bit more.
authorDavid Woodhouse <dwmw2@infradead.org>
Thu, 25 Apr 2019 11:01:02 +0000 (13:01 +0200)
committerDavid Woodhouse <dwmw2@infradead.org>
Thu, 25 Apr 2019 11:01:02 +0000 (13:01 +0200)
Definining __STDC_WANT_LIB_EXT1__ to get memset_s() is required by the C11
standard, not a Solaris-ism. It's no use just to check for its presence
in the library with AC_CHECK_FUNC() if it isn't going to compile, so make
sure we check for it with AC_LINK_IFELSE() *and* with the warning flags
that might include -Werror-implicit-function-declarations.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
configure.ac

index 22a03ab25efb7d5e1114358982c9cb59c8740573..17acb327057313ff629c966b64820d94181bb940 100644 (file)
@@ -44,7 +44,6 @@ case $host_os in
  *solaris*|*sunos*)
     AC_MSG_NOTICE([Applying workaround for broken SunOS time() function])
     AC_DEFINE(HAVE_SUNOS_BROKEN_TIME, 1, [On SunOS time() can go backwards])
-    AC_DEFINE(__STDC_WANT_LIB_EXT1__, 1, [To make memset_s() visible])
     symver_time="openconnect__time;"
     ;;
  *mingw32*|*mingw64*|*msys*)
@@ -119,16 +118,6 @@ fi
 AC_DEFINE_UNQUOTED(DEFAULT_VPNCSCRIPT, "${with_vpnc_script}", [Default vpnc-script locatin])
 AC_SUBST(DEFAULT_VPNCSCRIPT, "${with_vpnc_script}")
 
-AC_CHECK_FUNC(memset_s,
-             [AC_DEFINE(HAVE_MEMSET_S, 1, [Have memset_s() function])],
-             [AC_CHECK_FUNC(explicit_memset,
-                           [AC_DEFINE(HAVE_EXPLICIT_MEMSET, 1, [Have explicit_memset() function])],
-                           [AC_CHECK_FUNC(explicit_bzero,
-                                          [AC_DEFINE(HAVE_EXPLICIT_BZERO, 1, [Have explicit_bzero() function])],
-                                          [])
-                           ])
-             ])
-
 AC_CHECK_FUNC(fdevname_r, [AC_DEFINE(HAVE_FDEVNAME_R, 1, [Have fdevname_r() function])], [])
 AC_CHECK_FUNC(statfs, [AC_DEFINE(HAVE_STATFS, 1, [Have statfs() function])], [])
 AC_CHECK_FUNC(getline, [AC_DEFINE(HAVE_GETLINE, 1, [Have getline() function])],
@@ -187,6 +176,27 @@ AS_COMPILER_FLAGS(WFLAGS,
          -Wwrite-strings")
 AC_SUBST(WFLAGS, [$WFLAGS])
 
+oldCFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $WFLAGS"
+AC_MSG_CHECKING([For memset_s])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
+       #define __STDC_WANT_LIB_EXT1__ 1
+       #include <string.h>],[[
+       unsigned char *foo[16];
+       memset_s(foo, 16, 0, 16);]])],
+              [AC_MSG_RESULT([yes])
+               AC_DEFINE(__STDC_WANT_LIB_EXT1__, 1, [To request memset_s])
+               AC_DEFINE(HAVE_MEMSET_S, 1, [Have memset_s() function])],
+              [AC_MSG_RESULT([no])
+               AC_CHECK_FUNC(explicit_memset,
+                             [AC_DEFINE(HAVE_EXPLICIT_MEMSET, 1, [Have explicit_memset() function])],
+                             [AC_CHECK_FUNC(explicit_bzero,
+                                            [AC_DEFINE(HAVE_EXPLICIT_BZERO, 1, [Have explicit_bzero() function])],
+                                            [])
+                             ])
+              ])
+CFLAGS="$oldCFLAGS"
+
 if test "$have_win" = yes; then
    # Checking "properly" for __attribute__((dllimport,stdcall)) functions is non-trivial
    LIBS="$LIBS -lws2_32 -lshlwapi -lsecur32 -liphlpapi"