summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/lua/elua.h13
-rw-r--r--plugins/lua/elua_tree.c13
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;
}