add a new vlist flag for avoiding automatic delete of entries
authorFelix Fietkau <nbd@openwrt.org>
Sun, 2 Oct 2011 19:36:21 +0000 (21:36 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 2 Oct 2011 19:36:21 +0000 (21:36 +0200)
utils.c
utils.h

diff --git a/utils.c b/utils.c
index cc222908efa94a414dc650ec92680f0b9d38bafe..31a5967e508f90be115f4943763d746b8064cc07 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -21,7 +21,8 @@ __vlist_init(struct vlist_tree *tree, avl_tree_comp cmp,
 void
 vlist_delete(struct vlist_tree *tree, struct vlist_node *node)
 {
-       avl_delete(&tree->avl, &node->avl);
+       if (!tree->no_delete)
+               avl_delete(&tree->avl, &node->avl);
        tree->update(tree, NULL, node);
 }
 
@@ -37,7 +38,7 @@ vlist_add(struct vlist_tree *tree, struct vlist_node *node)
 
        anode = avl_find(&tree->avl, key);
        if (anode) {
-               if (tree->keep_old)
+               if (tree->keep_old || !tree->no_delete)
                        goto update_only;
 
                old_node = container_of(anode, struct vlist_node, avl);
diff --git a/utils.h b/utils.h
index d71a8f7489f411a38c164c047efe770f6978d0ee..8ef968a91ea3649d6248ed28325157bd2aa2bec3 100644 (file)
--- a/utils.h
+++ b/utils.h
@@ -29,6 +29,7 @@ struct vlist_tree {
        vlist_update_cb update;
        int key_offset;
        bool keep_old;
+       bool no_delete;
 
        int version;
 };