From 5866c02352c6af65c871a59fee1ccca3c8bebb7b Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Tue, 24 Apr 2007 20:09:50 +0000 Subject: * libc/stdio/vfprintf.c (_VFPRINTF_R): Don't zero pad on infinity or NaN with %05f. --- newlib/libc/stdio/vfprintf.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'newlib/libc/stdio') diff --git a/newlib/libc/stdio/vfprintf.c b/newlib/libc/stdio/vfprintf.c index eec0b5378..f9c1ddf3f 100644 --- a/newlib/libc/stdio/vfprintf.c +++ b/newlib/libc/stdio/vfprintf.c @@ -879,7 +879,12 @@ reswitch: switch (ch) { _fpvalue = GET_ARG (N, ap, double); } - /* do this before tricky precision changes */ + /* do this before tricky precision changes + + If the output is infinite or NaN, leading + zeros are not permitted. Otherwise, scanf + could not read what printf wrote. + */ if (isinf (_fpvalue)) { if (_fpvalue < 0) sign = '-'; @@ -888,6 +893,7 @@ reswitch: switch (ch) { else cp = "inf"; size = 3; + flags &= ~ZEROPAD; break; } if (isnan (_fpvalue)) { @@ -896,11 +902,12 @@ reswitch: switch (ch) { else cp = "nan"; size = 3; + flags &= ~ZEROPAD; break; } #else /* !_NO_LONGDBL */ - + if (flags & LONGDBL) { _fpvalue = GET_ARG (N, ap, _LONG_DOUBLE); } else { @@ -917,6 +924,7 @@ reswitch: switch (ch) { else cp = "inf"; size = 3; + flags &= ~ZEROPAD; break; } if (tmp == 1) { @@ -925,6 +933,7 @@ reswitch: switch (ch) { else cp = "nan"; size = 3; + flags &= ~ZEROPAD; break; } #endif /* !_NO_LONGDBL */ -- cgit v1.2.3