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. */
|
/* Walkable file locking routine. */
|
||||||
static int
|
static int
|
||||||
__fp_lock (FILE * ptr)
|
__fp_lock (struct _reent * ptr __unused, FILE * fp)
|
||||||
{
|
{
|
||||||
if (!(ptr->_flags2 & __SNLK))
|
if (!(fp->_flags2 & __SNLK))
|
||||||
_flockfile (ptr);
|
_flockfile (fp);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Walkable file unlocking routine. */
|
/* Walkable file unlocking routine. */
|
||||||
static int
|
static int
|
||||||
__fp_unlock (FILE * ptr)
|
__fp_unlock (struct _reent * ptr __unused, FILE * fp)
|
||||||
{
|
{
|
||||||
if (!(ptr->_flags2 & __SNLK))
|
if (!(fp->_flags2 & __SNLK))
|
||||||
_funlockfile (ptr);
|
_funlockfile (fp);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -346,13 +346,13 @@ __fp_lock_all (void)
|
||||||
{
|
{
|
||||||
__sfp_lock_acquire ();
|
__sfp_lock_acquire ();
|
||||||
|
|
||||||
(void) _fwalk (_REENT, __fp_lock);
|
(void) _fwalk_reent (_REENT, __fp_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
__fp_unlock_all (void)
|
__fp_unlock_all (void)
|
||||||
{
|
{
|
||||||
(void) _fwalk (_REENT, __fp_unlock);
|
(void) _fwalk_reent (_REENT, __fp_unlock);
|
||||||
|
|
||||||
__sfp_lock_release ();
|
__sfp_lock_release ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,32 +27,6 @@ static char sccsid[] = "%W% (Berkeley) %G%";
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "local.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
|
int
|
||||||
_fwalk_reent (struct _reent *ptr,
|
_fwalk_reent (struct _reent *ptr,
|
||||||
register int (*reent_function) (struct _reent *, FILE *))
|
register int (*reent_function) (struct _reent *, FILE *))
|
||||||
|
|
|
@ -183,7 +183,6 @@ extern void __sinit (struct _reent *);
|
||||||
extern void _cleanup_r (struct _reent *);
|
extern void _cleanup_r (struct _reent *);
|
||||||
extern void __smakebuf_r (struct _reent *, FILE *);
|
extern void __smakebuf_r (struct _reent *, FILE *);
|
||||||
extern int __swhatbuf_r (struct _reent *, FILE *, size_t *, int *);
|
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 *));
|
extern int _fwalk_reent (struct _reent *, int (*)(struct _reent *, FILE *));
|
||||||
struct _glue * __sfmoreglue (struct _reent *,int n);
|
struct _glue * __sfmoreglue (struct _reent *,int n);
|
||||||
extern int __submore (struct _reent *, FILE *);
|
extern int __submore (struct _reent *, FILE *);
|
||||||
|
|
|
@ -23,10 +23,10 @@
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
lflush (FILE *fp)
|
lflush (struct _reent * ptr __unused, FILE *fp)
|
||||||
{
|
{
|
||||||
if ((fp->_flags & (__SLBF | __SWR)) == (__SLBF | __SWR))
|
if ((fp->_flags & (__SLBF | __SWR)) == (__SLBF | __SWR))
|
||||||
return fflush (fp);
|
return _fflush_r (_REENT, fp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,10 +102,10 @@ __srefill_r (struct _reent * ptr,
|
||||||
*/
|
*/
|
||||||
if (fp->_flags & (__SLBF | __SNBF))
|
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;
|
short orig_flags = fp->_flags;
|
||||||
fp->_flags = 1;
|
fp->_flags = 1;
|
||||||
(void) _fwalk (_GLOBAL_REENT, lflush);
|
(void) _fwalk_reent (_GLOBAL_REENT, lflush);
|
||||||
fp->_flags = orig_flags;
|
fp->_flags = orig_flags;
|
||||||
|
|
||||||
/* Now flush this file without locking it. */
|
/* Now flush this file without locking it. */
|
||||||
|
|
|
@ -3058,10 +3058,10 @@ _cygwin_istext_for_stdio (int fd)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* internal newlib function */
|
/* 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
|
static int
|
||||||
setmode_helper (FILE *f)
|
setmode_helper (struct _reent *ptr __unused, FILE *f)
|
||||||
{
|
{
|
||||||
if (fileno (f) != _my_tls.locals.setmode_file)
|
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;
|
_my_tls.locals.setmode_mode = O_TEXT;
|
||||||
else
|
else
|
||||||
_my_tls.locals.setmode_mode = O_BINARY;
|
_my_tls.locals.setmode_mode = O_BINARY;
|
||||||
_fwalk (_GLOBAL_REENT, setmode_helper);
|
_fwalk_reent (_GLOBAL_REENT, setmode_helper);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue