diff options
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 40 |
1 files changed, 40 insertions, 0 deletions
@@ -1,4 +1,5 @@ #include <string.h> +#include <stdlib.h> #include "utils.h" int @@ -70,3 +71,42 @@ vlist_flush_all(struct vlist_tree *tree) tree->version++; vlist_flush(tree); } + + +void +__vlist_simple_init(struct vlist_simple_tree *tree, int offset) +{ + INIT_LIST_HEAD(&tree->list); + tree->version = 1; + tree->head_offset = offset; +} + +void +vlist_simple_delete(struct vlist_simple_tree *tree, struct vlist_simple_node *node) +{ + char *ptr; + + list_del(&node->list); + ptr = (char *) node - tree->head_offset; + free(ptr); +} + +void +vlist_simple_flush(struct vlist_simple_tree *tree) +{ + struct vlist_simple_node *n, *tmp; + + list_for_each_entry_safe(n, tmp, &tree->list, list) { + if (n->version == tree->version) + continue; + + vlist_simple_delete(tree, n); + } +} + +void +vlist_simple_flush_all(struct vlist_simple_tree *tree) +{ + tree->version++; + vlist_simple_flush(tree); +} |