[PATCH] testsuite/newlib: Check newlib does not touch an assigned std FILE pointer
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Feb 14 06:11:59 UTC 2020
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;
> + 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.
> + 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