-# strerror_r.m4 serial 11
+# strerror_r.m4 serial 13
dnl Copyright (C) 2002, 2007-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
fi
if test $ac_cv_func_strerror_r = yes; then
- if test -z "$ERRNO_H"; then
+ if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
if test $gl_cv_func_strerror_r_posix_signature = yes; then
case "$gl_cv_func_strerror_r_works" in
dnl The system's strerror_r has bugs. Replace it.
fi
else
dnl The system's strerror_r() cannot know about the new errno values we
- dnl add to <errno.h>. Replace it.
+ dnl add to <errno.h>, or any fix for strerror(0). Replace it.
REPLACE_STRERROR_R=1
fi
fi
# Prerequisites of lib/strerror_r.c.
AC_DEFUN([gl_PREREQ_STRERROR_R], [
dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
- AC_CHECK_FUNCS([__xpg_strerror_r])
+ AC_CHECK_FUNCS_ONCE([__xpg_strerror_r])
AC_CHECK_FUNCS_ONCE([catgets])
])
[
AC_REQUIRE([gl_HEADER_ERRNO_H])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([gl_FUNC_STRERROR_0])
AC_CHECK_FUNCS_ONCE([strerror_r])
if test $ac_cv_func_strerror_r = yes; then
- if test -z "$ERRNO_H"; then
+ if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
dnl The POSIX prototype is: int strerror_r (int, char *, size_t);
dnl glibc, Cygwin: char *strerror_r (int, char *, size_t);
dnl AIX 5.1, OSF/1 5.1: int strerror_r (int, char *, int);
aix*) gl_cv_func_strerror_r_works="guessing no";;
# Guess no on HP-UX.
hpux*) gl_cv_func_strerror_r_works="guessing no";;
- # Guess no on FreeBSD.
- freebsd*) gl_cv_func_strerror_r_works="guessing no";;
+ # Guess no on BSD variants.
+ *bsd*) gl_cv_func_strerror_r_works="guessing no";;
# Guess yes otherwise.
*) gl_cv_func_strerror_r_works="guessing yes";;
esac
else
dnl The system's strerror() has a wrong signature.
dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
- AC_CHECK_FUNCS([__xpg_strerror_r])
+ AC_CHECK_FUNCS_ONCE([__xpg_strerror_r])
dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure.
dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer.
if test $ac_cv_func___xpg_strerror_r = yes; then
[AC_LANG_PROGRAM(
[[#include <errno.h>
#include <string.h>
- extern int __xpg_strerror_r(int, char *, size_t);
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ int __xpg_strerror_r(int, char *, size_t);
]],
[[int result = 0;
char buf[256] = "^";