[PATCH] Fix ecvt to pass tests
Corinna Vinschen
vinschen@redhat.com
Tue Dec 17 09:11:00 GMT 2019
Hi Keith,
On Dec 16 13:54, Keith Packard wrote:
> 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++;
That last hunk is not immediately clear to me. Can you explain this a
bit or even add some more text to the commit message?
Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20191217/314ade9d/attachment.sig>
More information about the Newlib
mailing list