File

util-src/compat.c @ 12043:48f8fa6cea7b

mod_smacks: Back out a86ae74da96c: Fixed one problem, caused another As per a86ae74da96c the 'session' object here is the wrong session, so the attempt to block stanzas from being added to the queue twice did not work causing something of a leak. Instead we have a leak of the previous session.
author Kim Alvefur <zash@zash.se>
date Mon, 13 Dec 2021 21:17:54 +0100
parent 9561:cfc7b2f7251e
child 12976:a187600ec7d6
line wrap: on
line source


#include <lua.h>
#include <lauxlib.h>


static int lc_xpcall (lua_State *L) {
  int ret;
  int n_arg = lua_gettop(L);
  /* f, msgh, p1, p2... */
  luaL_argcheck(L, n_arg >= 2, 2, "value expected");
  lua_pushvalue(L, 1);  /* f to top */
  lua_pushvalue(L, 2);  /* msgh to top */
  lua_replace(L, 1); /* msgh to 1 */
  lua_replace(L, 2); /* f to 2 */
  /* msgh, f, p1, p2... */
  ret = lua_pcall(L, n_arg - 2, LUA_MULTRET, 1);
  lua_pushboolean(L, ret == 0);
  lua_replace(L, 1);
  return lua_gettop(L);
}

int luaopen_util_compat(lua_State *L) {
	lua_createtable(L, 0, 2);
	{
		lua_pushcfunction(L, lc_xpcall);
		lua_setfield(L, -2, "xpcall");
	}
	return 1;
}