]> granicus.if.org Git - neomutt/commitdiff
Add hash_find_elem to get the hash element.
authorKevin McCarthy <kevin@8t8.us>
Sun, 29 Jan 2017 02:47:48 +0000 (18:47 -0800)
committerKevin McCarthy <kevin@8t8.us>
Sun, 29 Jan 2017 02:47:48 +0000 (18:47 -0800)
This will be used in the following patch for directly manipulating the
label counter.

hash.c
hash.h

diff --git a/hash.c b/hash.c
index d87a3218065d0424f242763c201d45c24ffc1e55..40afd0b1b28e765da98bee149864d8a84288f509 100644 (file)
--- a/hash.c
+++ b/hash.c
@@ -172,7 +172,7 @@ int int_hash_insert (HASH * table, unsigned int intkey, void *data, int allow_du
   return union_hash_insert (table, key, data, allow_dup);
 }
 
-static void *union_hash_find (const HASH *table, union hash_key key)
+static struct hash_elem *union_hash_find_elem (const HASH *table, union hash_key key)
 {
   int hash;
   struct hash_elem *ptr;
@@ -185,11 +185,20 @@ static void *union_hash_find (const HASH *table, union hash_key key)
   for (; ptr; ptr = ptr->next)
   {
     if (table->cmp_key (key, ptr->key) == 0)
-      return (ptr->data);
+      return (ptr);
   }
   return NULL;
 }
 
+static void *union_hash_find (const HASH *table, union hash_key key)
+{
+  struct hash_elem *ptr = union_hash_find_elem (table, key);
+  if (ptr)
+    return ptr->data;
+  else
+    return NULL;
+}
+
 void *hash_find (const HASH *table, const char *strkey)
 {
   union hash_key key;
@@ -197,6 +206,13 @@ void *hash_find (const HASH *table, const char *strkey)
   return union_hash_find (table, key);
 }
 
+struct hash_elem *hash_find_elem (const HASH *table, const char *strkey)
+{
+  union hash_key key;
+  key.strkey = strkey;
+  return union_hash_find_elem (table, key);
+}
+
 void *int_hash_find (const HASH *table, unsigned int intkey)
 {
   union hash_key key;
diff --git a/hash.h b/hash.h
index ce2a5d69c690dbbe89eed58ff530e4bb7f49ba29..1b6c731e5b7961baf7d2172860f0553b46feec9c 100644 (file)
--- a/hash.h
+++ b/hash.h
@@ -53,6 +53,7 @@ int hash_insert (HASH * table, const char *key, void *data, int allow_dup);
 int int_hash_insert (HASH *table, unsigned int key, void *data, int allow_dup);
 
 void *hash_find (const HASH *table, const char *key);
+struct hash_elem *hash_find_elem (const HASH *table, const char *strkey);
 void *int_hash_find (const HASH *table, unsigned int key);
 
 struct hash_elem *hash_find_bucket (const HASH *table, const char *key);