summaryrefslogtreecommitdiffstats
path: root/newlib/libc/stdio/vfprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdio/vfprintf.c')
-rw-r--r--newlib/libc/stdio/vfprintf.c13
1 files changed, 11 insertions, 2 deletions
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 */