From 3d4a675f244f3b2a9249d8e4d9a9198ad9791c7b Mon Sep 17 00:00:00 2001 From: Thierry Fournier Date: Fri, 19 Feb 2016 20:53:30 +0100 Subject: [PATCH] MINOR: lua: post initialization This patch adds a Lua post initialisation wrapper. It already exists for pure Lua function, now it executes also C. It is useful for doing things when the configuration is ready to use. For example we can can browse and register all the proxies. --- include/proto/hlua_fcn.h | 1 + src/hlua.c | 12 ++++++++++++ src/hlua_fcn.c | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/include/proto/hlua_fcn.h b/include/proto/hlua_fcn.h index 9c5d9081b..e4ce5f091 100644 --- a/include/proto/hlua_fcn.h +++ b/include/proto/hlua_fcn.h @@ -6,6 +6,7 @@ void hlua_class_const_str(lua_State *L, const char *name, const char *value); void hlua_class_function(lua_State *L, const char *name, int (*function)(lua_State *L)); void *hlua_checkudata(lua_State *L, int ud, int class_ref); int hlua_register_metatable(struct lua_State *L, char *name); +int hlua_fcn_post_init(lua_State *L); int hlua_fcn_reg_core_fcn(lua_State *L); int hlua_dump_object(lua_State *L); diff --git a/src/hlua.c b/src/hlua.c index 89b3a795f..0f491255b 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -6444,6 +6444,18 @@ int hlua_post_init() enum hlua_exec ret; const char *error; + /* Call post initialisation function in safe environement. */ + if (!SET_SAFE_LJMP(gL.T)) { + if (lua_type(gL.T, -1) == LUA_TSTRING) + error = lua_tostring(gL.T, -1); + else + error = "critical error"; + fprintf(stderr, "Lua post-init: %s.\n", error); + exit(1); + } + hlua_fcn_post_init(gL.T); + RESET_SAFE_LJMP(gL.T); + list_for_each_entry(init, &hlua_init_functions, l) { lua_rawgeti(gL.T, LUA_REGISTRYINDEX, init->function_ref); ret = hlua_ctx_resume(&gL, 0); diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c index 1dcd650f2..215058a87 100644 --- a/src/hlua_fcn.c +++ b/src/hlua_fcn.c @@ -313,6 +313,11 @@ static int hlua_concat_init(lua_State *L) return 1; } +int hlua_fcn_post_init(lua_State *L) +{ + return 1; +} + int hlua_fcn_reg_core_fcn(lua_State *L) { if (!hlua_concat_init(L))