From d40e67f54ca528c1435419c3bf1868ba288308df Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 16 Apr 2007 23:28:39 +0000 Subject: * stdio-common/printf_fp.c (___printf_fp): Fix exponent -4 special case handling when wcp == wstartp + 1. Fix a comment typo. * stdio-common/tfformat.c (sprint_doubles): Add a new testcase. --- stdio-common/printf_fp.c | 13 +++++++++---- stdio-common/tfformat.c | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'stdio-common') diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c index c27c0d496c..9b796eac2f 100644 --- a/stdio-common/printf_fp.c +++ b/stdio-common/printf_fp.c @@ -990,7 +990,7 @@ ___printf_fp (FILE *fp, 0)) /* This is a special case: the rounded number is 1.0, the format is 'g' or 'G', and the alternative format - is selected. This means the result mist be "1.". */ + is selected. This means the result must be "1.". */ --added_zeros; } @@ -1081,12 +1081,17 @@ ___printf_fp (FILE *fp, /* This is another special case. The exponent of the number is really smaller than -4, which requires the 'e'/'E' format. But after rounding the number has an exponent of -4. */ - assert (wcp >= wstartp + 2); + assert (wcp >= wstartp + 1); assert (wstartp[0] == L'1'); __wmemcpy (wstartp, L"0.0001", 6); wstartp[1] = decimalwc; - wmemset (wstartp + 6, L'0', wcp - (wstartp + 2)); - wcp += 4; + if (wcp >= wstartp + 2) + { + wmemset (wstartp + 6, L'0', wcp - (wstartp + 2)); + wcp += 4; + } + else + wcp += 5; } else { diff --git a/stdio-common/tfformat.c b/stdio-common/tfformat.c index 0370834e9f..259e2e0b18 100644 --- a/stdio-common/tfformat.c +++ b/stdio-common/tfformat.c @@ -4020,6 +4020,7 @@ sprint_double_type sprint_doubles[] = {__LINE__, 0.000956, "0.001", "%#.0g"}, {__LINE__, 0.000098, "0.0001", "%#.0g"}, {__LINE__, 0.0000996, "0.00010", "%#.2g"}, + {__LINE__, 9.999999999999999e-05, "0.0001", "%g"}, {0 } -- cgit v1.2.3