parse: fix warning
[m6w6/libmemcached] / src / libmemcached / parse.cc
index 373804654f1de31c08e641853bf0f636730dd07c..d9d81db0978eae166909c7f738b508ccf96c173d 100644 (file)
@@ -26,11 +26,11 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings) {
 
   end_ptr = server_strings + strlen(server_strings);
 
-  for (begin_ptr = server_strings, string = (char *) index(server_strings, ',');
-       begin_ptr != end_ptr; string = (char *) index(begin_ptr, ','))
+  for (begin_ptr = server_strings, string = (char *) strchr(server_strings, ',');
+       begin_ptr != end_ptr; string = (char *) strchr(begin_ptr, ','))
   {
     char buffer[HUGE_STRING_LEN];
-    char *ptr, *ptr2;
+    char *ptr, *ptr2 = NULL;
     uint32_t weight = 0;
 
     if (string) {
@@ -44,8 +44,17 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings) {
       begin_ptr = end_ptr;
     }
 
-    ptr = index(buffer, ':');
-
+    ptr = strchr(buffer, '[');
+    if (ptr) {
+      ptr2 = strchr(ptr+1, ']');
+    }
+    if (ptr && ptr2) {
+      // [IPv6]:port
+      ptr = strchr(ptr2+1, ':');
+    } else {
+      // IPv4:port or name:port
+      ptr = strchr(buffer, ':');
+    }
     in_port_t port = 0;
     if (ptr) {
       ptr[0] = 0;
@@ -54,20 +63,20 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings) {
 
       errno = 0;
       port = (in_port_t) strtoul(ptr, (char **) NULL, 10);
-      if (errno != 0) {
+      if (errno) {
         memcached_server_free(servers);
         return NULL;
       }
 
-      ptr2 = index(ptr, ' ');
+      ptr2 = strchr(ptr, ' ');
       if (!ptr2)
-        ptr2 = index(ptr, ':');
+        ptr2 = strchr(ptr, ':');
 
       if (ptr2) {
         ptr2++;
         errno = 0;
         weight = uint32_t(strtoul(ptr2, (char **) NULL, 10));
-        if (errno != 0) {
+        if (errno) {
           memcached_server_free(servers);
           return NULL;
         }