From: Chris Johns <chr...@rtems.org> - Newlib overtites any FILE pointers set in stdin, stdout or stderr.
Closes #3870 --- cpukit/libcsupport/src/newlibc_reent.c | 5 ++++- testsuites/libtests/newlib01/init.c | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cpukit/libcsupport/src/newlibc_reent.c b/cpukit/libcsupport/src/newlibc_reent.c index 430157cf0f..6dc0b1eeaa 100644 --- a/cpukit/libcsupport/src/newlibc_reent.c +++ b/cpukit/libcsupport/src/newlibc_reent.c @@ -44,7 +44,10 @@ bool newlib_create_hook( } #endif - _REENT_INIT_PTR((creating_task->libc_reent)); /* GCC extension: structure constants */ + extern void __sinit (struct _reent *s); + struct _reent *reent = (struct _reent *) creating_task->libc_reent; + _REENT_INIT_PTR((reent)); /* GCC extension: structure constants */ + __sinit( reent ); return true; } diff --git a/testsuites/libtests/newlib01/init.c b/testsuites/libtests/newlib01/init.c index f9d39368d2..a8e5b3926c 100644 --- a/testsuites/libtests/newlib01/init.c +++ b/testsuites/libtests/newlib01/init.c @@ -245,6 +245,10 @@ static void test(void) int rv; rtems_resource_snapshot snapshot; + rtems_test_assert(fileno(stdout) >= 0); + rtems_test_assert(fileno(stdin) >= 0); + rtems_test_assert(fileno(stderr) >= 0); + ctx->main_task_id = rtems_task_self(); rtems_resource_snapshot_take(&snapshot); @@ -275,6 +279,10 @@ static void test(void) sc = rtems_task_delete(ctx->worker_task_id); rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(fileno(stdout) >= 0); + rtems_test_assert(fileno(stdin) >= 0); + rtems_test_assert(fileno(stderr) >= 0); + rv = unlink(&file_path[0]); rtems_test_assert(rv == 0); -- 2.23.0 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel