summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-10-02 19:32:44 +0200
committerFelix Fietkau <nbd@openwrt.org>2011-10-02 19:32:44 +0200
commit98565127c60cba3d5b747bb9eb698e06d187f45b (patch)
tree961880f923c670de3d09709ad85ff779987b391f
parent05e910cec691f8333383a746876015e99ff088db (diff)
downloadnetifd-98565127c60cba3d5b747bb9eb698e06d187f45b.tar.gz
extend vlist code to allow keeping the old data structure instead of the new one on updates
-rw-r--r--utils.c5
-rw-r--r--utils.h1
2 files changed, 6 insertions, 0 deletions
diff --git a/utils.c b/utils.c
index 42d3176..a67a8c9 100644
--- a/utils.c
+++ b/utils.c
@@ -37,11 +37,16 @@ vlist_add(struct vlist_tree *tree, struct vlist_node *node)
anode = avl_find(&tree->avl, key);
if (anode) {
+ if (tree->keep_old)
+ goto update_only;
+
old_node = container_of(anode, struct vlist_node, avl);
avl_delete(&tree->avl, anode);
}
avl_insert(&tree->avl, &node->avl);
+
+update_only:
tree->update(tree, node, old_node);
}
diff --git a/utils.h b/utils.h
index c8101e7..ab73930 100644
--- a/utils.h
+++ b/utils.h
@@ -28,6 +28,7 @@ struct vlist_tree {
vlist_update_cb update;
int node_offset;
+ bool keep_old;
int version;
};