diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-08-30 08:31:39 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-08-30 08:31:39 +0000 |
commit | 8c620ae0822b1c4439b42f4f7f01e5b6959f0574 (patch) | |
tree | f4842585fb9df365129514d61c8e01931095447e | |
parent | bc2e36893ac897047556babee5f7eb8eee7003aa (diff) | |
download | glibc-8c620ae0822b1c4439b42f4f7f01e5b6959f0574.tar.gz glibc-8c620ae0822b1c4439b42f4f7f01e5b6959f0574.tar.xz glibc-8c620ae0822b1c4439b42f4f7f01e5b6959f0574.zip |
Update.
2003-08-30 Ulrich Drepper <drepper@redhat.com> * misc/error.c (error): Disable cancellation handling around the actual output. The message should in any case be printed. (error_at_line): Likewise. * misc/error.h: Protect parameter names with leading __.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | misc/error.c | 26 | ||||
-rw-r--r-- | misc/error.h | 13 |
3 files changed, 39 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog index 4cb3b12c6f..1b979b7482 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-08-30 Ulrich Drepper <drepper@redhat.com> + + * misc/error.c (error): Disable cancellation handling around the + actual output. The message should in any case be printed. + (error_at_line): Likewise. + + * misc/error.h: Protect parameter names with leading __. + 2003-08-28 Carlos O'Donell <carlos@baldric.uwo.ca> * sysdeps/unix/sysv/linux/hppa/syscalls.list: Add semtimedop. diff --git a/misc/error.c b/misc/error.c index 17dda08814..de3b797a40 100644 --- a/misc/error.c +++ b/misc/error.c @@ -1,5 +1,5 @@ /* Error handler for noninteractive utilities - Copyright (C) 1990-1998, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1990-1998, 2000-2002, 2003 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. @@ -92,6 +92,8 @@ extern void __error_at_line (int status, int errnum, const char *file_name, # undef putc # define putc(c, fp) INTUSE(_IO_putc) (c, fp) +# include <bits/libc-lock.h> + #else /* not _LIBC */ # if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P @@ -255,6 +257,14 @@ error (status, errnum, message, va_alist) va_list args; #endif +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + fflush (stdout); #ifdef _LIBC _IO_flockfile (stderr); @@ -288,6 +298,9 @@ error (status, errnum, message, va_alist) #ifdef _LIBC _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif #endif } @@ -328,6 +341,14 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist) old_line_number = line_number; } +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + fflush (stdout); #ifdef _LIBC _IO_flockfile (stderr); @@ -371,6 +392,9 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist) #ifdef _LIBC _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif #endif } diff --git a/misc/error.h b/misc/error.h index da5cf2f16b..3638bc6e98 100644 --- a/misc/error.h +++ b/misc/error.h @@ -1,7 +1,6 @@ /* Declaration for error-reporting function - Copyright (C) 1995, 1996, 1997 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) 1995, 1996, 1997, 2003 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 Lesser General Public @@ -38,17 +37,17 @@ extern "C" { #endif -#if defined (__STDC__) && __STDC__ +#if defined __STDC__ && __STDC__ /* Print a message with `fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ -extern void error (int status, int errnum, const char *format, ...) +extern void error (int __status, int __errnum, const char *__format, ...) __attribute__ ((__format__ (__printf__, 3, 4))); -extern void error_at_line (int status, int errnum, const char *fname, - unsigned int lineno, const char *format, ...) +extern void error_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, ...) __attribute__ ((__format__ (__printf__, 5, 6))); /* If NULL, error will flush stdout, then print on stderr the program |