]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
New type variable 'V' defined in filters. This type is checked
authorOndrej Filip <feela@majklik.network.cz>
Fri, 29 May 2009 21:08:28 +0000 (23:08 +0200)
committerOndrej Filip <feela@majklik.network.cz>
Fri, 29 May 2009 21:08:28 +0000 (23:08 +0200)
only for name, never for value in function filter_same()

filter/config.Y
filter/filter.c

index 6d9b064dcc8d3b4c797e4cee898a930fddefb196..fe79496f55c893be801a1b3dc8f4d1b4c35e8c17 100644 (file)
@@ -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 );
index deaea34336ad199c8e489f1ddf964d70516365a8..fe3a2ac760de2935d85e03790ad952bf65611fb3 100644 (file)
@@ -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;