]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Do not add community if it is already in clist.
authorOndrej Zajicek <santiago@crfreenet.org>
Fri, 14 May 2010 13:24:53 +0000 (15:24 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Fri, 14 May 2010 13:24:53 +0000 (15:24 +0200)
nest/a-set.c

index fad4481f5e56fa737fce5100def48a104e7abe77..f41b163d1e037f3b04a25358f56c057f1296c46e 100644 (file)
@@ -42,21 +42,12 @@ int_set_format(struct adata *set, int way, byte *buf, unsigned int size)
   *buf = 0;
 }
 
-struct adata *
-int_set_add(struct linpool *pool, struct adata *list, u32 val)
-{
-  int len = list ? list->length : 0;
-  struct adata *res = lp_alloc(pool, len + sizeof(struct adata) + 4);
-  res->length = len + 4;
-  * (u32 *) res->data = val;
-  if (list)
-    memcpy((char *) res->data + 4, list->data, list->length);
-  return res;
-}
-
 int
 int_set_contains(struct adata *list, u32 val)
 {
+  if (!list)
+    return 0;
+
   u32 *l = (u32 *) list->data;
   unsigned int i;
   for (i=0; i<list->length/4; i++)
@@ -65,6 +56,24 @@ int_set_contains(struct adata *list, u32 val)
   return 0;
 }
 
+struct adata *
+int_set_add(struct linpool *pool, struct adata *list, u32 val)
+{
+  struct adata *res;
+  int len;
+
+  if (int_set_contains(list, val))
+    return list;
+
+  len = list ? list->length : 0;
+  res = lp_alloc(pool, len + sizeof(struct adata) + 4);
+  res->length = len + 4;
+  * (u32 *) res->data = val;
+  if (list)
+    memcpy((char *) res->data + 4, list->data, list->length);
+  return res;
+}
+
 struct adata *
 int_set_del(struct linpool *pool, struct adata *list, u32 val)
 {