]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: hash: Introduce virHashHasEntry
authorPeter Krempa <pkrempa@redhat.com>
Thu, 17 Oct 2019 12:45:47 +0000 (14:45 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 21 Oct 2019 14:53:42 +0000 (16:53 +0200)
Add a helper that checks whether an entry with given name exists but
does not touch the userdata.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
ACKed-by: Eric Blake <eblake@redhat.com>
src/libvirt_private.syms
src/util/virhash.c
src/util/virhash.h

index ee8bb84041170eb9b7c6e7faec9b83b30c3f116c..12cb3b5bf75437c51c6e5484785a606363cf522f 100644 (file)
@@ -2070,6 +2070,7 @@ virHashEqual;
 virHashForEach;
 virHashFree;
 virHashGetItems;
+virHashHasEntry;
 virHashLookup;
 virHashNew;
 virHashRemoveAll;
index 9384d28002028b26161275abe9ef40153bf9e15f..05a3b803f28db001339305555a9b435be198afe8 100644 (file)
@@ -445,6 +445,26 @@ virHashAtomicUpdate(virHashAtomicPtr table,
 }
 
 
+static virHashEntryPtr
+virHashGetEntry(const virHashTable *table,
+                const void *name)
+{
+    size_t key;
+    virHashEntryPtr entry;
+
+    if (!table || !name)
+        return NULL;
+
+    key = virHashComputeKey(table, name);
+    for (entry = table->table[key]; entry; entry = entry->next) {
+        if (table->keyEqual(entry->name, name))
+            return entry;
+    }
+
+    return NULL;
+}
+
+
 /**
  * virHashLookup:
  * @table: the hash table
@@ -457,18 +477,29 @@ virHashAtomicUpdate(virHashAtomicPtr table,
 void *
 virHashLookup(const virHashTable *table, const void *name)
 {
-    size_t key;
-    virHashEntryPtr entry;
+    virHashEntryPtr entry = virHashGetEntry(table, name);
 
-    if (!table || !name)
+    if (!entry)
         return NULL;
 
-    key = virHashComputeKey(table, name);
-    for (entry = table->table[key]; entry; entry = entry->next) {
-        if (table->keyEqual(entry->name, name))
-            return entry->payload;
-    }
-    return NULL;
+    return entry->payload;
+}
+
+
+/**
+ * virHashHasEntry:
+ * @table: the hash table
+ * @name: the name of the userdata
+ *
+ * Find whether entry specified by @name exists.
+ *
+ * Returns true if the entry exists and false otherwise
+ */
+bool
+virHashHasEntry(const virHashTable *table,
+                const void *name)
+{
+    return !!virHashGetEntry(table, name);
 }
 
 
index d7de0618cb80687c7a4c90babee2f7e53469ada3..8087965ee9ed870cb203e4caed3d5e10daee739e 100644 (file)
@@ -150,6 +150,7 @@ ssize_t virHashRemoveAll(virHashTablePtr table);
  * Retrieve the userdata.
  */
 void *virHashLookup(const virHashTable *table, const void *name);
+bool virHashHasEntry(const virHashTable *table, const void *name);
 
 /*
  * Retrieve & remove the userdata.