Fixed 64bit issue in hash.
[awesomized/libmemcached] / lib / memcached_hash.c
index 0d83cb75a7d0b0591b9ae4f2cbb8c0ccbd960862..961c794b58a686f6c1d28eb3a8f946d67c47842e 100644 (file)
@@ -8,14 +8,13 @@ static uint32_t FNV_32_INIT= 2166136261L;
 static uint32_t FNV_32_PRIME= 16777619;
 
 /* Prototypes */
-static unsigned int internal_generate_hash(char *key, size_t key_length);
-static uint32_t internal_generate_md5(char *key, size_t key_length);
-static uint32_t internal_generate_md5(char *key, size_t key_length);
-static uint32_t internal_generate_ketama_md5(char *key, size_t key_length);
+static uint64_t internal_generate_hash(char *key, size_t key_length);
+static uint64_t internal_generate_md5(char *key, size_t key_length);
+static uint64_t internal_generate_ketama_md5(char *key, size_t key_length);
 
 unsigned int memcached_generate_hash(memcached_st *ptr, char *key, size_t key_length)
 {
-  uint32_t hash;
+  uint64_t hash= 1; /* Just here to remove compile warning */
   unsigned int x;
 
   switch (ptr->hash)
@@ -33,7 +32,7 @@ unsigned int memcached_generate_hash(memcached_st *ptr, char *key, size_t key_le
   case MEMCACHED_HASH_FNV1_64: 
     {
       /* Thanks to pierre@demartines.com for the pointer */
-      hash = FNV_64_INIT;
+      hash= FNV_64_INIT;
       for (x= 0; x < key_length; x++) 
       {
         hash *= FNV_64_PRIME;
@@ -88,10 +87,10 @@ unsigned int memcached_generate_hash(memcached_st *ptr, char *key, size_t key_le
     return hash % ptr->number_of_hosts;
 }
 
-static uint32_t internal_generate_hash(char *key, size_t key_length)
+static uint64_t internal_generate_hash(char *key, size_t key_length)
 {
   char *ptr= key;
-  unsigned int value= 0;
+  uint64_t value= 0;
 
   while (--key_length) 
   {
@@ -106,19 +105,19 @@ static uint32_t internal_generate_hash(char *key, size_t key_length)
   return value == 0 ? 1 : value;
 }
 
-static uint32_t internal_generate_md5(char *key, size_t key_length)
+static uint64_t internal_generate_md5(char *key, size_t key_length)
 {
   unsigned char results[16];
 
   md5_signature((unsigned char*)key, (unsigned int)key_length, results);
 
-  return (uint32_t)(( results[3] << 24 )
+  return (uint64_t)(( results[3] << 24 )
                     | ( results[2] << 16 )
                     | ( results[1] <<  8 )
                     |   results[0] );
 }
 
-static uint32_t internal_generate_ketama_md5(char *key, size_t key_length)
+static uint64_t internal_generate_ketama_md5(char *key, size_t key_length)
 {
   unsigned char results[16];