MCPcopy Create free account
hub / github.com/BigPig0/RelayLive / str_format

Function str_format

ThirdParty/lua/lua/lstrlib.c:872–942  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

870
871
872static int str_format (lua_State *L) {
873 int top = lua_gettop(L);
874 int arg = 1;
875 size_t sfl;
876 const char *strfrmt = luaL_checklstring(L, arg, &sfl);
877 const char *strfrmt_end = strfrmt+sfl;
878 luaL_Buffer b;
879 luaL_buffinit(L, &b);
880 while (strfrmt < strfrmt_end) {
881 if (*strfrmt != L_ESC)
882 luaL_addchar(&b, *strfrmt++);
883 else if (*++strfrmt == L_ESC)
884 luaL_addchar(&b, *strfrmt++); /* %% */
885 else { /* format item */
886 char form[MAX_FORMAT]; /* to store the format ('%...') */
887 char *buff = luaL_prepbuffsize(&b, MAX_ITEM); /* to put formatted item */
888 int nb = 0; /* number of bytes in added item */
889 if (++arg > top)
890 luaL_argerror(L, arg, "no value");
891 strfrmt = scanformat(L, strfrmt, form);
892 switch (*strfrmt++) {
893 case 'c': {
894 nb = sprintf(buff, form, (int)luaL_checkinteger(L, arg));
895 break;
896 }
897 case 'd': case 'i':
898 case 'o': case 'u': case 'x': case 'X': {
899 lua_Integer n = luaL_checkinteger(L, arg);
900 addlenmod(form, LUA_INTEGER_FRMLEN);
901 nb = sprintf(buff, form, n);
902 break;
903 }
904#if defined(LUA_USE_AFORMAT)
905 case 'a': case 'A':
906#endif
907 case 'e': case 'E': case 'f':
908 case 'g': case 'G': {
909 addlenmod(form, LUA_NUMBER_FRMLEN);
910 nb = sprintf(buff, form, luaL_checknumber(L, arg));
911 break;
912 }
913 case 'q': {
914 addquoted(L, &b, arg);
915 break;
916 }
917 case 's': {
918 size_t l;
919 const char *s = luaL_tolstring(L, arg, &l);
920 if (!strchr(form, '.') && l >= 100) {
921 /* no precision and string is too long to be formatted;
922 keep original string */
923 luaL_addvalue(&b);
924 break;
925 }
926 else {
927 nb = sprintf(buff, form, s);
928 lua_pop(L, 1); /* remove result from 'luaL_tolstring' */
929 break;

Callers

nothing calls this directly

Calls 14

lua_gettopFunction · 0.85
luaL_checklstringFunction · 0.85
luaL_buffinitFunction · 0.85
luaL_prepbuffsizeFunction · 0.85
luaL_argerrorFunction · 0.85
scanformatFunction · 0.85
luaL_checkintegerFunction · 0.85
addlenmodFunction · 0.85
luaL_checknumberFunction · 0.85
addquotedFunction · 0.85
luaL_tolstringFunction · 0.85
luaL_addvalueFunction · 0.85

Tested by

no test coverage detected