This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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;
 			}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]