summaryrefslogtreecommitdiff
path: root/epan/dfilter
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2005-10-31 02:42:22 +0000
committerGuy Harris <guy@alum.mit.edu>2005-10-31 02:42:22 +0000
commitcbce856e9ec5f7641f382260742404d4652dad26 (patch)
treef49c5e1975c7f6c638bd5a54423fbb5c26511080 /epan/dfilter
parent552ee02a937362eb3a1039b348d800d35635bd4f (diff)
downloadwireshark-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.c34
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;