forked from osmocom/wireshark
tshark: Add underline to dfilter errors
$ tshark -Y 'frame.number == 123foobar and ip' -r /dev/null tshark: "123foobar" is not a valid number. frame.number == 123foobar and ip ^~~~~~~~~
This commit is contained in:
parent
fb3bdffaba
commit
24443fa33a
|
@ -67,6 +67,9 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp,
|
|||
#define dfilter_compile(text, dfp, err_msg) \
|
||||
dfilter_compile_real(text, dfp, err_msg, NULL, __func__, FALSE, TRUE)
|
||||
|
||||
#define dfilter_compile2(text, dfp, err_msg, loc_ptr) \
|
||||
dfilter_compile_real(text, dfp, err_msg, loc_ptr, __func__, FALSE, TRUE)
|
||||
|
||||
/* Frees all memory used by dfilter, and frees
|
||||
* the dfilter itself. */
|
||||
WS_DLL_PUBLIC
|
||||
|
|
13
tshark.c
13
tshark.c
|
@ -722,7 +722,7 @@ must_do_dissection(dfilter_t *rfcode, dfilter_t *dfcode,
|
|||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
char *err_msg;
|
||||
char *err_msg, *err_msg_cont;
|
||||
static const struct report_message_routines tshark_report_routines = {
|
||||
failure_message,
|
||||
failure_message,
|
||||
|
@ -777,6 +777,7 @@ main(int argc, char *argv[])
|
|||
gchar *volatile dfilter = NULL;
|
||||
dfilter_t *rfcode = NULL;
|
||||
dfilter_t *dfcode = NULL;
|
||||
dfilter_loc_t df_loc;
|
||||
e_prefs *prefs_p;
|
||||
gchar *output_only = NULL;
|
||||
gchar *volatile pdu_export_arg = NULL;
|
||||
|
@ -2013,9 +2014,12 @@ main(int argc, char *argv[])
|
|||
|
||||
if (rfilter != NULL) {
|
||||
ws_debug("Compiling read filter: '%s'", rfilter);
|
||||
if (!dfilter_compile(rfilter, &rfcode, &err_msg)) {
|
||||
if (!dfilter_compile2(rfilter, &rfcode, &err_msg, &df_loc)) {
|
||||
cmdarg_err("%s", err_msg);
|
||||
err_msg_cont = ws_strdup_error_offset(NULL, df_loc.col_start, df_loc.col_len);
|
||||
cmdarg_err_cont(" %s\n %s\n", rfilter, err_msg_cont);
|
||||
g_free(err_msg);
|
||||
g_free(err_msg_cont);
|
||||
epan_cleanup();
|
||||
extcap_cleanup();
|
||||
|
||||
|
@ -2040,9 +2044,12 @@ main(int argc, char *argv[])
|
|||
|
||||
if (dfilter != NULL) {
|
||||
ws_debug("Compiling display filter: '%s'", dfilter);
|
||||
if (!dfilter_compile(dfilter, &dfcode, &err_msg)) {
|
||||
if (!dfilter_compile2(dfilter, &dfcode, &err_msg, &df_loc)) {
|
||||
cmdarg_err("%s", err_msg);
|
||||
err_msg_cont = ws_strdup_error_offset(NULL, df_loc.col_start, df_loc.col_len);
|
||||
cmdarg_err_cont(" %s\n %s\n", dfilter, err_msg_cont);
|
||||
g_free(err_msg);
|
||||
g_free(err_msg_cont);
|
||||
epan_cleanup();
|
||||
extcap_cleanup();
|
||||
|
||||
|
|
|
@ -548,6 +548,26 @@ ws_strerrorname_r(int errnum, char *buf, size_t buf_size)
|
|||
return buf;
|
||||
}
|
||||
|
||||
char *
|
||||
ws_strdup_error_offset(wmem_allocator_t *allocator, int offset, size_t len)
|
||||
{
|
||||
if (offset < 0)
|
||||
return NULL;
|
||||
|
||||
wmem_strbuf_t *buf = wmem_strbuf_sized_new(allocator, offset + len, 0);
|
||||
|
||||
for (int i = 0; i < offset; i++) {
|
||||
wmem_strbuf_append_c(buf, ' ');
|
||||
}
|
||||
wmem_strbuf_append_c(buf, '^');
|
||||
|
||||
for (size_t l = len; l > 1; l--) {
|
||||
wmem_strbuf_append_c(buf, '~');
|
||||
}
|
||||
|
||||
return wmem_strbuf_finalize(buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Editor modelines - https://www.wireshark.org/tools/modelines.html
|
||||
*
|
||||
|
|
|
@ -218,6 +218,9 @@ gchar printable_char_or_period(gchar c);
|
|||
WS_DLL_PUBLIC WS_RETNONNULL
|
||||
const char *ws_strerrorname_r(int errnum, char *buf, size_t buf_size);
|
||||
|
||||
WS_DLL_PUBLIC
|
||||
char *ws_strdup_error_offset(wmem_allocator_t *allocator, int offset, size_t len);
|
||||
|
||||
/* To pass one of two strings, singular or plural */
|
||||
#define plurality(d,s,p) ((d) == 1 ? (s) : (p))
|
||||
|
||||
|
|
Loading…
Reference in New Issue