MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / str_format

Function str_format

extlibs/lua/src/lstrlib.c:1224–1315  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1222
1223
1224static int str_format (lua_State *L) {
1225 int top = lua_gettop(L);
1226 int arg = 1;
1227 size_t sfl;
1228 const char *strfrmt = luaL_checklstring(L, arg, &sfl);
1229 const char *strfrmt_end = strfrmt+sfl;
1230 luaL_Buffer b;
1231 luaL_buffinit(L, &b);
1232 while (strfrmt < strfrmt_end) {
1233 if (*strfrmt != L_ESC)
1234 luaL_addchar(&b, *strfrmt++);
1235 else if (*++strfrmt == L_ESC)
1236 luaL_addchar(&b, *strfrmt++); /* %% */
1237 else { /* format item */
1238 char form[MAX_FORMAT]; /* to store the format ('%...') */
1239 int maxitem = MAX_ITEM;
1240 char *buff = luaL_prepbuffsize(&b, maxitem); /* to put formatted item */
1241 int nb = 0; /* number of bytes in added item */
1242 if (++arg > top)
1243 return luaL_argerror(L, arg, "no value");
1244 strfrmt = scanformat(L, strfrmt, form);
1245 switch (*strfrmt++) {
1246 case 'c': {
1247 nb = l_sprintf(buff, maxitem, form, (int)luaL_checkinteger(L, arg));
1248 break;
1249 }
1250 case 'd': case 'i':
1251 case 'o': case 'u': case 'x': case 'X': {
1252 lua_Integer n = luaL_checkinteger(L, arg);
1253 addlenmod(form, LUA_INTEGER_FRMLEN);
1254 nb = l_sprintf(buff, maxitem, form, (LUAI_UACINT)n);
1255 break;
1256 }
1257 case 'a': case 'A':
1258 addlenmod(form, LUA_NUMBER_FRMLEN);
1259 nb = lua_number2strx(L, buff, maxitem, form,
1260 luaL_checknumber(L, arg));
1261 break;
1262 case 'f':
1263 maxitem = MAX_ITEMF; /* extra space for '%f' */
1264 buff = luaL_prepbuffsize(&b, maxitem);
1265 /* FALLTHROUGH */
1266 case 'e': case 'E': case 'g': case 'G': {
1267 lua_Number n = luaL_checknumber(L, arg);
1268 addlenmod(form, LUA_NUMBER_FRMLEN);
1269 nb = l_sprintf(buff, maxitem, form, (LUAI_UACNUMBER)n);
1270 break;
1271 }
1272 case 'p': {
1273 const void *p = lua_topointer(L, arg);
1274 if (p == NULL) { /* avoid calling 'printf' with argument NULL */
1275 p = "(null)"; /* result */
1276 form[strlen(form) - 1] = 's'; /* format it as a string */
1277 }
1278 nb = l_sprintf(buff, maxitem, form, p);
1279 break;
1280 }
1281 case 'q': {

Callers

nothing calls this directly

Calls 15

lua_gettopFunction · 0.85
luaL_checklstringFunction · 0.85
luaL_argerrorFunction · 0.85
scanformatFunction · 0.85
luaL_checkintegerFunction · 0.85
addlenmodFunction · 0.85
lua_number2strxFunction · 0.85
luaL_checknumberFunction · 0.85
lua_topointerFunction · 0.85
luaL_errorFunction · 0.85
addliteralFunction · 0.85
luaL_buffinitFunction · 0.70

Tested by

no test coverage detected