From 730b8403f9dc3e106379595e5667373f2eedb82e Mon Sep 17 00:00:00 2001 From: "Anthony G. Basile" Date: Tue, 4 Jun 2013 13:17:54 -0400 Subject: src/libudev/hashmap.{c,h}: bring in line with upstream Signed-off-by: Anthony G. Basile --- src/libudev/hashmap.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src/libudev/hashmap.c') diff --git a/src/libudev/hashmap.c b/src/libudev/hashmap.c index dcfbb67228..9f7db34397 100644 --- a/src/libudev/hashmap.c +++ b/src/libudev/hashmap.c @@ -103,7 +103,7 @@ static void deallocate_tile(void **first_tile, void *p) { *first_tile = p; } -#ifndef __OPTIMIZE__ +#ifdef VALGRIND static void drop_pool(struct pool *p) { while (p) { @@ -309,6 +309,17 @@ void hashmap_free_free(Hashmap *h) { hashmap_free(h); } +void hashmap_free_free_free(Hashmap *h) { + + /* Free the hashmap and all data and key objects in it */ + + if (!h) + return; + + hashmap_clear_free_free(h); + hashmap_free(h); +} + void hashmap_clear(Hashmap *h) { if (!h) return; @@ -327,6 +338,22 @@ void hashmap_clear_free(Hashmap *h) { free(p); } +void hashmap_clear_free_free(Hashmap *h) { + if (!h) + return; + + while (h->iterate_list_head) { + void *a, *b; + + a = h->iterate_list_head->value; + b = (void*) h->iterate_list_head->key; + remove_entry(h, h->iterate_list_head); + free(a); + free(b); + } +} + + static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *key) { struct hashmap_entry *e; assert(h); -- cgit v1.2.3-54-g00ecf