summaryrefslogtreecommitdiff
path: root/epan/decode_as.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/decode_as.c')
-rw-r--r--epan/decode_as.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/epan/decode_as.c b/epan/decode_as.c
index e54802f10f..f66f17ca19 100644
--- a/epan/decode_as.c
+++ b/epan/decode_as.c
@@ -77,15 +77,50 @@ void decode_as_default_populate_list(const gchar *table_name, decode_as_add_to_l
gboolean decode_as_default_reset(const char *name, const gpointer pattern)
{
- dissector_reset_uint(name, GPOINTER_TO_UINT(pattern));
+ switch (get_dissector_table_selector_type(name)) {
+ case FT_UINT8:
+ case FT_UINT16:
+ case FT_UINT24:
+ case FT_UINT32:
+ dissector_reset_uint(name, GPOINTER_TO_UINT(pattern));
+ return TRUE;
+ case FT_STRING:
+ case FT_STRINGZ:
+ case FT_UINT_STRING:
+ case FT_STRINGZPAD:
+ dissector_reset_string(name, (!pattern)?"":(gchar *) pattern);
+ return TRUE;
+ default:
+ return FALSE;
+ };
+
return TRUE;
}
gboolean decode_as_default_change(const char *name, const gpointer pattern, gpointer handle, gchar* list_name _U_)
{
dissector_handle_t* dissector = (dissector_handle_t*)handle;
- if (dissector != NULL)
- dissector_change_uint(name, GPOINTER_TO_UINT(pattern), *dissector);
+ if (dissector != NULL) {
+ switch (get_dissector_table_selector_type(name)) {
+ case FT_UINT8:
+ case FT_UINT16:
+ case FT_UINT24:
+ case FT_UINT32:
+ dissector_change_uint(name, GPOINTER_TO_UINT(pattern), *dissector);
+ return TRUE;
+ case FT_STRING:
+ case FT_STRINGZ:
+ case FT_UINT_STRING:
+ case FT_STRINGZPAD:
+ dissector_change_string(name, (!pattern)?"":(gchar *) pattern, *dissector);
+ return TRUE;
+ default:
+ return FALSE;
+ };
+
+ return FALSE;
+ }
+
return TRUE;
}