2006-08-14  Eric Blake
<ebb9@byu.net>

	[BZ #3044]
	* misc/error.h: Assume C89 or better.
	* misc/error.c: Likewise.
This commit is contained in:
Ulrich Drepper 2006-08-21 20:03:52 +00:00
parent 3997b7c413
commit 240c62a7e7
3 changed files with 21 additions and 117 deletions

View File

@ -1,3 +1,9 @@
2006-08-14 Eric Blake <ebb9@byu.net>
[BZ #3044]
* misc/error.h: Assume C89 or better.
* misc/error.c: Likewise.
2006-08-21 Ulrich Drepper <drepper@redhat.com> 2006-08-21 Ulrich Drepper <drepper@redhat.com>
[BZ #3040] [BZ #3040]

View File

@ -23,35 +23,19 @@
# include <config.h> # include <config.h>
#endif #endif
#include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <libintl.h> #include <stdlib.h>
#include <string.h>
#ifdef _LIBC #ifdef _LIBC
# include <libintl.h>
# include <stdbool.h> # include <stdbool.h>
# include <stdint.h> # include <stdint.h>
# include <wchar.h> # include <wchar.h>
# define mbsrtowcs __mbsrtowcs # define mbsrtowcs __mbsrtowcs
#endif #endif
#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
# if __STDC__
# include <stdarg.h>
# define VA_START(args, lastarg) va_start(args, lastarg)
# else
# include <varargs.h>
# define VA_START(args, lastarg) va_start(args)
# endif
#else
# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
#endif
#if STDC_HEADERS || _LIBC
# include <stdlib.h>
# include <string.h>
#else
void exit ();
#endif
#include "error.h" #include "error.h"
#ifndef _ #ifndef _
@ -61,11 +45,7 @@ void exit ();
/* If NULL, error will flush stdout, then print on stderr the program /* If NULL, error will flush stdout, then print on stderr the program
name, a colon and a space. Otherwise, error will call this name, a colon and a space. Otherwise, error will call this
function without parameters instead. */ function without parameters instead. */
void (*error_print_progname) ( void (*error_print_progname) (void);
#if __STDC__ - 0
void
#endif
);
/* This variable is incremented each time `error' is called. */ /* This variable is incremented each time `error' is called. */
unsigned int error_message_count; unsigned int error_message_count;
@ -111,27 +91,6 @@ extern char *program_name;
# if HAVE_STRERROR_R || defined strerror_r # if HAVE_STRERROR_R || defined strerror_r
# define __strerror_r strerror_r # define __strerror_r strerror_r
# else
# if HAVE_STRERROR
# 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 (int errnum)
{
extern char *sys_errlist[];
extern int sys_nerr;
if (errnum > 0 && errnum <= sys_nerr)
return _(sys_errlist[errnum]);
return _("Unknown system error");
}
# define strerror private_strerror
# endif /* HAVE_STRERROR */
# endif /* HAVE_STRERROR_R || defined strerror_r */ # endif /* HAVE_STRERROR_R || defined strerror_r */
#endif /* not _LIBC */ #endif /* not _LIBC */
@ -166,15 +125,13 @@ print_errno_message (int errnum)
#endif #endif
} }
#ifdef VA_START
static void static void
error_tail (int status, int errnum, const char *message, va_list args) error_tail (int status, int errnum, const char *message, va_list args)
{ {
# if HAVE_VPRINTF || _LIBC #if _LIBC
# if _LIBC
if (_IO_fwide (stderr, 0) > 0) if (_IO_fwide (stderr, 0) > 0)
{ {
# define ALLOCA_LIMIT 2000 # define ALLOCA_LIMIT 2000
size_t len = strlen (message) + 1; size_t len = strlen (message) + 1;
wchar_t *wmessage = NULL; wchar_t *wmessage = NULL;
mbstate_t st; mbstate_t st;
@ -237,47 +194,32 @@ error_tail (int status, int errnum, const char *message, va_list args)
free (wmessage); free (wmessage);
} }
else else
# endif #endif
vfprintf (stderr, message, args); vfprintf (stderr, message, args);
# else
_doprnt (message, args, stderr);
# endif
va_end (args); va_end (args);
++error_message_count; ++error_message_count;
if (errnum) if (errnum)
print_errno_message (errnum); print_errno_message (errnum);
# if _LIBC #if _LIBC
__fxprintf (NULL, "\n"); __fxprintf (NULL, "\n");
# else #else
putc ('\n', stderr); putc ('\n', stderr);
# endif #endif
fflush (stderr); fflush (stderr);
if (status) if (status)
exit (status); exit (status);
} }
#endif
/* Print the program name and error message MESSAGE, which is a printf-style /* Print the program name and error message MESSAGE, which is a printf-style
format string with optional args. format string with optional args.
If ERRNUM is nonzero, print its corresponding system error message. If ERRNUM is nonzero, print its corresponding system error message.
Exit with status STATUS if it is nonzero. */ Exit with status STATUS if it is nonzero. */
/* VARARGS */
void void
#if defined VA_START && __STDC__
error (int status, int errnum, const char *message, ...) error (int status, int errnum, const char *message, ...)
#else
error (status, errnum, message, va_alist)
int status;
int errnum;
char *message;
va_dcl
#endif
{ {
#ifdef VA_START
va_list args; va_list args;
#endif
#if defined _LIBC && defined __libc_ptf_call #if defined _LIBC && defined __libc_ptf_call
/* We do not want this call to be cut short by a thread /* We do not want this call to be cut short by a thread
@ -302,20 +244,8 @@ error (status, errnum, message, va_alist)
#endif #endif
} }
#ifdef VA_START va_start (args, message);
VA_START (args, message);
error_tail (status, errnum, message, args); error_tail (status, errnum, message, args);
#else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
++error_message_count;
if (errnum)
print_errno_message (errnum);
putc ('\n', stderr);
fflush (stderr);
if (status)
exit (status);
#endif
#ifdef _LIBC #ifdef _LIBC
_IO_funlockfile (stderr); _IO_funlockfile (stderr);
@ -330,22 +260,10 @@ error (status, errnum, message, va_alist)
int error_one_per_line; int error_one_per_line;
void void
#if defined VA_START && __STDC__
error_at_line (int status, int errnum, const char *file_name, error_at_line (int status, int errnum, const char *file_name,
unsigned int line_number, const char *message, ...) unsigned int line_number, const char *message, ...)
#else
error_at_line (status, errnum, file_name, line_number, message, va_alist)
int status;
int errnum;
const char *file_name;
unsigned int line_number;
char *message;
va_dcl
#endif
{ {
#ifdef VA_START
va_list args; va_list args;
#endif
if (error_one_per_line) if (error_one_per_line)
{ {
@ -393,20 +311,8 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist)
file_name, line_number); file_name, line_number);
#endif #endif
#ifdef VA_START va_start (args, message);
VA_START (args, message);
error_tail (status, errnum, message, args); error_tail (status, errnum, message, args);
#else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
++error_message_count;
if (errnum)
print_errno_message (errnum);
putc ('\n', stderr);
fflush (stderr);
if (status)
exit (status);
#endif
#ifdef _LIBC #ifdef _LIBC
_IO_funlockfile (stderr); _IO_funlockfile (stderr);

View File

@ -1,5 +1,5 @@
/* Declaration for error-reporting function /* Declaration for error-reporting function
Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc. Copyright (C) 1995, 1996, 1997, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -37,8 +37,6 @@
extern "C" { extern "C" {
#endif #endif
#if defined __STDC__ && __STDC__
/* Print a message with `fprintf (stderr, FORMAT, ...)'; /* Print a message with `fprintf (stderr, FORMAT, ...)';
if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ If STATUS is nonzero, terminate the program with `exit (STATUS)'. */
@ -55,12 +53,6 @@ extern void error_at_line (int __status, int __errnum, const char *__fname,
function without parameters instead. */ function without parameters instead. */
extern void (*error_print_progname) (void); extern void (*error_print_progname) (void);
#else
void error ();
void error_at_line ();
extern void (*error_print_progname) ();
#endif
/* This variable is incremented each time `error' is called. */ /* This variable is incremented each time `error' is called. */
extern unsigned int error_message_count; extern unsigned int error_message_count;