chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
service: add options RestartPreventExitStatus and SuccessExitStatus
[elogind.git]
/
src
/
shared
/
hashmap.c
diff --git
a/src/shared/hashmap.c
b/src/shared/hashmap.c
index 5d1e63208a64648c8b8e11b8bd380874d607dfb0..be37a3659d17a1d73bd4084d1f7af685c7050d41 100644
(file)
--- a/
src/shared/hashmap.c
+++ b/
src/shared/hashmap.c
@@
-277,11
+277,10
@@
void hashmap_free(Hashmap*h) {
}
void hashmap_free_free(Hashmap *h) {
}
void hashmap_free_free(Hashmap *h) {
- void *p;
-
- while ((p = hashmap_steal_first(h)))
- free(p);
+ if (!h)
+ return;
+ hashmap_clear_free(h);
hashmap_free(h);
}
hashmap_free(h);
}
@@
-293,6
+292,16
@@
void hashmap_clear(Hashmap *h) {
remove_entry(h, h->iterate_list_head);
}
remove_entry(h, h->iterate_list_head);
}
+void hashmap_clear_free(Hashmap *h) {
+ void *p;
+
+ if (!h)
+ return;
+
+ while ((p = hashmap_steal_first(h)))
+ free(p);
+}
+
static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *key) {
struct hashmap_entry *e;
assert(h);
static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *key) {
struct hashmap_entry *e;
assert(h);
@@
-369,6
+378,21
@@
void* hashmap_get(Hashmap *h, const void *key) {
return e->value;
}
return e->value;
}
+bool hashmap_contains(Hashmap *h, const void *key) {
+ unsigned hash;
+ struct hashmap_entry *e;
+
+ if (!h)
+ return false;
+
+ hash = h->hash_func(key) % NBUCKETS;
+
+ if (!(e = hash_scan(h, hash, key)))
+ return false;
+
+ return true;
+}
+
void* hashmap_remove(Hashmap *h, const void *key) {
struct hashmap_entry *e;
unsigned hash;
void* hashmap_remove(Hashmap *h, const void *key) {
struct hashmap_entry *e;
unsigned hash;