X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_parse.c;h=ec695cfa897f606f55d9fc8d2bb16f66880af5dc;hb=a7a011c2ea4a63368b3a96a332da00820ed402cb;hp=fc6a4cb1ecb19e08892afc84a024eac263118c4d;hpb=948eeb667c78f158f769de8cc418e44e81048dc2;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_parse.c b/libmemcached/memcached_parse.c index fc6a4cb1..ec695cfa 100644 --- a/libmemcached/memcached_parse.c +++ b/libmemcached/memcached_parse.c @@ -5,15 +5,15 @@ Frankly its too damn useful not to be here though. */ -#include #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 port; + uint32_t weight; + const char *begin_ptr; + const char *end_ptr; memcached_server_st *servers= NULL; memcached_return rc; @@ -26,12 +26,13 @@ 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) { - memcpy(buffer, begin_ptr, string - begin_ptr); + memcpy(buffer, begin_ptr, (size_t) (string - begin_ptr)); buffer[(unsigned int)(string - begin_ptr)]= 0; begin_ptr= string+1; } @@ -51,10 +52,19 @@ memcached_server_st *memcached_servers_parse(char *server_strings) ptr++; - port= strtoul(ptr, (char **)NULL, 10); + port= (uint32_t) strtoul(ptr, (char **)NULL, 10); + + ptr2= index(ptr, ' '); + if (! ptr2) + ptr2= index(ptr, ':'); + if (ptr2) + { + ptr2++; + weight = (uint32_t) 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++;