2000-06-04  Kaz Kylheku  <kaz@ashi.footprints.net>

	Lock for stdio stream list becomes global, for use in LinuxThreads.

	* libio/genops.c (_IO_iter_begin, _IO_iter_end,
	_IO_iter_next, _IO_iter_file, _IO_list_lock, _IO_list_unlock,
	_IO_list_resetlock): New interface for iterating global list of
	streams without accessing the _IO_list_all global variable,
	and for manipulating the lock which protects this list.
	* libio/libioP.h: Likewise.
	* libio/Version: Add entries for the new functions.

	* libio/libioP.h (_IO_ITER): New typedef, just an alias for
	pointer to _IO_FILE.
This commit is contained in:
Ulrich Drepper 2000-06-07 22:50:32 +00:00
parent ce177a8416
commit 3fc9ca4e38
4 changed files with 78 additions and 0 deletions

View File

@ -1,3 +1,18 @@
2000-06-04 Kaz Kylheku <kaz@ashi.footprints.net>
Lock for stdio stream list becomes global, for use in LinuxThreads.
* libio/genops.c (_IO_iter_begin, _IO_iter_end,
_IO_iter_next, _IO_iter_file, _IO_list_lock, _IO_list_unlock,
_IO_list_resetlock): New interface for iterating global list of
streams without accessing the _IO_list_all global variable,
and for manipulating the lock which protects this list.
* libio/libioP.h: Likewise.
* libio/Version: Add entries for the new functions.
* libio/libioP.h (_IO_ITER): New typedef, just an alias for
pointer to _IO_FILE.
2000-06-07 Ulrich Drepper <drepper@redhat.com>
* locale/programs/ld-ctype.c (set_class_defaults): Several uses of

View File

@ -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;

View File

@ -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)

View File

@ -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 *));