diff options
author | Jim Meyering <jim@meyering.net> | 1998-03-15 08:11:02 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1998-03-15 08:11:02 +0000 |
commit | 35f707281a6da6a5b65d680c83d82ff9fc03fa0e (patch) | |
tree | 7c86e48c6804085dfc8bad9ed69b391e087b136d /lib/error.c | |
parent | 63c0ef798cf54b06bd0d193798d4d8e69e7f34a0 (diff) | |
download | gnulib-35f707281a6da6a5b65d680c83d82ff9fc03fa0e.tar.gz |
update from fsf
Diffstat (limited to 'lib/error.c')
-rw-r--r-- | lib/error.c | 76 |
1 files changed, 54 insertions, 22 deletions
diff --git a/lib/error.c b/lib/error.c index e5f1daba46..66a4844313 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 |