summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Filip <feela@majklik.network.cz>2009-05-29 23:08:28 +0200
committerOndrej Filip <feela@majklik.network.cz>2009-05-29 23:08:28 +0200
commit9be1086d2970633fb5af2a1faaae16d5a1cf48ea (patch)
tree54777cff07416d54fc44c3139920feeed5ef8e12
parent43de796b8a10f561d8b3ef64a86e5ce70de01eb5 (diff)
downloadbird-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()
-rw-r--r--filter/config.Y3
-rw-r--r--filter/filter.c7
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;