X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libhashkit%2Fmurmur.cc;h=f3e8fe6ac7eebcca2d92d72e69d19e249aed2934;hb=acb156e60a8d705a56806ca51212bab22ec1e79d;hp=e15e5108cfa4a8987a42f92410af23bc797708e8;hpb=3347080c209fd333955a73b2798be4f98b84d27f;p=awesomized%2Flibmemcached diff --git a/libhashkit/murmur.cc b/libhashkit/murmur.cc index e15e5108..f3e8fe6a 100644 --- a/libhashkit/murmur.cc +++ b/libhashkit/murmur.cc @@ -56,6 +56,8 @@ #ifdef HAVE_MURMUR_HASH +#include + uint32_t hashkit_murmur(const char *key, size_t length, void *context) { /* @@ -79,7 +81,8 @@ uint32_t hashkit_murmur(const char *key, size_t length, void *context) while(length >= 4) { - unsigned int k = *(unsigned int *)data; + unsigned int k; + memcpy(&k, data, sizeof(unsigned int)); k *= m; k ^= k >> r; @@ -96,8 +99,8 @@ uint32_t hashkit_murmur(const char *key, size_t length, void *context) switch(length) { - case 3: h ^= ((uint32_t)data[2]) << 16; - case 2: h ^= ((uint32_t)data[1]) << 8; + case 3: h ^= ((uint32_t)data[2]) << 16; /* fall through */ + case 2: h ^= ((uint32_t)data[1]) << 8; /* fall through */ case 1: h ^= data[0]; h *= m; default: break;