summaryrefslogtreecommitdiff
path: root/libihash/ihash.c
diff options
context:
space:
mode:
Diffstat (limited to 'libihash/ihash.c')
-rw-r--r--libihash/ihash.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/libihash/ihash.c b/libihash/ihash.c
index 87d7abf4..8b1ad1f8 100644
--- a/libihash/ihash.c
+++ b/libihash/ihash.c
@@ -370,13 +370,9 @@ hurd_ihash_find (hurd_ihash_t ht, hurd_ihash_key_t key)
}
}
-/* Find the item in the hash table HT with key KEY. If it is found,
- return the location of its slot in the hash table. If it is not
- found, this function may still return a location.
-
- This location pointer can always be safely accessed using
- hurd_ihash_locp_value. If the lookup is successful,
- hurd_ihash_locp_value will return the value related to KEY.
+/* Find and return the item in the hash table HT with key KEY, or NULL
+ if it doesn't exist. If it is not found, this function may still
+ return a location in SLOT.
If the lookup is successful, the returned location can be used with
hurd_ihash_locp_add to update the item, and with
@@ -387,8 +383,10 @@ hurd_ihash_find (hurd_ihash_t ht, hurd_ihash_key_t key)
Note that returned location is only valid until the next insertion
or deletion. */
-hurd_ihash_locp_t
-hurd_ihash_locp_find (hurd_ihash_t ht, hurd_ihash_key_t key)
+hurd_ihash_value_t
+hurd_ihash_locp_find (hurd_ihash_t ht,
+ hurd_ihash_key_t key,
+ hurd_ihash_locp_t *slot)
{
int idx;
@@ -396,7 +394,8 @@ hurd_ihash_locp_find (hurd_ihash_t ht, hurd_ihash_key_t key)
return NULL;
idx = find_index (ht, key);
- return &ht->items[idx].value;
+ *slot = &ht->items[idx].value;
+ return index_valid (ht, idx, key) ? ht->items[idx].value : NULL;
}