| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- # strerror.m4 serial 17
- dnl Copyright (C) 2002, 2007-2015 Free Software Foundation, Inc.
- dnl This file is free software; the Free Software Foundation
- dnl gives unlimited permission to copy and/or distribute it,
- dnl with or without modifications, as long as this notice is preserved.
- AC_DEFUN([gl_FUNC_STRERROR],
- [
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
- AC_REQUIRE([gl_HEADER_ERRNO_H])
- AC_REQUIRE([gl_FUNC_STRERROR_0])
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
- m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
- AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
- ])
- if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
- AC_CACHE_CHECK([for working strerror function],
- [gl_cv_func_working_strerror],
- [AC_RUN_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <string.h>
- ]],
- [[if (!*strerror (-2)) return 1;]])],
- [gl_cv_func_working_strerror=yes],
- [gl_cv_func_working_strerror=no],
- [case "$host_os" in
- # Guess yes on glibc systems.
- *-gnu*) gl_cv_func_working_strerror="guessing yes" ;;
- # If we don't know, assume the worst.
- *) gl_cv_func_working_strerror="guessing no" ;;
- esac
- ])
- ])
- case "$gl_cv_func_working_strerror" in
- *yes) ;;
- *)
- dnl The system's strerror() fails to return a string for out-of-range
- dnl integers. Replace it.
- REPLACE_STRERROR=1
- ;;
- esac
- m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
- dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's
- dnl buffer, we must replace strerror.
- case "$gl_cv_func_strerror_r_works" in
- *no) REPLACE_STRERROR=1 ;;
- esac
- ])
- else
- dnl The system's strerror() cannot know about the new errno values we add
- dnl to <errno.h>, or any fix for strerror(0). Replace it.
- REPLACE_STRERROR=1
- fi
- ])
- dnl Detect if strerror(0) passes (that is, does not set errno, and does not
- dnl return a string that matches strerror(-1)).
- AC_DEFUN([gl_FUNC_STRERROR_0],
- [
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
- REPLACE_STRERROR_0=0
- AC_CACHE_CHECK([whether strerror(0) succeeds],
- [gl_cv_func_strerror_0_works],
- [AC_RUN_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <string.h>
- #include <errno.h>
- ]],
- [[int result = 0;
- char *str;
- errno = 0;
- str = strerror (0);
- if (!*str) result |= 1;
- if (errno) result |= 2;
- if (strstr (str, "nknown") || strstr (str, "ndefined"))
- result |= 4;
- return result;]])],
- [gl_cv_func_strerror_0_works=yes],
- [gl_cv_func_strerror_0_works=no],
- [case "$host_os" in
- # Guess yes on glibc systems.
- *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
- # If we don't know, assume the worst.
- *) gl_cv_func_strerror_0_works="guessing no" ;;
- esac
- ])
- ])
- case "$gl_cv_func_strerror_0_works" in
- *yes) ;;
- *)
- REPLACE_STRERROR_0=1
- AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0)
- does not return a message implying success.])
- ;;
- esac
- ])
|