Updating TODO list
[awesomized/libmemcached] / lib / memcached_hash.c
index 74cd636059cc267cee8cb8c1e1b9793916a6b00a..cb3d5218391037f052061bbfc64f2c552fb58277 100644 (file)
@@ -1,12 +1,35 @@
-#include <memcached.h>
+#include "common.h"
 
-unsigned int memcached_generate_hash(char *key, size_t key_length)
+/* Prototypes */
+static unsigned int internal_generate_hash(char *key, size_t key_length);
+
+unsigned int memcached_generate_hash(memcached_st *ptr, char *key, size_t key_length)
+{
+  unsigned int return_value;
+
+  if (ptr->flags & MEM_USE_MD5)
+  {
+    unsigned char results[16];
+
+    md5_signature((unsigned char*)key, (unsigned int)key_length, results);
+
+    return_value= (unsigned int)(( results[3] << 24 )
+                                | ( results[2] << 16 )
+                                | ( results[1] <<  8 )
+                                |   results[0] );
+  }
+  else
+    return_value= internal_generate_hash(key, key_length);
+
+  return return_value % ptr->number_of_hosts;
+}
+
+static unsigned int internal_generate_hash(char *key, size_t key_length)
 {
-  unsigned int x = key_length;
-  char *ptr = key;
-  unsigned int value = 0;
+  char *ptr= key;
+  unsigned int value= 0;
 
-  while (x--
+  while (--key_length
   {
     value += *ptr++;
     value += (value << 10);