diff options
-rw-r--r-- | plugins/lua/elua.h | 13 | ||||
-rw-r--r-- | plugins/lua/elua_tree.c | 13 |
2 files changed, 16 insertions, 10 deletions
diff --git a/plugins/lua/elua.h b/plugins/lua/elua.h index 2ddf7113d5..7d6f19cb80 100644 --- a/plugins/lua/elua.h +++ b/plugins/lua/elua.h @@ -177,12 +177,13 @@ gboolean is##C(lua_State* L,int i) { \ } \ C shift##C(lua_State* L,int i) { \ C* p; \ - if ((p = (C*)luaL_checkudata(L, i, #C))) {\ - lua_remove(L,i); \ - return *p; \ - } else { \ - return NULL; \ - } \ + if(!lua_isuserdata(L,i)) return NULL; \ + p = lua_touserdata(L, i); \ + lua_getfield(L, LUA_REGISTRYINDEX, #C); \ + if (p == NULL || !lua_getmetatable(L, i) || !lua_rawequal(L, -1, -2)) p=NULL; \ + lua_pop(L, 2); \ + if (p) { lua_remove(L,i); return *p; }\ + else return NULL;\ } diff --git a/plugins/lua/elua_tree.c b/plugins/lua/elua_tree.c index 2a570629e2..bb1bb34476 100644 --- a/plugins/lua/elua_tree.c +++ b/plugins/lua/elua_tree.c @@ -29,6 +29,8 @@ #include "elua.h" #include <epan/expert.h> +static gint elua_ett = -1; + static GPtrArray* outstanding_stuff = NULL; #define PUSH_TREEITEM(L,i) g_ptr_array_add(outstanding_stuff,push_TreeItem(L,i)) @@ -62,7 +64,6 @@ static int TreeItem_add_item_any(lua_State *L, gboolean little_endian) { if (!tree_item) { return luaL_error(L,"not a TreeItem!"); } - if (! ( field = shiftProtoField(L,1) ) ) { if (( proto = shiftProto(L,1) )) { hfid = proto->hfid; @@ -159,19 +160,20 @@ static int TreeItem_add_item_any(lua_State *L, gboolean little_endian) { lua_remove(L,1); } } - + while(lua_gettop(L)) { const gchar* s = lua_tostring(L,1); - + if (s) proto_item_append_text(item, " %s", s); lua_remove(L,1); } + tree_item = ep_alloc(sizeof(struct _eth_treeitem)); tree_item->item = item; - tree_item->tree = proto_item_add_subtree(item,ett);; + tree_item->tree = proto_item_add_subtree(item,ett > 0 ? ett : elua_ett); PUSH_TREEITEM(L,tree_item); @@ -330,6 +332,7 @@ static const luaL_reg TreeItem_meta[] = { int TreeItem_register(lua_State *L) { const struct _expert_severity* s; + gint* etts[] = { &elua_ett }; ELUA_REGISTER_CLASS(TreeItem); outstanding_stuff = g_ptr_array_new(); @@ -340,5 +343,7 @@ int TreeItem_register(lua_State *L) { lua_settable(L, LUA_GLOBALSINDEX); } + proto_register_subtree_array(etts,1); + return 1; } |