aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/prefs.c17
-rw-r--r--epan/prefs.h1
-rw-r--r--ui/preference_utils.c18
-rw-r--r--ui/preference_utils.h4
-rw-r--r--ui/qt/filter_expression_frame.cpp6
-rw-r--r--ui/qt/widgets/filter_expression_toolbar.cpp15
6 files changed, 45 insertions, 16 deletions
diff --git a/epan/prefs.c b/epan/prefs.c
index b74ab1f419..96d242d7e2 100644
--- a/epan/prefs.c
+++ b/epan/prefs.c
@@ -5388,6 +5388,8 @@ set_pref(gchar *pref_name, const gchar *value, void *private_data _U_,
filter_expression_new(filter_label, value, "", filter_enabled);
g_free(filter_label);
filter_label = NULL;
+ /* Remember to save the new UAT to file. */
+ prefs.filter_expressions_old = TRUE;
} else if (strcmp(pref_name, "gui.version_in_start_page") == 0) {
/* Convert deprecated value to closest current equivalent */
if (g_ascii_strcasecmp(value, "true") == 0) {
@@ -6586,6 +6588,21 @@ write_prefs(char **pf_path_return)
pf = stdout;
}
+ /*
+ * If the preferences file is being written, be sure to write UAT files
+ * first that were migrated from the preferences file.
+ */
+ if (pf_path_return != NULL) {
+ if (prefs.filter_expressions_old) {
+ char *err = NULL;
+ prefs.filter_expressions_old = FALSE;
+ if (!uat_save(uat_get_table_by_name("Display expressions"), &err)) {
+ g_warning("Unable to save Display expressions: %s", err);
+ g_free(err);
+ }
+ }
+ }
+
fputs("# Configuration file for Wireshark " VERSION ".\n"
"#\n"
"# This file is regenerated each time preferences are saved within\n"
diff --git a/epan/prefs.h b/epan/prefs.h
index f88553ea83..15bff0759a 100644
--- a/epan/prefs.h
+++ b/epan/prefs.h
@@ -213,6 +213,7 @@ typedef struct _e_prefs {
gboolean enable_incomplete_dissectors_check;
gboolean incomplete_dissectors_check_debug;
gboolean strict_conversation_tracking_heuristics;
+ gboolean filter_expressions_old; /* TRUE if old filter expressions preferences were loaded. */
gboolean gui_update_enabled;
software_update_channel_e gui_update_channel;
gint gui_update_interval;
diff --git a/ui/preference_utils.c b/ui/preference_utils.c
index c1a4b0c9b5..e0b1cbfbdb 100644
--- a/ui/preference_utils.c
+++ b/ui/preference_utils.c
@@ -18,6 +18,7 @@
#include <epan/prefs-int.h>
#include <epan/packet.h>
#include <epan/decode_as.h>
+#include <epan/uat-int.h>
#ifdef HAVE_LIBPCAP
#include "capture_opts.h"
@@ -213,6 +214,23 @@ column_prefs_remove_nth(gint col)
column_prefs_remove_link(g_list_nth(prefs.col_list, col));
}
+void save_migrated_uat(const char *uat_name, gboolean *old_pref)
+{
+ char *err = NULL;
+
+ if (!uat_save(uat_get_table_by_name(uat_name), &err)) {
+ g_warning("Unable to save %s: %s", uat_name, err);
+ g_free(err);
+ return;
+ }
+
+ // Ensure that any old preferences are removed after successful migration.
+ if (*old_pref) {
+ *old_pref = FALSE;
+ prefs_main_write();
+ }
+}
+
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
diff --git a/ui/preference_utils.h b/ui/preference_utils.h
index aaed9b6ab9..4ffc30be58 100644
--- a/ui/preference_utils.h
+++ b/ui/preference_utils.h
@@ -83,6 +83,10 @@ void column_prefs_remove_link(GList* col_link);
*/
void column_prefs_remove_nth(gint col);
+/** Save the UAT and complete migration of old preferences by writing the main
+ * preferences file (if necessary).
+ */
+void save_migrated_uat(const char *uat_name, gboolean *old_pref);
#ifdef __cplusplus
}
diff --git a/ui/qt/filter_expression_frame.cpp b/ui/qt/filter_expression_frame.cpp
index 08fdd0922d..c976466842 100644
--- a/ui/qt/filter_expression_frame.cpp
+++ b/ui/qt/filter_expression_frame.cpp
@@ -11,7 +11,6 @@
#include <ui_filter_expression_frame.h>
#include <epan/filter_expressions.h>
-#include <epan/uat-int.h>
#include <ui/preference_utils.h>
#include <ui/qt/models/uat_model.h>
@@ -122,7 +121,6 @@ void FilterExpressionFrame::on_displayFilterLineEdit_textChanged(const QString)
void FilterExpressionFrame::on_buttonBox_accepted()
{
- gchar* err = NULL;
QByteArray label_ba = ui->labelLineEdit->text().toUtf8();
QByteArray expr_ba = ui->displayFilterLineEdit->text().toUtf8();
QByteArray comment_ba = ui->commentLineEdit->text().toUtf8();
@@ -147,12 +145,10 @@ void FilterExpressionFrame::on_buttonBox_accepted()
{
filter_expression_new(label_ba.constData(), expr_ba.constData(), comment_ba.constData(), TRUE);
}
- uat_save(uat_get_table_by_name("Display expressions"), &err);
+ save_migrated_uat("Display expressions", &prefs.filter_expressions_old);
on_buttonBox_rejected();
emit filterExpressionsChanged();
-
- g_free(err);
}
void FilterExpressionFrame::on_buttonBox_rejected()
diff --git a/ui/qt/widgets/filter_expression_toolbar.cpp b/ui/qt/widgets/filter_expression_toolbar.cpp
index f0b4c5e307..ed78e0cbbc 100644
--- a/ui/qt/widgets/filter_expression_toolbar.cpp
+++ b/ui/qt/widgets/filter_expression_toolbar.cpp
@@ -14,6 +14,7 @@
#include <ui/qt/wireshark_application.h>
#include <epan/filter_expressions.h>
+#include <ui/preference_utils.h>
#include <QApplication>
#include <QFrame>
@@ -114,7 +115,6 @@ void FilterExpressionToolBar::filterExpressionsChanged()
void FilterExpressionToolBar::removeFilter()
{
- gchar* err = NULL;
UatModel * uatModel = new UatModel(this, "Display expressions");
QString label = ((QAction *)sender())->property(dfe_property_label_).toString();
@@ -126,8 +126,7 @@ void FilterExpressionToolBar::removeFilter()
if ( rowIndex.isValid() ) {
uatModel->removeRow(rowIndex.row());
- uat_save(uat_get_table_by_name("Display expressions"), &err);
- g_free(err);
+ save_migrated_uat("Display expressions", &prefs.filter_expressions_old);
filterExpressionsChanged();
}
}
@@ -155,8 +154,6 @@ void FilterExpressionToolBar::onActionMoved(QAction* action, int oldPos, int new
void FilterExpressionToolBar::disableFilter()
{
- gchar* err = NULL;
-
QString label = ((QAction *)sender())->property(dfe_property_label_).toString();
QString expr = ((QAction *)sender())->property(dfe_property_expression_).toString();
@@ -167,8 +164,7 @@ void FilterExpressionToolBar::disableFilter()
if ( rowIndex.isValid() ) {
uatModel->setData(rowIndex, QVariant::fromValue(false));
- uat_save(uat_get_table_by_name("Display expressions"), &err);
- g_free(err);
+ save_migrated_uat("Display expressions", &prefs.filter_expressions_old);
filterExpressionsChanged();
}
}
@@ -189,16 +185,13 @@ void FilterExpressionToolBar::editFilter()
void FilterExpressionToolBar::onFilterDropped(QString description, QString filter)
{
- gchar* err = NULL;
if ( filter.length() == 0 )
return;
filter_expression_new(qUtf8Printable(description),
qUtf8Printable(filter), qUtf8Printable(description), TRUE);
- uat_save(uat_get_table_by_name("Display expressions"), &err);
- g_free(err);
-
+ save_migrated_uat("Display expressions", &prefs.filter_expressions_old);
filterExpressionsChanged();
}