Portability patches from Kevin Dalley for Freebsd 4.0.
[m6w6/libmemcached] / lib / memcached_hash.c
index 32e82e76d8623c99ddb89d3d657dfde32c192d50..9906f5d9be30f5dcd6dde919f36497bbd58b59b3 100644 (file)
@@ -29,6 +29,8 @@ unsigned int memcached_generate_hash(memcached_st *ptr, char *key, size_t key_le
     break;
   case MEMCACHED_HASH_CRC:
     hash= ((hash_crc32(key, key_length) >> 16) & 0x7fff);
+    if (hash == 0)
+      hash= 1;
     break;
     /* FNV hash'es lifted from Dustin Sallings work */
   case MEMCACHED_HASH_FNV1_64: 
@@ -77,21 +79,26 @@ unsigned int memcached_generate_hash(memcached_st *ptr, char *key, size_t key_le
       hash= internal_generate_ketama_md5(key, key_length);
       break;
     }
+    case MEMCACHED_HASH_HSIEH:
+    {
+      hash= hsieh_hash(key, key_length);
+      break;
+    }
   }
 
   WATCHPOINT_ASSERT(hash);
-  if (ptr->flags & MEM_USE_KETAMA)
+
+  if (ptr->distribution == MEMCACHED_DISTRIBUTION_MODULA)
   {
-    WATCHPOINT_ASSERT(0);
-    return 0;
+    return hash % ptr->number_of_hosts;
   }
   else
   {
     unsigned int server_key;
 
-    server_key= hash % ptr->number_of_hosts;
+    server_key= hash % MEMCACHED_WHEEL_SIZE;
 
-    return server_key;
+    return ptr->wheel[server_key];
   }
 }