This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
[PATCH] make printf output for Infinity and NaN match C99 standard
- From: Bob Wilson <bwilson at tensilica dot com>
- To: newlib at sources dot redhat dot com
- Cc: weath at tensilica dot com
- Date: Thu, 06 Oct 2005 16:13:46 -0700
- Subject: [PATCH] make printf output for Infinity and NaN match C99 standard
As you can probably tell, I'm working on contributing a bunch of changes from
Tensilica's copy of newlib. Here's another one, done by David Weatherford.
I've also got a bunch of documentation fixes that I'll try to sort through next
week.
Anyway, this patch makes the output of Infinity and NaN floating-point values
match the C99 specification: "inf" and "nan" for e/f/g formats and uppercase
versions of those for E/F/G formats. The 'F' format wasn't even recognized, so
the patch fixes that, too.
2005-10-06 David Weatherford <weath@tensilica.com>
* libc/stdio/vfprintf.c (_VFPRINTF_R): Recognize 'F' format.
Print "inf" and "nan" in lowercase for e/f/g formats and in uppercase
for E/F/G formats.
Index: libc/stdio/vfprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vfprintf.c,v
retrieving revision 1.40
diff -u -r1.40 vfprintf.c
--- libc/stdio/vfprintf.c 16 Jun 2005 19:14:01 -0000 1.40
+++ libc/stdio/vfprintf.c 6 Oct 2005 21:23:21 -0000
@@ -800,6 +800,7 @@
case 'e':
case 'E':
case 'f':
+ case 'F':
case 'g':
case 'G':
if (prec == -1) {
@@ -819,12 +820,18 @@
if (isinf (_fpvalue)) {
if (_fpvalue < 0)
sign = '-';
- cp = "Inf";
+ if (ch == 'E' || ch == 'F' || ch == 'G')
+ cp = "INF";
+ else
+ cp = "inf";
size = 3;
break;
}
if (isnan (_fpvalue)) {
- cp = "NaN";
+ if (ch == 'E' || ch == 'F' || ch == 'G')
+ cp = "NAN";
+ else
+ cp = "nan";
size = 3;
break;
}