summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog64
-rw-r--r--bits/stdio-lock.h11
-rw-r--r--libio/Makefile54
-rw-r--r--libio/fileops.c7
-rw-r--r--libio/fputc.c8
-rw-r--r--libio/fputwc.c8
-rw-r--r--libio/freopen.c6
-rw-r--r--libio/freopen64.c6
-rw-r--r--libio/fseek.c9
-rw-r--r--libio/fseeko.c8
-rw-r--r--libio/fseeko64.c8
-rw-r--r--libio/ftello.c8
-rw-r--r--libio/ftello64.c8
-rw-r--r--libio/fwide.c10
-rw-r--r--libio/getc.c9
-rw-r--r--libio/getchar.c9
-rw-r--r--libio/getwc.c9
-rw-r--r--libio/getwchar.c9
-rw-r--r--libio/iofclose.c6
-rw-r--r--libio/iofflush.c9
-rw-r--r--libio/iofgetpos.c8
-rw-r--r--libio/iofgetpos64.c8
-rw-r--r--libio/iofgets.c9
-rw-r--r--libio/iofgetws.c9
-rw-r--r--libio/iofputs.c6
-rw-r--r--libio/iofputws.c9
-rw-r--r--libio/iofread.c9
-rw-r--r--libio/iofsetpos.c9
-rw-r--r--libio/iofsetpos64.c9
-rw-r--r--libio/ioftell.c6
-rw-r--r--libio/iofwrite.c6
-rw-r--r--libio/iogetdelim.c8
-rw-r--r--libio/iogets.c9
-rw-r--r--libio/ioputs.c7
-rw-r--r--libio/ioseekoff.c8
-rw-r--r--libio/ioseekpos.c10
-rw-r--r--libio/iosetbuffer.c6
-rw-r--r--libio/iosetvbuf.c9
-rw-r--r--libio/ioungetc.c8
-rw-r--r--libio/ioungetwc.c9
-rw-r--r--libio/oldiofclose.c6
-rw-r--r--libio/oldiofgetpos.c9
-rw-r--r--libio/oldiofgetpos64.c9
-rw-r--r--libio/oldiofsetpos.c9
-rw-r--r--libio/oldiofsetpos64.c9
-rw-r--r--libio/peekc.c8
-rw-r--r--libio/putc.c9
-rw-r--r--libio/putchar.c9
-rw-r--r--libio/putwc.c9
-rw-r--r--libio/putwchar.c9
-rw-r--r--libio/rewind.c8
-rw-r--r--libio/wfileops.c7
-rw-r--r--nptl/ChangeLog2
-rw-r--r--nptl/sysdeps/pthread/bits/stdio-lock.h25
-rw-r--r--sysdeps/generic/bits/stdio-lock.h11
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 <jakub@redhat.com>
+
+ * 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 <drepper@redhat.com>
* 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 <jakuB@redhat.com>
- * 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 <drepper@redhat.com>
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 */