summaryrefslogtreecommitdiff
path: root/nest/a-set.c
diff options
context:
space:
mode:
Diffstat (limited to 'nest/a-set.c')
-rw-r--r--nest/a-set.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/nest/a-set.c b/nest/a-set.c
index fad4481f..f41b163d 100644
--- a/nest/a-set.c
+++ b/nest/a-set.c
@@ -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++)
@@ -66,6 +57,24 @@ int_set_contains(struct adata *list, u32 val)
}
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)
{
struct adata *res;