diff options
author | Matthieu Coudron <mattator@gmail.com> | 2015-09-12 17:40:55 +0200 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2015-09-12 20:19:59 +0000 |
commit | 68dd2c823aff0c79263c9bf8feabe031b747c0cc (patch) | |
tree | 4fd82ddc89ac55a8e46fbc17aea1a6a78549a933 | |
parent | 722174359edf4e756904d8752c1f65247fd2d20d (diff) |
Display the name of the invalid field when tshark is run with -T fields
-e invalidfield
Change-Id: Iaf8733096d9e1d15510a38363397b1dcd972ff59
Reviewed-on: https://code.wireshark.org/review/10504
Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r-- | epan/print.c | 16 | ||||
-rw-r--r-- | epan/print.h | 2 | ||||
-rw-r--r-- | tshark.c | 16 |
3 files changed, 20 insertions, 14 deletions
diff --git a/epan/print.c b/epan/print.c index 4ab69c8a36..f97c5c3be0 100644 --- a/epan/print.c +++ b/epan/print.c @@ -1075,30 +1075,28 @@ static void output_field_check(void *data, void *user_data) { gchar *field = (gchar *)data; - gboolean *all_valid = (gboolean *)user_data; + GSList **invalid_fields = (GSList **)user_data; if (!strncmp(field, COLUMN_FIELD_FILTER, strlen(COLUMN_FIELD_FILTER))) return; if (!proto_registrar_get_byname(field)) { - g_warning("'%s' isn't a valid field!", field); - *all_valid = FALSE; + *invalid_fields = g_slist_prepend(*invalid_fields, field); } } -gboolean +GSList * output_fields_valid(output_fields_t *fields) { - gboolean all_valid = TRUE; - + GSList *invalid_fields = NULL; if (fields->fields == NULL) { - return TRUE; + return NULL; } - g_ptr_array_foreach(fields->fields, output_field_check, &all_valid); + g_ptr_array_foreach(fields->fields, output_field_check, &invalid_fields); - return all_valid; + return invalid_fields; } gboolean output_fields_set_option(output_fields_t *info, gchar *option) diff --git a/epan/print.h b/epan/print.h index 334de3a29b..8ee35e04ba 100644 --- a/epan/print.h +++ b/epan/print.h @@ -88,7 +88,7 @@ typedef struct _output_fields output_fields_t; WS_DLL_PUBLIC output_fields_t* output_fields_new(void); WS_DLL_PUBLIC void output_fields_free(output_fields_t* info); WS_DLL_PUBLIC void output_fields_add(output_fields_t* info, const gchar* field); -WS_DLL_PUBLIC gboolean output_fields_valid(output_fields_t* info); +WS_DLL_PUBLIC GSList * output_fields_valid(output_fields_t* info); WS_DLL_PUBLIC gsize output_fields_num_fields(output_fields_t* info); WS_DLL_PUBLIC gboolean output_fields_set_option(output_fields_t* info, gchar* option); WS_DLL_PUBLIC void output_fields_list_options(FILE *fh); @@ -2030,11 +2030,19 @@ DIAG_ON(cast-qual) /* At this point MATE will have registered its field array so we can check if the fields specified by the user are all good. */ - if (!output_fields_valid(output_fields)) { - cmdarg_err("Some fields aren't valid"); - return 1; - } + { + GSList* it = NULL; + GSList *invalid_fields = output_fields_valid(output_fields); + if (invalid_fields != NULL) { + cmdarg_err("Some fields aren't valid:"); + for (it=invalid_fields; it != NULL; it = g_slist_next(it)) { + cmdarg_err_cont("\t%s", (gchar *)it->data); + } + g_slist_free(invalid_fields); + return 1; + } + } #ifdef HAVE_LIBPCAP /* We currently don't support taps, or printing dissected packets, if we're writing to a pipe. */ |