Re: [PATCH] Print sign of NaN values to nano-vfprintf.
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
> diff --git a/newlib/libc/stdio/nano-vfprintf_float.c
b/newlib/libc/stdio/nano-vfprintf_float.c
> index 98893e97b..071a09edc 100644
> --- a/newlib/libc/stdio/nano-vfprintf_float.c
> +++ b/newlib/libc/stdio/nano-vfprintf_float.c
> @@ -213,6 +213,8 @@ _printf_float (struct _reent *data,
> }
> if (isnan (_fpvalue))
> {
> + if (_fpvalue < 0)
> + pdata->l_buf[0] = '-';
> if (code <= 'G') /* 'A', 'E', 'F', or 'G'. */
> cp = "NAN";
This patch doesn't work, as a comparison of a NaN with anything should
always return false. As per the main printf code, this can be done by
checking the sign bit instead:
- if (_fpvalue < 0)
+ if (signbit (_fpvalue))
pdata->l_buf[0] = '-';
Patch attached.
Cheers,
Jon
0001-nano-vfprintf_float.c-Fix-check-if-negative-for-nans.patch
(application/octet-stream, 964 B)
From 49593628a465af4e8409ed2aac142b9ed347156e Mon Sep 17 00:00:00 2001 From: Jon Beniston <[email protected]> Date: Tue, 11 Dec 2018 21:03:03 +0000 Subject: [PATCH] nano-vfprintf_float.c: Fix check if negative for nans. --- newlib/libc/stdio/nano-vfprintf_float.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/newlib/libc/stdio/nano-vfprintf_float.c b/newlib/libc/stdio/nano-vfprintf_float.c index 071a09edc..524f67a31 100644 --- a/newlib/libc/stdio/nano-vfprintf_float.c +++ b/newlib/libc/stdio/nano-vfprintf_float.c @@ -39,6 +39,7 @@ #include <string.h> #include <limits.h> #include <stdint.h> +#include <math.h> #include <wchar.h> #include <sys/lock.h> #include <stdarg.h> @@ -213,7 +214,7 @@ _printf_float (struct _reent *data, } if (isnan (_fpvalue)) { - if (_fpvalue < 0) + if (signbit (_fpvalue)) pdata->l_buf[0] = '-'; if (code <= 'G') /* 'A', 'E', 'F', or 'G'. */ cp = "NAN"; -- 2.17.0