bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

coreutils workaround for OpenBSD 3.4 strerror_r bug


From: Paul Eggert
Subject: coreutils workaround for OpenBSD 3.4 strerror_r bug
Date: Wed, 04 Aug 2004 13:53:30 -0700
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Coreutils CVS "make check" failed on OpenBSD 3.4 due to a bug in the
OpenBSD strerror_r implementation.  I installed this patch to work
around the bug.  I hope the bug is fixed in OpenBSD CVS (they've
reworked strerror_r considerably), but the workaround actually
simplifies the code a bit so it's a win anyway.

2004-08-04  Paul Eggert  <address@hidden>

        * error.c: Work around bug in OpenBSD 3.4 sterror_r: it
        sometimes returns a positive errno value even when it succeeds.
        (print_errno_message) [!LIBC]: Fall back on strerror if
        __strerror_r fails.

Index: error.c
===================================================================
RCS file: /home/eggert/coreutils/cu/lib/error.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -p -u -r1.32 -r1.33
--- error.c     28 Sep 2003 08:09:28 -0000      1.32
+++ error.c     4 Aug 2004 19:35:24 -0000       1.33
@@ -1,5 +1,5 @@
 /* Error handler for noninteractive utilities
-   Copyright (C) 1990-1998, 2000-2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1990-1998, 2000-2002, 2003, 2004 Free Software Foundation, 
Inc.
    This file is part of the GNU C Library.
 
    This program is free software; you can redistribute it and/or modify
@@ -106,7 +106,7 @@ extern char *program_name;
 static void
 print_errno_message (int errnum)
 {
-  char const *s;
+  char const *s = NULL;
 
 #if defined HAVE_STRERROR_R || _LIBC
   char errbuf[1024];
@@ -115,15 +115,11 @@ print_errno_message (int errnum)
 # else
   if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
     s = errbuf;
-  else
-    s = 0;
 # endif
-#else
-  s = strerror (errnum);
 #endif
 
 #if !_LIBC
-  if (! s)
+  if (! s && ! (s = strerror (errnum)))
     s = _("Unknown system error");
 #endif
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]