[Top][All Lists]
[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
- m4 bug in format.c (m4 v1.4),
Roderick . Koehle <=