/*
+--------------------------------------------------------------------+
- | 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. |
| 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 <mike@php.net> |
+ | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
+--------------------------------------------------------------------+
*/
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) {
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;
return NULL;
}
- ptr2 = index(ptr, ' ');
+ ptr2 = strchr(ptr, ' ');
if (!ptr2)
- ptr2 = index(ptr, ':');
+ ptr2 = strchr(ptr, ':');
if (ptr2) {
ptr2++;