chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
journal: don't write tag objects if nothing has been written since the last time
[elogind.git]
/
src
/
shared
/
hashmap.c
diff --git
a/src/shared/hashmap.c
b/src/shared/hashmap.c
index ab00957306e9fb2fdb2d8e1b0e63263368973e07..be37a3659d17a1d73bd4084d1f7af685c7050d41 100644
(file)
--- a/
src/shared/hashmap.c
+++ b/
src/shared/hashmap.c
@@
-277,6
+277,9
@@
void hashmap_free(Hashmap*h) {
}
void hashmap_free_free(Hashmap *h) {
}
void hashmap_free_free(Hashmap *h) {
+ if (!h)
+ return;
+
hashmap_clear_free(h);
hashmap_free(h);
}
hashmap_clear_free(h);
hashmap_free(h);
}
@@
-292,7
+295,8
@@
void hashmap_clear(Hashmap *h) {
void hashmap_clear_free(Hashmap *h) {
void *p;
void hashmap_clear_free(Hashmap *h) {
void *p;
- assert(h);
+ if (!h)
+ return;
while ((p = hashmap_steal_first(h)))
free(p);
while ((p = hashmap_steal_first(h)))
free(p);
@@
-374,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;