m4/strerror_r.m4


Log

Author Commit Date CI Message
Eric Blake 79d4e75d 2011-06-07T20:49:04 strerror_r-posix: fix on MacOS MacOS X 10.5 strerror(0) is "Unknown error: 0", which is not distinguished from "Unknown error: -1" for out-of-range. Worse, strerror_r(0,,) is "Undefined error: 0", although strerror_r for all other out-of-range values matches strerror. * m4/strerror.m4 (gl_FUNC_STRERROR): Flush out MacOS bug. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R_WORKS): Likewise, and fix logic bug. * lib/strerror_r.c (strerror_r): Fix the bug. * lib/strerror.c (strerror): Likewise. * doc/posix-functions/strerror_r.texi (strerror_r): Document the problem. * doc/posix-functions/strerror.texi (strerror): Likewise. * doc/posix-functions/perror.texi (perror): Likewise. * tests/test-strerror.c (main): Enhance test. * tests/test-strerror_r.c (main): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
Bruno Haible 3bc888d2 2011-06-08T12:27:31 strerror_r-posix: Tweaks. * m4/strerror.m4 (gl_FUNC_STRERROR): Omit the code that tests gl_cv_func_strerror_r_works if gl_FUNC_STRERROR_R_WORKS is not present. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R_WORKS): Fix AC_CACHE_CHECK message. Move gl_HEADER_STRING_H_DEFAULTS invocation from here... (gl_FUNC_STRERROR_R): ... to here. (gl_PREREQ_STRERROR_R): Test for __xpg_strerror_r.
Eric Blake 4018d9e0 2011-06-06T17:59:01 strerror_r-posix: work around cygwin 1.7.9 Cygwin __xpg_strerror_r clobbers strerror, until cygwin 1.7.10; in this case, we must replace strerror, but there was nothing in strerror.m4 finding fault with cygwin's native strerror. Solve this by splitting strerror_r.m4 into two parts, one for probing for the strerror_r bug, and one for replacing strerror_r based on the presence of bugs unrelated to signature issues; that way, the 'strerror' module in isolation will not replace strerror, but if strerror_r is in use for any other reason, then the two use separate buffers. Note that cygwin's strerror is thread-safe while the gnulib replacement is not; but this is no worse than any other platform where strerror is not thread-safe; in a single-threaded program, the difference is not observable, and in a multi-threaded program, you really shouldn't be using strerror in the first place. Also note that this ends up replacing glibc 2.13 strerror as it deems __xpg_strerror_r broken on that platform, which isn't technically necessary for strerror, but doesn't hurt too much. Meanwhile, glibc 2.14 fixed __xpg_strerror_r, and strerror is not replaced in that scenario. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Split... (gl_FUNC_STRERROR_R_WORKS): ...into new macro, to detect Cygwin bug without replacing strerror_r. * m4/strerror.m4 (gl_FUNC_STRERROR): Replace strerror if strerror_r is buggy, but without requiring strerror_r compilation. * doc/posix-functions/strerror_r.texi (strerror_r): Fix docs. Signed-off-by: Eric Blake <eblake@redhat.com>
Bruno Haible 87b0e84c 2011-05-25T00:59:48 strerror_r-posix: Respect rules for use of AC_LIBOBJ. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Move AC_LIBOBJ and gl_PREREQ_STRERROR_R invocations from here... * modules/strerror_r-posix (configure.ac): ... to here.
Eric Blake 179ecbe2 2011-05-20T17:45:13 strerror_r: avoid corrupting errno on Solaris On Solaris, a non-zero return was also reflected into errno. Leaving errno unchanged is a useful feature worth guaranteeing. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Check for Solaris behavior. * doc/posix-functions/strerror_r.texi (strerror_r): Document it. Signed-off-by: Eric Blake <eblake@redhat.com>
Eric Blake ec03cccf 2011-05-20T17:33:16 strerror_r: avoid compiler warning A couple of copy-and-paste issues led to a compiler warning during configure, detected on at least Solaris. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Don't return a char*. Signed-off-by: Eric Blake <eblake@redhat.com>
Bruno Haible f99411b3 2011-05-19T20:57:21 strerror_r: Avoid clobbering the strerror buffer when possible. * lib/strerror.c: Define _NETBSD_SOURCE. Include <nl_types.h>. (sys_nerr, sys_errlist): New declarations. (strerror_r): Be careful not to clobber the strerror buffer on NetBSD, HP-UX, native Win32, IRIX, and 32-bit Solaris. * m4/strerror_r.m4 (gl_PREREQ_STRERROR_R): Test whether catgets exists.
Bruno Haible 4fe68d41 2011-05-19T20:45:59 strerror_r: Fix test failure on mingw. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Don't define EXTEND_STRERROR_R. * lib/strerror_r.c (strerror_r): Test the various GNULIB_defined_* macros from errno.in.h instead.
Eric Blake 1608fbc0 2011-05-18T18:16:59 strerror: enforce POSIX ruling on strerror(0) http://austingroupbugs.net/view.php?id=382 requires that strerror(0) succeed, but FreeBSD reports "Unknown error: 0" and fails with EINVAL. * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE): Expose BSD bug. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Likewise. * lib/strerror_r.c (rpl_strerror_r): Work around it. * doc/posix-functions/strerror.texi (strerror): Document it. * doc/posix-functions/strerror_r.texi (strerror_r): Likewise. * tests/test-strerror.c (main): Strengthen test. * tests/test-strerror_r.c (main): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
Eric Blake cda784e7 2011-02-05T12:15:59 strerror_r-posix: port to cygwin * lib/strerror_r.c (strerror_r) [__CYGWIN__]: Add cygwin implementation. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Adjust comment. * tests/test-strerror_r.c (main): Fix test. * doc/posix-functions/strerror_r.texi (strerror_r): Document the issue. Signed-off-by: Eric Blake <eblake@redhat.com>
Jim Meyering d60f3b0c 2011-01-01T20:17:23 maint: update almost all copyright ranges to include 2011 Run the new "make update-copyright" rule.
Bruno Haible 1f8c872f 2010-12-06T22:57:23 Put more information about failed tests into the test return codes. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Change test program so that it returns an enumerated value (0, 1, 2, 3, 4, ...). * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Likewise. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Likewise. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Likewise. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * m4/intdiv0.m4 (gt_INTDIV0): Likewise. * m4/isapipe.m4 (gl_PREREQ_ISAPIPE): Likewise. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Likewise. * m4/putenv.m4 (gl_FUNC_PUTENV): Likewise. * m4/sleep.m4 (gl_FUNC_SLEEP): Likewise. * m4/stdint.m4 (gl_STDINT_H): Likewise. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Change test program so that it returns a bit mask. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Likewise. * m4/chown.m4 (gl_FUNC_CHOWN_FOLLOWS_SYMLINK): Likewise. * m4/dup2.m4 (gl_FUNC_DUP2): Likewise. * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Likewise. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Likewise. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Likewise. * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Likewise. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Likewise. * m4/iconv.m4 (AM_ICONV_LINK): Likewise. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN_UTF): Likewise. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Likewise. * m4/isnanf.m4 (gl_ISNANF_WORKS): Likewise. * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Likewise. * m4/ldexpl.m4 (gl_FUNC_LDEXPL_WORKS): Likewise. * m4/link.m4 (gl_FUNC_LINK): Likewise. * m4/linkat.m4 (gl_FUNC_LINKAT): Likewise. * m4/mbrlen.m4 (gl_MBRLEN_RETVAL): Likewise. * m4/mbrtowc.m4 (gl_MBRTOWC_RETVAL): Likewise. * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): Likewise. * m4/memchr.m4 (gl_FUNC_MEMCHR): Likewise. * m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise. * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Likewise. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Likewise. * m4/mktime.m4 (AC_FUNC_MKTIME): Likewise. * m4/open.m4 (gl_FUNC_OPEN): Likewise. * m4/poll.m4 (gl_FUNC_POLL): Likewise. * m4/popen.m4 (gl_FUNC_POPEN): Likewise. * m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_LONG_DOUBLE, gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_A, gl_PRINTF_DIRECTIVE_F, gl_PRINTF_DIRECTIVE_LS, gl_PRINTF_PRECISION): Likewise. * m4/regex.m4 (gl_REGEX): Likewise. * m4/rename.m4 (gl_FUNC_RENAME): Likewise. * m4/rmdir.m4 (gl_FUNC_RMDIR): Likewise. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Likewise. * m4/stat.m4 (gl_FUNC_STAT): Likewise. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Likewise. * m4/strsignal.m4 (gl_FUNC_STRSIGNAL): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/symlink.m4 (gl_FUNC_SYMLINK): Likewise. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Likewise. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Likewise. * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Likewise. * m4/unlink.m4 (gl_FUNC_UNLINK): Likewise. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Likewise. * m4/utimes.m4 (gl_FUNC_UTIMES): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Likewise. (gl_FLOATTYPE_SIGN_LOCATION): Change test program so that it returns an enumerated value. * m4/acl.m4 (gl_ACL_GET_FILE): Use "if ... return 1; return 0;" style.
Bruno Haible 93d8411f 2010-11-30T21:44:04 strerror_r-posix: Fix autoconf test. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Fix typo.
Bruno Haible 18384947 2010-11-11T13:15:28 New module 'strerror_r-posix'. * lib/string.in.h (strerror_r): New declaration. * lib/strerror_r.c: New file. * m4/strerror_r.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Check for the declaration of strerror_r. (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_STRERROR_R, HAVE_DECL_STRERROR_R, REPLACE_STRERROR_R. * modules/strerror_r-posix: New file. * modules/string (Makefile.am): Substitute GNULIB_STRERROR_R, HAVE_DECL_STRERROR_R, REPLACE_STRERROR_R. * doc/posix-functions/strerror_r.texi: Mention the new module and the portability problems.
Paul Eggert 82ff49b5 2006-08-21T06:11:26 Add and change modules to make it easier for coreutils to use gnulib-tool. * lib/cycle-check.h: Include <stdint.h> unconditionally, since we now assume the stdint module. Do not include inttypes.h. * lib/fsusage.h: Likewise. * lib/getndelim2.c: Likewise. * lib/human.h: Likewise. * lib/inttostr.h: Likewise. * lib/obstack.c: Likewise. * lib/regex_internal.h: Likewise. * lib/tempname.c: Likewise. * lib/utimecmp.c: Likewise. * lib/xstrtol.h: Likewise. * lib/stat_.h: Fix typo: HAVE_FUNC_LSTAT -> HAVE_LSTAT. * lib/strtoimax.c: Adjust to macro name changes in Autoconf, e.g., HAVE_LONG_LONG -> HAVE_LONG_LONG_INT. * lib/xtime.h: Likewise. Remove files that are no longer needed by their respective modules. * m4/obstack.m4: Remove. * m4/strerror_r.m4: Remove. * m4/uint32_t.m4: Remove. * m4/uintptr_t.m4: Remove. * m4/ullong_max.m4: Remove. * m4/xstrtoimax.m4: Remove. * m4/xstrtoumax.m4: Remove. * cycle-check.m4 (gl_CYCLE_CHECK): Do not require gl_AC_TYPE_UINTMAX_T, gl_STRUCT_DEV_INO, or gl_SAME_INODE, since gnulib dependencies now capture this. * cycle-check.m4 (gl_CYCLE_CHECK): Do not use AC_LIBSOURCES, since gnulib modules now do this. * fsusage.m4 (gl_FSUSAGE): Likewise. * human.m4 (gl_HUMAN): Likewise. * inttostr.m4 (gl_INTTOSTR): Likewise. * xstrtol.m4 (gl_XSTRTOL): Likewise. * filemode.m4 (gl_FILEMODE): Require AC_STRUCT_ST_DM_MODE. * filemode.m4 (gl_PREREQ_FSUSAGE_EXTRA): Do not require gl_AC_TYPE_INTMAX_T or gl_AC_TYPE_UINTMAX_T, since we now require stdint. * human.m4 (gl_HUMAN): Likewise. * inttostr.m4 (gl_PREREQ_INTTOSTR): Likewise. * mkstemp.m4 (gl_PREREQ_TEMPNAME): Likewise. * strtoimax.m4 (gl_PREREQ_STRTOIMAX): Likewise. * strtoumax.m4 (gl_PREREQ_STRTOUMAX): Likewise. * xstrtol (gl_XSTRTOL): Likewise. * gethrxtime.m4 (gl_XTIME): gl_AC_TYPE_LONG_LONG -> AC_TYPE_LONG_LONG_INT. * strtoimax.m4 (gl_PREREQ_STRTOIMAX): Likewise. * strtoll.m4 (gl_FUNC_STRTOLL): Likewise. * strtoull.m4 (gl_FUNC_STRTOULL): Likewise, for unsigned long. * strtoumax.m4 (gl_PREREQ_STRTOUMAX): Likewise. * human.m4 (gl_HUMAN): Do not require AM_STDBOOL_H since we depend on stdbool. * xstrtol.m4 (gl_PREREQ_XSTRTOL_H, gl_PREREQ_XSTRTOL): Remove. (gl_PREREQ_XSTRTOUL): Remove. * ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Check for hasmntopt. * posixver.m4: Fix comment since head -1 now works even in POSIX mode. * modules/backupfile (Files): Remove m4/d-ino.m4. (Depends-on): Add d-ino. * modules/cycle-check (Depends-on): Add stdint. (lib_SOURCES): Add cycle-check.h. * modules/d-ino: New module. * modules/d-type: New module. * modules/error (Files): Remove m4/strerror_r.m4. * modules/filemode (Files): Add m4/st_dm_mode.m4. * modules/fsuage (Files): Remove m4/ulonglong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. (Depends-on): Add stdint. (lib_SOURCES): Add fsusage.h. * modules/getcwd (Files): Remove d-ino.m4. (Depends-on): Add d-ino. * modules/getndelim2 (Depends-on): Add stdint. * modules/glob (Files): Remove m4/d-type.m4. (Depends-on): Add d-type. * modules/host-os: New module. * modules/human (Files): Remove m4/ulonglong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. * Depends-on: Add stdint. (lib_SOURCES): Add human.h. * modules/inttostr (Files): Remove m4/intmax_t.m4, m4/inttostr.m4, m4/inttypes_h.m4, m4/longlong.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4. (Depends-on): Add stdint. (EXTRA_DIST): Add inttostr.h. * modules/lchmod: New module. * modules/link-follow: New module. * modules/mkdir-p (Files): Remove lib/lchmod.h, m4/lchmod.m4. (Depends-on): Add lchmod. * modules/mkstemp (Files): Remove m4/ulonglong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. (Depends-on): Add stdint. * modules/obstack (Files): Remove m4/inttypes_h.m4, m4/obstack.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4. (Depends-on): Add stdint. (configure.ac): Change gl_OBSTACK to AC_FUNC_OBSTACK. * modules/perl: New module. * modules/regex (Depends-on): Add stdint. * modules/rmdir-errno: New module. * modules/strtoimax (Files): Remove m4/stdint_h.m4, m4/inttypes_h.m4, m4/intmax_t.m4. (Depends-on): Add stdint. * modules/strtoumax (Files): Remove m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. (Depends-on): Add stdint. * modules/unlink-busy: New module. * modules/utimecmp (Depends-on): Add stdint. * modules/uptime: New module. * modules/winsz-ioctl: New module. * modules/winsz-termios: New module. * modules/xnanosleep (Depends-on): Add nanosleep. * modules/ullong_max: Remove. * modules/xstrtoimax (Files): Remove m4/xstrtoimax.m4. (configure.ac): Remove gl_XSTRTOIMAX; no action needed now. * modules/xstrtol (Files): Remove m4/ulonglong.m4, m4/longlong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4, m4/intmax_t.m4. (Depends-on): Add inttypes. (lib_SOURCES): Add xstrtol.h. * modules/xstrtoumax (Files): Remove m4/xstrtoumax.m4. (configure.ac): Remove gl_XSTRTOUMAX; no action needed now. * MODULES.html.sh: Move 'assert' into the assert section. Move 'dummy' into the linking section. Remove ullong_max. Add section for compatibility checks for POSIX:2001 functions, and put d-ino, d-type, link-follow, rmdir-errno, unlink-busy, winsz-ioctl, and winsz-termios into it. Add lchmod. Add top-level Misc section and put host-os, perl, and uptime into it.
Bruno Haible 69906f2e 2006-04-24T11:30:53 Apply a fix from Eric Blake that already went into autoconf.
Paul Eggert 44d7c1c1 2005-01-23T08:06:57 Use an all-permissive copyright notice, recommended by RMS.
Jim Meyering 2513f0b7 2001-10-21T07:49:13 Add copyright notice, as nontrivial m4 files are supposed to have them these days. (AC_FUNC_STRERROR_R): Always do char* test, so that it gets cached. Merge changes from latest Autoconf CVS. Rename ac_cv_func_strerror_r_works to ac_cv_func_strerror_r_char_p, and rename HAVE_WORKING_STRERROR_R to STRERROR_R_CHAR_P, since POSIX decided to standardize on the int flavor of strerror_r.
Jim Meyering 6fe8d749 2001-09-17T21:44:03 Use AC_DEFINE rather than AC_DEFINE_UNQUOTED, whenever the right hand side need not be expanded by the shell.
Jim Meyering 65431da6 2000-07-10T11:30:50 Mirror the correction made in autoconf.
Jim Meyering 8616a155 2000-07-06T05:22:55 Include <ctype.h> for use of isalpha.
Jim Meyering a77f28a3 2000-07-06T05:20:15 (AC_FUNC_STRERROR_R): Pass a reasonably large buffer to strerror_r.
Jim Meyering 6b397a21 2000-06-24T21:04:44 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.
Jim Meyering 5c28b65b 2000-06-24T14:03:10 check for decl unconditionally
Jim Meyering b8809156 2000-06-24T12:05:08 Revive this file -- to try out an experimental version of AC_FUNC_STRERROR_R that may work even on BeOS, a system for which strerror does return char*, but which lacks a conveniently accessible declaration of the function.
Jim Meyering d262569f 2000-05-28T16:48:25 .
Jim Meyering 912ce237 2000-01-15T07:07:41 tweak comment
Jim Meyering 5ae77ce5 2000-01-08T17:53:21 *** empty log message ***
Jim Meyering 24552d14 2000-01-08T16:31:29 *** empty log message ***
Jim Meyering daceb50a 2000-01-08T16:30:49 (jm_FUNC_STRERROR_R): New file/macro.