diff options
Diffstat (limited to 'libc/misc/error')
-rw-r--r-- | libc/misc/error/Makefile.in | 19 | ||||
-rw-r--r-- | libc/misc/error/err.c | 49 | ||||
-rw-r--r-- | libc/misc/error/error.c | 67 |
3 files changed, 72 insertions, 63 deletions
diff --git a/libc/misc/error/Makefile.in b/libc/misc/error/Makefile.in index 2977256d9..c529e955e 100644 --- a/libc/misc/error/Makefile.in +++ b/libc/misc/error/Makefile.in @@ -1,24 +1,21 @@ # Makefile for uClibc # -# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org> +# Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> # # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC:=error.c err.c +CSRC := error.c err.c -MISC_ERROR_DIR:=$(top_srcdir)libc/misc/error -MISC_ERROR_OUT:=$(top_builddir)libc/misc/error +MISC_ERROR_DIR := $(top_srcdir)libc/misc/error +MISC_ERROR_OUT := $(top_builddir)libc/misc/error -MISC_ERROR_SRC:=$(patsubst %.c,$(MISC_ERROR_DIR)/%.c,$(CSRC)) -MISC_ERROR_OBJ:=$(patsubst %.c,$(MISC_ERROR_OUT)/%.o,$(CSRC)) +MISC_ERROR_SRC := $(patsubst %.c,$(MISC_ERROR_DIR)/%.c,$(CSRC)) +MISC_ERROR_OBJ := $(patsubst %.c,$(MISC_ERROR_OUT)/%.o,$(CSRC)) -libc-a-y+=$(MISC_ERROR_OBJ) -libc-so-y+=$(MISC_ERROR_OBJ:.o=.os) +libc-y += $(MISC_ERROR_OBJ) -libc-multi-y+=$(MISC_ERROR_SRC) - -objclean-y+=misc_error_objclean +objclean-y += misc_error_objclean misc_error_objclean: $(RM) $(MISC_ERROR_OUT)/*.{o,os} diff --git a/libc/misc/error/err.c b/libc/misc/error/err.c index 43fe60cc6..00e74ce61 100644 --- a/libc/misc/error/err.c +++ b/libc/misc/error/err.c @@ -5,9 +5,6 @@ * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details. */ -#define vfprintf __vfprintf - -#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -22,6 +19,18 @@ #warning REMINDER: Deal with wide oriented stderr case. #endif +libc_hidden_proto(vwarn) +libc_hidden_proto(vwarnx) +libc_hidden_proto(verr) +libc_hidden_proto(verrx) + +libc_hidden_proto(fprintf) +libc_hidden_proto(vfprintf) +libc_hidden_proto(__xpg_strerror_r) +libc_hidden_proto(exit) +libc_hidden_proto(vfprintf) +libc_hidden_proto(stderr) + static void vwarn_work(const char *format, va_list args, int showerr) { /* 0123 45678 9 a b*/ @@ -34,7 +43,7 @@ static void vwarn_work(const char *format, va_list args, int showerr) f = fmt + 11; /* At 11. */ if (showerr) { f -= 4; /* At 7. */ - __xpg_strerror_r_internal(errno, buf, sizeof(buf)); + __xpg_strerror_r(errno, buf, sizeof(buf)); } __STDIO_AUTO_THREADLOCK(stderr); @@ -49,68 +58,68 @@ static void vwarn_work(const char *format, va_list args, int showerr) __STDIO_AUTO_THREADUNLOCK(stderr); } -void attribute_hidden __vwarn(const char *format, va_list args) +void vwarn(const char *format, va_list args) { vwarn_work(format, args, 1); } -strong_alias(__vwarn,vwarn) +libc_hidden_def(vwarn) void warn(const char *format, ...) { va_list args; va_start(args, format); - __vwarn(format, args); + vwarn(format, args); va_end(args); } -void attribute_hidden __vwarnx(const char *format, va_list args) +void vwarnx(const char *format, va_list args) { vwarn_work(format, args, 0); } -strong_alias(__vwarnx,vwarnx) +libc_hidden_def(vwarnx) void warnx(const char *format, ...) { va_list args; va_start(args, format); - __vwarnx(format, args); + vwarnx(format, args); va_end(args); } -void attribute_hidden __verr(int status, const char *format, va_list args) +void verr(int status, const char *format, va_list args) { - __vwarn(format, args); - __exit(status); + vwarn(format, args); + exit(status); } -strong_alias(__verr,verr) +libc_hidden_def(verr) void attribute_noreturn err(int status, const char *format, ...) { va_list args; va_start(args, format); - __verr(status, format, args); + verr(status, format, args); /* This should get optimized away. We'll leave it now for safety. */ /* The loop is added only to keep gcc happy. */ while(1) va_end(args); } -void attribute_hidden __verrx(int status, const char *format, va_list args) +void verrx(int status, const char *format, va_list args) { - __vwarnx(format, args); - __exit(status); + vwarnx(format, args); + exit(status); } -strong_alias(__verrx,verrx) +libc_hidden_def(verrx) void attribute_noreturn errx(int status, const char *format, ...) { va_list args; va_start(args, format); - __verrx(status, format, args); + verrx(status, format, args); /* This should get optimized away. We'll leave it now for safety. */ /* The loop is added only to keep gcc happy. */ while(1) diff --git a/libc/misc/error/error.c b/libc/misc/error/error.c index b51177e35..3e44a01ee 100644 --- a/libc/misc/error/error.c +++ b/libc/misc/error/error.c @@ -1,50 +1,54 @@ /* Error handler for noninteractive utilities - Copyright (C) 1990-1998, 2000, 2001 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. + Copyright (C) 1990-1998, 2000-2004, 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. 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. + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. 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 - Library General Public License for more details. + Lesser General Public License for more details. - 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. */ + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; 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>. */ /* Adjusted slightly by Erik Andersen <andersen@uclibc.org> */ -#define strerror __strerror -#define vfprintf __vfprintf -#define fflush __fflush - #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> -#include "error.h" - -extern int __putc(int c, FILE *stream) attribute_hidden; +#include <error.h> + +libc_hidden_proto(strcmp) +libc_hidden_proto(strerror) +libc_hidden_proto(fprintf) +libc_hidden_proto(exit) +libc_hidden_proto(putc) +libc_hidden_proto(vfprintf) +libc_hidden_proto(fflush) +libc_hidden_proto(fputc) +libc_hidden_proto(__fputc_unlocked) +libc_hidden_proto(stdout) +libc_hidden_proto(stderr) /* This variable is incremented each time `error' is called. */ -unsigned int error_message_count; +unsigned int error_message_count = 0; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; /* 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. */ -void (*error_print_progname) (void) = NULL; - +/* void (*error_print_progname) (void) = NULL; */ +extern __typeof(error) __error attribute_hidden; void __error (int status, int errnum, const char *message, ...) { va_list args; @@ -58,11 +62,12 @@ void __error (int status, int errnum, const char *message, ...) if (errnum) { fprintf (stderr, ": %s", strerror (errnum)); } - __putc ('\n', stderr); + putc ('\n', stderr); if (status) - __exit (status); + exit (status); } +extern __typeof(error_at_line) __error_at_line attribute_hidden; void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { @@ -73,7 +78,7 @@ void __error_at_line (int status, int errnum, const char *file_name, static unsigned int old_line_number; if (old_line_number == line_number && - (file_name == old_file_name || !__strcmp (old_file_name, file_name))) + (file_name == old_file_name || !strcmp (old_file_name, file_name))) /* Simply return and print nothing. */ return; @@ -94,13 +99,11 @@ void __error_at_line (int status, int errnum, const char *file_name, if (errnum) { fprintf (stderr, ": %s", strerror (errnum)); } - __putc ('\n', stderr); + putc ('\n', stderr); if (status) - __exit (status); + exit (status); } -/* Use the weaks here in an effort at controlling namespace pollution */ -#undef error -#undef error_at_line -weak_alias (__error, error) -weak_alias (__error_at_line, error_at_line) +/* psm: keep this weak, too many use this in common code */ +weak_alias(__error,error) +strong_alias(__error_at_line,error_at_line) |