X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Flibmemcached%2Fparse.cc;h=4b0eba54eeef56a0ea3b31c87814854c5857eab4;hb=c8300fc7f692c617f1a583a9cb22732a840e7d3e;hp=7130cf464ac224798b3ce7b91d087ef637e00343;hpb=cb40bfe8923a2b06160a965d95b45ca0ea3421ab;p=awesomized%2Flibmemcached diff --git a/src/libmemcached/parse.cc b/src/libmemcached/parse.cc index 7130cf46..4b0eba54 100644 --- a/src/libmemcached/parse.cc +++ b/src/libmemcached/parse.cc @@ -1,6 +1,6 @@ /* +--------------------------------------------------------------------+ - | libmemcached - C/C++ Client Library for memcached | + | libmemcached-awesome - C/C++ Client Library for memcached | +--------------------------------------------------------------------+ | Redistribution and use in source and binary forms, with or without | | modification, are permitted under the terms of the BSD license. | @@ -9,7 +9,7 @@ | the terms online at: https://opensource.org/licenses/BSD-3-Clause | +--------------------------------------------------------------------+ | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ | - | Copyright (c) 2020 Michael Wallner | + | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ | +--------------------------------------------------------------------+ */ @@ -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; @@ -59,9 +68,9 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings) { return NULL; } - ptr2 = index(ptr, ' '); + ptr2 = strchr(ptr, ' '); if (!ptr2) - ptr2 = index(ptr, ':'); + ptr2 = strchr(ptr, ':'); if (ptr2) { ptr2++;