diff options
author | Gilbert Ramirez <gram@alumni.rice.edu> | 2001-02-27 19:23:30 +0000 |
---|---|---|
committer | Gilbert Ramirez <gram@alumni.rice.edu> | 2001-02-27 19:23:30 +0000 |
commit | 2a50f8af4f18dab44ee5414aa2c47fef3ab18e9d (patch) | |
tree | 9fba9ac63ac5a5f60b1519bb9bcf76112e1fbd78 /epan/dfilter/dfvm.c | |
parent | a954a9d276678fb6ff357ffa7be0a1609415fc0d (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.c | 23 |
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: |