[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