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>
This commit is contained in:
Stig Bjørlykke 2015-08-23 20:11:06 +02:00
parent 984f87aba7
commit 216f06b299
1 changed files with 24 additions and 1 deletions

View File

@ -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);