MINOR: lua: file dedicated to unsafe functions
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.
This commit is contained in:
parent
834421c2d0
commit
fb0b5467ca
2
Makefile
2
Makefile
@ -610,7 +610,7 @@ OPTIONS_LDFLAGS += $(LUA_LD_FLAGS) -l$(LUA_LIB_NAME) -lm
|
||||
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),)
|
||||
|
6
include/proto/hlua_fcn.h
Normal file
6
include/proto/hlua_fcn.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef _PROTO_HLUA_FCN_H
|
||||
#define _PROTO_HLUA_FCN_H
|
||||
|
||||
int hlua_fcn_reg_core_fcn(lua_State *L);
|
||||
|
||||
#endif /* _PROTO_HLUA_FCN_H */
|
@ -24,6 +24,7 @@
|
||||
#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>
|
||||
@ -6632,6 +6633,7 @@ void hlua_init(void)
|
||||
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");
|
||||
|
||||
|
21
src/hlua_fcn.c
Normal file
21
src/hlua_fcn.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user