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))