Remove __sglue member for one configuration
Remove __sglue member of struct reent when _REENT_GLOBAL_STDIO_STREAMS is defined.
This commit is contained in:
parent
8b96542ed1
commit
0a862d1319
|
@ -696,19 +696,19 @@ struct _reent
|
||||||
/* These are here last so that __FILE can grow without changing the offsets
|
/* These are here last so that __FILE can grow without changing the offsets
|
||||||
of the above members (on the off chance that future binary compatibility
|
of the above members (on the off chance that future binary compatibility
|
||||||
would be broken otherwise). */
|
would be broken otherwise). */
|
||||||
struct _glue __sglue; /* root of glue chain */
|
|
||||||
# ifndef _REENT_GLOBAL_STDIO_STREAMS
|
# ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
struct _glue __sglue; /* root of glue chain */
|
||||||
__FILE __sf[3]; /* first three file descriptors */
|
__FILE __sf[3]; /* first three file descriptors */
|
||||||
# endif
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _REENT_GLOBAL_STDIO_STREAMS
|
#ifdef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
#define _REENT_STDIO_STREAM(var, index) &__sf[index]
|
#define _REENT_STDIO_STREAM(var, index) &__sf[index]
|
||||||
#define _REENT_INIT_SGLUE(_ptr) { _NULL, 0, _NULL }
|
#define _REENT_INIT_SGLUE(_ptr) /* nothing to initialize */
|
||||||
#define _REENT_INIT_SGLUE_ZEROED(_ptr) /* nothing to set */
|
#define _REENT_INIT_SGLUE_ZEROED(_ptr) /* nothing to set */
|
||||||
#else
|
#else
|
||||||
#define _REENT_STDIO_STREAM(var, index) &(var)->__sf[index]
|
#define _REENT_STDIO_STREAM(var, index) &(var)->__sf[index]
|
||||||
#define _REENT_INIT_SGLUE(_ptr) { _NULL, 3, &(_ptr)->__sf[0] }
|
#define _REENT_INIT_SGLUE(_ptr) , { _NULL, 3, &(_ptr)->__sf[0] }
|
||||||
#define _REENT_INIT_SGLUE_ZEROED(_ptr) \
|
#define _REENT_INIT_SGLUE_ZEROED(_ptr) \
|
||||||
(_ptr)->__sglue._niobs = 3; \
|
(_ptr)->__sglue._niobs = 3; \
|
||||||
(_ptr)->__sglue._iobs = &(_ptr)->__sf[0];
|
(_ptr)->__sglue._iobs = &(_ptr)->__sf[0];
|
||||||
|
@ -758,7 +758,7 @@ struct _reent
|
||||||
} \
|
} \
|
||||||
}, \
|
}, \
|
||||||
_REENT_INIT_ATEXIT \
|
_REENT_INIT_ATEXIT \
|
||||||
_NULL, \
|
_NULL \
|
||||||
_REENT_INIT_SGLUE(&(var)) \
|
_REENT_INIT_SGLUE(&(var)) \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ int errno;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
/* Interim cleanup code */
|
/* Interim cleanup code */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -39,6 +40,7 @@ cleanup_glue (struct _reent *ptr,
|
||||||
|
|
||||||
_free_r (ptr, glue);
|
_free_r (ptr, glue);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
_reclaim_reent (struct _reent *ptr)
|
_reclaim_reent (struct _reent *ptr)
|
||||||
|
@ -124,8 +126,10 @@ _reclaim_reent (struct _reent *ptr)
|
||||||
before the program exits, and who wants to wait for that? */
|
before the program exits, and who wants to wait for that? */
|
||||||
ptr->__cleanup (ptr);
|
ptr->__cleanup (ptr);
|
||||||
|
|
||||||
|
#ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
if (ptr->__sglue._next)
|
if (ptr->__sglue._next)
|
||||||
cleanup_glue (ptr, ptr->__sglue._next);
|
cleanup_glue (ptr, ptr->__sglue._next);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Malloc memory not reclaimed; no good way to return memory anyway. */
|
/* Malloc memory not reclaimed; no good way to return memory anyway. */
|
||||||
|
|
|
@ -59,7 +59,12 @@ Required OS subroutines: <<close>>, <<fstat>>, <<isatty>>, <<lseek>>,
|
||||||
int
|
int
|
||||||
_fcloseall_r (struct _reent *ptr)
|
_fcloseall_r (struct _reent *ptr)
|
||||||
{
|
{
|
||||||
|
#ifdef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
/* There are no thread-specific FILE objects */
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
return _fwalk_sglue (ptr, _fclose_r, &ptr->__sglue);
|
return _fwalk_sglue (ptr, _fclose_r, &ptr->__sglue);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _REENT_ONLY
|
#ifndef _REENT_ONLY
|
||||||
|
|
|
@ -242,8 +242,9 @@ cleanup_stdio (struct _reent *ptr)
|
||||||
CLEANUP_FILE (ptr, ptr->_stdout);
|
CLEANUP_FILE (ptr, ptr->_stdout);
|
||||||
if (ptr->_stderr != &__sf[2])
|
if (ptr->_stderr != &__sf[2])
|
||||||
CLEANUP_FILE (ptr, ptr->_stderr);
|
CLEANUP_FILE (ptr, ptr->_stderr);
|
||||||
#endif
|
#else
|
||||||
(void) _fwalk_sglue (ptr, CLEANUP_FILE, &ptr->__sglue);
|
(void) _fwalk_sglue (ptr, CLEANUP_FILE, &ptr->__sglue);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -326,21 +327,27 @@ __fp_unlock (struct _reent * ptr __unused, FILE * fp)
|
||||||
void
|
void
|
||||||
__fp_lock_all (void)
|
__fp_lock_all (void)
|
||||||
{
|
{
|
||||||
|
#ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
struct _reent *ptr;
|
struct _reent *ptr;
|
||||||
|
#endif
|
||||||
|
|
||||||
__sfp_lock_acquire ();
|
__sfp_lock_acquire ();
|
||||||
|
|
||||||
|
#ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
ptr = _REENT;
|
ptr = _REENT;
|
||||||
(void) _fwalk_sglue (ptr, __fp_lock, &ptr->__sglue);
|
(void) _fwalk_sglue (ptr, __fp_lock, &ptr->__sglue);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
__fp_unlock_all (void)
|
__fp_unlock_all (void)
|
||||||
{
|
{
|
||||||
|
#ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
struct _reent *ptr;
|
struct _reent *ptr;
|
||||||
|
|
||||||
ptr = _REENT;
|
ptr = _REENT;
|
||||||
(void) _fwalk_sglue (ptr, __fp_unlock, &ptr->__sglue);
|
(void) _fwalk_sglue (ptr, __fp_unlock, &ptr->__sglue);
|
||||||
|
#endif
|
||||||
|
|
||||||
__sfp_lock_release ();
|
__sfp_lock_release ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue