Mercurial > prosody-hg
annotate util-src/compat.c @ 13497:da9be0ad4bbc 0.12
net.server_event: Add 'wrapserver' API
This enables accepting admin stream socket (UNIX) connections trough the
same procedures as any other (TCP) socket, which avoids problems caused
by using the wrapclient API, which ends up discarding early data due to
only expecting early connection failure.
Fixes #1867
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 07 Jul 2024 18:28:17 +0200 |
| parents | cfc7b2f7251e |
| children | a187600ec7d6 |
| 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 } |
