Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2004-03-10 00:27:37 +0300
committerJeff Johnston <jjohnstn@redhat.com>2004-03-10 00:27:37 +0300
commit41c3da6ae1f582c4e6062e706cd07a1f664df9ac (patch)
tree4db07651bc0c4dd3a5a2c9424f0057c3cef3f0fa /newlib/libc/stdio
parent58e9df0f911ab189e12843fda3b04fa5aacf82c2 (diff)
2004-03-09 Thomas Pfaff <tpfaff@gmx.net>
* libc/stdio/findfp.c (__sfp): Rename lock to __sfp_lock. Change __sfp_lock to static global. (__fp_lock): New static function. (__fp_unlock): Ditto. (__fp_lock_all): New function. (__fp_unlock_all): Ditto.
Diffstat (limited to 'newlib/libc/stdio')
-rw-r--r--newlib/libc/stdio/findfp.c51
1 files changed, 46 insertions, 5 deletions
diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c
index 0ea7e31a2..0ddbf9403 100644
--- a/newlib/libc/stdio/findfp.c
+++ b/newlib/libc/stdio/findfp.c
@@ -25,6 +25,10 @@
#include <sys/lock.h>
#include "local.h"
+#ifndef __SINGLE_THREAD__
+__LOCK_INIT(static, __sfp_lock);
+#endif
+
static void
std (ptr, flags, file, data)
FILE *ptr;
@@ -87,9 +91,7 @@ __sfp (d)
struct _glue *g;
#ifndef __SINGLE_THREAD__
- __LOCK_INIT(static, lock);
-
- __lock_acquire(lock);
+ __lock_acquire(__sfp_lock);
#endif
if (!_GLOBAL_REENT->__sdidinit)
@@ -104,7 +106,7 @@ __sfp (d)
break;
}
#ifndef __SINGLE_THREAD__
- __lock_release(lock);
+ __lock_release(__sfp_lock);
#endif
d->_errno = ENOMEM;
return NULL;
@@ -112,7 +114,7 @@ __sfp (d)
found:
fp->_flags = 1; /* reserve this slot; caller sets real flags */
#ifndef __SINGLE_THREAD__
- __lock_release(lock);
+ __lock_release(__sfp_lock);
#endif
fp->_p = NULL; /* no current pointer */
fp->_w = 0; /* nothing to read or write */
@@ -192,3 +194,42 @@ __sinit (s)
std (s->_stderr, __SWR | __SNBF, 2, s);
}
+
+#ifndef __SINGLE_THREAD__
+
+/* Walkable file locking routine. */
+static int
+__fp_lock (ptr)
+ FILE * ptr;
+{
+ _flockfile(ptr);
+
+ return 0;
+}
+
+/* Walkable file unlocking routine. */
+static int
+__fp_unlock (ptr)
+ FILE * ptr;
+{
+ _funlockfile(ptr);
+
+ return 0;
+}
+
+void
+__fp_lock_all ()
+{
+ __lock_acquire(__sfp_lock);
+
+ (void) _fwalk (_REENT, __fp_lock);
+}
+
+void
+__fp_unlock_all ()
+{
+ (void) _fwalk (_REENT, __fp_unlock);
+
+ __lock_release(__sfp_lock);
+}
+#endif