commit f4eed60ca9de17fd521891688de1e53390d67214
parent c1de1fdac6a7873f8ae016785f364c5ae10abb1e
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Thu, 18 Jun 2009 13:50:39 -0300
better treatment of integer formats in string.format
Diffstat:
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/lstrlib.c b/lstrlib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lstrlib.c,v 1.141 2008/06/12 14:21:18 roberto Exp roberto $
+** $Id: lstrlib.c,v 1.142 2009/02/03 19:39:19 roberto Exp roberto $
** Standard library for string operations and pattern-matching
** See Copyright Notice in lua.h
*/
@@ -777,14 +777,13 @@ static int str_format (lua_State *L) {
sprintf(buff, form, (int)luaL_checknumber(L, arg));
break;
}
- case 'd': case 'i': {
- addintlen(form);
- sprintf(buff, form, (LUA_INTFRM_T)luaL_checknumber(L, arg));
- break;
- }
+ case 'd': case 'i':
case 'o': case 'u': case 'x': case 'X': {
+ lua_Number n = luaL_checknumber(L, arg);
+ LUA_INTFRM_T r = (n < 0) ? (LUA_INTFRM_T)n :
+ (LUA_INTFRM_T)(unsigned LUA_INTFRM_T)n;
addintlen(form);
- sprintf(buff, form, (unsigned LUA_INTFRM_T)luaL_checknumber(L, arg));
+ sprintf(buff, form, r);
break;
}
case 'e': case 'E': case 'f':