Replace _fwalk() calls with _fwalk_reent()
Remove the _fwalk() implementation to avoid duplicated code with _fwalk_reent().
This commit is contained in:
parent
0239bc706a
commit
7a5903078d
|
@ -323,20 +323,20 @@ __sinit_lock_release (void)
|
|||
|
||||
/* Walkable file locking routine. */
|
||||
static int
|
||||
__fp_lock (FILE * ptr)
|
||||
__fp_lock (struct _reent * ptr __unused, FILE * fp)
|
||||
{
|
||||
if (!(ptr->_flags2 & __SNLK))
|
||||
_flockfile (ptr);
|
||||
if (!(fp->_flags2 & __SNLK))
|
||||
_flockfile (fp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Walkable file unlocking routine. */
|
||||
static int
|
||||
__fp_unlock (FILE * ptr)
|
||||
__fp_unlock (struct _reent * ptr __unused, FILE * fp)
|
||||
{
|
||||
if (!(ptr->_flags2 & __SNLK))
|
||||
_funlockfile (ptr);
|
||||
if (!(fp->_flags2 & __SNLK))
|
||||
_funlockfile (fp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -346,13 +346,13 @@ __fp_lock_all (void)
|
|||
{
|
||||
__sfp_lock_acquire ();
|
||||
|
||||
(void) _fwalk (_REENT, __fp_lock);
|
||||
(void) _fwalk_reent (_REENT, __fp_lock);
|
||||
}
|
||||
|
||||
void
|
||||
__fp_unlock_all (void)
|
||||
{
|
||||
(void) _fwalk (_REENT, __fp_unlock);
|
||||
(void) _fwalk_reent (_REENT, __fp_unlock);
|
||||
|
||||
__sfp_lock_release ();
|
||||
}
|
||||
|
|
|
@ -27,32 +27,6 @@ static char sccsid[] = "%W% (Berkeley) %G%";
|
|||
#include <errno.h>
|
||||
#include "local.h"
|
||||
|
||||
int
|
||||
_fwalk (struct _reent *ptr,
|
||||
register int (*function) (FILE *))
|
||||
{
|
||||
register FILE *fp;
|
||||
register int n, ret = 0;
|
||||
register struct _glue *g;
|
||||
|
||||
/*
|
||||
* It should be safe to walk the list without locking it;
|
||||
* new nodes are only added to the end and none are ever
|
||||
* removed.
|
||||
*
|
||||
* Avoid locking this list while walking it or else you will
|
||||
* introduce a potential deadlock in [at least] refill.c.
|
||||
*/
|
||||
for (g = &ptr->__sglue; g != NULL; g = g->_next)
|
||||
for (fp = g->_iobs, n = g->_niobs; --n >= 0; fp++)
|
||||
if (fp->_flags != 0 && fp->_flags != 1 && fp->_file != -1)
|
||||
ret |= (*function) (fp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Special version of __fwalk where the function pointer is a reentrant
|
||||
I/O function (e.g. _fclose_r). */
|
||||
int
|
||||
_fwalk_reent (struct _reent *ptr,
|
||||
register int (*reent_function) (struct _reent *, FILE *))
|
||||
|
|
|
@ -183,7 +183,6 @@ extern void __sinit (struct _reent *);
|
|||
extern void _cleanup_r (struct _reent *);
|
||||
extern void __smakebuf_r (struct _reent *, FILE *);
|
||||
extern int __swhatbuf_r (struct _reent *, FILE *, size_t *, int *);
|
||||
extern int _fwalk (struct _reent *, int (*)(FILE *));
|
||||
extern int _fwalk_reent (struct _reent *, int (*)(struct _reent *, FILE *));
|
||||
struct _glue * __sfmoreglue (struct _reent *,int n);
|
||||
extern int __submore (struct _reent *, FILE *);
|
||||
|
|
|
@ -23,10 +23,10 @@
|
|||
#include "local.h"
|
||||
|
||||
static int
|
||||
lflush (FILE *fp)
|
||||
lflush (struct _reent * ptr __unused, FILE *fp)
|
||||
{
|
||||
if ((fp->_flags & (__SLBF | __SWR)) == (__SLBF | __SWR))
|
||||
return fflush (fp);
|
||||
return _fflush_r (_REENT, fp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -102,10 +102,10 @@ __srefill_r (struct _reent * ptr,
|
|||
*/
|
||||
if (fp->_flags & (__SLBF | __SNBF))
|
||||
{
|
||||
/* Ignore this file in _fwalk to avoid potential deadlock. */
|
||||
/* Ignore this file in _fwalk_reent to avoid potential deadlock. */
|
||||
short orig_flags = fp->_flags;
|
||||
fp->_flags = 1;
|
||||
(void) _fwalk (_GLOBAL_REENT, lflush);
|
||||
(void) _fwalk_reent (_GLOBAL_REENT, lflush);
|
||||
fp->_flags = orig_flags;
|
||||
|
||||
/* Now flush this file without locking it. */
|
||||
|
|
|
@ -3058,10 +3058,10 @@ _cygwin_istext_for_stdio (int fd)
|
|||
}
|
||||
|
||||
/* internal newlib function */
|
||||
extern "C" int _fwalk (struct _reent *ptr, int (*function) (FILE *));
|
||||
extern "C" int _fwalk_reent (struct _reent *ptr, int (*function) (struct _reent *, FILE *));
|
||||
|
||||
static int
|
||||
setmode_helper (FILE *f)
|
||||
setmode_helper (struct _reent *ptr __unused, FILE *f)
|
||||
{
|
||||
if (fileno (f) != _my_tls.locals.setmode_file)
|
||||
{
|
||||
|
@ -3137,7 +3137,7 @@ cygwin_setmode (int fd, int mode)
|
|||
_my_tls.locals.setmode_mode = O_TEXT;
|
||||
else
|
||||
_my_tls.locals.setmode_mode = O_BINARY;
|
||||
_fwalk (_GLOBAL_REENT, setmode_helper);
|
||||
_fwalk_reent (_GLOBAL_REENT, setmode_helper);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue