X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ferror.c;h=5dbd4d726ee812ddedc5c7729c5960244d286cf2;hb=f7aee7431e94dcef216d52c775e006bb57471968;hp=66a48443130ace6031031bf83b72b0b849f04558;hpb=35f707281a6da6a5b65d680c83d82ff9fc03fa0e;p=gnulib.git diff --git a/lib/error.c b/lib/error.c index 66a484431..5dbd4d726 100644 --- a/lib/error.c +++ b/lib/error.c @@ -1,29 +1,28 @@ /* Error handler for noninteractive utilities - Copyright (C) 1990,91,92,93,94,95,96,97 Free Software Foundation, Inc. + Copyright (C) 1990-2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. Its master source is NOT part of + the C library, however. The master source lives in /gd/gnu/lib. - 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. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. - 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, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library 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. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ /* Written by David MacKenzie . */ #ifdef HAVE_CONFIG_H -#include +# include #endif #include @@ -50,8 +49,15 @@ void exit (); #include "error.h" +#ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +#endif +#if !HAVE_DECL_STRERROR_R +char *strerror_r (); +#endif + #ifndef _ -#define _(String) String +# define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program @@ -69,26 +75,28 @@ 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 +# define program_name program_invocation_name +# include /* 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 +# define error __error +# define error_at_line __error_at_line -#else +#else /* not _LIBC */ /* 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 (); -# endif +# ifdef HAVE_STRERROR_R +# define __strerror_r strerror_r # else +# if HAVE_STRERROR +# ifndef strerror /* On some systems, strerror is a macro */ +char *strerror (); +# endif +# else static char * private_strerror (errnum) int errnum; @@ -100,10 +108,10 @@ private_strerror (errnum) return _(sys_errlist[errnum]); return _("Unknown system error"); } -# define strerror private_strerror -# endif /* HAVE_STRERROR */ -#endif /* HAVE_STRERROR_R */ -#endif /* _LIBC */ +# define strerror private_strerror +# endif /* HAVE_STRERROR */ +# endif /* HAVE_STRERROR_R */ +#endif /* not _LIBC */ /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. @@ -112,7 +120,7 @@ private_strerror (errnum) /* VARARGS */ void -#if defined(VA_START) && __STDC__ +#if defined VA_START && __STDC__ error (int status, int errnum, const char *message, ...) #else error (status, errnum, message, va_alist) @@ -149,9 +157,16 @@ error (status, errnum, message, va_alist) ++error_message_count; if (errnum) { -#if defined HAVE_STRERROR_R || defined _LIBC +#if defined HAVE_STRERROR_R || _LIBC char errbuf[1024]; +# if HAVE_WORKING_STRERROR_R || _LIBC fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf)); +# else + /* Don't use __strerror_r's return value because on some systems + (at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */ + __strerror_r (errnum, errbuf, sizeof errbuf); + fprintf (stderr, ": %s", errbuf); +# endif #else fprintf (stderr, ": %s", strerror (errnum)); #endif @@ -167,7 +182,7 @@ error (status, errnum, message, va_alist) int error_one_per_line; void -#if defined(VA_START) && __STDC__ +#if defined VA_START && __STDC__ error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) #else @@ -224,9 +239,16 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist) ++error_message_count; if (errnum) { -#if defined HAVE_STRERROR_R || defined _LIBC +#if defined HAVE_STRERROR_R || _LIBC char errbuf[1024]; +# if HAVE_WORKING_STRERROR_R || _LIBC fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf)); +# else + /* Don't use __strerror_r's return value because on some systems + (at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */ + __strerror_r (errnum, errbuf, sizeof errbuf); + fprintf (stderr, ": %s", errbuf); +# endif #else fprintf (stderr, ": %s", strerror (errnum)); #endif @@ -239,8 +261,8 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist) #ifdef _LIBC /* Make the weak alias. */ -#undef error -#undef error_at_line +# undef error +# undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif