*** empty log message ***
[coreutils.git] / m4 / strerror_r.m4
blob6cf46240a7912f5386a488ed9ec1d0fbda10f770
1 #serial 1002
2 # Experimental replacement for the function in the latest CVS autoconf.
3 # If the compile-test says strerror_r doesn't work, then resort to a
4 # `run'-test that works on BeOS and segfaults on DEC Unix.
5 # Use with the error.c file in ../lib.
7 undefine([AC_FUNC_STRERROR_R])
9 # AC_FUNC_STRERROR_R
10 # ------------------
11 AC_DEFUN([AC_FUNC_STRERROR_R],
12 [AC_CHECK_DECLS([strerror_r])
13 AC_CHECK_FUNCS([strerror_r])
14 if test $ac_cv_func_strerror_r = yes; then
15   AC_CHECK_HEADERS(string.h)
16   AC_CACHE_CHECK([for working strerror_r],
17                  ac_cv_func_strerror_r_works,
18    [
19     AC_TRY_COMPILE(
20      [
21 #       include <stdio.h>
22 #       if HAVE_STRING_H
23 #        include <string.h>
24 #       endif
25      ],
26      [
27        char buf[100];
28        char x = *strerror_r (0, buf, sizeof buf);
29      ],
30      ac_cv_func_strerror_r_works=yes,
31      ac_cv_func_strerror_r_works=no
32     )
33     if test $ac_cv_func_strerror_r_works = no; then
34       # strerror_r seems not to work, but now we have to choose between
35       # systems that have relatively inaccessible declarations for the
36       # function.  BeOS and DEC UNIX 4.0 fall in this category, but the
37       # former has a strerror_r that returns char*, while the latter
38       # has a strerror_r that returns `int'.
39       # This test should segfault on the DEC system.
40       AC_TRY_RUN(
41        [
42 #       include <stdio.h>
43 #       include <string.h>
44 #       include <ctype.h>
46         extern char *strerror_r ();
48         int
49         main ()
50         {
51           char buf[100];
52           char x = *strerror_r (0, buf, sizeof buf);
53           exit (!isalpha (x));
54         }
55        ],
56        ac_cv_func_strerror_r_works=yes,
57        ac_cv_func_strerror_r_works=no,
58        ac_cv_func_strerror_r_works=no)
59     fi
60   ])
61   if test $ac_cv_func_strerror_r_works = yes; then
62     AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1,
63       [Define to 1 if `strerror_r' returns a string.])
64   fi
66 ])# AC_FUNC_STRERROR_R