Replace _fwalk() calls with _fwalk_reent()

Remove the _fwalk() implementation to avoid duplicated code with
_fwalk_reent().
This commit is contained in:
Sebastian Huber 2022-03-30 11:15:07 +02:00
parent 0239bc706a
commit 7a5903078d
5 changed files with 15 additions and 42 deletions

View File

@ -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 ();
} }

View File

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

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

View 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. */

View File

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