aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/packet_win.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2011-04-24 21:57:12 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2011-04-24 21:57:12 +0000
commit56b6777ba37128eb54211564bd59f6c7bba6b361 (patch)
tree9fd69a94ef103dfb63626e93cf6019cfec20173f /gtk/packet_win.c
parent06ad060901921574b5a4884d94659e00896fc03b (diff)
Allocate space for epan_dissect_t inside struct.
svn path=/trunk/; revision=36842
Diffstat (limited to 'gtk/packet_win.c')
-rw-r--r--gtk/packet_win.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/gtk/packet_win.c b/gtk/packet_win.c
index 167c6a4d37..1bbca647a5 100644
--- a/gtk/packet_win.c
+++ b/gtk/packet_win.c
@@ -78,7 +78,7 @@ struct PacketWinData {
GtkWidget *tree_view;
GtkWidget *bv_nb_ptr;
field_info *finfo_selected;
- epan_dissect_t *edt;
+ epan_dissect_t edt;
int pd_offset;
int pd_bitoffset;
@@ -198,17 +198,20 @@ edit_pkt_win_key_pressed_cb(GtkWidget *win _U_, GdkEventKey *event, gpointer use
/* XXX, last bit/octect? */
}
- if ((guint)DataPtr->pd_offset >= DataPtr->frame->cap_len)
+ if ((guint)DataPtr->pd_offset >= DataPtr->frame->cap_len) {
DataPtr->pd_offset = 0;
+ DataPtr->pd_bitoffset = 0; /* first bit */
+ }
/* redissect if changed */
if (val != -1) {
/* XXX, can be optimized? */
- epan_dissect_free(DataPtr->edt);
- DataPtr->edt = epan_dissect_new(TRUE, TRUE);
- epan_dissect_run(DataPtr->edt, &DataPtr->pseudo_header, DataPtr->pd, DataPtr->frame, &cfile.cinfo);
- add_byte_views(DataPtr->edt, DataPtr->tree_view, DataPtr->bv_nb_ptr);
- proto_tree_draw(DataPtr->edt->tree, DataPtr->tree_view);
+ epan_dissect_cleanup(&(DataPtr->edt));
+ memset(&(DataPtr->edt), 0, sizeof(DataPtr->edt));
+ epan_dissect_init(&(DataPtr->edt), TRUE, TRUE);
+ epan_dissect_run(&(DataPtr->edt), &DataPtr->pseudo_header, DataPtr->pd, DataPtr->frame, &cfile.cinfo);
+ add_byte_views(&(DataPtr->edt), DataPtr->tree_view, DataPtr->bv_nb_ptr);
+ proto_tree_draw(DataPtr->edt.tree, DataPtr->tree_view);
}
/* hack, fake finfo, point to DataPtr->pd_offset */
@@ -220,7 +223,7 @@ edit_pkt_win_key_pressed_cb(GtkWidget *win _U_, GdkEventKey *event, gpointer use
faked_finfo.ds_tvb = NULL;
/* XXX, in bitview bitmask single bit. */
- for (src_le = DataPtr->edt->pi.data_src; src_le != NULL; src_le = src_le->next) {
+ for (src_le = DataPtr->edt.pi.data_src; src_le != NULL; src_le = src_le->next) {
const data_source *src = src_le->data;
tvbuff_t *tvb = src->tvb;
@@ -273,10 +276,12 @@ void new_packet_window(GtkWidget *w _U_, gboolean editable)
memcpy(&DataPtr->pseudo_header, &cfile.pseudo_header, sizeof DataPtr->pseudo_header);
DataPtr->pd = g_malloc(DataPtr->frame->cap_len);
memcpy(DataPtr->pd, cfile.pd, DataPtr->frame->cap_len);
- DataPtr->edt = epan_dissect_new(TRUE, TRUE);
- epan_dissect_run(DataPtr->edt, &DataPtr->pseudo_header, DataPtr->pd,
+
+ memset(&(DataPtr->edt), 0, sizeof(DataPtr->edt));
+ epan_dissect_init(&(DataPtr->edt), TRUE, TRUE);
+ epan_dissect_run(&(DataPtr->edt), &DataPtr->pseudo_header, DataPtr->pd,
DataPtr->frame, &cfile.cinfo);
- epan_dissect_fill_in_columns(DataPtr->edt, FALSE, TRUE);
+ epan_dissect_fill_in_columns(&(DataPtr->edt), FALSE, TRUE);
/*
* Build title of window by getting column data constructed when the
@@ -333,8 +338,8 @@ void new_packet_window(GtkWidget *w _U_, gboolean editable)
g_signal_connect(main_w, "destroy", G_CALLBACK(destroy_new_window), DataPtr);
/* draw the protocol tree & print hex data */
- add_byte_views(DataPtr->edt, tree_view, DataPtr->bv_nb_ptr);
- proto_tree_draw(DataPtr->edt->tree, tree_view);
+ add_byte_views(&(DataPtr->edt), tree_view, DataPtr->bv_nb_ptr);
+ proto_tree_draw(DataPtr->edt.tree, tree_view);
DataPtr->finfo_selected = NULL;
DataPtr->pd_offset = 0;
@@ -348,7 +353,7 @@ destroy_new_window(GtkObject *object _U_, gpointer user_data)
struct PacketWinData *DataPtr = user_data;
detail_windows = g_list_remove(detail_windows, DataPtr);
- epan_dissect_free(DataPtr->edt);
+ epan_dissect_cleanup(&(DataPtr->edt));
g_free(DataPtr->pd);
g_free(DataPtr);
}