diff options
author | João Valverde <j@v6e.pt> | 2022-11-19 19:21:19 +0000 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2022-11-28 15:46:44 +0000 |
commit | a0d77e93298ab2e62600ec835099691b37fce69b (patch) | |
tree | c364f785b543b432a906d9d0779362114026ec2e /ui | |
parent | b4196ab772bd80f0bd95981fa4e70e884bfb8937 (diff) |
dfilter: Return an error object instead of string
Return an struct containing error information. This simplifies
the interface to more easily provide richer diagnostics in the future.
Add an error code besides a human-readable error string to allow
checking programmatically for errors in a robust manner. Currently
there is only a generic error code, it is expected to increase
in the future.
Move error location information to the struct. Change callers and
implementation to use the new interface.
Diffstat (limited to 'ui')
-rw-r--r-- | ui/logray/logray_main.cpp | 7 | ||||
-rw-r--r-- | ui/logray/logray_main_window.cpp | 8 | ||||
-rw-r--r-- | ui/logray/logray_main_window_slots.cpp | 7 | ||||
-rw-r--r-- | ui/qt/coloring_rules_dialog.cpp | 10 | ||||
-rw-r--r-- | ui/qt/iax2_analysis_dialog.cpp | 8 | ||||
-rw-r--r-- | ui/qt/io_graph_dialog.cpp | 8 | ||||
-rw-r--r-- | ui/qt/main.cpp | 7 | ||||
-rw-r--r-- | ui/qt/widgets/syntax_line_edit.cpp | 11 | ||||
-rw-r--r-- | ui/qt/wireshark_main_window.cpp | 16 | ||||
-rw-r--r-- | ui/qt/wireshark_main_window_slots.cpp | 8 | ||||
-rw-r--r-- | ui/tap-rlc-graph.c | 2 | ||||
-rw-r--r-- | ui/tap-tcp-stream.c | 8 |
12 files changed, 51 insertions, 49 deletions
diff --git a/ui/logray/logray_main.cpp b/ui/logray/logray_main.cpp index db2a044614..774840593c 100644 --- a/ui/logray/logray_main.cpp +++ b/ui/logray/logray_main.cpp @@ -428,6 +428,7 @@ int main(int argc, char *qt_argv[]) #endif #endif gchar *err_msg = NULL; + df_error_t *df_err = NULL; QString dfilter, read_filter; #ifdef HAVE_LIBPCAP @@ -960,13 +961,13 @@ int main(int argc, char *qt_argv[]) } else if (global_commandline_info.jfilter != NULL) { dfilter_t *jump_to_filter = NULL; /* try to compile given filter */ - if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &err_msg)) { + if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &df_err)) { // Similar code in MainWindow::mergeCaptureFile(). QMessageBox::warning(main_w, QObject::tr("Invalid Display Filter"), QObject::tr("The filter expression %1 isn't a valid display filter. (%2).") - .arg(global_commandline_info.jfilter, err_msg), + .arg(global_commandline_info.jfilter, df_err->msg), QMessageBox::Ok); - g_free(err_msg); + dfilter_error_free(df_err); } else { /* Filter ok, jump to the first packet matching the filter conditions. Default search direction is forward, but if diff --git a/ui/logray/logray_main_window.cpp b/ui/logray/logray_main_window.cpp index 6c1dd3973a..8151f07b27 100644 --- a/ui/logray/logray_main_window.cpp +++ b/ui/logray/logray_main_window.cpp @@ -1164,16 +1164,16 @@ void LograyMainWindow::mergeCaptureFile() char *tmpname; if (merge_dlg.merge(file_name, read_filter)) { - gchar *err_msg; + df_error_t *df_err = NULL; - if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) { + if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) { /* Not valid. Tell the user, and go back and run the file selection box again once they dismiss the alert. */ // Similar to commandline_info.jfilter section in main(). QMessageBox::warning(this, tr("Invalid Read Filter"), - QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, err_msg)), + QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, df_err->msg)), QMessageBox::Ok); - g_free(err_msg); + dfilter_error_free(df_err); continue; } } else { diff --git a/ui/logray/logray_main_window_slots.cpp b/ui/logray/logray_main_window_slots.cpp index d8465aca6d..70fd5b003c 100644 --- a/ui/logray/logray_main_window_slots.cpp +++ b/ui/logray/logray_main_window_slots.cpp @@ -161,7 +161,7 @@ bool LograyMainWindow::openCaptureFile(QString cf_path, QString read_filter, uns { QString file_name = ""; dfilter_t *rfcode = NULL; - gchar *err_msg; + df_error_t *df_err = NULL; int err; gboolean name_param; gboolean ret = true; @@ -194,7 +194,7 @@ bool LograyMainWindow::openCaptureFile(QString cf_path, QString read_filter, uns goto finish; } - if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) { + if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) { cf_set_rfcode(CaptureFile::globalCapFile(), rfcode); } else { /* Not valid. Tell the user, and go back and run the file @@ -204,8 +204,9 @@ bool LograyMainWindow::openCaptureFile(QString cf_path, QString read_filter, uns QString("The filter expression ") + read_filter + QString(" isn't a valid display filter. (") + - err_msg + QString(")."), + df_err->msg + QString(")."), QMessageBox::Ok); + dfilter_error_free(df_err); if (!name_param) { // go back to the selection dialogue only if the file diff --git a/ui/qt/coloring_rules_dialog.cpp b/ui/qt/coloring_rules_dialog.cpp index 8dc1628dbe..9c446aa1fb 100644 --- a/ui/qt/coloring_rules_dialog.cpp +++ b/ui/qt/coloring_rules_dialog.cpp @@ -174,17 +174,17 @@ void ColoringRulesDialog::rowCountChanged() bool ColoringRulesDialog::isValidFilter(QString filter, QString * error) { dfilter_t *dfp = NULL; - gchar *err_msg; + df_error_t *df_err = NULL; - if (dfilter_compile(filter.toUtf8().constData(), &dfp, &err_msg)) { + if (dfilter_compile(filter.toUtf8().constData(), &dfp, &df_err)) { dfilter_free(dfp); return true; } - if (err_msg) + if (df_err) { - error->append(err_msg); - g_free(err_msg); + error->append(df_err->msg); + dfilter_error_free(df_err); } return false; diff --git a/ui/qt/iax2_analysis_dialog.cpp b/ui/qt/iax2_analysis_dialog.cpp index 07b9b42e01..29d08c6e69 100644 --- a/ui/qt/iax2_analysis_dialog.cpp +++ b/ui/qt/iax2_analysis_dialog.cpp @@ -294,12 +294,12 @@ Iax2AnalysisDialog::Iax2AnalysisDialog(QWidget &parent, CaptureFile &cf) : const gchar filter_text[] = "iax2 && (ip || ipv6)"; #endif dfilter_t *sfcode; - gchar *err_msg; + df_error_t *df_err; /* Try to compile the filter. */ - if (!dfilter_compile(filter_text, &sfcode, &err_msg)) { - err_str_ = QString(err_msg); - g_free(err_msg); + if (!dfilter_compile(filter_text, &sfcode, &df_err)) { + err_str_ = QString(df_err->msg); + dfilter_error_free(df_err); updateWidgets(); return; } diff --git a/ui/qt/io_graph_dialog.cpp b/ui/qt/io_graph_dialog.cpp index da8d94f38d..62482ff093 100644 --- a/ui/qt/io_graph_dialog.cpp +++ b/ui/qt/io_graph_dialog.cpp @@ -1660,12 +1660,12 @@ void IOGraph::setFilter(const QString &filter) if (!full_filter.isEmpty()) { dfilter_t *dfilter; bool status; - gchar *err_msg; - status = dfilter_compile(full_filter.toUtf8().constData(), &dfilter, &err_msg); + df_error_t *df_err = NULL; + status = dfilter_compile(full_filter.toUtf8().constData(), &dfilter, &df_err); dfilter_free(dfilter); if (!status) { - config_err_ = QString::fromUtf8(err_msg); - g_free(err_msg); + config_err_ = QString::fromUtf8(df_err->msg); + dfilter_error_free(df_err); filter_ = full_filter; return; } diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp index b6073d323e..23da6a4083 100644 --- a/ui/qt/main.cpp +++ b/ui/qt/main.cpp @@ -451,6 +451,7 @@ int main(int argc, char *qt_argv[]) #endif #endif gchar *err_msg = NULL; + df_error_t *df_err = NULL; QString dfilter, read_filter; #ifdef HAVE_LIBPCAP @@ -982,13 +983,13 @@ int main(int argc, char *qt_argv[]) } else if (global_commandline_info.jfilter != NULL) { dfilter_t *jump_to_filter = NULL; /* try to compile given filter */ - if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &err_msg)) { + if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &df_err)) { // Similar code in MainWindow::mergeCaptureFile(). QMessageBox::warning(main_w, QObject::tr("Invalid Display Filter"), QObject::tr("The filter expression %1 isn't a valid display filter. (%2).") - .arg(global_commandline_info.jfilter, err_msg), + .arg(global_commandline_info.jfilter, df_err->msg), QMessageBox::Ok); - g_free(err_msg); + dfilter_error_free(df_err); } else { /* Filter ok, jump to the first packet matching the filter conditions. Default search direction is forward, but if diff --git a/ui/qt/widgets/syntax_line_edit.cpp b/ui/qt/widgets/syntax_line_edit.cpp index d5a3502236..776a7d20c5 100644 --- a/ui/qt/widgets/syntax_line_edit.cpp +++ b/ui/qt/widgets/syntax_line_edit.cpp @@ -201,9 +201,8 @@ bool SyntaxLineEdit::checkDisplayFilter(QString filter) } dfilter_t *dfp = NULL; - gchar *err_msg; - dfilter_loc_t loc; - if (dfilter_compile2(filter.toUtf8().constData(), &dfp, &err_msg, &loc)) { + df_error_t *df_err = NULL; + if (dfilter_compile(filter.toUtf8().constData(), &dfp, &df_err)) { GPtrArray *depr = NULL; if (dfp) { depr = dfilter_deprecated_tokens(dfp); @@ -231,9 +230,9 @@ bool SyntaxLineEdit::checkDisplayFilter(QString filter) } } else { setSyntaxState(SyntaxLineEdit::Invalid); - syntax_error_message_ = QString::fromUtf8(err_msg); - syntax_error_message_full_ = createSyntaxErrorMessageFull(filter, syntax_error_message_, loc.col_start, loc.col_len); - g_free(err_msg); + syntax_error_message_ = QString::fromUtf8(df_err->msg); + syntax_error_message_full_ = createSyntaxErrorMessageFull(filter, syntax_error_message_, df_err->loc.col_start, df_err->loc.col_len); + dfilter_error_free(df_err); } dfilter_free(dfp); diff --git a/ui/qt/wireshark_main_window.cpp b/ui/qt/wireshark_main_window.cpp index 76c31ed036..c395bfe6b8 100644 --- a/ui/qt/wireshark_main_window.cpp +++ b/ui/qt/wireshark_main_window.cpp @@ -1227,16 +1227,16 @@ void WiresharkMainWindow::mergeCaptureFile() char *tmpname; if (merge_dlg.merge(file_name, read_filter)) { - gchar *err_msg; + df_error_t *df_err = NULL; - if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) { + if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) { /* Not valid. Tell the user, and go back and run the file selection box again once they dismiss the alert. */ // Similar to commandline_info.jfilter section in main(). QMessageBox::warning(this, tr("Invalid Read Filter"), - QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, err_msg)), + QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, df_err->msg)), QMessageBox::Ok); - g_free(err_msg); + dfilter_error_free(df_err); continue; } } else { @@ -3009,7 +3009,7 @@ QString WiresharkMainWindow::findRtpStreams(QVector<rtpstream_id_t *> *stream_id bool fwd_id_used, rev_id_used; const gchar filter_text[] = "rtp && rtp.version == 2 && rtp.ssrc && (ip || ipv6)"; dfilter_t *sfcode; - gchar *err_msg; + df_error_t *df_err = NULL; /* Try to get the hfid for "rtp.ssrc". */ int hfid_rtp_ssrc = proto_registrar_get_id_byname("rtp.ssrc"); @@ -3018,9 +3018,9 @@ QString WiresharkMainWindow::findRtpStreams(QVector<rtpstream_id_t *> *stream_id } /* Try to compile the filter. */ - if (!dfilter_compile(filter_text, &sfcode, &err_msg)) { - QString err = QString(err_msg); - g_free(err_msg); + if (!dfilter_compile(filter_text, &sfcode, &df_err)) { + QString err = QString(df_err->msg); + dfilter_error_free(df_err); return err; } diff --git a/ui/qt/wireshark_main_window_slots.cpp b/ui/qt/wireshark_main_window_slots.cpp index 15d5d12f9c..0a4f8ce0bd 100644 --- a/ui/qt/wireshark_main_window_slots.cpp +++ b/ui/qt/wireshark_main_window_slots.cpp @@ -188,7 +188,7 @@ bool WiresharkMainWindow::openCaptureFile(QString cf_path, QString read_filter, { QString file_name = ""; dfilter_t *rfcode = NULL; - gchar *err_msg; + df_error_t *df_err = NULL; int err; gboolean name_param; gboolean ret = true; @@ -221,7 +221,7 @@ bool WiresharkMainWindow::openCaptureFile(QString cf_path, QString read_filter, goto finish; } - if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) { + if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) { cf_set_rfcode(CaptureFile::globalCapFile(), rfcode); } else { /* Not valid. Tell the user, and go back and run the file @@ -231,9 +231,9 @@ bool WiresharkMainWindow::openCaptureFile(QString cf_path, QString read_filter, QString("The filter expression ") + read_filter + QString(" isn't a valid display filter. (") + - err_msg + QString(")."), + df_err->msg + QString(")."), QMessageBox::Ok); - + dfilter_error_free(df_err); if (!name_param) { // go back to the selection dialogue only if the file // was selected from this dialogue diff --git a/ui/tap-rlc-graph.c b/ui/tap-rlc-graph.c index 0bfd9c7390..7147c2d913 100644 --- a/ui/tap-rlc-graph.c +++ b/ui/tap-rlc-graph.c @@ -110,7 +110,7 @@ rlc_lte_tap_info *select_rlc_lte_session(capture_file *cf, } /* No real filter yet */ - if (!dfilter_compile("rlc-lte", &sfcode, err_msg)) { + if (!dfilter_compile("rlc-lte", &sfcode, NULL)) { return NULL; } diff --git a/ui/tap-tcp-stream.c b/ui/tap-tcp-stream.c index 6afe110173..4440606fed 100644 --- a/ui/tap-tcp-stream.c +++ b/ui/tap-tcp-stream.c @@ -256,7 +256,7 @@ select_tcpip_session(capture_file *cf) epan_dissect_t edt; dfilter_t *sfcode; guint32 th_stream; - gchar *err_msg; + df_error_t *df_err; GString *error_string; th_t th = {0, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}}; @@ -265,9 +265,9 @@ select_tcpip_session(capture_file *cf) } /* no real filter yet */ - if (!dfilter_compile("tcp", &sfcode, &err_msg)) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg); - g_free(err_msg); + if (!dfilter_compile("tcp", &sfcode, &df_err)) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", df_err->msg); + dfilter_error_free(df_err); return G_MAXUINT32; } |