aboutsummaryrefslogtreecommitdiff
path: root/libio
diff options
context:
space:
mode:
Diffstat (limited to 'libio')
-rw-r--r--libio/Versions4
-rw-r--r--libio/genops.c44
-rw-r--r--libio/libioP.h15
3 files changed, 63 insertions, 0 deletions
diff --git a/libio/Versions b/libio/Versions
index 654ca29a89..1fbc313cb9 100644
--- a/libio/Versions
+++ b/libio/Versions
@@ -104,6 +104,10 @@ libc {
# functions used in libstdc++
_IO_fgetpos; _IO_fgetpos64; _IO_fsetpos; _IO_fsetpos64;
+ # LinuxThreads uses this protected interface
+ _IO_iter_begin; _IO_iter_end; _IO_iter_next; _IO_iter_file;
+ _IO_list_lock; _IO_list_unlock; _IO_list_resetlock;
+
# f*
fgetpos; fgetpos64; fgetwc; fgetwc_unlocked; fgetws; fgetws_unlocked;
fputwc; fputwc_unlocked; fputws; fputws_unlocked; fsetpos; fsetpos64;
diff --git a/libio/genops.c b/libio/genops.c
index c59518143f..fb4f08bd3f 100644
--- a/libio/genops.c
+++ b/libio/genops.c
@@ -1028,6 +1028,50 @@ _IO_default_imbue (fp, locale)
{
}
+_IO_ITER
+_IO_iter_begin()
+{
+ return _IO_list_all;
+}
+
+_IO_ITER
+_IO_iter_end()
+{
+ return NULL;
+}
+
+_IO_ITER
+_IO_iter_next(iter)
+ _IO_ITER iter;
+{
+ return iter->_chain;
+}
+
+_IO_FILE *
+_IO_iter_file(iter)
+ _IO_ITER iter;
+{
+ return iter;
+}
+
+void
+_IO_list_lock()
+{
+ _IO_lock_lock (list_all_lock);
+}
+
+void
+_IO_list_unlock()
+{
+ _IO_lock_unlock (list_all_lock);
+}
+
+void
+_IO_list_resetlock()
+{
+ _IO_lock_init (list_all_lock);
+}
+
#ifdef TODO
#if defined(linux)
diff --git a/libio/libioP.h b/libio/libioP.h
index 59d20cd4be..090f98a02d 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -313,6 +313,10 @@ struct _IO_FILE_plus
const struct _IO_jump_t *vtable;
};
+/* Iterator type for walking global linked list of _IO_FILE objects. */
+
+typedef _IO_FILE *_IO_ITER;
+
/* Generic functions */
extern void _IO_switch_to_main_get_area __P ((_IO_FILE *));
@@ -351,6 +355,17 @@ extern int _IO_wmarker_delta __P ((struct _IO_marker *));
extern int _IO_seekmark __P ((_IO_FILE *, struct _IO_marker *, int));
extern int _IO_seekwmark __P ((_IO_FILE *, struct _IO_marker *, int));
+/* Functions for iterating global list and dealing with
+ its lock */
+
+extern _IO_ITER _IO_iter_begin __P ((void));
+extern _IO_ITER _IO_iter_end __P ((void));
+extern _IO_ITER _IO_iter_next __P ((_IO_ITER));
+extern _IO_FILE *_IO_iter_file __P ((_IO_ITER));
+extern void _IO_list_lock __P ((void));
+extern void _IO_list_unlock __P ((void));
+extern void _IO_list_resetlock __P ((void));
+
/* Default jumptable functions. */
extern int _IO_default_underflow __P ((_IO_FILE *));