diff options
-rw-r--r-- | epan/wslua/wslua.h | 1 | ||||
-rw-r--r-- | epan/wslua/wslua_field.c | 14 | ||||
-rw-r--r-- | epan/wslua/wslua_tvb.c | 27 |
3 files changed, 17 insertions, 25 deletions
diff --git a/epan/wslua/wslua.h b/epan/wslua/wslua.h index c75c3e0143..6a3c0bc8e5 100644 --- a/epan/wslua/wslua.h +++ b/epan/wslua/wslua.h @@ -443,6 +443,7 @@ extern void lua_prime_all_fields(proto_tree* tree); extern int Proto_commit(lua_State* L); extern Tvb* push_Tvb(lua_State* L, tvbuff_t* tvb); +extern gboolean push_TvbRange(lua_State* L, tvbuff_t* tvb, int offset, int len); extern void clear_outstanding_Tvb(void); extern void clear_outstanding_TvbRange(void); diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c index 5eceff255c..e7b706212c 100644 --- a/epan/wslua/wslua_field.c +++ b/epan/wslua/wslua_field.c @@ -229,17 +229,11 @@ static int FieldInfo_display(lua_State* L) { static int FieldInfo_get_range(lua_State* L) { /* The TvbRange covering this field */ FieldInfo fi = checkFieldInfo(L,1); - TvbRange r = ep_new(struct _wslua_tvbrange); - r->tvb = ep_new(struct _wslua_tvb); - - r->tvb->ws_tvb = fi->ds_tvb; - r->tvb->expired = FALSE; - r->tvb->need_free = FALSE; - r->offset = fi->start; - r->len = fi->length; + if (push_TvbRange (L, fi->ds_tvb, fi->start, fi->length)) { + return 1; + } - pushTvbRange(L,r); - return 1; + return 0; } static int FieldInfo_get_generated(lua_State* L) { diff --git a/epan/wslua/wslua_tvb.c b/epan/wslua/wslua_tvb.c index 040e242d82..3b7eaf0395 100644 --- a/epan/wslua/wslua_tvb.c +++ b/epan/wslua/wslua_tvb.c @@ -599,24 +599,23 @@ WSLUA_CLASS_DEFINE(TvbRange,FAIL_ON_NULL("expired tvbrange"),NOP); Tvb's range the creation will cause a runtime error. */ -static TvbRange new_TvbRange(lua_State* L, tvbuff_t* ws_tvb, int offset, int len) { +gboolean push_TvbRange(lua_State* L, tvbuff_t* ws_tvb, int offset, int len) { TvbRange tvbr; - if (!ws_tvb) { luaL_error(L,"expired tvb"); - return 0; + return FALSE; } if (len == -1) { len = tvb_length_remaining(ws_tvb,offset); if (len < 0) { luaL_error(L,"out of bounds"); - return 0; + return FALSE; } } else if ( (guint)(len + offset) > tvb_length(ws_tvb)) { luaL_error(L,"Range is out of bounds"); - return NULL; + return FALSE; } tvbr = (TvbRange)g_malloc(sizeof(struct _wslua_tvbrange)); @@ -627,7 +626,9 @@ static TvbRange new_TvbRange(lua_State* L, tvbuff_t* ws_tvb, int offset, int len tvbr->offset = offset; tvbr->len = len; - return tvbr; + PUSH_TVBRANGE(L,tvbr); + + return TRUE; } @@ -639,7 +640,6 @@ WSLUA_METHOD Tvb_range(lua_State* L) { Tvb tvb = checkTvb(L,1); int offset = luaL_optint(L,WSLUA_OPTARG_Tvb_range_OFFSET,0); int len = luaL_optint(L,WSLUA_OPTARG_Tvb_range_LENGTH,-1); - TvbRange tvbr; if (!tvb) return 0; if (tvb->expired) { @@ -647,8 +647,7 @@ WSLUA_METHOD Tvb_range(lua_State* L) { return 0; } - if ((tvbr = new_TvbRange(L,tvb->ws_tvb,offset,len))) { - PUSH_TVBRANGE(L,tvbr); + if (push_TvbRange(L,tvb->ws_tvb,offset,len)) { WSLUA_RETURN(1); /* The TvbRange */ } @@ -1318,8 +1317,7 @@ WSLUA_METHOD TvbRange_range(lua_State* L) { return 0; } - if ((tvbr = new_TvbRange(L,tvbr->tvb->ws_tvb,tvbr->offset+offset,len))) { - PUSH_TVBRANGE(L,tvbr); + if (push_TvbRange(L,tvbr->tvb->ws_tvb,tvbr->offset+offset,len)) { WSLUA_RETURN(1); /* The TvbRange */ } @@ -1328,9 +1326,9 @@ WSLUA_METHOD TvbRange_range(lua_State* L) { static int TvbRange_uncompress(lua_State* L) { /* Obtain a uncompressed TvbRange from a TvbRange */ -#define WSLUA_ARG_TvbRange_tvb_NAME 2 /* The name to be given to the new data-source. */ +#define WSLUA_ARG_TvbRange_uncompress_NAME 2 /* The name to be given to the new data-source. */ TvbRange tvbr = checkTvbRange(L,1); - const gchar* name = luaL_optstring(L,WSLUA_ARG_TvbRange_tvb_NAME,"Uncompressed"); + const gchar* name = luaL_optstring(L,WSLUA_ARG_TvbRange_uncompress_NAME,"Uncompressed"); tvbuff_t *uncompr_tvb; if (!(tvbr && tvbr->tvb)) return 0; @@ -1344,8 +1342,7 @@ static int TvbRange_uncompress(lua_State* L) { uncompr_tvb = tvb_child_uncompress(tvbr->tvb->ws_tvb, tvbr->tvb->ws_tvb, tvbr->offset, tvbr->len); if (uncompr_tvb) { add_new_data_source (lua_pinfo, uncompr_tvb, name); - if ((tvbr = new_TvbRange(L,uncompr_tvb,0,tvb_length(uncompr_tvb)))) { - PUSH_TVBRANGE(L,tvbr); + if (push_TvbRange(L,uncompr_tvb,0,tvb_length(uncompr_tvb))) { WSLUA_RETURN(1); /* The TvbRange */ } } |