summaryrefslogtreecommitdiff
path: root/debian/patches/ihash-as-cache0001-libihash-fix-ill-devised-locp-lookup-interface.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/ihash-as-cache0001-libihash-fix-ill-devised-locp-lookup-interface.patch')
-rw-r--r--debian/patches/ihash-as-cache0001-libihash-fix-ill-devised-locp-lookup-interface.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/debian/patches/ihash-as-cache0001-libihash-fix-ill-devised-locp-lookup-interface.patch b/debian/patches/ihash-as-cache0001-libihash-fix-ill-devised-locp-lookup-interface.patch
new file mode 100644
index 00000000..bc330973
--- /dev/null
+++ b/debian/patches/ihash-as-cache0001-libihash-fix-ill-devised-locp-lookup-interface.patch
@@ -0,0 +1,109 @@
+From 5aa7e263521b934c2e23e7fb795fd9163999219a Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Sat, 21 Nov 2015 16:12:53 +0100
+Subject: [PATCH hurd 1/5] 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:
+--
+2.1.4
+