From cfcbb286712ae392689e7cd1a640b57b611dd277 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sun, 18 Jan 2015 02:22:19 -0800 Subject: Clean up ftype-conversion and dfilter error message string handling. Have dfilter_compile() take an additional gchar ** argument, pointing to a gchar * item that, on error, gets set to point to a g_malloc()ed error string. That removes one bit of global state from the display filter parser, and doesn't impose a fixed limit on the error message strings. Have fvalue_from_string() and fvalue_from_unparsed() take a gchar ** argument, pointer to a gchar * item, rather than an error-reporting function, and set the gchar * item to point to a g_malloc()ed error string on an error. Allow either gchar ** argument to be null; if the argument is null, no error message is allocated or provided. Change-Id: Ibd36b8aaa9bf4234aa6efa1e7fb95f7037493b4c Reviewed-on: https://code.wireshark.org/review/6608 Reviewed-by: Guy Harris --- epan/tap.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'epan/tap.c') diff --git a/epan/tap.c b/epan/tap.c index d2b6fe9183..ba4a1839e5 100644 --- a/epan/tap.c +++ b/epan/tap.c @@ -472,6 +472,7 @@ register_tap_listener(const char *tapname, void *tapdata, const char *fstring, tap_listener_t *tl; int tap_id; GString *error_string; + gchar *err_msg; tap_id=find_tap_id(tapname); if(!tap_id){ @@ -485,11 +486,12 @@ register_tap_listener(const char *tapname, void *tapdata, const char *fstring, tl->needs_redraw=TRUE; tl->flags=flags; if(fstring){ - if(!dfilter_compile(fstring, &tl->code)){ + if(!dfilter_compile(fstring, &tl->code, &err_msg)){ error_string = g_string_new(""); g_string_printf(error_string, "Filter \"%s\" is invalid - %s", - fstring, dfilter_error_msg); + fstring, err_msg); + g_free(err_msg); g_free(tl); return error_string; } @@ -514,6 +516,7 @@ set_tap_dfilter(void *tapdata, const char *fstring) { tap_listener_t *tl=NULL,*tl2; GString *error_string; + gchar *err_msg; if(!tap_listener_queue){ return NULL; @@ -538,11 +541,12 @@ set_tap_dfilter(void *tapdata, const char *fstring) } tl->needs_redraw=TRUE; if(fstring){ - if(!dfilter_compile(fstring, &tl->code)){ + if(!dfilter_compile(fstring, &tl->code, &err_msg)){ error_string = g_string_new(""); g_string_printf(error_string, "Filter \"%s\" is invalid - %s", - fstring, dfilter_error_msg); + fstring, err_msg); + g_free(err_msg); return error_string; } } -- cgit v1.2.3