X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fhashmap.c;h=5c3efa8dd3d671c202dc7bab2b024328795736dd;hb=a1948c7bfeb87b54bc7715a44490c01593ee6e23;hp=65b7b741284bdcb5c0ad673cf6ae6b24110d66ea;hpb=29804cc1e0f37ee34301530fd7f1eb8550be464e;p=elogind.git diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c index 65b7b7412..5c3efa8dd 100644 --- a/src/shared/hashmap.c +++ b/src/shared/hashmap.c @@ -582,6 +582,34 @@ void* hashmap_remove(Hashmap *h, const void *key) { return data; } +void* hashmap_remove2(Hashmap *h, const void *key, void **rkey) { + struct hashmap_entry *e; + unsigned hash; + void *data; + + if (!h) { + if (rkey) + *rkey = NULL; + return NULL; + } + + hash = bucket_hash(h, key); + e = hash_scan(h, hash, key); + if (!e) { + if (rkey) + *rkey = NULL; + return NULL; + } + + data = e->value; + if (rkey) + *rkey = (void*) e->key; + + remove_entry(h, e); + + return data; +} + int hashmap_remove_and_put(Hashmap *h, const void *old_key, const void *new_key, void *value) { struct hashmap_entry *e; unsigned old_hash, new_hash;