changeset 1268:a6946b537568

update from fsf
author Jim Meyering <jim@meyering.net>
date Sun, 15 Mar 1998 08:11:02 +0000
parents c382cf24676b
children 740c468fa843
files lib/error.c lib/error.h
diffstat 2 files changed, 90 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/lib/error.c
+++ b/lib/error.c
@@ -1,10 +1,14 @@
-/* error.c -- error handler for noninteractive utilities
-   Copyright (C) 1990, 91, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
+/* Error handler for noninteractive utilities
+   Copyright (C) 1990,91,92,93,94,95,96,97 Free Software Foundation, Inc.
+
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
+   NOTE: The canonical source of this file is maintained with the GNU C Library.
+   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -12,13 +16,14 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* Written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
 
-#if HAVE_CONFIG_H
-# include <config.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
 #endif
 
 #include <stdio.h>
@@ -43,13 +48,12 @@
 void exit ();
 #endif
 
+#include "error.h"
+
 #ifndef _
-# define _(String) String
+#define _(String) String
 #endif
 
-/* Get prototypes for the functions defined here.  */
-#include <error.h>
-
 /* If NULL, error will flush stdout, then print on stderr the program
    name, a colon and a space.  Otherwise, error will call this
    function without parameters instead.  */
@@ -65,15 +69,21 @@
 #ifdef _LIBC
 /* In the GNU C library, there is a predefined variable for this.  */
 
-# define program_name program_invocation_name
-# include <errno.h>
+#define program_name program_invocation_name
+#include <errno.h>
 
-#else /* not _LIBC */
+/* In GNU libc we want do not want to use the common name `error' directly.
+   Instead make it a weak alias.  */
+#define error __error
+#define error_at_line __error_at_line
+
+#else
 
 /* The calling program should define program_name and set it to the
    name of the executing program.  */
 extern char *program_name;
 
+#ifndef HAVE_STRERROR_R
 # if HAVE_STRERROR
 #  ifndef strerror		/* On some systems, strerror is a macro */
 char *strerror ();
@@ -87,13 +97,13 @@
   extern int sys_nerr;
 
   if (errnum > 0 && errnum <= sys_nerr)
-    return sys_errlist[errnum];
+    return _(sys_errlist[errnum]);
   return _("Unknown system error");
 }
 #  define strerror private_strerror
 # endif	/* HAVE_STRERROR */
-
-#endif	/* not _LIBC */
+#endif	/* HAVE_STRERROR_R */
+#endif	/* _LIBC */
 
 /* Print the program name and error message MESSAGE, which is a printf-style
    format string with optional args.
@@ -138,7 +148,14 @@
 
   ++error_message_count;
   if (errnum)
-    fprintf (stderr, ": %s", strerror (errnum));
+    {
+#if defined HAVE_STRERROR_R || defined _LIBC
+      char errbuf[1024];
+      fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf));
+#else
+      fprintf (stderr, ": %s", strerror (errnum));
+#endif
+    }
   putc ('\n', stderr);
   fflush (stderr);
   if (status)
@@ -206,9 +223,24 @@
 
   ++error_message_count;
   if (errnum)
-    fprintf (stderr, ": %s", strerror (errnum));
+    {
+#if defined HAVE_STRERROR_R || defined _LIBC
+      char errbuf[1024];
+      fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf));
+#else
+      fprintf (stderr, ": %s", strerror (errnum));
+#endif
+    }
   putc ('\n', stderr);
   fflush (stderr);
   if (status)
     exit (status);
 }
+
+#ifdef _LIBC
+/* Make the weak alias.  */
+#undef error
+#undef error_at_line
+weak_alias (__error, error)
+weak_alias (__error_at_line, error_at_line)
+#endif
--- a/lib/error.h
+++ b/lib/error.h
@@ -1,10 +1,14 @@
-/* error.h -- declaration for error-reporting function
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+/* Declaration for error-reporting function
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
+   NOTE: The canonical source of this file is maintained with the GNU C Library.
+   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -12,26 +16,31 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-#ifndef ERROR_H_
-# define ERROR_H_
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
-# ifndef __attribute__
+#ifndef _ERROR_H
+#define _ERROR_H 1
+
+#ifndef __attribute__
 /* This feature is available in gcc versions 2.5 and later.  */
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
-#   define __attribute__(Spec) /* empty */
-#  endif
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+#  define __attribute__(Spec) /* empty */
+# endif
 /* The __-protected variants of `format' and `printf' attributes
    are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-#   define __format__ format
-#   define __printf__ printf
-#  endif
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __format__ format
+#  define __printf__ printf
 # endif
+#endif
 
-# if defined (__STDC__) && __STDC__
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#if defined (__STDC__) && __STDC__
 
 /* Print a message with `fprintf (stderr, FORMAT, ...)';
    if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
@@ -49,11 +58,11 @@
    function without parameters instead.  */
 extern void (*error_print_progname) (void);
 
-# else
+#else
 void error ();
 void error_at_line ();
 extern void (*error_print_progname) ();
-# endif
+#endif
 
 /* This variable is incremented each time `error' is called.  */
 extern unsigned int error_message_count;
@@ -62,4 +71,8 @@
    variable controls whether this mode is selected or not.  */
 extern int error_one_per_line;
 
-#endif /* not ERROR_H_ */
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* error.h */