Mercurial > hg > octave-nkf > gnulib-hg
changeset 14879:7900fd3c88e4
strerror: work around FreeBSD bug
Breaking strerror away from strerror_r re-exposed the FreeBSD
strerror(0) bug.
* lib/strerror.c (strerror): Special case 0.
Reported by Bruno Haible.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | Eric Blake <eblake@redhat.com> |
---|---|
date | Mon, 06 Jun 2011 15:16:26 -0600 |
parents | 293a9a1292a9 |
children | 608708e78fec |
files | ChangeLog lib/strerror.c |
diffstat | 2 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-06-06 Eric Blake <eblake@redhat.com> + strerror: work around FreeBSD bug + * lib/strerror.c (strerror): Special case 0. + Reported by Bruno Haible. + strerror-override: avoid bloating errno module * modules/errno (Files, configure.ac): Move replacement strings... * modules/strerror-override: ...to new module.
--- a/lib/strerror.c +++ b/lib/strerror.c @@ -45,10 +45,22 @@ if (msg) return (char *) msg; + /* FreeBSD rejects 0; see http://austingroupbugs.net/view.php?id=382. */ + if (n) + msg = strerror (n); + else + { + int saved_errno = errno; + errno = 0; + msg = strerror (n); + if (errno) + msg = "Success"; + errno = saved_errno; + } + /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. */ - msg = strerror (n); if (!msg || !*msg) { static char const fmt[] = "Unknown error %d";