From 489ab051683d76d2c4e8450ab3e6e88877df1f1c Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Wed, 1 Jul 2015 14:56:12 -0700 Subject: [PATCH] Do an explicit test for XSI strerror_r Summary: The current #if directive is a laundry list of "strerror_r defaults to XSI style on these platforms", and we keep missing some, so let's just do a proper test and simplify the code directives. Closes #232 Reviewed By: @paulbiss Differential Revision: D2208843 --- folly/String.cpp | 4 +--- folly/configure.ac | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/folly/String.cpp b/folly/String.cpp index 66649caa..5ae7ee16 100644 --- a/folly/String.cpp +++ b/folly/String.cpp @@ -342,9 +342,7 @@ fbstring errnoStr(int err) { } else { result.assign(buf); } -#elif defined(__APPLE__) || defined(__FreeBSD__) ||\ - defined(__CYGWIN__) || defined(__ANDROID__) ||\ - ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE) +#elif defined(HAVE_XSI_STRERROR_R) // Using XSI-compatible strerror_r int r = strerror_r(err, buf, sizeof(buf)); diff --git a/folly/configure.ac b/folly/configure.ac index 8741396c..b24e575f 100644 --- a/folly/configure.ac +++ b/folly/configure.ac @@ -346,6 +346,28 @@ if test "$folly_cv_prog_cc_pthread_atfork" = "yes"; then AC_DEFINE([HAVE_PTHREAD_ATFORK], [1], [Define to 1 if the compiler supports pthread_atfork]) fi +# Check for XSI-compatible strerror_r as default implementation +AC_CACHE_CHECK( + [for XSI style strerror_r support], + [folly_cv_prog_cc_xsi_strerror_r], + [AC_RUN_IFELSE( + [AC_LANG_SOURCE[ + #include + #include + int main(int argc, char** argv) { + char buf[1024]; + buf[0] = 0; + int ret = strerror_r(ENOMEM, buf, sizeof(buf)); + return ret; + } + ]], + [folly_cv_prog_cc_xsi_strerror_r=yes], + [folly_cv_prog_cc_xsi_strerror_r=no])]) + +if test "$folly_cv_prog_cc_xsi_strerror_r" = "yes"; then + AC_DEFINE([HAVE_XSI_STRERROR_R], [1], [Define to 1 if the runtime supports XSI-style strerror_r]) +fi + # Checks for library functions. AC_CHECK_FUNCS([getdelim \ gettimeofday \ -- 2.34.1