[PATCH] Fix ecvt to pass tests
Keith Packard
keithp@keithp.com
Mon Dec 16 21:54:00 GMT 2019
Elide decimal point when no digits are right of that. Fix computation
of trailing zero length.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
newlib/libc/stdlib/ecvtbuf.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/newlib/libc/stdlib/ecvtbuf.c b/newlib/libc/stdlib/ecvtbuf.c
index e3d7b55d8..d2ba6359d 100644
--- a/newlib/libc/stdlib/ecvtbuf.c
+++ b/newlib/libc/stdlib/ecvtbuf.c
@@ -93,7 +93,8 @@ print_f (struct _reent *ptr,
{
if (p == start)
*buf++ = '0';
- *buf++ = '.';
+ if (decpt < 0 && ndigit > 0)
+ *buf++ = '.';
while (decpt < 0 && ndigit > 0)
{
*buf++ = '0';
@@ -148,11 +149,15 @@ print_e (struct _reent *ptr,
}
*buf++ = *p++;
- if (dot || ndigit != 0)
- *buf++ = '.';
+ if (ndigit > 0)
+ dot = 1;
while (*p && ndigit > 0)
{
+ if (dot) {
+ *buf++ = '.';
+ dot = 0;
+ }
*buf++ = *p++;
ndigit--;
}
@@ -168,6 +173,10 @@ print_e (struct _reent *ptr,
{
while (ndigit > 0)
{
+ if (dot) {
+ *buf++ = '.';
+ dot = 0;
+ }
*buf++ = '0';
ndigit--;
}
@@ -246,7 +255,7 @@ fcvtbuf (double invalue,
/* Now copy */
- done = -*decpt;
+ done = 0;
while (p < end)
{
*fcvt_buf++ = *p++;
--
2.24.0
More information about the Newlib
mailing list