summaryrefslogtreecommitdiff
path: root/lib/error.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1998-03-15 08:11:02 +0000
committerJim Meyering <jim@meyering.net>1998-03-15 08:11:02 +0000
commit12f49aa1ae70ade6156c12be744d9a3c15ee0e31 (patch)
tree4d4fbc5adc0008166a78d11d98f8461eed49372c /lib/error.c
parentf31f7e1c754d244981148e445d7a1f532186f593 (diff)
downloadcoreutils-12f49aa1ae70ade6156c12be744d9a3c15ee0e31.tar.xz
update from fsf
Diffstat (limited to 'lib/error.c')
-rw-r--r--lib/error.c76
1 files changed, 54 insertions, 22 deletions
diff --git a/lib/error.c b/lib/error.c
index e5f1daba4..66a484431 100644
--- 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 @@ unsigned int error_message_count;
#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 @@ private_strerror (errnum)
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 (status, errnum, message, va_alist)
++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_at_line (status, errnum, file_name, line_number, message, va_alist)
++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