diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-01-15 19:25:03 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2012-01-15 19:25:03 +0100 |
commit | b7e1b35ff18a759a54e4033d04a3550499dd9fc1 (patch) | |
tree | 4f74d351bdc1a1ee7c77f4ea3840d2fd4dcb56fe /utils.c | |
parent | a6baf95e700f1abe8dafe71f5f8722baea6b6ac2 (diff) |
add a simplified vlist type
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); +} |