# HG changeset patch # User Jim Meyering # Date 947349049 0 # Node ID a5f09f038aaac5a1f539c3c44fb503f6217eff38 # Parent 00ec6425c28ffb58f0e498851444c7a7e695506e (jm_FUNC_STRERROR_R): New file/macro. diff --git a/m4/strerror_r.m4 b/m4/strerror_r.m4 new file mode 100644 --- /dev/null +++ b/m4/strerror_r.m4 @@ -0,0 +1,39 @@ +#serial 1 + +dnl From Jim Meyering. +dnl Determine whether the strerror_r implementation is one of +dnl the broken ones that returns `int' rather than `char*'. +dnl Actually, this tests only whether it returns an array, +dnl but that should be enough. +dnl This is used by lib/error.c. + +AC_DEFUN(jm_FUNC_STRERROR_R, +[ + # Check strerror_r + AC_CHECK_FUNCS([strerror_r]) + if test $ac_cv_func_strerror_r = yes; then + AC_CHECK_HEADERS(string.h) + AC_CACHE_CHECK([for working strerror_r], + jm_cv_func_working_strerror_r, + [ + AC_TRY_COMPILE( + [ +# include +# if HAVE_STRING_H +# include +# endif + ], + [ + int buf; /* avoiding square brackets makes this easier */ + char x = *strerror_r (0, buf, sizeof buf); + ], + jm_cv_func_working_strerror_r=yes, + jm_cv_func_working_strerror_r=no + ) + if test $jm_cv_func_working_strerror_r = yes; then + AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1, + [Define to 1 if strerror_r returns a string.]) + fi + ]) + fi +])