mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
Fix string.format("%c", 0).
This commit is contained in:
parent
7dbf0b05f1
commit
430d9f8f7e
@ -850,20 +850,21 @@ LJLIB_CF(string_format)
|
|||||||
} else { /* format item */
|
} else { /* format item */
|
||||||
char form[MAX_FMTSPEC]; /* to store the format (`%...') */
|
char form[MAX_FMTSPEC]; /* to store the format (`%...') */
|
||||||
char buff[MAX_FMTITEM]; /* to store the formatted item */
|
char buff[MAX_FMTITEM]; /* to store the formatted item */
|
||||||
|
int n = 0;
|
||||||
if (++arg > top)
|
if (++arg > top)
|
||||||
luaL_argerror(L, arg, lj_obj_typename[0]);
|
luaL_argerror(L, arg, lj_obj_typename[0]);
|
||||||
strfrmt = scanformat(L, strfrmt, form);
|
strfrmt = scanformat(L, strfrmt, form);
|
||||||
switch (*strfrmt++) {
|
switch (*strfrmt++) {
|
||||||
case 'c':
|
case 'c':
|
||||||
sprintf(buff, form, lj_lib_checkint(L, arg));
|
n = sprintf(buff, form, lj_lib_checkint(L, arg));
|
||||||
break;
|
break;
|
||||||
case 'd': case 'i':
|
case 'd': case 'i':
|
||||||
addintlen(form);
|
addintlen(form);
|
||||||
sprintf(buff, form, num2intfrm(L, arg));
|
n = sprintf(buff, form, num2intfrm(L, arg));
|
||||||
break;
|
break;
|
||||||
case 'o': case 'u': case 'x': case 'X':
|
case 'o': case 'u': case 'x': case 'X':
|
||||||
addintlen(form);
|
addintlen(form);
|
||||||
sprintf(buff, form, num2uintfrm(L, arg));
|
n = sprintf(buff, form, num2uintfrm(L, arg));
|
||||||
break;
|
break;
|
||||||
case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': {
|
case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': {
|
||||||
TValue tv;
|
TValue tv;
|
||||||
@ -880,10 +881,10 @@ LJLIB_CF(string_format)
|
|||||||
nbuf[len] = '\0';
|
nbuf[len] = '\0';
|
||||||
for (p = form; *p < 'A' && *p != '.'; p++) ;
|
for (p = form; *p < 'A' && *p != '.'; p++) ;
|
||||||
*p++ = 's'; *p = '\0';
|
*p++ = 's'; *p = '\0';
|
||||||
sprintf(buff, form, nbuf);
|
n = sprintf(buff, form, nbuf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sprintf(buff, form, (double)tv.n);
|
n = sprintf(buff, form, (double)tv.n);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'q':
|
case 'q':
|
||||||
@ -902,14 +903,14 @@ LJLIB_CF(string_format)
|
|||||||
luaL_addvalue(&b);
|
luaL_addvalue(&b);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
sprintf(buff, form, strdata(str));
|
n = sprintf(buff, form, strdata(str));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
lj_err_callerv(L, LJ_ERR_STRFMTO, *(strfrmt -1));
|
lj_err_callerv(L, LJ_ERR_STRFMTO, *(strfrmt -1));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
luaL_addlstring(&b, buff, strlen(buff));
|
luaL_addlstring(&b, buff, n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
luaL_pushresult(&b);
|
luaL_pushresult(&b);
|
||||||
|
Loading…
Reference in New Issue
Block a user