X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=m4%2Fstrerror_r.m4;h=6cf46240a7912f5386a488ed9ec1d0fbda10f770;hb=ca72a0103a972623842c3933a2e5a30d2622e6d7;hp=8ae4c71b9005d0b4485e0a31fde4819fe0940847;hpb=b88091566ce205b7b43211047784cadb92e2e187;p=gnulib.git diff --git a/m4/strerror_r.m4 b/m4/strerror_r.m4 index 8ae4c71b9..6cf46240a 100644 --- a/m4/strerror_r.m4 +++ b/m4/strerror_r.m4 @@ -1,5 +1,7 @@ -#serial 1000 +#serial 1002 # Experimental replacement for the function in the latest CVS autoconf. +# If the compile-test says strerror_r doesn't work, then resort to a +# `run'-test that works on BeOS and segfaults on DEC Unix. # Use with the error.c file in ../lib. undefine([AC_FUNC_STRERROR_R]) @@ -7,11 +9,10 @@ undefine([AC_FUNC_STRERROR_R]) # AC_FUNC_STRERROR_R # ------------------ AC_DEFUN([AC_FUNC_STRERROR_R], -[# Check strerror_r +[AC_CHECK_DECLS([strerror_r]) AC_CHECK_FUNCS([strerror_r]) if test $ac_cv_func_strerror_r = yes; then AC_CHECK_HEADERS(string.h) - AC_CHECK_DECLS([strerror_r]) AC_CACHE_CHECK([for working strerror_r], ac_cv_func_strerror_r_works, [ @@ -21,24 +22,45 @@ if test $ac_cv_func_strerror_r = yes; then # if HAVE_STRING_H # include # endif -#ifndef HAVE_DECL_STRERROR_R -"this configure-time declaration test was not run" -#endif -#if !HAVE_DECL_STRERROR_R -char *strerror_r (); -#endif ], [ - char buf; - char x = *strerror_r (0, &buf, sizeof buf); + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); ], ac_cv_func_strerror_r_works=yes, ac_cv_func_strerror_r_works=no ) - if test $ac_cv_func_strerror_r_works = yes; then - AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1, - [Define to 1 if `strerror_r' returns a string.]) + if test $ac_cv_func_strerror_r_works = no; then + # strerror_r seems not to work, but now we have to choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + AC_TRY_RUN( + [ +# include +# include +# include + + extern char *strerror_r (); + + int + main () + { + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + exit (!isalpha (x)); + } + ], + ac_cv_func_strerror_r_works=yes, + ac_cv_func_strerror_r_works=no, + ac_cv_func_strerror_r_works=no) fi ]) + if test $ac_cv_func_strerror_r_works = yes; then + AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1, + [Define to 1 if `strerror_r' returns a string.]) + fi fi ])# AC_FUNC_STRERROR_R