bug-m4
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

m4 bug in format.c (m4 v1.4)


From: Roderick . Koehle
Subject: m4 bug in format.c (m4 v1.4)
Date: Fri, 6 Apr 2001 09:06:52 +0200

Version:
m4 version 1.4, all operating systems

Problem description:
The format macro returns a wrong output if you specif an integer number that 
terminates with a 0, example try to output the number 10 using:
  > format(%f, 10)
  1000000

The problem is a bug in the formatting routine format.c:
The following loop is in charge to place the decimal point at the proper 
location, the pointer *s is initialized to the string returned by fcvs() 
whereas trailing zeros are
pruned by clr0(). So for the number 10, s points to the string "1" and decptr 
is 3, so the while loop will simply return the string "1" instead of "10.".
                while (--decpt >= 0)
                  *s++ = *t++;
                if (n > 0 || alternate)
                  *s++ = '.';

Solution:
The patch that solves the problem:
453c453
<               while (--decpt >= 0)
---
>               while (*t && --decpt >= 0)
454a455,456
>               while (--decpt>=0)
>                 *s++ = '0';

And here we go, the proper result for printing the number 10 is:
> format(%f,10)
10.000000

One thing I don't understand is why the format command has an own 
implementation, wouldn't it be better to simply use vsprintf() instead ?
My guess is that vsprintf() is not implemented or not consistent on all 
operating systems ?

Regards,

Roderick Koehle

---

Roderick Koehle
Infineon Technologies AG, C LITHO TD
Balanstr. 73
81541 Muenchen
Tel:  ++49 (89) 234 20746  
Fax: ++49 (89) 234 714269 
mailto:address@hidden






reply via email to

[Prev in Thread] Current Thread [Next in Thread]