X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libhashkit%2Fhsieh.c;h=ba46ed2cdf71c3b59e1f43691703885722c7c4f5;hb=07def9544cbd75062d2641c5513e1d158b841f90;hp=cd44b67ff5c86993033664d2443e309cdc025779;hpb=8fd8f655540e3d6aa0b0a3eb0f4f7df1be2e6542;p=awesomized%2Flibmemcached diff --git a/libhashkit/hsieh.c b/libhashkit/hsieh.c index cd44b67f..ba46ed2c 100644 --- a/libhashkit/hsieh.c +++ b/libhashkit/hsieh.c @@ -1,11 +1,11 @@ /* By Paul Hsieh (C) 2004, 2005. Covered under the Paul Hsieh - * derivative license. + * derivative license. * See: http://www.azillionmonkeys.com/qed/weblicense.html for license * details. * http://www.azillionmonkeys.com/qed/hash.html */ -#include "hash_common.h" +#include "common.h" #undef get16bits #if (defined(__GNUC__) && defined(__i386__)) @@ -17,7 +17,7 @@ +(uint32_t)(((const uint8_t *)(d))[0]) ) #endif -uint32_t hashkit_hsieh(const char *key, size_t key_length) +uint32_t hashkit_hsieh(const char *key, size_t key_length, void *context __attribute__((unused))) { uint32_t hash = 0, tmp; int rem; @@ -43,16 +43,18 @@ uint32_t hashkit_hsieh(const char *key, size_t key_length) { case 3: hash += get16bits (key); hash ^= hash << 16; - hash ^= key[sizeof (uint16_t)] << 18; + hash ^= (uint32_t)key[sizeof (uint16_t)] << 18; hash += hash >> 11; break; case 2: hash += get16bits (key); hash ^= hash << 11; hash += hash >> 17; break; - case 1: hash += *key; + case 1: hash += (unsigned char)(*key); hash ^= hash << 10; hash += hash >> 1; + default: + break; } /* Force "avalanching" of final 127 bits */