mirror of https://github.com/rusefi/lua.git
new function 'string.packsize'
This commit is contained in:
parent
6f54b07663
commit
5c519a69d3
25
lstrlib.c
25
lstrlib.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lstrlib.c,v 1.217 2014/11/11 19:40:20 roberto Exp roberto $
|
** $Id: lstrlib.c,v 1.218 2014/12/04 16:25:40 roberto Exp roberto $
|
||||||
** Standard library for string operations and pattern-matching
|
** Standard library for string operations and pattern-matching
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -1258,6 +1258,28 @@ static int str_pack (lua_State *L) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int str_packsize (lua_State *L) {
|
||||||
|
Header h;
|
||||||
|
const char *fmt = luaL_checkstring(L, 1); /* format string */
|
||||||
|
lua_Integer totalsize = 0; /* accumulate total size of result */
|
||||||
|
initheader(L, &h);
|
||||||
|
while (*fmt != '\0') {
|
||||||
|
int size, ntoalign;
|
||||||
|
KOption opt = getdetails(&h, totalsize, &fmt, &size, &ntoalign);
|
||||||
|
totalsize += ntoalign + size;
|
||||||
|
switch (opt) {
|
||||||
|
case Kstring: /* strings with length count */
|
||||||
|
case Kzstr: /* zero-terminated string */
|
||||||
|
luaL_argerror(L, 1, "variable-length format");
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lua_pushinteger(L, totalsize);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Unpack an integer with 'size' bytes and 'islittle' endianness.
|
** Unpack an integer with 'size' bytes and 'islittle' endianness.
|
||||||
** If size is smaller than the size of a Lua integer and integer
|
** If size is smaller than the size of a Lua integer and integer
|
||||||
|
@ -1374,6 +1396,7 @@ static const luaL_Reg strlib[] = {
|
||||||
{"sub", str_sub},
|
{"sub", str_sub},
|
||||||
{"upper", str_upper},
|
{"upper", str_upper},
|
||||||
{"pack", str_pack},
|
{"pack", str_pack},
|
||||||
|
{"packsize", str_packsize},
|
||||||
{"unpack", str_unpack},
|
{"unpack", str_unpack},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue