aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-08-30 08:31:39 +0000
committerUlrich Drepper <drepper@redhat.com>2003-08-30 08:31:39 +0000
commit8c620ae0822b1c4439b42f4f7f01e5b6959f0574 (patch)
treef4842585fb9df365129514d61c8e01931095447e /misc
parentbc2e36893ac897047556babee5f7eb8eee7003aa (diff)
downloadglibc-8c620ae0822b1c4439b42f4f7f01e5b6959f0574.zip
glibc-8c620ae0822b1c4439b42f4f7f01e5b6959f0574.tar.gz
glibc-8c620ae0822b1c4439b42f4f7f01e5b6959f0574.tar.bz2
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 __.
Diffstat (limited to 'misc')
-rw-r--r--misc/error.c26
-rw-r--r--misc/error.h13
2 files changed, 31 insertions, 8 deletions
diff --git a/misc/error.c b/misc/error.c
index 17dda08..de3b797 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 da5cf2f..3638bc6 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