diff options
author | Ondrej Filip <feela@majklik.network.cz> | 2009-05-29 23:08:28 +0200 |
---|---|---|
committer | Ondrej Filip <feela@majklik.network.cz> | 2009-05-29 23:08:28 +0200 |
commit | 9be1086d2970633fb5af2a1faaae16d5a1cf48ea (patch) | |
tree | 54777cff07416d54fc44c3139920feeed5ef8e12 /filter | |
parent | 43de796b8a10f561d8b3ef64a86e5ce70de01eb5 (diff) | |
download | bird-9be1086d2970633fb5af2a1faaae16d5a1cf48ea.tar bird-9be1086d2970633fb5af2a1faaae16d5a1cf48ea.zip |
New type variable 'V' defined in filters. This type is checked
only for name, never for value in function filter_same()
Diffstat (limited to 'filter')
-rw-r--r-- | filter/config.Y | 3 | ||||
-rw-r--r-- | filter/filter.c | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/filter/config.Y b/filter/config.Y index 6d9b064..fe79496 100644 --- a/filter/config.Y +++ b/filter/config.Y @@ -397,8 +397,9 @@ term: case SYM_VARIABLE | T_PATH: case SYM_VARIABLE | T_PATH_MASK: case SYM_VARIABLE | T_CLIST: - $$->code = 'C'; + $$->code = 'V'; $$->a1.p = $1->def; + $$->a2.p = $1->name; break; default: cf_error("%s: variable expected.", $1->name ); diff --git a/filter/filter.c b/filter/filter.c index deaea34..fe3a2ac 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -489,6 +489,7 @@ interpret(struct f_inst *what) else res.val.i = what->a2.i; break; + case 'V': case 'C': res = * ((struct f_val *) what->a1.p); break; @@ -855,10 +856,12 @@ i_same(struct f_inst *f1, struct f_inst *f2) case T_PREFIX_SET: if (!trie_same(f1->a2.p, f2->a2.p)) return 0; + break; case T_SET: if (!same_tree(f1->a2.p, f2->a2.p)) return 0; + break; case T_STRING: if (strcmp(f1->a2.p, f2->a2.p)) @@ -873,6 +876,10 @@ i_same(struct f_inst *f1, struct f_inst *f2) if (val_compare(* (struct f_val *) f1->a1.p, * (struct f_val *) f2->a1.p)) return 0; break; + case 'V': + if (strcmp((char *) f1->a2.p, (char *) f2->a2.p)) + return 0; + break; case 'p': case 'L': ONEARG; break; case '?': TWOARGS; break; case '0': case 'E': break; |