1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-18 23:42:00 +03:00
Files
gnulib/doc/posix-functions/strerror_r.texi
Eric Blake 23d3c1a267 strerror_r: fix OpenBSD behavior on out-of-range
On OpenBSD, strerror_r(1000,buf,19) gives "Unknown error: " rather
than "Unknown error: 100" while failing with ERANGE.  Admittedly,
this behavior is nice, since a truncated integer is misleading,
but all other platforms use maximal strings on ERANGE and we are
already replacing strerror_r for other reasons, so it is easier
to work around this behavior than to adjust the testsuite (how
do you quickly decide if the only reason that the ERANGE string
was shorter than maximal was because the implementation avoided
truncating an integer?).

This patch intentionally avoids dragging in the strnlen module.

* lib/strerror_r.c (strerror_r): Always use maximal string.
* doc/posix-functions/strerror_r.texi (strerror_r): Document it.

Signed-off-by: Eric Blake <eblake@redhat.com>
2011-06-21 11:06:12 -06:00

77 lines
2.4 KiB
Plaintext

@node strerror_r
@section @code{strerror_r}
@findex strerror_r
POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strerror_r.html}
Gnulib module: strerror_r-posix
Portability problems fixed by Gnulib:
@itemize
@item
This function is missing on some platforms:
NetBSD 3.0, HP-UX 11.23, IRIX 6.5, Solaris 9, mingw.
@item
glibc and Cygwin have an incompatible version of this function. The
POSIX compliant code
@smallexample
char *s = (strerror_r (err, buf, buflen) == 0 ? buf : NULL);
@end smallexample
is essentially equivalent to this code using the glibc function:
@smallexample
char *s = strerror_r (err, buf, buflen);
@end smallexample
@item
This function clobbers the @code{strerror} buffer on some platforms:
Cygwin 1.7.9.
@item
This function is sometimes not declared in @code{<string.h>} on some platforms:
glibc 2.8, OSF/1 5.1.
@item
The third argument is of type @code{int} instead of @code{size_t} on some
platforms:
AIX 5.1, OSF/1 5.1.
@item
When this function fails, it returns -1 and sets @code{errno}, instead of
returning the error number, on some platforms:
glibc 2.12 with @code{-D_POSIX_C_SOURCE=200112L}, AIX 6.1, OSF/1 5.1.
@item
When this function fails, it corrupts @code{errno}, on some platforms:
Solaris 10.
@item
This function does not support the error values that are specified by POSIX
but not defined by the system, on some platforms:
OpenBSD 4.0, OSF/1 5.1, NonStop Kernel, Cygwin 1.5.x.
@item
This function reports failure for @code{strerror_r(0, buf, len)},
although POSIX requires this to succeed, on some platforms:
FreeBSD 8.2.
@item
This function produces a different string for @code{0} than
@code{strerror} on some platforms:
MacOS X 10.5.
@item
This function always fails when the third argument is less than 80 on some
platforms:
HP-UX 11.31.
@item
When the buffer is too small and the value is in range, this function
does not fail, but instead truncates the result and returns 0 on some
platforms:
AIX 6.1, OSF/1 5.1.
@item
When the value is not in range or the buffer is too small, this
function fails to leave a NUL-terminated string in the buffer on some
platforms:
glibc 2.13, FreeBSD 8.2, Solaris 10.
@item
When the value is out of range but the buffer is too small, this
function does not always return the longest possible string on some
platforms:
OpenBSD 4.7.
@end itemize
Portability problems not fixed by Gnulib:
@itemize
@end itemize