aboutsummaryrefslogtreecommitdiff
path: root/lstrlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lstrlib.c')
-rw-r--r--lstrlib.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/lstrlib.c b/lstrlib.c
index 8d3f305c..1b56e2b0 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -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
841static int num2straux (char *buff, int sz, lua_Number x) { 841static 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': {