[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Problem with string.format in lua 5.0 & 5.1
- From: "Todor Totev" <umbra.tenebris@...>
- Date: Wed, 14 Dec 2005 15:15:28 +0200
Hello all,
I found a problem with string.format function which exists in both 5.0 &
5.1.
I'm building Lua using 64-bit integers as lua_Number. My platform is Win32
with
Microsoft VisualStudio 2003 (VisualC v13.10)
The problem is that str_format_helper(in 5.0) and scan_format(in 5.1)
firmly believe that lua_Number is double.
The first problem is that when they encounter %x and %d they generate
%x or %d in 'form' argument as format specifiers for sprintf.
In my case these must be converted to %I64x or %I64d.
Second problem is that str_format function
typecasts lua_Numbers impropertly:
when integer number representation is requested, the upper 32 bits are
lost:
case 'o': case 'u': case 'x': case 'X': {
sprintf(buff, form, (unsigned int)(luaL_checknumber(L, arg)));
Note the (unsigned int) typecast. In my case ommiting the typecast will
fix the problem.
Also, when the user request floating point representation, the code does
NOT have a typecast:
case 'e': case 'E': case 'f':
case 'g': case 'G': {
sprintf(buff, form, luaL_checknumber(L, arg));
This also is problem for my setup. As a patch I added a typecast to double.
I'm not experienced with programming portable C code so I cannot suggest a
proper patch.
For first problem I think it is best to generate LUA_NUMBER_FMT in 'form'
argument of
str_format_helper/scan_format.
But I cannot suggest a nice solution to the casting issue.
Best regards,
Todor Totev