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

Chris Johns chrisj at rtems.org
Fri Feb 14 09:41:34 UTC 2020



On 2020-02-14 17:11, Sebastian Huber wrote:
> 
> On 14/02/2020 04:41, chrisj at rtems.org wrote:
>> From: Chris Johns <chrisj at rtems.org>
>>
>> Update #3870
>> ---
>>   testsuites/libtests/newlib01/init.c | 16 +++++++++++++++-
>>   1 file changed, 15 insertions(+), 1 deletion(-)
>>
>> diff --git a/testsuites/libtests/newlib01/init.c 
>> b/testsuites/libtests/newlib01/init.c
>> index 74e648799e..1bff052363 100644
>> --- a/testsuites/libtests/newlib01/init.c
>> +++ b/testsuites/libtests/newlib01/init.c
>> @@ -23,6 +23,8 @@
>>   #include <rtems/imfs.h>
>>   #include <rtems/libcsupport.h>
>> +#include <rtems/bspIo.h>
>> +
> Not needed?
>>   #include "tmacros.h"
>>   const char rtems_test_name[] = "NEWLIB 1";
>> @@ -63,12 +65,24 @@ static void wait(void)
>>   static void worker_task(rtems_task_argument arg)
>>   {
>>     test_context *ctx = &test_instance;
>> +  struct _reent *reent = __getreent();
> 
> I think you should include <sys/reent.h> and use
> 
> struct _reent *reent = _REENT;
> 

Thanks. I was looking at the path the code took with the debugger but 
now you point this out it is how newlib accesses the pointer.

>> +  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);
>> +  fflush(stdout);
> fflush() should return 0 here.

I will add this and send v2.

Thanks for the review.

Chris

>> +  rtems_test_assert(reent->__sdidinit != 0);
>> +  rtems_test_assert(stdout == output);
>> +
>>     n = fwrite(&buf[0], sizeof(buf), 1, stdout);
>>     rtems_test_assert(n == 1);


More information about the devel mailing list