diff options
author | DJ Delorie <dj@redhat.com> | 2005-04-16 21:49:14 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2005-04-16 21:49:14 +0000 |
commit | 7b6f628627fd678e69558bdc8e4f2bd62e56ec0c (patch) | |
tree | e931c698496bce7259c498112a3d3ad431201820 /libiberty/fopen_unlocked.c | |
parent | 5a49dfd0ac779c6d2148f7fd4dd3b357f841877a (diff) | |
download | gdb-7b6f628627fd678e69558bdc8e4f2bd62e56ec0c.zip gdb-7b6f628627fd678e69558bdc8e4f2bd62e56ec0c.tar.gz gdb-7b6f628627fd678e69558bdc8e4f2bd62e56ec0c.tar.bz2 |
merge from gcc
Diffstat (limited to 'libiberty/fopen_unlocked.c')
-rw-r--r-- | libiberty/fopen_unlocked.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/libiberty/fopen_unlocked.c b/libiberty/fopen_unlocked.c index b193dfd..8f9f300 100644 --- a/libiberty/fopen_unlocked.c +++ b/libiberty/fopen_unlocked.c @@ -20,6 +20,14 @@ Boston, MA 02111-1307, USA. */ /* +@deftypefn Extension void unlock_stream (FILE * @var{stream}) + +If the OS supports it, ensure that the supplied stream is setup to +avoid any multi-threaded locking. Otherwise leave the @code{FILE} +pointer unchanged. If the @var{stream} is @code{NULL} do nothing. + +@end deftypefn + @deftypefn Extension FILE * fopen_unlocked (const char *@var{path}, const char * @var{mode}) Opens and returns a @code{FILE} pointer via @code{fopen}. If the @@ -59,14 +67,29 @@ unchanged. #include "libiberty.h" -FILE * -fopen_unlocked (const char *path, const char *mode) +/* This is an inline helper function to consolidate attempts to unlock + a stream. */ + +static inline void +unlock_1 (FILE *const fp ATTRIBUTE_UNUSED) { - FILE *const fp = fopen (path, mode); #if defined(HAVE___FSETLOCKING) && defined(FSETLOCKING_BYCALLER) if (fp) __fsetlocking (fp, FSETLOCKING_BYCALLER); #endif +} + +void +unlock_stream(FILE *fp) +{ + unlock_1 (fp); +} + +FILE * +fopen_unlocked (const char *path, const char *mode) +{ + FILE *const fp = fopen (path, mode); + unlock_1 (fp); return fp; } @@ -74,10 +97,7 @@ FILE * fdopen_unlocked (int fildes, const char *mode) { FILE *const fp = fdopen (fildes, mode); -#if defined(HAVE___FSETLOCKING) && defined(FSETLOCKING_BYCALLER) - if (fp) - __fsetlocking (fp, FSETLOCKING_BYCALLER); -#endif + unlock_1 (fp); return fp; } @@ -85,9 +105,6 @@ FILE * freopen_unlocked (const char *path, const char *mode, FILE *stream) { FILE *const fp = freopen (path, mode, stream); -#if defined(HAVE___FSETLOCKING) && defined(FSETLOCKING_BYCALLER) - if (fp) - __fsetlocking (fp, FSETLOCKING_BYCALLER); -#endif + unlock_1 (fp); return fp; } |