diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2011-04-24 22:52:49 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2011-04-24 22:52:49 +0000 |
commit | 96284b41b8fc74b789136b196f83de04977d7d18 (patch) | |
tree | 14cc5deb9ff3f136414add1e1f89e42b679f7c85 /gtk/packet_win.c | |
parent | 56b6777ba37128eb54211564bd59f6c7bba6b361 (diff) |
Packet editing:
- Show next editing bit (for hex it'd require patching packet_hex_apply_reverse_tag)
- Remove memset()s
- Try to fix compilation for win64.
svn path=/trunk/; revision=36843
Diffstat (limited to 'gtk/packet_win.c')
-rw-r--r-- | gtk/packet_win.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/gtk/packet_win.c b/gtk/packet_win.c index 1bbca647a5..0251196296 100644 --- a/gtk/packet_win.c +++ b/gtk/packet_win.c @@ -127,6 +127,7 @@ static gboolean edit_pkt_win_key_pressed_cb(GtkWidget *win _U_, GdkEventKey *event, gpointer user_data) { struct PacketWinData *DataPtr = (struct PacketWinData*)user_data; + header_field_info faked_hfinfo; field_info faked_finfo; int val = -1; GSList *src_le; @@ -152,9 +153,11 @@ edit_pkt_win_key_pressed_cb(GtkWidget *win _U_, GdkEventKey *event, gpointer use if (DataPtr->pd_bitoffset < 4) { DataPtr->pd[DataPtr->pd_offset] = (DataPtr->pd[DataPtr->pd_offset] & 0x0f) | (val << 4); DataPtr->pd_bitoffset = 4; + faked_hfinfo.bitmask = 0x0f; } else { DataPtr->pd[DataPtr->pd_offset] = (DataPtr->pd[DataPtr->pd_offset] & 0xf0) | val; DataPtr->pd_bitoffset = 8; + faked_hfinfo.bitmask = 0xf0; } /* DataPtr->pd_bitoffset += 4; */ } @@ -203,13 +206,15 @@ edit_pkt_win_key_pressed_cb(GtkWidget *win _U_, GdkEventKey *event, gpointer use DataPtr->pd_bitoffset = 0; /* first bit */ } + if (recent.gui_bytes_view == BYTES_BITS) + faked_hfinfo.bitmask = (1 << (7-DataPtr->pd_bitoffset)); + /* redissect if changed */ if (val != -1) { /* XXX, can be optimized? */ 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); + epan_dissect_run(&(DataPtr->edt), &DataPtr->pseudo_header, DataPtr->pd, DataPtr->frame, NULL); add_byte_views(&(DataPtr->edt), DataPtr->tree_view, DataPtr->bv_nb_ptr); proto_tree_draw(DataPtr->edt.tree, DataPtr->tree_view); } @@ -219,16 +224,14 @@ edit_pkt_win_key_pressed_cb(GtkWidget *win _U_, GdkEventKey *event, gpointer use faked_finfo.start = DataPtr->pd_offset; faked_finfo.length = 1; faked_finfo.hfinfo = NULL; - faked_finfo.flags = 0; + faked_finfo.flags = FI_BIG_ENDIAN; faked_finfo.ds_tvb = NULL; - /* XXX, in bitview bitmask single bit. */ + faked_finfo.hfinfo = &faked_hfinfo; 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; - src = src_le->data; - if (tvb && tvb->real_data == DataPtr->pd) { faked_finfo.ds_tvb = tvb; break; @@ -277,7 +280,6 @@ void new_packet_window(GtkWidget *w _U_, gboolean editable) DataPtr->pd = g_malloc(DataPtr->frame->cap_len); memcpy(DataPtr->pd, cfile.pd, DataPtr->frame->cap_len); - 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); @@ -397,7 +399,7 @@ new_tree_view_selection_changed_cb(GtkTreeSelection *sel, gpointer user_data) finfo->ds_tvb && finfo->ds_tvb->real_data >= DataPtr->pd && finfo->ds_tvb->real_data <= DataPtr->pd + DataPtr->frame->cap_len) { /* I haven't really test if TVB subsets works, but why not? :> */ - int pd_offset = DataPtr->pd - finfo->ds_tvb->real_data; + int pd_offset = (int) (DataPtr->pd - finfo->ds_tvb->real_data); /* some code from packet_hex_print */ int finfo_offset = finfo->start; |