[PATCH] printf("%#f") format specifier bug

Eric Blake ebb9@byu.net
Fri Apr 20 21:53:00 GMT 2007

According to Brian Dessent on 4/19/2007 4:15 AM:
> When the 'alternate-form' printf flag (#) is used with floating point
> output types, the spec says that a trailing decimal must be output. 
> However, newlib currently gets this wrong.
> I used the tfformat.c testcase from glibc to check this:
> <http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/libc/stdio-common/tfformat.c?cvsroot=glibc>
> Before the patch:
> Error in line 593 using "%#6.f".  Result is "   -0"; should be: "  
> -0.".

Prior to looking at the glibc test, it took me a while to figure out how
you were seeing the bug, when using cygwin's bash printf builtin:

$ printf %#4.f/ -0.

then it dawned on me:

$ printf %#4.f/ -0.1

> With the patch, the only errors left are %a (which I believe Eric Blake
> has already tackled):

Yes, I am working on %a, but it's harder than I thought.  frexp and frexpf
are already present in libc (I had been afraid that they were only in
libm, but fortunately discovered MATHOBJS_IN_LIBC in the newlib
Makefile.am).  But there is no frexpl (or many other long double
variants), so part of correctly implementing %a will be augmenting the
math library with more long double support.

> 2007-04-19  Brian Dessent  <brian@dessent.net>
> 	* libc/stdio/vfprintf.c (_vfprintf_r): When the alternate-form flag
> 	has been specified with types 'e', 'E', or 'f', ensure the trailing
> 	decimal is printed.

This patch looks correct to me.  But the changelog is a bit off; you were
only patching f, F, g, and G (e and E were already correct).

Don't work too hard, make some time for fun as well!

Eric Blake             ebb9@byu.net

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 311 bytes
Desc: OpenPGP digital signature
URL: <http://sourceware.org/pipermail/newlib/attachments/20070420/7c406a80/attachment.sig>

More information about the Newlib mailing list