[systemd-devel] [PATCH 13/26] hashmap: return more information from resize_buckets

Michal Schmidt mschmidt at redhat.com
Thu Oct 16 00:50:51 PDT 2014


Return 0 if no resize was needed, 1 if successfully resized and
negative on error.
---
 src/shared/hashmap.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c
index 1ae3602..2a152ab 100644
--- a/src/shared/hashmap.c
+++ b/src/shared/hashmap.c
@@ -369,7 +369,7 @@ static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *ke
         return NULL;
 }
 
-static bool resize_buckets(Hashmap *h) {
+static int resize_buckets(Hashmap *h) {
         struct hashmap_entry **n, *i;
         unsigned m;
         uint8_t nkey[HASH_KEY_SIZE];
@@ -377,7 +377,7 @@ static bool resize_buckets(Hashmap *h) {
         assert(h);
 
         if (_likely_(h->n_entries*4 < h->n_buckets*3))
-                return false;
+                return 0;
 
         /* Increase by four */
         m = (h->n_entries+1)*4-1;
@@ -385,7 +385,7 @@ static bool resize_buckets(Hashmap *h) {
         /* If we hit OOM we simply risk packed hashmaps... */
         n = new0(struct hashmap_entry*, m);
         if (!n)
-                return false;
+                return -ENOMEM;
 
         /* Let's use a different randomized hash key for the
          * extension, so that people cannot guess what we are using
@@ -424,7 +424,7 @@ static bool resize_buckets(Hashmap *h) {
 
         memcpy(h->hash_key, nkey, HASH_KEY_SIZE);
 
-        return true;
+        return 1;
 }
 
 static int __hashmap_put(Hashmap *h, const void *key, void *value, unsigned hash) {
@@ -432,7 +432,7 @@ static int __hashmap_put(Hashmap *h, const void *key, void *value, unsigned hash
 
         struct hashmap_entry *e;
 
-        if (resize_buckets(h))
+        if (resize_buckets(h) > 0)
                 hash = bucket_hash(h, key);
 
         if (h->from_pool)
-- 
2.1.0



More information about the systemd-devel mailing list