Fix stdio exit handling
Make sure that the stdio exit handler is set in all stdio initialization paths.
The bug was introduced by commit 26747c47bc
.
This commit is contained in:
parent
93bea9f538
commit
e826fbb2ae
|
@ -168,6 +168,19 @@ stdio_exit_handler (void)
|
||||||
(void) _fwalk_sglue (_GLOBAL_REENT, CLEANUP_FILE, &__sglue);
|
(void) _fwalk_sglue (_GLOBAL_REENT, CLEANUP_FILE, &__sglue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
global_stdio_init (void)
|
||||||
|
{
|
||||||
|
if (__stdio_exit_handler == NULL) {
|
||||||
|
__stdio_exit_handler = stdio_exit_handler;
|
||||||
|
#ifdef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
stdin_init (&__sf[0]);
|
||||||
|
stdout_init (&__sf[1]);
|
||||||
|
stderr_init (&__sf[2]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find a free FILE for fopen et al.
|
* Find a free FILE for fopen et al.
|
||||||
*/
|
*/
|
||||||
|
@ -180,11 +193,7 @@ __sfp (struct _reent *d)
|
||||||
struct _glue *g;
|
struct _glue *g;
|
||||||
|
|
||||||
_newlib_sfp_lock_start ();
|
_newlib_sfp_lock_start ();
|
||||||
|
global_stdio_init ();
|
||||||
if (__stdio_exit_handler == NULL) {
|
|
||||||
__sinit (_GLOBAL_REENT);
|
|
||||||
__stdio_exit_handler = stdio_exit_handler;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (g = &__sglue;; g = g->_next)
|
for (g = &__sglue;; g = g->_next)
|
||||||
{
|
{
|
||||||
|
@ -273,13 +282,9 @@ __sinit (struct _reent *s)
|
||||||
# endif /* _REENT_GLOBAL_STDIO_STREAMS */
|
# endif /* _REENT_GLOBAL_STDIO_STREAMS */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _REENT_GLOBAL_STDIO_STREAMS
|
global_stdio_init ();
|
||||||
if (__sf[0]._cookie == NULL) {
|
|
||||||
stdin_init (&__sf[0]);
|
#ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
stdout_init (&__sf[1]);
|
|
||||||
stderr_init (&__sf[2]);
|
|
||||||
}
|
|
||||||
#else /* _REENT_GLOBAL_STDIO_STREAMS */
|
|
||||||
stdin_init (s->_stdin);
|
stdin_init (s->_stdin);
|
||||||
stdout_init (s->_stdout);
|
stdout_init (s->_stdout);
|
||||||
stderr_init (s->_stderr);
|
stderr_init (s->_stderr);
|
||||||
|
|
Loading…
Reference in New Issue