diff options
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.patch | 109 |
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 + |