]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Cleaned up mess with types in e,a and e,S. Dynamic attributes should
authorPavel Machek <pavel@ucw.cz>
Mon, 17 Apr 2000 14:12:02 +0000 (14:12 +0000)
committerPavel Machek <pavel@ucw.cz>
Mon, 17 Apr 2000 14:12:02 +0000 (14:12 +0000)
now work.

filter/f-util.c
filter/filter.c

index 2ffcd9f6f5403879ed9ee199741d390838ea7ab2..cf174e737490679618e7790242d0bdc6df89dddd 100644 (file)
@@ -24,7 +24,7 @@ struct f_inst *
 f_new_dynamic_attr(int type, int f_type, int code)
 {
   struct f_inst *f = f_new_inst();
-  f->aux = f_type;
+  f->aux = type;
   f->a2.i = code;
   return f;
 }
index fd6ea35263c3df387b3104f2c1bd6a7d10ef66b1..172e77bc9b69109623f0b164ac1c35fc850c9cf2 100644 (file)
@@ -353,13 +353,17 @@ interpret(struct f_inst *what)
        res.type = T_VOID;
        break;
       }
-      res.type = what->aux;    /* FIXME: should check type? */
-      switch (what->aux) {
-      case T_INT:
+      switch (what->aux & EAF_TYPE_MASK) {
+      case EAF_TYPE_INT:
+       res.type = T_INT;
        res.val.i = e->u.data;
        break;
-      case T_CLIST:
-      case T_PATH:
+      case EAF_TYPE_AS_PATH:
+        res.type = T_PATH;
+       res.val.ad = e->u.ptr;
+       break;
+      case EAF_TYPE_INT_SET:
+       res.type = T_CLIST;
        res.val.ad = e->u.ptr;
        break;
       default:
@@ -369,9 +373,6 @@ interpret(struct f_inst *what)
     break;
   case P('e','S'):
     ONEARG;
-    if (v1.type != what->aux)
-      runtime("Wrong type when setting dynamic attribute");
-
     {
       struct ea_list *l = lp_alloc(f_pool, sizeof(struct ea_list) + sizeof(eattr));
 
@@ -402,6 +403,7 @@ interpret(struct f_inst *what)
          runtime( "Setting void attribute to non-void value" );
        l->attrs[0].u.data = 0;
        break;
+      default: bug("Unknown type in e,S");
       }
 
       if (!(what->aux & EAF_TEMP) && (!(f_flags & FF_FORCE_TMPATTR))) {