From 0261d33f8745765a829fe5d59cd4dc6534bcd1b3 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 29 Aug 2003 19:58:49 +0000 Subject: Update. 2003-08-29 Jakub Jelinek * libio/Makefile: Compile fputc.c, fputwc.c, freopen64.c, freopen.c, fseek.c, fseeko64.c, fseeko.c, ftello64.c, ftello.c, fwide.c, getc.c, getchar.c, getwc.c, getwchar.c, iofclose.c, iofflush.c, iofgetpos64.c, iofgetpos.c, iofgets.c, iofgetws.c, iofputs.c, iofputws.c, iofread.c, iofsetpos64.c, iofsetpos.c, ioftell.c, iofwrite.c, iogetdelim.c, iogetline.c, iogets.c, iogetwline.c, ioputs.c, ioseekoff.c, ioseekpos.c, iosetbuffer.c, iosetvbuf.c, ioungetc.c, ioungetwc.c, oldfileops.c, oldiofclose.c, oldiofgetpos64.c, oldiofgetpos.c, oldiofsetpos64.c, oldiofsetpos.c, peekc.c, putc.c, putchar.c, putwc.c, putwchar.c and rewind.c with exceptions. * sysdeps/generic/bits/stdio-lock.h (_IO_acquire_lock, _IO_release_lock): Define. * libio/fileops.c (_IO_new_file_underflow): Use it. * libio/fputc.c (fputc): Likewise. * libio/fputwc.c (fputwc): Likewise. * libio/freopen64.c (freopen64): * libio/freopen.c (freopen): Likewise. * libio/fseek.c (fseek): Likewise. * libio/fseeko64.c (fseeko64): Likewise. * libio/fseeko.c (fseeko): Likewise. * libio/ftello64.c (ftello64): Likewise. * libio/ftello.c (ftello): Likewise. * libio/fwide.c (fwide): Likewise. * libio/getc.c (_IO_getc): Likewise. * libio/getchar.c (getchar): Likewise. * libio/getwc.c (_IO_getwc): Likewise. * libio/getwchar.c (getwchar): Likewise. * libio/iofclose.c (_IO_new_fclose): * libio/iofflush.c (_IO_fflush): Likewise. * libio/iofgetpos64.c (_IO_new_fgetpos64): Likewise. * libio/iofgetpos.c (_IO_new_fgetpos): Likewise. * libio/iofgets.c (_IO_fgets): Likewise. * libio/iofgetws.c (fgetws): Likewise. * libio/iofputs.c (_IO_fputs): * libio/iofputws.c (_IO_fputs): Likewise. * libio/iofread.c (_IO_fread): Likewise. * libio/iofsetpos64.c (_IO_new_fsetpos64): Likewise. * libio/iofsetpos.c (_IO_new_fsetpos): Likewise. * libio/ioftell.c (_IO_ftell): Likewise. * libio/iofwrite.c (_IO_fwrite): Likewise. * libio/iogetdelim.c (_IO_getdelim): Likewise. * libio/iogets.c (_IO_gets): Likewise. * libio/ioputs.c (_IO_puts): Likewise. * libio/ioseekoff.c (_IO_seekoff): Likewise. * libio/ioseekpos.c (_IO_seekpos): Likewise. * libio/iosetbuffer.c (_IO_setbuffer): Likewise. * libio/iosetvbuf.c (_IO_setvbuf): Likewise. * libio/ioungetc.c (_IO_ungetc): Likewise. * libio/ioungetwc.c (ungetwc): Likewise. * libio/oldiofclose.c (_IO_old_fclose): Likewise. * libio/oldiofgetpos64.c (_IO_old_fgetpos64): Likewise. * libio/oldiofgetpos.c (_IO_old_fgetpos): Likewise. * libio/oldiofsetpos64.c (_IO_old_fsetpos64): Likewise. * libio/oldiofsetpos.c (_IO_old_fsetpos): Likewise. * libio/peekc.c (_IO_peekc_locked): Likewise. * libio/putc.c (_IO_putc): Likewise. * libio/putchar.c (putchar): Likewise. * libio/putwc.c (putwc): Likewise. * libio/putwchar.c (putwchar): Likewise. * libio/rewind.c (rewind): Likewise. * libio/wfileops.c (_IO_wfile_underflow): Likewise. --- ChangeLog | 64 ++++++++++++++++++++++++++++++++++ bits/stdio-lock.h | 11 +++++- libio/Makefile | 54 ++++++++++++++++++++++++++-- libio/fileops.c | 7 ++-- libio/fputc.c | 8 ++--- libio/fputwc.c | 8 ++--- libio/freopen.c | 6 ++-- libio/freopen64.c | 6 ++-- libio/fseek.c | 9 +++-- libio/fseeko.c | 8 ++--- libio/fseeko64.c | 8 ++--- libio/ftello.c | 8 ++--- libio/ftello64.c | 8 ++--- libio/fwide.c | 10 ++---- libio/getc.c | 9 +++-- libio/getchar.c | 9 ++--- libio/getwc.c | 9 +++-- libio/getwchar.c | 9 ++--- libio/iofclose.c | 6 ++-- libio/iofflush.c | 9 +++-- libio/iofgetpos.c | 8 ++--- libio/iofgetpos64.c | 8 ++--- libio/iofgets.c | 9 +++-- libio/iofgetws.c | 9 +++-- libio/iofputs.c | 6 ++-- libio/iofputws.c | 9 +++-- libio/iofread.c | 9 +++-- libio/iofsetpos.c | 9 +++-- libio/iofsetpos64.c | 9 +++-- libio/ioftell.c | 6 ++-- libio/iofwrite.c | 6 ++-- libio/iogetdelim.c | 8 ++--- libio/iogets.c | 9 ++--- libio/ioputs.c | 7 ++-- libio/ioseekoff.c | 8 ++--- libio/ioseekpos.c | 10 ++---- libio/iosetbuffer.c | 6 ++-- libio/iosetvbuf.c | 9 +++-- libio/ioungetc.c | 8 ++--- libio/ioungetwc.c | 9 +++-- libio/oldiofclose.c | 6 ++-- libio/oldiofgetpos.c | 9 +++-- libio/oldiofgetpos64.c | 9 +++-- libio/oldiofsetpos.c | 9 +++-- libio/oldiofsetpos64.c | 9 +++-- libio/peekc.c | 8 ++--- libio/putc.c | 9 +++-- libio/putchar.c | 9 ++--- libio/putwc.c | 9 +++-- libio/putwchar.c | 9 ++--- libio/rewind.c | 8 ++--- libio/wfileops.c | 7 ++-- nptl/ChangeLog | 2 +- nptl/sysdeps/pthread/bits/stdio-lock.h | 25 +++++++++++-- sysdeps/generic/bits/stdio-lock.h | 11 +++++- 55 files changed, 313 insertions(+), 254 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7388e2a4f3..5946d61b99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,67 @@ +2003-08-29 Jakub Jelinek + + * libio/Makefile: Compile fputc.c, fputwc.c, freopen64.c, freopen.c, + fseek.c, fseeko64.c, fseeko.c, ftello64.c, ftello.c, fwide.c, getc.c, + getchar.c, getwc.c, getwchar.c, iofclose.c, iofflush.c, iofgetpos64.c, + iofgetpos.c, iofgets.c, iofgetws.c, iofputs.c, iofputws.c, iofread.c, + iofsetpos64.c, iofsetpos.c, ioftell.c, iofwrite.c, iogetdelim.c, + iogetline.c, iogets.c, iogetwline.c, ioputs.c, ioseekoff.c, + ioseekpos.c, iosetbuffer.c, iosetvbuf.c, ioungetc.c, ioungetwc.c, + oldfileops.c, oldiofclose.c, oldiofgetpos64.c, oldiofgetpos.c, + oldiofsetpos64.c, oldiofsetpos.c, peekc.c, putc.c, putchar.c, putwc.c, + putwchar.c and rewind.c with exceptions. + * sysdeps/generic/bits/stdio-lock.h (_IO_acquire_lock, + _IO_release_lock): Define. + * libio/fileops.c (_IO_new_file_underflow): Use it. + * libio/fputc.c (fputc): Likewise. + * libio/fputwc.c (fputwc): Likewise. + * libio/freopen64.c (freopen64): + * libio/freopen.c (freopen): Likewise. + * libio/fseek.c (fseek): Likewise. + * libio/fseeko64.c (fseeko64): Likewise. + * libio/fseeko.c (fseeko): Likewise. + * libio/ftello64.c (ftello64): Likewise. + * libio/ftello.c (ftello): Likewise. + * libio/fwide.c (fwide): Likewise. + * libio/getc.c (_IO_getc): Likewise. + * libio/getchar.c (getchar): Likewise. + * libio/getwc.c (_IO_getwc): Likewise. + * libio/getwchar.c (getwchar): Likewise. + * libio/iofclose.c (_IO_new_fclose): + * libio/iofflush.c (_IO_fflush): Likewise. + * libio/iofgetpos64.c (_IO_new_fgetpos64): Likewise. + * libio/iofgetpos.c (_IO_new_fgetpos): Likewise. + * libio/iofgets.c (_IO_fgets): Likewise. + * libio/iofgetws.c (fgetws): Likewise. + * libio/iofputs.c (_IO_fputs): + * libio/iofputws.c (_IO_fputs): Likewise. + * libio/iofread.c (_IO_fread): Likewise. + * libio/iofsetpos64.c (_IO_new_fsetpos64): Likewise. + * libio/iofsetpos.c (_IO_new_fsetpos): Likewise. + * libio/ioftell.c (_IO_ftell): Likewise. + * libio/iofwrite.c (_IO_fwrite): Likewise. + * libio/iogetdelim.c (_IO_getdelim): Likewise. + * libio/iogets.c (_IO_gets): Likewise. + * libio/ioputs.c (_IO_puts): Likewise. + * libio/ioseekoff.c (_IO_seekoff): Likewise. + * libio/ioseekpos.c (_IO_seekpos): Likewise. + * libio/iosetbuffer.c (_IO_setbuffer): Likewise. + * libio/iosetvbuf.c (_IO_setvbuf): Likewise. + * libio/ioungetc.c (_IO_ungetc): Likewise. + * libio/ioungetwc.c (ungetwc): Likewise. + * libio/oldiofclose.c (_IO_old_fclose): Likewise. + * libio/oldiofgetpos64.c (_IO_old_fgetpos64): Likewise. + * libio/oldiofgetpos.c (_IO_old_fgetpos): Likewise. + * libio/oldiofsetpos64.c (_IO_old_fsetpos64): Likewise. + * libio/oldiofsetpos.c (_IO_old_fsetpos): Likewise. + * libio/peekc.c (_IO_peekc_locked): Likewise. + * libio/putc.c (_IO_putc): Likewise. + * libio/putchar.c (putchar): Likewise. + * libio/putwc.c (putwc): Likewise. + * libio/putwchar.c (putwchar): Likewise. + * libio/rewind.c (rewind): Likewise. + * libio/wfileops.c (_IO_wfile_underflow): Likewise. + 2003-08-29 Ulrich Drepper * signal/signal.h: sighold, sigrelse, sigignore, sigset were diff --git a/bits/stdio-lock.h b/bits/stdio-lock.h index b6eb98d921..d7c1db0132 100644 --- a/bits/stdio-lock.h +++ b/bits/stdio-lock.h @@ -1,5 +1,5 @@ /* Thread package specific definitions of stream lock type. Generic version. - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 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 @@ -45,5 +45,14 @@ __libc_lock_define_recursive (typedef, _IO_lock_t) #define _IO_cleanup_region_end(_doit) \ __libc_cleanup_region_end (_doit) +#if defined _LIBC && !defined NOT_IN_libc +# define _IO_acquire_lock(_fp) \ + _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp)); \ + _IO_flockfile (_fp) + +# define _IO_release_lock(_fp) \ + _IO_funlockfile (_fp); \ + _IO_cleanup_region_end (0) +#endif #endif /* bits/stdio-lock.h */ diff --git a/libio/Makefile b/libio/Makefile index ad2d5dda75..645448f9f1 100644 --- a/libio/Makefile +++ b/libio/Makefile @@ -75,10 +75,60 @@ CPPFLAGS += -D_IO_MTSAFE_IO endif # Support for exception handling. -CFLAGS-genops.c = $(exceptions) -CFLAGS-wgenops.c = $(exceptions) CFLAGS-fileops.c = $(exceptions) +CFLAGS-fputc.c = $(exceptions) +CFLAGS-fputwc.c = $(exceptions) +CFLAGS-freopen64.c = $(exceptions) +CFLAGS-freopen.c = $(exceptions) +CFLAGS-fseek.c = $(exceptions) +CFLAGS-fseeko64.c = $(exceptions) +CFLAGS-fseeko.c = $(exceptions) +CFLAGS-ftello64.c = $(exceptions) +CFLAGS-ftello.c = $(exceptions) +CFLAGS-fwide.c = $(exceptions) +CFLAGS-genops.c = $(exceptions) +CFLAGS-getc.c = $(exceptions) +CFLAGS-getchar.c = $(exceptions) +CFLAGS-getwc.c = $(exceptions) +CFLAGS-getwchar.c = $(exceptions) +CFLAGS-iofclose.c = $(exceptions) +CFLAGS-iofflush.c = $(exceptions) +CFLAGS-iofgetpos64.c = $(exceptions) +CFLAGS-iofgetpos.c = $(exceptions) +CFLAGS-iofgets.c = $(exceptions) +CFLAGS-iofgetws.c = $(exceptions) +CFLAGS-iofputs.c = $(exceptions) +CFLAGS-iofputws.c = $(exceptions) +CFLAGS-iofread.c = $(exceptions) +CFLAGS-iofsetpos64.c = $(exceptions) +CFLAGS-iofsetpos.c = $(exceptions) +CFLAGS-ioftell.c = $(exceptions) +CFLAGS-iofwrite.c = $(exceptions) +CFLAGS-iogetdelim.c = $(exceptions) +CFLAGS-iogetline.c = $(exceptions) +CFLAGS-iogets.c = $(exceptions) +CFLAGS-iogetwline.c = $(exceptions) +CFLAGS-ioputs.c = $(exceptions) +CFLAGS-ioseekoff.c = $(exceptions) +CFLAGS-ioseekpos.c = $(exceptions) +CFLAGS-iosetbuffer.c = $(exceptions) +CFLAGS-iosetvbuf.c = $(exceptions) +CFLAGS-ioungetc.c = $(exceptions) +CFLAGS-ioungetwc.c = $(exceptions) +CFLAGS-oldfileops.c = $(exceptions) +CFLAGS-oldiofclose.c = $(exceptions) +CFLAGS-oldiofgetpos64.c = $(exceptions) +CFLAGS-oldiofgetpos.c = $(exceptions) +CFLAGS-oldiofsetpos64.c = $(exceptions) +CFLAGS-oldiofsetpos.c = $(exceptions) +CFLAGS-peekc.c = $(exceptions) +CFLAGS-putc.c = $(exceptions) +CFLAGS-putchar.c = $(exceptions) +CFLAGS-putwc.c = $(exceptions) +CFLAGS-putwchar.c = $(exceptions) +CFLAGS-rewind.c = $(exceptions) CFLAGS-wfileops.c = $(exceptions) +CFLAGS-wgenops.c = $(exceptions) # XXX Do we need filedoalloc and wfiledoalloc? Others? CFLAGS-tst_putwc.c = -DOBJPFX=\"$(objpfx)\" diff --git a/libio/fileops.c b/libio/fileops.c index 0faf01f09f..4993630efc 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -562,16 +562,13 @@ _IO_new_file_underflow (fp) traditional Unix systems did this for stdout. stderr better not be line buffered. So we do just that here explicitly. --drepper */ - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdout); - _IO_flockfile (_IO_stdout); + _IO_acquire_lock (_IO_stdout); if ((_IO_stdout->_flags & (_IO_LINKED | _IO_NO_WRITES | _IO_LINE_BUF)) == (_IO_LINKED | _IO_LINE_BUF)) _IO_OVERFLOW (_IO_stdout, EOF); - _IO_funlockfile (_IO_stdout); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdout); #endif } diff --git a/libio/fputc.c b/libio/fputc.c index 5ef048ff41..8fd0b8066c 100644 --- a/libio/fputc.c +++ b/libio/fputc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1996, 1997, 1998, 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 @@ -35,11 +35,9 @@ fputc (c, fp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_putc_unlocked (c, fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/fputwc.c b/libio/fputwc.c index 600d7307c7..8c749435a0 100644 --- a/libio/fputwc.c +++ b/libio/fputwc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1993,1996,1997,1998,1999,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 @@ -35,13 +35,11 @@ fputwc (wc, fp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_fwide (fp, 1) < 0) result = WEOF; else result = _IO_putwc_unlocked (wc, fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/freopen.c b/libio/freopen.c index cae9d307cd..d94a5629f1 100644 --- a/libio/freopen.c +++ b/libio/freopen.c @@ -44,8 +44,7 @@ freopen (filename, mode, fp) CHECK_FILE (fp, NULL); if (!(fp->_flags & _IO_IS_FILEBUF)) return NULL; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (filename == NULL && _IO_fileno (fp) >= 0) { fd = __dup (_IO_fileno (fp)); @@ -84,7 +83,6 @@ freopen (filename, mode, fp) if (filename != NULL) free ((char *) filename); } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/freopen64.c b/libio/freopen64.c index d57994df05..f8da78c46e 100644 --- a/libio/freopen64.c +++ b/libio/freopen64.c @@ -44,8 +44,7 @@ freopen64 (filename, mode, fp) CHECK_FILE (fp, NULL); if (!(fp->_flags & _IO_IS_FILEBUF)) return NULL; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (filename == NULL && _IO_fileno (fp) >= 0) { fd = __dup (_IO_fileno (fp)); @@ -68,8 +67,7 @@ freopen64 (filename, mode, fp) if (filename != NULL) free ((char *) filename); } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; #else __set_errno (ENOSYS); diff --git a/libio/fseek.c b/libio/fseek.c index 831a4d497b..0515822e0e 100644 --- a/libio/fseek.c +++ b/libio/fseek.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,1995,1996,1997,1998,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 2002, 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 @@ -36,11 +37,9 @@ fseek (fp, offset, whence) { int result; CHECK_FILE (fp, -1); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_fseek (fp, offset, whence); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } libc_hidden_def (fseek) diff --git a/libio/fseeko.c b/libio/fseeko.c index 8087b957d2..d464c99502 100644 --- a/libio/fseeko.c +++ b/libio/fseeko.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993,1995,1996,1997,1998,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 @@ -36,10 +36,8 @@ fseeko (fp, offset, whence) { int result; CHECK_FILE (fp, -1); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_fseek (fp, offset, whence); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/fseeko64.c b/libio/fseeko64.c index 149e70190f..5dbfc45bf0 100644 --- a/libio/fseeko64.c +++ b/libio/fseeko64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993,1995,1996,1997,1998,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 @@ -38,11 +38,9 @@ fseeko64 (fp, offset, whence) #ifdef _G_LSEEK64 int result; CHECK_FILE (fp, -1); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_fseek (fp, offset, whence); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; #else __set_errno (ENOSYS); diff --git a/libio/ftello.c b/libio/ftello.c index e14866408f..4975a0bd73 100644 --- a/libio/ftello.c +++ b/libio/ftello.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995-2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995-2001, 2002, 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 @@ -37,16 +37,14 @@ ftello (fp) { _IO_off64_t pos; CHECK_FILE (fp, -1L); - _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp)) { if (fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (pos == _IO_pos_BAD) { #ifdef EIO diff --git a/libio/ftello64.c b/libio/ftello64.c index b2da11d133..0275c0ca35 100644 --- a/libio/ftello64.c +++ b/libio/ftello64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995-2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995-2001, 2002, 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 @@ -38,16 +38,14 @@ ftello64 (fp) #ifdef _G_LSEEK64 _IO_off64_t pos; CHECK_FILE (fp, -1L); - _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp)) { if (fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (pos == _IO_pos_BAD) { #ifdef EIO diff --git a/libio/fwide.c b/libio/fwide.c index c435e5ec17..21214a901b 100644 --- a/libio/fwide.c +++ b/libio/fwide.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 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 @@ -44,13 +44,9 @@ fwide (fp, mode) or the orientation already has been determined. */ return fp->_mode; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); - + _IO_acquire_lock (fp); result = _IO_fwide (fp, mode); - - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/getc.c b/libio/getc.c index a35dcb9f8d..9121e40c9d 100644 --- a/libio/getc.c +++ b/libio/getc.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 95, 96, 97, 98, 99 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 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 @@ -36,11 +37,9 @@ _IO_getc (fp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_getc_unlocked (fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/getchar.c b/libio/getchar.c index 8ce67fea52..d2560504a0 100644 --- a/libio/getchar.c +++ b/libio/getchar.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1996, 1997, 1998, 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 @@ -34,12 +34,9 @@ int getchar () { int result; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdin); - _IO_flockfile (_IO_stdin); + _IO_acquire_lock (_IO_stdin); result = _IO_getc_unlocked (_IO_stdin); - _IO_funlockfile (_IO_stdin); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdin); return result; } diff --git a/libio/getwc.c b/libio/getwc.c index 0617e2d713..656f1d80b6 100644 --- a/libio/getwc.c +++ b/libio/getwc.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 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 @@ -37,11 +38,9 @@ _IO_getwc (fp) { wint_t result; CHECK_FILE (fp, WEOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_getwc_unlocked (fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/getwchar.c b/libio/getwchar.c index 0298e22ead..a477b45eb0 100644 --- a/libio/getwchar.c +++ b/libio/getwchar.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1993,1996,1997,1998,1999,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 @@ -34,11 +34,8 @@ wint_t getwchar () { wint_t result; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdin); - _IO_flockfile (_IO_stdin); + _IO_acquire_lock (_IO_stdin); result = _IO_getwc_unlocked (_IO_stdin); - _IO_funlockfile (_IO_stdin); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdin); return result; } diff --git a/libio/iofclose.c b/libio/iofclose.c index eb01c88755..da0f9febe4 100644 --- a/libio/iofclose.c +++ b/libio/iofclose.c @@ -57,15 +57,13 @@ _IO_new_fclose (fp) if (fp->_IO_file_flags & _IO_IS_FILEBUF) INTUSE(_IO_un_link) ((struct _IO_FILE_plus *) fp); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (fp->_IO_file_flags & _IO_IS_FILEBUF) status = INTUSE(_IO_file_close_it) (fp); else status = fp->_flags & _IO_ERR_SEEN ? -1 : 0; _IO_FINISH (fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (fp->_mode > 0) { #if _LIBC diff --git a/libio/iofflush.c b/libio/iofflush.c index d1a76ccd4e..d2d57f57e0 100644 --- a/libio/iofflush.c +++ b/libio/iofflush.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,1995,1996,1997,1998,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 2002, 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 @@ -38,11 +39,9 @@ _IO_fflush (fp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_SYNC (fp) ? EOF : 0; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } } diff --git a/libio/iofgetpos.c b/libio/iofgetpos.c index 0c80b2fae5..aff39bbed4 100644 --- a/libio/iofgetpos.c +++ b/libio/iofgetpos.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995-2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995-2001, 2002, 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 @@ -38,8 +38,7 @@ _IO_new_fgetpos (fp, posp) _IO_off64_t pos; int result = 0; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp)) { @@ -72,8 +71,7 @@ _IO_new_fgetpos (fp, posp) posp->__state = fp->_wide_data->_IO_state; } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/iofgetpos64.c b/libio/iofgetpos64.c index 3ad7e11cd0..029556f8cd 100644 --- a/libio/iofgetpos64.c +++ b/libio/iofgetpos64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995-2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995-2001, 2002, 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 @@ -38,16 +38,14 @@ _IO_new_fgetpos64 (fp, posp) #ifdef _G_LSEEK64 _IO_off64_t pos; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp)) { if (fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (pos == _IO_pos_BAD) { /* ANSI explicitly requires setting errno to a positive value on diff --git a/libio/iofgets.c b/libio/iofgets.c index ea1d3ed53b..879cc975a3 100644 --- a/libio/iofgets.c +++ b/libio/iofgets.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 95, 96, 97, 98, 99, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2002, 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 @@ -40,8 +41,7 @@ _IO_fgets (buf, n, fp) CHECK_FILE (fp, NULL); if (n <= 0) return NULL; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); /* This is very tricky since a file descriptor may be in the non-blocking mode. The error flag doesn't mean much in this case. We return an error only when there is a new error. */ @@ -59,8 +59,7 @@ _IO_fgets (buf, n, fp) result = buf; } fp->_IO_file_flags |= old_error; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/iofgetws.c b/libio/iofgetws.c index 741bb49e6f..654c051a28 100644 --- a/libio/iofgetws.c +++ b/libio/iofgetws.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 95, 96, 97, 98, 99, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2001 + 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 @@ -40,8 +41,7 @@ fgetws (buf, n, fp) CHECK_FILE (fp, NULL); if (n <= 0) return NULL; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); /* This is very tricky since a file descriptor may be in the non-blocking mode. The error flag doesn't mean much in this case. We return an error only when there is a new error. */ @@ -58,7 +58,6 @@ fgetws (buf, n, fp) result = buf; } fp->_IO_file_flags |= old_error; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/iofputs.c b/libio/iofputs.c index 088fd5fd4f..b596a99213 100644 --- a/libio/iofputs.c +++ b/libio/iofputs.c @@ -37,13 +37,11 @@ _IO_fputs (str, fp) _IO_size_t len = strlen (str); int result = EOF; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if ((_IO_vtable_offset (fp) != 0 || _IO_fwide (fp, -1) == -1) && _IO_sputn (fp, str, len) == len) result = 1; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } libc_hidden_def (_IO_fputs) diff --git a/libio/iofputws.c b/libio/iofputws.c index c23156dceb..44e6005926 100644 --- a/libio/iofputws.c +++ b/libio/iofputws.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,1996,1997,1998,1999,2000 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 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 @@ -36,12 +37,10 @@ fputws (str, fp) _IO_size_t len = __wcslen (str); int result = EOF; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_fwide (fp, 1) == 1 && _IO_sputn (fp, (char *) str, len) == len) result = 1; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/iofread.c b/libio/iofread.c index 6eb99da4ab..c015bafacf 100644 --- a/libio/iofread.c +++ b/libio/iofread.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,1995,1997,1998,1999,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2002, 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 @@ -39,11 +40,9 @@ _IO_fread (buf, size, count, fp) CHECK_FILE (fp, 0); if (bytes_requested == 0) return 0; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); bytes_read = INTUSE(_IO_sgetn) (fp, (char *) buf, bytes_requested); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return bytes_requested == bytes_read ? count : bytes_read / size; } INTDEF(_IO_fread) diff --git a/libio/iofsetpos.c b/libio/iofsetpos.c index f3821e2fa5..a907b02a43 100644 --- a/libio/iofsetpos.c +++ b/libio/iofsetpos.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 1995, 1997-2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 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 @@ -36,8 +37,7 @@ _IO_new_fsetpos (fp, posp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_seekpos_unlocked (fp, posp->__pos, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD) { @@ -57,8 +57,7 @@ _IO_new_fsetpos (fp, posp) /* This is a stateful encoding, restore the state. */ fp->_wide_data->_IO_state = posp->__state; } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/iofsetpos64.c b/libio/iofsetpos64.c index 4746d720c3..5ef8104998 100644 --- a/libio/iofsetpos64.c +++ b/libio/iofsetpos64.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 1995, 1997-2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 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 @@ -37,8 +38,7 @@ _IO_new_fsetpos64 (fp, posp) #ifdef _G_LSEEK64 int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_seekpos_unlocked (fp, posp->__pos, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD) { @@ -58,8 +58,7 @@ _IO_new_fsetpos64 (fp, posp) /* This is a stateful encoding, safe the state. */ fp->_wide_data->_IO_state = posp->__state; } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; #else __set_errno (ENOSYS); diff --git a/libio/ioftell.c b/libio/ioftell.c index 589a2a274d..b991ef69ea 100644 --- a/libio/ioftell.c +++ b/libio/ioftell.c @@ -36,16 +36,14 @@ _IO_ftell (fp) { _IO_off64_t pos; CHECK_FILE (fp, -1L); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp)) { if (_IO_vtable_offset (fp) != 0 || fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (pos == _IO_pos_BAD) { #ifdef EIO diff --git a/libio/iofwrite.c b/libio/iofwrite.c index 6f0d273574..1f4331cc83 100644 --- a/libio/iofwrite.c +++ b/libio/iofwrite.c @@ -40,12 +40,10 @@ _IO_fwrite (buf, size, count, fp) CHECK_FILE (fp, 0); if (request == 0) return 0; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_vtable_offset (fp) != 0 || _IO_fwide (fp, -1) == -1) written = _IO_sputn (fp, (const char *) buf, request); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (written == request) return count; else diff --git a/libio/iogetdelim.c b/libio/iogetdelim.c index edc5228693..3d0c976f9c 100644 --- a/libio/iogetdelim.c +++ b/libio/iogetdelim.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1994,1996,1997,1998,2001,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 @@ -55,8 +55,7 @@ _IO_getdelim (lineptr, n, delimiter, fp) return -1; } CHECK_FILE (fp, -1); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_ferror_unlocked (fp)) { result = -1; @@ -120,8 +119,7 @@ _IO_getdelim (lineptr, n, delimiter, fp) result = cur_len; unlock_return: - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/iogets.c b/libio/iogets.c index 95e8368dbb..a901b8af9a 100644 --- a/libio/iogets.c +++ b/libio/iogets.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1996, 1997, 1998, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993,1996,1997,1998,2002,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 @@ -36,9 +36,7 @@ _IO_gets (buf) int ch; char *retval; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdin); - _IO_flockfile (_IO_stdin); + _IO_acquire_lock (_IO_stdin); ch = _IO_getc_unlocked (_IO_stdin); if (ch == EOF) { @@ -67,8 +65,7 @@ _IO_gets (buf) buf[count] = 0; retval = buf; unlock_return: - _IO_funlockfile (_IO_stdin); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdin); return retval; } diff --git a/libio/ioputs.c b/libio/ioputs.c index f878ea6b55..2f43e994e3 100644 --- a/libio/ioputs.c +++ b/libio/ioputs.c @@ -34,9 +34,7 @@ _IO_puts (str) { int result = EOF; _IO_size_t len = strlen (str); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdout); - _IO_flockfile (_IO_stdout); + _IO_acquire_lock (_IO_stdout); if ((_IO_vtable_offset (_IO_stdout) != 0 || _IO_fwide (_IO_stdout, -1) == -1) @@ -44,8 +42,7 @@ _IO_puts (str) && _IO_putc_unlocked ('\n', _IO_stdout) != EOF) result = len + 1; - _IO_funlockfile (_IO_stdout); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdout); return result; } diff --git a/libio/ioseekoff.c b/libio/ioseekoff.c index 9229166705..dd8a37fa40 100644 --- a/libio/ioseekoff.c +++ b/libio/ioseekoff.c @@ -81,12 +81,8 @@ _IO_seekoff (fp, offset, dir, mode) { _IO_off64_t retval; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); - + _IO_acquire_lock (fp); retval = _IO_seekoff_unlocked (fp, offset, dir, mode); - - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return retval; } diff --git a/libio/ioseekpos.c b/libio/ioseekpos.c index 37d32af340..4683ffe6c5 100644 --- a/libio/ioseekpos.c +++ b/libio/ioseekpos.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1997, 1998, 1999, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993,1997,1998,1999,2002,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 @@ -59,12 +59,8 @@ _IO_seekpos (fp, pos, mode) { _IO_off64_t retval; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); - + _IO_acquire_lock (fp); retval = _IO_seekpos_unlocked (fp, pos, mode); - - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return retval; } diff --git a/libio/iosetbuffer.c b/libio/iosetbuffer.c index 2497304076..d43d0ebca8 100644 --- a/libio/iosetbuffer.c +++ b/libio/iosetbuffer.c @@ -35,8 +35,7 @@ _IO_setbuffer (fp, buf, size) _IO_size_t size; { CHECK_FILE (fp, ); - _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); fp->_flags &= ~_IO_LINE_BUF; if (!buf) size = 0; @@ -44,8 +43,7 @@ _IO_setbuffer (fp, buf, size) if (_IO_vtable_offset (fp) == 0 && fp->_mode == 0 && _IO_CHECK_WIDE (fp)) /* We also have to set the buffer using the wide char function. */ (void) _IO_WSETBUF (fp, buf, size); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); } INTDEF(_IO_setbuffer) diff --git a/libio/iosetvbuf.c b/libio/iosetvbuf.c index 06d9f73fc4..7580230eb6 100644 --- a/libio/iosetvbuf.c +++ b/libio/iosetvbuf.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 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 @@ -40,8 +41,7 @@ _IO_setvbuf (fp, buf, mode, size) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); switch (mode) { case _IOFBF: @@ -96,8 +96,7 @@ _IO_setvbuf (fp, buf, mode, size) result = _IO_SETBUF (fp, buf, size) == NULL ? EOF : 0; unlock_return: - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } INTDEF(_IO_setvbuf) diff --git a/libio/ioungetc.c b/libio/ioungetc.c index d32359bd40..df746b526c 100644 --- a/libio/ioungetc.c +++ b/libio/ioungetc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,1996,1997,1998,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993,1996,1997,1998,2002,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 @@ -36,11 +36,9 @@ _IO_ungetc (c, fp) CHECK_FILE (fp, EOF); if (c == EOF) return EOF; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = INTUSE(_IO_sputbackc) (fp, (unsigned char) c); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/ioungetwc.c b/libio/ioungetwc.c index 1bff41256c..00d3e965b5 100644 --- a/libio/ioungetwc.c +++ b/libio/ioungetwc.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 1996-1999, 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1996, 1997, 1998, 1999, 2001, 2002, 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 @@ -35,14 +36,12 @@ ungetwc (c, fp) { int result; CHECK_FILE (fp, WEOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); _IO_fwide (fp, 1); if (c == WEOF) result = WEOF; else result = INTUSE(_IO_sputbackwc) (fp, c); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/oldiofclose.c b/libio/oldiofclose.c index 18db7b814f..3762279bdc 100644 --- a/libio/oldiofclose.c +++ b/libio/oldiofclose.c @@ -52,15 +52,13 @@ _IO_old_fclose (fp) if (fp->_IO_file_flags & _IO_IS_FILEBUF) INTUSE(_IO_un_link) ((struct _IO_FILE_plus *) fp); - _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (fp->_IO_file_flags & _IO_IS_FILEBUF) status = _IO_old_file_close_it (fp); else status = fp->_flags & _IO_ERR_SEEN ? -1 : 0; _IO_FINISH (fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (_IO_have_backup (fp)) INTUSE(_IO_free_backup_area) (fp); if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr) diff --git a/libio/oldiofgetpos.c b/libio/oldiofgetpos.c index 596c40599f..b00a5203e5 100644 --- a/libio/oldiofgetpos.c +++ b/libio/oldiofgetpos.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,95,96,97,98,99,2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 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 @@ -38,13 +39,11 @@ _IO_old_fgetpos (fp, posp) { _IO_off_t pos; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp)) pos -= fp->_IO_save_end - fp->_IO_save_base; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (pos == _IO_pos_BAD) { /* ANSI explicitly requires setting errno to a positive value on diff --git a/libio/oldiofgetpos64.c b/libio/oldiofgetpos64.c index 4a38c38e86..b3a4e0e83b 100644 --- a/libio/oldiofgetpos64.c +++ b/libio/oldiofgetpos64.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,95,96,97,98,99,2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 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 @@ -39,13 +40,11 @@ _IO_old_fgetpos64 (fp, posp) #ifdef _G_LSEEK64 _IO_off64_t pos; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp)) pos -= fp->_IO_save_end - fp->_IO_save_base; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); if (pos == _IO_pos_BAD) { /* ANSI explicitly requires setting errno to a positive value on diff --git a/libio/oldiofsetpos.c b/libio/oldiofsetpos.c index ce3bb12363..23ef565d20 100644 --- a/libio/oldiofsetpos.c +++ b/libio/oldiofsetpos.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,95,97,98,99,2000,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 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 @@ -37,8 +38,7 @@ _IO_old_fsetpos (fp, posp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_seekpos_unlocked (fp, posp->__pos, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD) { @@ -52,8 +52,7 @@ _IO_old_fsetpos (fp, posp) } else result = 0; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/oldiofsetpos64.c b/libio/oldiofsetpos64.c index 834f154c21..34758599a3 100644 --- a/libio/oldiofsetpos64.c +++ b/libio/oldiofsetpos64.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,95,97,98,99,2000,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 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 @@ -39,8 +40,7 @@ _IO_old_fsetpos64 (fp, posp) #ifdef _G_LSEEK64 int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); if (_IO_seekpos_unlocked (fp, posp->__pos, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD) { @@ -54,8 +54,7 @@ _IO_old_fsetpos64 (fp, posp) } else result = 0; - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; #else __set_errno (ENOSYS); diff --git a/libio/peekc.c b/libio/peekc.c index 95ba8aea0e..c829c5fbea 100644 --- a/libio/peekc.c +++ b/libio/peekc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993,1995,1996,1997,1998,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 @@ -36,10 +36,8 @@ _IO_peekc_locked (fp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_peekc_unlocked (fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } diff --git a/libio/putc.c b/libio/putc.c index 649574494f..db3aab0a57 100644 --- a/libio/putc.c +++ b/libio/putc.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,1995,1996,1997,1998,2002 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 1998, 2002, 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 @@ -28,11 +29,9 @@ _IO_putc (c, fp) { int result; CHECK_FILE (fp, EOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_putc_unlocked (c, fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } INTDEF(_IO_putc) diff --git a/libio/putchar.c b/libio/putchar.c index ac20727c58..5b1f292429 100644 --- a/libio/putchar.c +++ b/libio/putchar.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1991,1995,1996,1997,1998,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 @@ -26,12 +26,9 @@ putchar (c) int c; { int result; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdout); - _IO_flockfile (_IO_stdout); + _IO_acquire_lock (_IO_stdout); result = _IO_putc_unlocked (c, _IO_stdout); - _IO_funlockfile (_IO_stdout); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdout); return result; } diff --git a/libio/putwc.c b/libio/putwc.c index 33da712f7f..b43eb03969 100644 --- a/libio/putwc.c +++ b/libio/putwc.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,95,96,97,98,99,2002 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 1998, 1999, 2002, 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 @@ -26,11 +27,9 @@ putwc (wc, fp) { wint_t result; CHECK_FILE (fp, WEOF); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); result = _IO_putwc_unlocked (wc, fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); return result; } libc_hidden_def (putwc) diff --git a/libio/putwchar.c b/libio/putwchar.c index 56fec58aab..d211640f7d 100644 --- a/libio/putwchar.c +++ b/libio/putwchar.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 95, 96, 97, 98, 99 Free Software Foundation, Inc. +/* Copyright (C) 1991,95,96,97,98,99,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 @@ -24,11 +24,8 @@ putwchar (wc) wchar_t wc; { wint_t result; - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdout); - _IO_flockfile (_IO_stdout); + _IO_acquire_lock (_IO_stdout); result = _IO_putwc_unlocked (wc, _IO_stdout); - _IO_funlockfile (_IO_stdout); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdout); return result; } diff --git a/libio/rewind.c b/libio/rewind.c index e1bdc571e0..e77e7b5e85 100644 --- a/libio/rewind.c +++ b/libio/rewind.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,96,97,98,2002 Free Software Foundation, Inc. +/* Copyright (C) 1993,96,97,98,2002,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 @@ -33,11 +33,9 @@ rewind (fp) _IO_FILE *fp; { CHECK_FILE (fp, ); - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); - _IO_flockfile (fp); + _IO_acquire_lock (fp); _IO_rewind (fp); _IO_clearerr (fp); - _IO_funlockfile (fp); - _IO_cleanup_region_end (0); + _IO_release_lock (fp); } libc_hidden_def (rewind) diff --git a/libio/wfileops.c b/libio/wfileops.c index 569a0d7621..5292f4854f 100644 --- a/libio/wfileops.c +++ b/libio/wfileops.c @@ -217,16 +217,13 @@ _IO_wfile_underflow (fp) traditional Unix systems did this for stdout. stderr better not be line buffered. So we do just that here explicitly. --drepper */ - _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, - _IO_stdout); - _IO_flockfile (_IO_stdout); + _IO_acquire_lock (_IO_stdout); if ((_IO_stdout->_flags & (_IO_LINKED | _IO_NO_WRITES | _IO_LINE_BUF)) == (_IO_LINKED | _IO_LINE_BUF)) _IO_OVERFLOW (_IO_stdout, EOF); - _IO_funlockfile (_IO_stdout); - _IO_cleanup_region_end (0); + _IO_release_lock (_IO_stdout); #endif } diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 870216038b..3961b0cbcb 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -5,7 +5,7 @@ 2003-08-29 Jakub Jelinek - * tst-cancel.c (tf_sigwait, tf_sigwaitinfo, tf_sigtimedwait): Add + * tst-cancel4.c (tf_sigwait, tf_sigwaitinfo, tf_sigtimedwait): Add sigemptyset before sigaddset. Reported by jreiser@BitWagon.com. 2003-08-27 Ulrich Drepper diff --git a/nptl/sysdeps/pthread/bits/stdio-lock.h b/nptl/sysdeps/pthread/bits/stdio-lock.h index fbb14a1120..3bc3c06314 100644 --- a/nptl/sysdeps/pthread/bits/stdio-lock.h +++ b/nptl/sysdeps/pthread/bits/stdio-lock.h @@ -1,5 +1,5 @@ -/* Thread package specific definitions of stream lock type. Generic version. - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. +/* Thread package specific definitions of stream lock type. NPTL version. + Copyright (C) 2000, 2001, 2002, 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 @@ -85,5 +85,26 @@ typedef struct { int lock; int cnt; void *owner; } _IO_lock_t; #define _IO_cleanup_region_end(_doit) \ __libc_cleanup_region_end (_doit) +#if defined _LIBC && !defined NOT_IN_libc + +# ifdef __EXCEPTIONS +# define _IO_acquire_lock(_fp) \ + do { \ + auto inline __attribute__((always_inline)) void \ + _IO_acquire_lock_fct (int *p __attribute__ ((__unused__))) \ + { \ + if (((_fp)->_flags & _IO_USER_LOCK) == 0) \ + _IO_funlockfile (_fp); \ + } \ + int _IO_acquire_lock_dummy \ + __attribute__ ((cleanup (_IO_acquire_lock_fct))); \ + _IO_flockfile (_fp) + +# else +# define _IO_acquire_lock(_fp) _IO_acquire_lock_needs_exceptions_enabled +# endif +# define _IO_release_lock(_fp) ; } while (0) + +#endif #endif /* bits/stdio-lock.h */ diff --git a/sysdeps/generic/bits/stdio-lock.h b/sysdeps/generic/bits/stdio-lock.h index b6eb98d921..d7c1db0132 100644 --- a/sysdeps/generic/bits/stdio-lock.h +++ b/sysdeps/generic/bits/stdio-lock.h @@ -1,5 +1,5 @@ /* Thread package specific definitions of stream lock type. Generic version. - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 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 @@ -45,5 +45,14 @@ __libc_lock_define_recursive (typedef, _IO_lock_t) #define _IO_cleanup_region_end(_doit) \ __libc_cleanup_region_end (_doit) +#if defined _LIBC && !defined NOT_IN_libc +# define _IO_acquire_lock(_fp) \ + _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp)); \ + _IO_flockfile (_fp) + +# define _IO_release_lock(_fp) \ + _IO_funlockfile (_fp); \ + _IO_cleanup_region_end (0) +#endif #endif /* bits/stdio-lock.h */ -- cgit 1.4.1