Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2019-12-18 19:49:06 +0300
committerCorinna Vinschen <corinna@vinschen.de>2019-12-18 22:53:36 +0300
commit11f99384d2971356bab2fcac7e29792250abea73 (patch)
tree97715930f24f388ebb0e98e216ae235413ed7bfc
parentabcc586ffec05a7779f8474119407d050392ee18 (diff)
Fix gcvt to always show 'ndigits' of precision
Leading zeros after the decimal point should not count towards the 'ndigits' limit. This makes gcvt match glibc and the posix gcvt man page. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--newlib/libc/stdlib/ecvtbuf.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/newlib/libc/stdlib/ecvtbuf.c b/newlib/libc/stdlib/ecvtbuf.c
index 12e8c9a92..228362e07 100644
--- a/newlib/libc/stdlib/ecvtbuf.c
+++ b/newlib/libc/stdlib/ecvtbuf.c
@@ -349,15 +349,10 @@ _gcvt (struct _reent *ptr,
char *end;
char *p;
- if (invalue < 1.0)
- {
- /* what we want is ndigits after the point */
- p = _dtoa_r (ptr, invalue, 3, ndigit, &decpt, &sign, &end);
- }
- else
- {
- p = _dtoa_r (ptr, invalue, 2, ndigit, &decpt, &sign, &end);
- }
+ /* We always want ndigits of precision, even if that means printing
+ * a bunch of leading zeros for numbers < 1.0
+ */
+ p = _dtoa_r (ptr, invalue, 2, ndigit, &decpt, &sign, &end);
if (decpt == 9999)
{
@@ -383,11 +378,12 @@ _gcvt (struct _reent *ptr,
if (buf == save)
*buf++ = '0';
*buf++ = '.';
- while (decpt < 0 && ndigit > 0)
+
+ /* Leading zeros don't count towards 'ndigit' */
+ while (decpt < 0)
{
*buf++ = '0';
decpt++;
- ndigit--;
}
/* Print rest of stuff */