diff options
author | Gerald Combs <gerald@wireshark.org> | 2015-02-20 13:44:27 -0800 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2015-02-20 23:16:54 +0000 |
commit | ead79e6aa15210cf83032698d7d17eb54a3d0857 (patch) | |
tree | 99484c25885f5c277f8cb4b2a54d7fac2534b51a | |
parent | 422ad100aad4c076ab05f1373dad59481ea12072 (diff) |
Clear the filter expression list in prefs.c.
Move filter_expression_nuke from ui/gtk to epan and rename it to
filter_expression_free. Call it in prefs_reset along with the other
preference reset routines.
This keeps the Qt filter toolbar from filling up with duplicate
expressions when the profile changes.
Change-Id: I9fae9a7b48944079ea342a126979d9e79af0d22b
Reviewed-on: https://code.wireshark.org/review/7281
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
-rw-r--r-- | debian/libwireshark0.symbols | 1 | ||||
-rw-r--r-- | epan/filter_expressions.c | 12 | ||||
-rw-r--r-- | epan/filter_expressions.h | 17 | ||||
-rw-r--r-- | epan/prefs.c | 7 | ||||
-rw-r--r-- | ui/gtk/filter_expression_save_dlg.c | 14 | ||||
-rw-r--r-- | ui/gtk/main.c | 1 |
6 files changed, 39 insertions, 13 deletions
diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols index 73462f2e26..c42d01643b 100644 --- a/debian/libwireshark0.symbols +++ b/debian/libwireshark0.symbols @@ -499,6 +499,7 @@ libwireshark.so.0 libwireshark0 #MINVER# fc_fc4_val@Base 1.9.1 fetch_tapped_data@Base 1.9.1 filter_expression_new@Base 1.9.1 + filter_expression_free@Base 1.99.3 find_and_mark_frame_depended_upon@Base 1.12.0~rc1 find_circuit@Base 1.9.1 find_color_conversation_filter@Base 1.99.2 diff --git a/epan/filter_expressions.c b/epan/filter_expressions.c index 9d03213107..936fca96c7 100644 --- a/epan/filter_expressions.c +++ b/epan/filter_expressions.c @@ -76,6 +76,18 @@ filter_expression_init(gboolean enable_prefs) prefs.filter_expressions = pfilter_expression_head; } +void +filter_expression_free(struct filter_expression *list_head) +{ + if (list_head == NULL) + return; + filter_expression_free(list_head->next); + g_free(list_head->label); + g_free(list_head->expression); +} + + + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * diff --git a/epan/filter_expressions.h b/epan/filter_expressions.h index 84d5fe9d7d..fa2ec7790d 100644 --- a/epan/filter_expressions.h +++ b/epan/filter_expressions.h @@ -29,6 +29,10 @@ extern "C" { #endif /* __cplusplus */ +/** @file + * Filter expressions. + */ + struct filter_expression { gpointer button; /* Filter toolbar */ gchar *label; @@ -43,12 +47,25 @@ struct filter_expression { WS_DLL_PUBLIC struct filter_expression **pfilter_expression_head; +/** Create a filter expression + * + * @param label Label (button) text for the expression. + * @param expr The display filter for the expression. + * @param enabled Determines if the expression is shown in the UI. + * @return A newly allocated and initialized struct filter_expression. + */ WS_DLL_PUBLIC struct filter_expression *filter_expression_new(const gchar *label, const gchar *expr, const gboolean enabled); void filter_expression_init(gboolean prefs); +/** Clear the filter expression list. + * Frees each item in the list. Caller should set list_head to NULL afterward. + */ +WS_DLL_PUBLIC +void filter_expression_free(struct filter_expression *list_head); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/epan/prefs.c b/epan/prefs.c index 43c3d6948c..028fee457a 100644 --- a/epan/prefs.c +++ b/epan/prefs.c @@ -3125,6 +3125,13 @@ prefs_reset(void) oids_cleanup(); /* + * Free the filter expression list. + */ + + filter_expression_free(*pfilter_expression_head); + *pfilter_expression_head = NULL; + + /* * Reset the non-dissector preferences. */ init_prefs(); diff --git a/ui/gtk/filter_expression_save_dlg.c b/ui/gtk/filter_expression_save_dlg.c index d41f563a8b..8ce4c60cde 100644 --- a/ui/gtk/filter_expression_save_dlg.c +++ b/ui/gtk/filter_expression_save_dlg.c @@ -87,16 +87,6 @@ filter_expression_save_dlg_init(gpointer filter_tb, gpointer filter_te) } } -static void -filter_expression_nuke(struct filter_expression *fe) -{ - if (fe == NULL) - return; - filter_expression_nuke(fe->next); - g_free(fe->label); - g_free(fe->expression); -} - void filter_expression_reinit(int what) { @@ -113,7 +103,7 @@ filter_expression_reinit(int what) } } if (what == FILTER_EXPRESSION_REINIT_DESTROY) { - filter_expression_nuke(*pfilter_expression_head); + filter_expression_free(*pfilter_expression_head); *pfilter_expression_head = NULL; return; } @@ -146,7 +136,7 @@ filter_expression_reinit(int what) filter_expression_new(fe->label, fe->expression, fe->enabled); } - filter_expression_nuke(prevhead); + filter_expression_free(prevhead); /* Create the buttons again */ fe = *pfilter_expression_head; diff --git a/ui/gtk/main.c b/ui/gtk/main.c index bfdee9669a..a931741104 100644 --- a/ui/gtk/main.c +++ b/ui/gtk/main.c @@ -3798,7 +3798,6 @@ void change_configuration_profile (const gchar *profile_name) /* Set profile name and update the status bar */ set_profile_name (profile_name); profile_bar_update (); - filter_expression_reinit(FILTER_EXPRESSION_REINIT_DESTROY); /* Reset current preferences and apply the new */ prefs_reset(); |