summaryrefslogtreecommitdiff
path: root/epan/proto.c
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2015-08-23 20:11:06 +0200
committerStig Bjørlykke <stig@bjorlykke.org>2015-08-24 06:53:24 +0000
commit216f06b2996c4ba86086b9d5ed226fc36621f8f6 (patch)
treeae6b174fb2361103211efe40b7cba237903aa886 /epan/proto.c
parent984f87aba78ffd1359c4b24a2c64c886f9d791c6 (diff)
downloadwireshark-216f06b2996c4ba86086b9d5ed226fc36621f8f6.tar.gz
Lua: Support deregister ProtoField with existing abbrev
Change-Id: Icb06792bb2662dcee6e5495359ceef420a5b4498 Reviewed-on: https://code.wireshark.org/review/10212 Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org>
Diffstat (limited to 'epan/proto.c')
-rw-r--r--epan/proto.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/epan/proto.c b/epan/proto.c
index 4b10b356e4..10f436835a 100644
--- a/epan/proto.c
+++ b/epan/proto.c
@@ -4362,6 +4362,29 @@ hfinfo_same_name_get_prev(const header_field_info *hfinfo)
return dup_hfinfo;
}
+static void
+hfinfo_remove_fram_gpa_name_map(const header_field_info *hfinfo)
+{
+ if (!hfinfo->same_name_next && hfinfo->same_name_prev_id == -1) {
+ /* No hfinfo with the same name */
+ g_hash_table_steal(gpa_name_map, hfinfo->abbrev);
+ return;
+ }
+
+ if (hfinfo->same_name_next) {
+ hfinfo->same_name_next->same_name_prev_id = hfinfo->same_name_prev_id;
+ }
+
+ if (hfinfo->same_name_prev_id != -1) {
+ header_field_info *same_name_prev = hfinfo_same_name_get_prev(hfinfo);
+ same_name_prev->same_name_next = hfinfo->same_name_next;
+ if (!hfinfo->same_name_next) {
+ /* It's always the latest added hfinfo which is stored in gpa_name_map */
+ g_hash_table_insert(gpa_name_map, (gpointer) (same_name_prev->abbrev), same_name_prev);
+ }
+ }
+}
+
/* -------------------------- */
const gchar *
proto_custom_set(proto_tree* tree, GSList *field_ids, gint occurrence,
@@ -5266,7 +5289,7 @@ proto_deregister_protocol(const char *short_name)
for (i = 0; i < protocol->fields->len; i++) {
hfinfo = (header_field_info *)g_ptr_array_index(protocol->fields, i);
- g_hash_table_steal(gpa_name_map, hfinfo->abbrev);
+ hfinfo_remove_fram_gpa_name_map(hfinfo);
g_ptr_array_add(deregistered_fields, gpa_hfinfo.hfi[hfinfo->id]);
}
g_ptr_array_free(protocol->fields, TRUE);