diff options
author | Guy Harris <guy@alum.mit.edu> | 2005-10-31 02:42:22 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2005-10-31 02:42:22 +0000 |
commit | cbce856e9ec5f7641f382260742404d4652dad26 (patch) | |
tree | f49c5e1975c7f6c638bd5a54423fbb5c26511080 /epan/dfilter | |
parent | 552ee02a937362eb3a1039b348d800d35635bd4f (diff) | |
download | wireshark-cbce856e9ec5f7641f382260742404d4652dad26.tar.gz |
When printing the code for a display filter:
print register numbers as unsigned (they're guint32);
when printing a PUT_FVALUE instruction, show the value as well
as the type of the value.
That requires that a bunch of types get to_repr methods; add them for
PCRE (FTREPR_DFILTER-only - show the regular expression as text),
tvbuffs (FTREPR_DFILTER_only - show the data as a hex string), integral
types, string types other than FT_STRING, and FT_IPv6.
That means we can use fvalue_to_string_repr() for FT_IPXNET and FT_IPv6
in proto_construct_dfilter_string(), and that we don't need to handle
integer and floating types specially in MATE.
Fix some problems with the PCRE execution code for tvbuff types.
svn path=/trunk/; revision=16369
Diffstat (limited to 'epan/dfilter')
-rw-r--r-- | epan/dfilter/dfvm.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/epan/dfilter/dfvm.c b/epan/dfilter/dfvm.c index ee99069603..a3b296ee99 100644 --- a/epan/dfilter/dfvm.c +++ b/epan/dfilter/dfvm.c @@ -2,10 +2,9 @@ * $Id$ * * Ethereal - Network traffic analyzer - * By Gerald Combs <gerald@zing.org> + * By Gerald Combs <gerald@ethereal.com> * Copyright 2001 Gerald Combs * - * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 @@ -93,6 +92,7 @@ dfvm_dump(FILE *f, GPtrArray *insns) dfvm_value_t *arg2; dfvm_value_t *arg3; dfvm_value_t *arg4; + char *value_str; length = insns->len; @@ -111,66 +111,70 @@ dfvm_dump(FILE *f, GPtrArray *insns) break; case READ_TREE: - fprintf(f, "%05d READ_TREE\t\t%s -> reg#%d\n", + fprintf(f, "%05d READ_TREE\t\t%s -> reg#%u\n", id, arg1->value.hfinfo->abbrev, arg2->value.numeric); break; case PUT_FVALUE: - fprintf(f, "%05d PUT_FVALUE\t<%s> -> reg#%d\n", - id, fvalue_type_name(arg1->value.fvalue), + value_str = fvalue_to_string_repr(arg1->value.fvalue, + FTREPR_DFILTER, NULL); + fprintf(f, "%05d PUT_FVALUE\t%s <%s> -> reg#%u\n", + id, value_str, + fvalue_type_name(arg1->value.fvalue), arg2->value.numeric); + g_free(value_str); break; case MK_RANGE: - fprintf(f, "%05d MK_RANGE\t\treg#%d[?] -> reg#%d\n", + fprintf(f, "%05d MK_RANGE\t\treg#%u[?] -> reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_EQ: - fprintf(f, "%05d ANY_EQ\t\treg#%d == reg#%d\n", + fprintf(f, "%05d ANY_EQ\t\treg#%u == reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_NE: - fprintf(f, "%05d ANY_NE\t\treg#%d == reg#%d\n", + fprintf(f, "%05d ANY_NE\t\treg#%u == reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_GT: - fprintf(f, "%05d ANY_GT\t\treg#%d == reg#%d\n", + fprintf(f, "%05d ANY_GT\t\treg#%u == reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_GE: - fprintf(f, "%05d ANY_GE\t\treg#%d == reg#%d\n", + fprintf(f, "%05d ANY_GE\t\treg#%u == reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_LT: - fprintf(f, "%05d ANY_LT\t\treg#%d == reg#%d\n", + fprintf(f, "%05d ANY_LT\t\treg#%u == reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_LE: - fprintf(f, "%05d ANY_LE\t\treg#%d == reg#%d\n", + fprintf(f, "%05d ANY_LE\t\treg#%u == reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_BITWISE_AND: - fprintf(f, "%05d ANY_BITWISE_AND\t\treg#%d == reg#%d\n", + fprintf(f, "%05d ANY_BITWISE_AND\t\treg#%u == reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_CONTAINS: - fprintf(f, "%05d ANY_CONTAINS\treg#%d contains reg#%d\n", + fprintf(f, "%05d ANY_CONTAINS\treg#%u contains reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; case ANY_MATCHES: - fprintf(f, "%05d ANY_MATCHES\treg#%d matches reg#%d\n", + fprintf(f, "%05d ANY_MATCHES\treg#%u matches reg#%u\n", id, arg1->value.numeric, arg2->value.numeric); break; |