[PATCH v3] testsuite/newlib: Check newlib does not touch an assigned std FILE pointer

chrisj at rtems.org chrisj at rtems.org
Sun Feb 16 22:29:30 UTC 2020


From: Chris Johns <chrisj at rtems.org>

Update #3870
---
 testsuites/libtests/newlib01/init.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/testsuites/libtests/newlib01/init.c b/testsuites/libtests/newlib01/init.c
index 74e648799e..a9581b3570 100644
--- a/testsuites/libtests/newlib01/init.c
+++ b/testsuites/libtests/newlib01/init.c
@@ -18,11 +18,15 @@
 
 #include <stdio.h>
 
+#include <sys/reent.h>
+
 #include <rtems.h>
 #include <rtems/console.h>
 #include <rtems/imfs.h>
 #include <rtems/libcsupport.h>
 
+#include <rtems/bspIo.h>
+
 #include "tmacros.h"
 
 const char rtems_test_name[] = "NEWLIB 1";
@@ -63,12 +67,24 @@ static void wait(void)
 static void worker_task(rtems_task_argument arg)
 {
   test_context *ctx = &test_instance;
+  struct _reent *reent = _REENT;
+  FILE *output;
   char buf[1] = { 'x' };
   size_t n;
 
-  stdout = fopen(&file_path[0], "r+");
+  rtems_test_assert(reent->__sdidinit == 0);
+
+  output = stdout = fopen(&file_path[0], "r+");
   rtems_test_assert(stdout != NULL);
 
+  /*
+   * Check newlib's __sinit does not touch our assigned file pointer.
+   */
+  rtems_test_assert(reent->__sdidinit == 0);
+  rtems_test_assert(fflush(stdout) == 0);
+  rtems_test_assert(reent->__sdidinit != 0);
+  rtems_test_assert(stdout == output);
+
   n = fwrite(&buf[0], sizeof(buf), 1, stdout);
   rtems_test_assert(n == 1);
 
-- 
2.23.0



More information about the devel mailing list