[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
misc/error.c: sync from gnulib
From: |
Jim Meyering |
Subject: |
misc/error.c: sync from gnulib |
Date: |
Fri, 06 Dec 2002 09:15:59 +0100 |
Here are the changes to make the libc version of error.c
the same as the one in gnulib.
The main change is to factor out the new function, print_errno_message.
We include unlocked-io.h (from gnulib) to let single-threaded applications
on non-GNU systems take advantage of unencumbered I/O functions.
2002-12-06 Jim Meyering <address@hidden>
Merge in changes from gnulib.
* misc/error.c [_LIBC]: Include <libintl.h>
[!_LIBC]: Include "gettext.h".
[!_LIBC]: Include unlocked-io.h.
2001-10-20 Paul Eggert <address@hidden>
* error.c (strerror_r): Do not declare unless !_LIBC.
Do not check for HAVE_DECL_STRERROR_R missing unless STRERROR_R_CHAR_P.
Use strerror_r that is only a macro, even if it is not a function.
(strerror): Check for HAVE_DECL_STRERROR before declaring.
(private_strerror): Use prototypes, not old-style function definition.
(print_errno_message): New function.
Support the POSIX 'int'-flavored strerror_r, as well as the traditional
char*-flavored one.
(error_tail, error, error_at_line): Use it.
Index: misc/error.c
===================================================================
RCS file: /cvs/libc/misc/error.c,v
retrieving revision 1.30
diff -u -p -u -p -r1.30 error.c
--- misc/error.c 3 Mar 2002 19:41:28 -0000 1.30
+++ misc/error.c 6 Dec 2002 08:09:39 -0000
@@ -25,7 +25,13 @@
#endif
#include <stdio.h>
-#include <libintl.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "gettext.h"
+#endif
+
#ifdef _LIBC
# include <wchar.h>
# define mbsrtowcs __mbsrtowcs
@@ -53,6 +59,10 @@ void exit ();
#include "error.h"
+#if !_LIBC
+# include "unlocked-io.h"
+#endif
+
#ifndef _
# define _(String) String
#endif
@@ -88,7 +98,7 @@ extern void __error_at_line (int status,
# define error_at_line __error_at_line
# ifdef USE_IN_LIBIO
-# include <libio/iolibio.h>
+# include <libio/iolibio.h>
# define fflush(s) INTUSE(_IO_fflush) (s)
# undef putc
# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
@@ -96,21 +106,30 @@ extern void __error_at_line (int status,
#else /* not _LIBC */
+# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
+# ifndef HAVE_DECL_STRERROR_R
+"this configure-time declaration test was not run"
+# endif
+char *strerror_r ();
+# endif
+
/* The calling program should define program_name and set it to the
name of the executing program. */
extern char *program_name;
-# ifdef HAVE_STRERROR_R
+# if HAVE_STRERROR_R || defined strerror_r
# define __strerror_r strerror_r
# else
# if HAVE_STRERROR
-# ifndef strerror /* On some systems, strerror is a macro */
+# ifndef HAVE_DECL_STRERROR
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRERROR
char *strerror ();
# endif
# else
static char *
-private_strerror (errnum)
- int errnum;
+private_strerror (int errnum)
{
extern char *sys_errlist[];
extern int sys_nerr;
@@ -121,9 +140,43 @@ private_strerror (errnum)
}
# define strerror private_strerror
# endif /* HAVE_STRERROR */
-# endif /* HAVE_STRERROR_R */
+# endif /* HAVE_STRERROR_R || defined strerror_r */
#endif /* not _LIBC */
+static void
+print_errno_message (int errnum)
+{
+ char const *s;
+
+#if defined HAVE_STRERROR_R || _LIBC
+ char errbuf[1024];
+# if STRERROR_R_CHAR_P || _LIBC
+ s = __strerror_r (errnum, errbuf, sizeof errbuf);
+# else
+ if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
+ s = errbuf;
+ else
+ s = 0;
+# endif
+#else
+ s = strerror (errnum);
+#endif
+
+#if !_LIBC
+ if (! s)
+ s = _("Unknown system error");
+#endif
+
+#if _LIBC && USE_IN_LIBIO
+ if (_IO_fwide (stderr, 0) > 0)
+ {
+ __fwprintf (stderr, L": %s", s);
+ return;
+ }
+#endif
+
+ fprintf (stderr, ": %s", s);
+}
#ifdef VA_START
static void
@@ -180,25 +233,12 @@ error_tail (int status, int errnum, cons
++error_message_count;
if (errnum)
- {
-#if defined HAVE_STRERROR_R || _LIBC
- char errbuf[1024];
- char *s = __strerror_r (errnum, errbuf, sizeof errbuf);
+ print_errno_message (errnum);
# if _LIBC && USE_IN_LIBIO
- if (_IO_fwide (stderr, 0) > 0)
- __fwprintf (stderr, L": %s", s);
- else
-# endif
- fprintf (stderr, ": %s", s);
-#else
- fprintf (stderr, ": %s", strerror (errnum));
-#endif
- }
-#if _LIBC && USE_IN_LIBIO
if (_IO_fwide (stderr, 0) > 0)
putwc (L'\n', stderr);
else
-#endif
+# endif
putc ('\n', stderr);
fflush (stderr);
if (status)
@@ -255,7 +295,7 @@ error (status, errnum, message, va_alist
++error_message_count;
if (errnum)
- fprintf (stderr, ": %s", strerror (errnum));
+ print_errno_message (errnum);
putc ('\n', stderr);
fflush (stderr);
if (status)
@@ -346,7 +386,7 @@ error_at_line (status, errnum, file_name
++error_message_count;
if (errnum)
- fprintf (stderr, ": %s", strerror (errnum));
+ print_errno_message (errnum);
putc ('\n', stderr);
fflush (stderr);
if (status)
- misc/error.c: sync from gnulib,
Jim Meyering <=