Annotate

util-src/compat.c @ 12386:2d3080d02960

net.websocket.frames: Replace bit fiddling code with util.struct Fallback code for not having either the string.pack and string.unpack functions available in Lua 5.4 or the struct lib is no longer needed since the struct lib was imported as util.struct in 3ce3633527af
author Kim Alvefur <zash@zash.se>
date Sun, 06 Mar 2022 15:13:50 +0100
parent 9561:cfc7b2f7251e
child 12976:a187600ec7d6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9561
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 #include <lua.h>
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 #include <lauxlib.h>
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 static int lc_xpcall (lua_State *L) {
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 int ret;
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 int n_arg = lua_gettop(L);
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 /* f, msgh, p1, p2... */
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 luaL_argcheck(L, n_arg >= 2, 2, "value expected");
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 lua_pushvalue(L, 1); /* f to top */
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 lua_pushvalue(L, 2); /* msgh to top */
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 lua_replace(L, 1); /* msgh to 1 */
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 lua_replace(L, 2); /* f to 2 */
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 /* msgh, f, p1, p2... */
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 ret = lua_pcall(L, n_arg - 2, LUA_MULTRET, 1);
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 lua_pushboolean(L, ret == 0);
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 lua_replace(L, 1);
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 return lua_gettop(L);
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 }
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 int luaopen_util_compat(lua_State *L) {
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 lua_createtable(L, 0, 2);
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 {
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 lua_pushcfunction(L, lc_xpcall);
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 lua_setfield(L, -2, "xpcall");
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 }
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 return 1;
cfc7b2f7251e util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 }