commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hurd] 25/75: libihash: fix ill-devised locp lookup interface


From: Samuel Thibault
Subject: [hurd] 25/75: libihash: fix ill-devised locp lookup interface
Date: Thu, 14 Jan 2016 01:04:07 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch dde
in repository hurd.

commit e6fdb474b7fc4237b19d8405074930518ac02b27
Author: Justus Winter <address@hidden>
Date:   Sat Nov 21 16:12:53 2015 +0100

    libihash: fix ill-devised locp lookup interface
    
    * libihash/ihash.c (hurd_ihash_locp_find): Return both the item and the 
slot.
    * libihash/ihash.h (hurd_ihash_locp_find): Adjust prototype.
    (hurd_ihash_locp_value): Remove function.
---
 libihash/ihash.c | 19 +++++++++----------
 libihash/ihash.h | 31 ++++++-------------------------
 2 files changed, 15 insertions(+), 35 deletions(-)

diff --git a/libihash/ihash.c b/libihash/ihash.c
index 87d7abf..8b1ad1f 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;
 }
 
 
diff --git a/libihash/ihash.h b/libihash/ihash.h
index 1dbc348..fdfc367 100644
--- a/libihash/ihash.h
+++ b/libihash/ihash.h
@@ -218,13 +218,9 @@ error_t hurd_ihash_locp_add (hurd_ihash_t ht, 
hurd_ihash_locp_t locp,
    if it doesn't exist.  */
 hurd_ihash_value_t 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
@@ -235,24 +231,9 @@ hurd_ihash_value_t 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);
-
-/* Given an hash table bucket location LOCP, return the value stored
-   there, or NULL if it is empty or LOCP is NULL.  */
-static inline void *
-hurd_ihash_locp_value (hurd_ihash_locp_t locp)
-{
-  struct _hurd_ihash_item *item = (struct _hurd_ihash_item *) locp;
-
-  if (item == NULL)
-    return NULL;
-
-  if (hurd_ihash_value_valid (item->value))
-    return item->value;
-
-  return NULL;
-}
+hurd_ihash_value_t hurd_ihash_locp_find (hurd_ihash_t ht,
+                                        hurd_ihash_key_t key,
+                                        hurd_ihash_locp_t *slot);
 
 /* Iterate over all elements in the hash table.  You use this macro
    with a block, for example like this:

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]