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>
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.
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";