Properly hash pointers for hash tables where appropriate
authorTobias Brunner <tobias@strongswan.org>
Thu, 27 Mar 2014 10:37:16 +0000 (11:37 +0100)
committerTobias Brunner <tobias@strongswan.org>
Mon, 31 Mar 2014 12:32:44 +0000 (14:32 +0200)
Simply using the pointer is not optimal for our hash table
implementation, which simply masks the key to determine the bucket.

src/libcharon/plugins/dhcp/dhcp_provider.c
src/libcharon/plugins/eap_radius/eap_radius_forward.c
src/libcharon/plugins/ha/ha_cache.c
src/libstrongswan/credentials/cred_encoding.c

index e092771..f5325b5 100644 (file)
@@ -47,22 +47,6 @@ struct private_dhcp_provider_t {
 };
 
 /**
- * Hashtable hash function
- */
-static u_int hash(void *key)
-{
-       return (uintptr_t)key;
-}
-
-/**
- * Hashtable equals function
- */
-static bool equals(void *a, void *b)
-{
-       return a == b;
-}
-
-/**
  * Hash ID and host to a key
  */
 static uintptr_t hash_id_host(identification_t *id, host_t *host)
@@ -226,7 +210,8 @@ dhcp_provider_t *dhcp_provider_create(dhcp_socket_t *socket)
                },
                .socket = socket,
                .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
-               .transactions = hashtable_create(hash, equals, 8),
+               .transactions = hashtable_create(hashtable_hash_ptr,
+                                                                                hashtable_equals_ptr, 8),
        );
 
        return &this->public;
index b873e1d..54d52a9 100644 (file)
@@ -74,22 +74,6 @@ typedef struct {
 static private_eap_radius_forward_t *singleton = NULL;
 
 /**
- * Hashtable hash function
- */
-static u_int hash(uintptr_t key)
-{
-       return key;
-}
-
-/**
- * Hashtable equals function
- */
-static bool equals(uintptr_t a, uintptr_t b)
-{
-       return a == b;
-}
-
-/**
  * Free a queue entry
  */
 static void free_attribute(chunk_t *chunk)
@@ -442,10 +426,8 @@ eap_radius_forward_t *eap_radius_forward_create()
                .to_attr = parse_selector(lib->settings->get_str(lib->settings,
                                                        "%s.plugins.eap-radius.forward.radius_to_ike", "",
                                                        lib->ns)),
-               .from = hashtable_create((hashtable_hash_t)hash,
-                                               (hashtable_equals_t)equals, 8),
-               .to = hashtable_create((hashtable_hash_t)hash,
-                                               (hashtable_equals_t)equals, 8),
+               .from = hashtable_create(hashtable_hash_ptr, hashtable_equals_ptr, 8),
+               .to = hashtable_create(hashtable_hash_ptr, hashtable_equals_ptr, 8),
                .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
        );
 
index ce1afe6..60e75fc 100644 (file)
@@ -59,22 +59,6 @@ struct private_ha_cache_t {
 };
 
 /**
- * Hashtable hash function
- */
-static u_int hash(void *key)
-{
-       return (uintptr_t)key;
-}
-
-/**
- * Hashtable equals function
- */
-static bool equals(void *a, void *b)
-{
-       return a == b;
-}
-
-/**
  * Cache entry for an IKE_SA
  */
 typedef struct {
@@ -380,7 +364,7 @@ ha_cache_t *ha_cache_create(ha_kernel_t *kernel, ha_socket_t *socket,
                .count = count,
                .kernel = kernel,
                .socket = socket,
-               .cache = hashtable_create(hash, equals, 8),
+               .cache = hashtable_create(hashtable_hash_ptr, hashtable_equals_ptr, 8),
                .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
        );
 
index 53ac13c..3038163 100644 (file)
@@ -94,22 +94,6 @@ bool cred_encoding_args(va_list args, ...)
        return !failed;
 }
 
-/**
- * hashtable hash() function
- */
-static u_int hash(void *key)
-{
-       return (uintptr_t)key;
-}
-
-/**
- * hashtable equals() function
- */
-static bool equals(void *key1, void *key2)
-{
-       return key1 == key2;
-}
-
 METHOD(cred_encoding_t, get_cache, bool,
        private_cred_encoding_t *this, cred_encoding_type_t type, void *cache,
        chunk_t *encoding)
@@ -289,7 +273,8 @@ cred_encoding_t *cred_encoding_create()
 
        for (type = 0; type < CRED_ENCODING_MAX; type++)
        {
-               this->cache[type] = hashtable_create(hash, equals, 8);
+               this->cache[type] = hashtable_create(hashtable_hash_ptr,
+                                                                                        hashtable_equals_ptr, 8);
        }
 
        return &this->public;