diff options
Diffstat (limited to 'lstrlib.c')
-rw-r--r-- | lstrlib.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lstrlib.c,v 1.251 2016/05/20 14:13:21 roberto Exp roberto $ | 2 | ** $Id: lstrlib.c,v 1.252 2016/06/27 13:15:08 roberto Exp roberto $ |
3 | ** Standard library for string operations and pattern-matching | 3 | ** Standard library for string operations and pattern-matching |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -839,11 +839,12 @@ static lua_Number adddigit (char *buff, int n, lua_Number x) { | |||
839 | 839 | ||
840 | 840 | ||
841 | static int num2straux (char *buff, int sz, lua_Number x) { | 841 | static int num2straux (char *buff, int sz, lua_Number x) { |
842 | if (x != x || x == HUGE_VAL || x == -HUGE_VAL) /* inf or NaN? */ | 842 | /* if 'inf' or 'NaN', format it like '%g' */ |
843 | return l_sprintf(buff, sz, LUA_NUMBER_FMT, x); /* equal to '%g' */ | 843 | if (x != x || x == (lua_Number)HUGE_VAL || x == -(lua_Number)HUGE_VAL) |
844 | return l_sprintf(buff, sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)x); | ||
844 | else if (x == 0) { /* can be -0... */ | 845 | else if (x == 0) { /* can be -0... */ |
845 | /* create "0" or "-0" followed by exponent */ | 846 | /* create "0" or "-0" followed by exponent */ |
846 | return l_sprintf(buff, sz, LUA_NUMBER_FMT "x0p+0", x); | 847 | return l_sprintf(buff, sz, LUA_NUMBER_FMT "x0p+0", (LUAI_UACNUMBER)x); |
847 | } | 848 | } |
848 | else { | 849 | else { |
849 | int e; | 850 | int e; |
@@ -960,7 +961,7 @@ static void addliteral (lua_State *L, luaL_Buffer *b, int arg) { | |||
960 | const char *format = (n == LUA_MININTEGER) /* corner case? */ | 961 | const char *format = (n == LUA_MININTEGER) /* corner case? */ |
961 | ? "0x%" LUA_INTEGER_FRMLEN "x" /* use hexa */ | 962 | ? "0x%" LUA_INTEGER_FRMLEN "x" /* use hexa */ |
962 | : LUA_INTEGER_FMT; /* else use default format */ | 963 | : LUA_INTEGER_FMT; /* else use default format */ |
963 | nb = l_sprintf(buff, MAX_ITEM, format, n); | 964 | nb = l_sprintf(buff, MAX_ITEM, format, (LUAI_UACINT)n); |
964 | } | 965 | } |
965 | luaL_addsize(b, nb); | 966 | luaL_addsize(b, nb); |
966 | break; | 967 | break; |
@@ -1041,7 +1042,7 @@ static int str_format (lua_State *L) { | |||
1041 | case 'o': case 'u': case 'x': case 'X': { | 1042 | case 'o': case 'u': case 'x': case 'X': { |
1042 | lua_Integer n = luaL_checkinteger(L, arg); | 1043 | lua_Integer n = luaL_checkinteger(L, arg); |
1043 | addlenmod(form, LUA_INTEGER_FRMLEN); | 1044 | addlenmod(form, LUA_INTEGER_FRMLEN); |
1044 | nb = l_sprintf(buff, MAX_ITEM, form, n); | 1045 | nb = l_sprintf(buff, MAX_ITEM, form, (LUAI_UACINT)n); |
1045 | break; | 1046 | break; |
1046 | } | 1047 | } |
1047 | case 'a': case 'A': | 1048 | case 'a': case 'A': |
@@ -1051,8 +1052,9 @@ static int str_format (lua_State *L) { | |||
1051 | break; | 1052 | break; |
1052 | case 'e': case 'E': case 'f': | 1053 | case 'e': case 'E': case 'f': |
1053 | case 'g': case 'G': { | 1054 | case 'g': case 'G': { |
1055 | lua_Number n = luaL_checknumber(L, arg); | ||
1054 | addlenmod(form, LUA_NUMBER_FRMLEN); | 1056 | addlenmod(form, LUA_NUMBER_FRMLEN); |
1055 | nb = l_sprintf(buff, MAX_ITEM, form, luaL_checknumber(L, arg)); | 1057 | nb = l_sprintf(buff, MAX_ITEM, form, (LUAI_UACNUMBER)n); |
1056 | break; | 1058 | break; |
1057 | } | 1059 | } |
1058 | case 'q': { | 1060 | case 'q': { |