From a1d03b775376aa8545ec9a0e89381b659e4d28ed Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 17 Jul 2009 13:36:05 +0200 Subject: conntrackd: add iterators with limited steps in hash and cache types This patch adds cache_iterate_limit() and hashtable_iterate_limit() that allows to limit the iteration to given a number of states. Signed-off-by: Pablo Neira Ayuso --- src/hash.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/hash.c') diff --git a/src/hash.c b/src/hash.c index 9c9ea5b..fe6a047 100644 --- a/src/hash.c +++ b/src/hash.c @@ -23,6 +23,7 @@ #include #include #include +#include struct hashtable * hashtable_create(int hashsize, int limit, @@ -111,21 +112,29 @@ int hashtable_flush(struct hashtable *table) return 0; } -int hashtable_iterate(struct hashtable *table, void *data, - int (*iterate)(void *data1, struct hashtable_node *n)) +int +hashtable_iterate_limit(struct hashtable *table, void *data, + uint32_t from, uint32_t steps, + int (*iterate)(void *data1, void *n)) { uint32_t i; struct list_head *e, *tmp; struct hashtable_node *n; - for (i=0; i < table->hashsize; i++) { + for (i=from; i < table->hashsize && i < from+steps; i++) { list_for_each_safe(e, tmp, &table->members[i]) { n = list_entry(e, struct hashtable_node, head); if (iterate(data, n) == -1) return -1; } } - return 0; + return i; +} + +int hashtable_iterate(struct hashtable *table, void *data, + int (*iterate)(void *data1, void *n)) +{ + return hashtable_iterate_limit(table, data, 0, UINT_MAX, iterate); } unsigned int hashtable_counter(const struct hashtable *table) -- cgit v1.2.3