When Lua executes functions from its API, these can throws an error.
These function must be executed in a special environment which catch
these error, otherwise a critical error (like segfault) can raise.
This patch add a c file called "hlua_fcn.c" which collect all the
Lua/c function needing safe environment for its execution.
ifneq ($(USE_DL),)
OPTIONS_LDFLAGS += -ldl
endif
-OPTIONS_OBJS += src/hlua.o
+OPTIONS_OBJS += src/hlua.o src/hlua_fcn.o
endif
ifneq ($(USE_DEVICEATLAS),)
--- /dev/null
+#ifndef _PROTO_HLUA_FCN_H
+#define _PROTO_HLUA_FCN_H
+
+int hlua_fcn_reg_core_fcn(lua_State *L);
+
+#endif /* _PROTO_HLUA_FCN_H */
#include <proto/channel.h>
#include <proto/hdr_idx.h>
#include <proto/hlua.h>
+#include <proto/hlua_fcn.h>
#include <proto/map.h>
#include <proto/obj_type.h>
#include <proto/pattern.h>
hlua_class_function(gL.T, "Warning", hlua_log_warning);
hlua_class_function(gL.T, "Alert", hlua_log_alert);
hlua_class_function(gL.T, "done", hlua_done);
+ hlua_fcn_reg_core_fcn(gL.T);
lua_setglobal(gL.T, "core");
--- /dev/null
+/* All the functions in this file runs with aLua stack, and can
+ * return with a longjmp. All of these function must be launched
+ * in an environment able to catch a longjmp, otherwise a
+ * critical error can be raised.
+ */
+#include <lauxlib.h>
+#include <lua.h>
+#include <lualib.h>
+
+static void hlua_array_add_fcn(lua_State *L, const char *name,
+ int (*function)(lua_State *L))
+{
+ lua_pushstring(L, name);
+ lua_pushcclosure(L, function, 0);
+ lua_rawset(L, -3);
+}
+
+int hlua_fcn_reg_core_fcn(lua_State *L)
+{
+ return 0;
+}