X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fhashmap.c;h=4b187057ec34f8af4d5de0fcb7bbdff8159438dc;hp=a59b880dffb25bb587f56714cbc03fb75cd2a7ee;hb=9fe117ea5ac7e8fc36312324c7fdc851adff59f3;hpb=8fe914ec81d9f57bcc083036f528b00119ed2e3b diff --git a/src/hashmap.c b/src/hashmap.c index a59b880df..4b187057e 100644 --- a/src/hashmap.c +++ b/src/hashmap.c @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** This file is part of systemd. @@ -173,6 +173,15 @@ void hashmap_free(Hashmap*h) { free(h); } +void hashmap_free_free(Hashmap *h) { + void *p; + + while ((p = hashmap_steal_first(h))) + free(p); + + hashmap_free(h); +} + void hashmap_clear(Hashmap *h) { if (!h) return; @@ -467,6 +476,21 @@ void* hashmap_steal_first(Hashmap *h) { return data; } +void* hashmap_steal_first_key(Hashmap *h) { + void *key; + + if (!h) + return NULL; + + if (!h->iterate_list_head) + return NULL; + + key = (void*) h->iterate_list_head->key; + remove_entry(h, h->iterate_list_head); + + return key; +} + unsigned hashmap_size(Hashmap *h) { if (!h)