diff options
author | João Valverde <j@v6e.pt> | 2022-12-29 20:06:19 +0000 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2022-12-29 23:48:56 +0000 |
commit | 1400d9272441c0117e24100ed760780045732c2f (patch) | |
tree | 52b142fe041d174c62a4b55b4a5b601eef883f42 /dftest.c | |
parent | ba7917309a92447fb81bde61041377c68edc5fd7 (diff) |
dfilter: Add compilation warning for ambiguous syntax
$ dfilter 'frame contains fc'
Filter: frame contains fc
Warning: Interpreting "fc" as "Fibre Channel". Consider writing :fc or .fc.
(...)
Diffstat (limited to 'dftest.c')
-rw-r--r-- | dftest.c | 56 |
1 files changed, 30 insertions, 26 deletions
@@ -71,14 +71,15 @@ main(int argc, char **argv) cfile_write_failure_message, cfile_close_failure_message }; - char *text; - char *expanded_text; - dfilter_t *df; - gchar *err_msg; - df_error_t *df_err; - GTimer *timer; + char *text = NULL; + char *expanded_text = NULL; + dfilter_t *df = NULL; + gchar *err_msg = NULL; + df_error_t *df_err = NULL; + GTimer *timer = NULL; gdouble elapsed_expand, elapsed_compile; gboolean ok; + int exit_status = 0; cmdarg_err_init(dftest_cmdarg_err, dftest_cmdarg_err_cont); @@ -162,13 +163,9 @@ main(int argc, char **argv) if (expanded_text == NULL) { fprintf(stderr, "dftest: %s\n", err_msg); g_free(err_msg); - g_free(text); - epan_cleanup(); - g_timer_destroy(timer); - exit(2); + exit_status = 2; + goto out; } - g_free(text); - text = NULL; printf("Filter: %s\n", expanded_text); @@ -186,28 +183,35 @@ main(int argc, char **argv) putloc(stderr, df_err->loc); } dfilter_error_free(df_err); - g_free(expanded_text); - epan_cleanup(); - g_timer_destroy(timer); - exit(2); + exit_status = 2; } if (df == NULL) { printf("Filter is empty.\n"); + goto out; } - else { - printf("\nSyntax tree:\n%s\n\n", dfilter_syntax_tree(df)); - dfilter_dump(df); - printf("\nElapsed time: %.f µs (%.f µs + %.f µs)\n", - (elapsed_expand + elapsed_compile) * 1000 * 1000, - elapsed_expand * 1000 * 1000, elapsed_compile * 1000 * 1000); + + for (GSList *l = dfilter_get_warnings(df); l != NULL; l = l->next) { + printf("\nWarning: %s.\n", (char *)l->data); } - dfilter_free(df); + printf("\nSyntax tree:\n%s\n\n", dfilter_syntax_tree(df)); + dfilter_dump(df); + printf("\nElapsed time: %.f µs (%.f µs + %.f µs)\n", + (elapsed_expand + elapsed_compile) * 1000 * 1000, + elapsed_expand * 1000 * 1000, elapsed_compile * 1000 * 1000); + +out: epan_cleanup(); - g_free(expanded_text); - g_timer_destroy(timer); - exit(0); + if (df != NULL) + dfilter_free(df); + if (text != NULL) + g_free(text); + if (expanded_text != NULL) + g_free(expanded_text); + if (timer != NULL) + g_timer_destroy(timer); + exit(exit_status); } /* |