annotate m4/usleep.m4 @ 15308:a3ba680ad389

strerror_r: fix OpenBSD behavior on 0 OpenBSD treats strerror_r(0,,) as a success, but with a message "Undefined error: 0"; while this is distinct from strerror_r(-1,,) returning "Unknown error: -1", it does not imply success. Meanwhile, if buf is short enough for ERANGE, then we can't use strstr to look for "Unknown" or "Undefined" in the resulting message, like we had been doing for strerror(). Fix this by shifting the burden - now the strerror-override code guarantees that 0 will have an override when needed. * lib/strerror-override.c (strerror_override): Also override 0 when needed. * lib/strerror-override.h (strerror_override): Likewise. * lib/strerror.c (strerror): Simplify, now that 0 override is done earlier. * lib/strerror_r.c (strerror_r): Likewise. * m4/strerror.m4 (gl_FUNC_STRERROR): Split detection of 0 behavior... (gl_FUNC_STRERROR_0): ...into new macro. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Replace strerror_r if 0 is overridden. (gl_FUNC_STRERROR_R_WORKS): Avoid extra tests if 0 is broken. * modules/strerror-override (Files): Add strerror.m4. (configure.ac): Also provide override for 0 when needed. * doc/posix-functions/strerror.texi (strerror): Document this. * doc/posix-functions/perror.texi (perror): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
author Eric Blake <eblake@redhat.com>
date Tue, 21 Jun 2011 08:50:51 -0600
parents 69ac4e993bf3
children 8250f2777afc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15135
69ac4e993bf3 usleep: Move AC_LIBOBJ invocations to module description.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
1 # usleep.m4 serial 2
14079
97fc9a21a8fb maint: update almost all copyright ranges to include 2011
Jim Meyering <meyering@redhat.com>
parents: 12559
diff changeset
2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc.
12315
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
3 dnl This file is free software; the Free Software Foundation
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
4 dnl gives unlimited permission to copy and/or distribute it,
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
5 dnl with or without modifications, as long as this notice is preserved.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
6
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
7 dnl This macro intentionally does not check for select or nanosleep;
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
8 dnl both of those modules can require external libraries.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
9 AC_DEFUN([gl_FUNC_USLEEP],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
10 [
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
11 AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
12 dnl usleep was required in POSIX 2001, but dropped as obsolete in
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
13 dnl POSIX 2008; therefore, it is not always exposed in headers.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
14 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
15 AC_CHECK_FUNCS_ONCE([usleep])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
16 AC_CHECK_TYPE([useconds_t], [],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
17 [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
18 type if <sys/types.h> lacks this type.])])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
19 if test $ac_cv_func_usleep = no; then
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
20 HAVE_USLEEP=0
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
21 else
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
22 dnl POSIX allows implementations to reject arguments larger than
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
23 dnl 999999, but GNU guarantees it will work.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
24 AC_CACHE_CHECK([whether usleep allows large arguments],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
25 [gl_cv_func_usleep_works],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
26 [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
27 #include <unistd.h>
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
28 ]], [[return !!usleep (1000000);]])],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
29 [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
30 [gl_cv_func_usleep_works="guessing no"])])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
31 if test "$gl_cv_func_usleep_works" != yes; then
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
32 REPLACE_USLEEP=1
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
33 fi
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
34 fi
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
35 ])