Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -823,12 +823,10 @@ AC_MSG_RESULT(no) ]) ;; esac -AC_CHECK_FUNCS(strerror_r) - AC_CHECK_LIB(m, fmod, LIBS="$LIBS -lm") AC_CHECK_LIB(complex, creal, TESTS_LIBS="$TESTS_LIBS -lcomplex") AC_CHECK_FUNC(asprintf, [ case "$host" in @@ -1263,10 +1261,30 @@ ], [ AC_MSG_RESULT(yes) CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS" ]) ]) + +dnl This check needs to happen after the above, as _GNU_SOURCE can change the +dnl return type. +AC_CHECK_FUNCS(strerror_r, [ + AC_MSG_CHECKING(for return type of strerror_r) + AC_TRY_COMPILE([ + #include + #include + ], [ + switch (strerror_r(0, NULL, 0)) { + case 0:; + } + ], [ + AC_MSG_RESULT(int) + ], [ + AC_MSG_RESULT(char *) + AC_DEFINE(STRERROR_R_RETURNS_CHARP, 1, + [Whether strerror_r returns char *]) + ]) +]) AC_CHECK_HEADERS(sys/utsname.h) AC_CHECK_FUNCS(uname) case "$host_os" in Index: src/exceptions/OFException.m ================================================================== --- src/exceptions/OFException.m +++ src/exceptions/OFException.m @@ -169,11 +169,11 @@ case EWOULDBLOCK: return @"EWOULDBLOCK"; } #endif -#if defined(HAVE_STRERROR_R) && defined(_GNU_SOURCE) +#if defined(STRERROR_R_RETURNS_CHARP) /* glibc uses a different strerror_r when _GNU_SOURCE is defined */ char *string; if ((string = strerror_r(errNo, buffer, 256)) == NULL) return @"Unknown error (strerror_r failed)";