aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dfilter/dfvm.c
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>2001-02-27 19:23:30 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>2001-02-27 19:23:30 +0000
commit2a50f8af4f18dab44ee5414aa2c47fef3ab18e9d (patch)
tree9fba9ac63ac5a5f60b1519bb9bcf76112e1fbd78 /epan/dfilter/dfvm.c
parenta954a9d276678fb6ff357ffa7be0a1609415fc0d (diff)
Add Ed Warnicke's drange code to the new dfilter system.
Not supported yet: [i-j] (offset-offset) Supported: [i] index [i:j] offset:length [:j] 0:offset [i:] offset:end [x,y] concatenation of slices svn path=/trunk/; revision=3080
Diffstat (limited to 'epan/dfilter/dfvm.c')
-rw-r--r--epan/dfilter/dfvm.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/epan/dfilter/dfvm.c b/epan/dfilter/dfvm.c
index b5c4e40453..6f2f2b9942 100644
--- a/epan/dfilter/dfvm.c
+++ b/epan/dfilter/dfvm.c
@@ -1,5 +1,5 @@
/*
- * $Id: dfvm.c,v 1.2 2001/02/01 20:31:18 gram Exp $
+ * $Id: dfvm.c,v 1.3 2001/02/27 19:23:28 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -37,7 +37,6 @@ dfvm_insn_new(dfvm_opcode_t op)
insn->arg1 = NULL;
insn->arg2 = NULL;
insn->arg3 = NULL;
- insn->arg4 = NULL;
return insn;
}
@@ -53,9 +52,6 @@ dfvm_insn_free(dfvm_insn_t *insn)
if (insn->arg3) {
dfvm_value_free(insn->arg3);
}
- if (insn->arg4) {
- dfvm_value_free(insn->arg4);
- }
g_free(insn);
}
@@ -78,6 +74,9 @@ dfvm_value_free(dfvm_value_t *v)
case FVALUE:
fvalue_free(v->value.fvalue);
break;
+ case DRANGE:
+ drange_free(v->value.drange);
+ break;
default:
/* nothing */
;
@@ -125,11 +124,9 @@ dfvm_dump(FILE *f, GPtrArray *insns)
break;
case MK_RANGE:
- fprintf(f, "%05d MK_RANGE\t\treg#%d[%d:%d] -> reg#%d\n",
+ fprintf(f, "%05d MK_RANGE\t\treg#%d[?] -> reg#%d\n",
id,
arg1->value.numeric,
- arg3->value.numeric,
- arg4->value.numeric,
arg2->value.numeric);
break;
@@ -275,7 +272,7 @@ free_register_overhead(dfilter_t* df)
* to make a new list of fvalue_t's (which are ranges, or byte-slices),
* and puts the new list into a new register. */
static void
-mk_range(dfilter_t *df, int from_reg, int to_reg, int start, int end)
+mk_range(dfilter_t *df, int from_reg, int to_reg, drange *drange)
{
GList *from_list, *to_list;
fvalue_t *old_fv, *new_fv;
@@ -285,8 +282,8 @@ mk_range(dfilter_t *df, int from_reg, int to_reg, int start, int end)
while (from_list) {
old_fv = from_list->data;
- new_fv = fvalue_slice(old_fv, start, end);
- /* Assert there because semcheck.c should have
+ new_fv = fvalue_slice(old_fv, drange);
+ /* Assert here because semcheck.c should have
* already caught the cases in which a slice
* cannot be made. */
g_assert(new_fv);
@@ -309,7 +306,6 @@ dfvm_apply(dfilter_t *df, tvbuff_t *tvb, proto_tree *tree)
dfvm_value_t *arg1;
dfvm_value_t *arg2;
dfvm_value_t *arg3;
- dfvm_value_t *arg4;
g_assert(tvb);
g_assert(tree);
@@ -348,10 +344,9 @@ dfvm_apply(dfilter_t *df, tvbuff_t *tvb, proto_tree *tree)
case MK_RANGE:
arg3 = insn->arg3;
- arg4 = insn->arg4;
mk_range(df,
arg1->value.numeric, arg2->value.numeric,
- arg3->value.numeric, arg4->value.numeric);
+ arg3->value.drange);
break;
case ANY_EQ: