Merge trunk.
[awesomized/libmemcached] / libmemcached / memcached_parse.c
index 366e77b55e6667b506baf4ff6bab6f72e9155e44..ca1a08e61e0401f0b7749fdff6598f804acff4f4 100644 (file)
@@ -5,15 +5,15 @@
   Frankly its too damn useful not to be here though.
 */
 
-#include <memcached.h>
 #include "common.h"
 
-memcached_server_st *memcached_servers_parse(char *server_strings)
+memcached_server_st *memcached_servers_parse(const char *server_strings)
 {
   char *string;
   unsigned int port;
-  char *begin_ptr;
-  char *end_ptr;
+  uint32_t weight;
+  const char *begin_ptr;
+  const char *end_ptr;
   memcached_server_st *servers= NULL;
   memcached_return rc;
 
@@ -26,8 +26,9 @@ memcached_server_st *memcached_servers_parse(char *server_strings)
        string= index(begin_ptr, ','))
   {
     char buffer[HUGE_STRING_LEN];
-    char *ptr;
+    char *ptr, *ptr2;
     port= 0;
+    weight= 0;
 
     if (string)
     {
@@ -51,10 +52,19 @@ memcached_server_st *memcached_servers_parse(char *server_strings)
 
       ptr++;
 
-      port= strtol(ptr, (char **)NULL, 10);
+      port= strtoul(ptr, (char **)NULL, 10);
+
+      ptr2= index(ptr, ' ');
+      if (! ptr2)
+        ptr2= index(ptr, ':');
+      if (ptr2)
+      {
+        ptr2++;
+        weight = strtoul(ptr2, (char **)NULL, 10);
+      }
     }
 
-    servers= memcached_server_list_append(servers, buffer, port, &rc);
+    servers= memcached_server_list_append_with_weight(servers, buffer, port, weight, &rc);
 
     if (isspace(*begin_ptr))
       begin_ptr++;