From 5866c02352c6af65c871a59fee1ccca3c8bebb7b Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Tue, 24 Apr 2007 20:09:50 +0000 Subject: [PATCH] * libc/stdio/vfprintf.c (_VFPRINTF_R): Don't zero pad on infinity or NaN with %05f. --- newlib/ChangeLog | 3 +++ newlib/libc/stdio/vfprintf.c | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index f569f8841..70db12e18 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,5 +1,8 @@ 2007-04-24 Eric Blake + * libc/stdio/vfprintf.c (_VFPRINTF_R): Don't zero pad on infinity + or NaN with %05f. + * libc/stdio/vfprintf.c (_VFPRINTF_R): Avoid multibyte when not _MB_CAPABLE. 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 */ -- 2.43.5