projects
/
m6w6
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
move repository from m6w6 to awesomized
[m6w6/libmemcached]
/
src
/
libmemcached
/
parse.cc
diff --git
a/src/libmemcached/parse.cc
b/src/libmemcached/parse.cc
index 373804654f1de31c08e641853bf0f636730dd07c..5fe34ba8311b8ba04554d1a480f8920ad95fcb39 100644
(file)
--- a/
src/libmemcached/parse.cc
+++ b/
src/libmemcached/parse.cc
@@
-9,7
+9,7
@@
| the terms online at: https://opensource.org/licenses/BSD-3-Clause |
+--------------------------------------------------------------------+
| Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
| 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/
|
+--------------------------------------------------------------------+
*/
+--------------------------------------------------------------------+
*/
@@
-26,11
+26,11
@@
memcached_server_list_st memcached_servers_parse(const char *server_strings) {
end_ptr = server_strings + strlen(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 buffer[HUGE_STRING_LEN];
- char *ptr, *ptr2;
+ char *ptr, *ptr2
= NULL
;
uint32_t weight = 0;
if (string) {
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;
}
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;
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);
errno = 0;
port = (in_port_t) strtoul(ptr, (char **) NULL, 10);
- if (errno
!= 0
) {
+ if (errno) {
memcached_server_free(servers);
return NULL;
}
memcached_server_free(servers);
return NULL;
}
- ptr2 =
index
(ptr, ' ');
+ ptr2 =
strchr
(ptr, ' ');
if (!ptr2)
if (!ptr2)
- ptr2 =
index
(ptr, ':');
+ ptr2 =
strchr
(ptr, ':');
if (ptr2) {
ptr2++;
errno = 0;
weight = uint32_t(strtoul(ptr2, (char **) NULL, 10));
if (ptr2) {
ptr2++;
errno = 0;
weight = uint32_t(strtoul(ptr2, (char **) NULL, 10));
- if (errno
!= 0
) {
+ if (errno) {
memcached_server_free(servers);
return NULL;
}
memcached_server_free(servers);
return NULL;
}