4b0eba54eeef56a0ea3b31c87814854c5857eab4
2 +--------------------------------------------------------------------+
3 | libmemcached-awesome - C/C++ Client Library for memcached |
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted under the terms of the BSD license. |
7 | You should have received a copy of the license in a bundled file |
8 | named LICENSE; in case you did not receive a copy you can review |
9 | the terms online at: https://opensource.org/licenses/BSD-3-Clause |
10 +--------------------------------------------------------------------+
11 | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
12 | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
13 +--------------------------------------------------------------------+
16 #include "libmemcached/common.h"
18 memcached_server_list_st
memcached_servers_parse(const char *server_strings
) {
20 const char *begin_ptr
;
22 memcached_server_st
*servers
= NULL
;
23 memcached_return_t rc
;
25 WATCHPOINT_ASSERT(server_strings
);
27 end_ptr
= server_strings
+ strlen(server_strings
);
29 for (begin_ptr
= server_strings
, string
= (char *) strchr(server_strings
, ',');
30 begin_ptr
!= end_ptr
; string
= (char *) strchr(begin_ptr
, ','))
32 char buffer
[HUGE_STRING_LEN
];
33 char *ptr
, *ptr2
= NULL
;
37 memcpy(buffer
, begin_ptr
, (size_t)(string
- begin_ptr
));
38 buffer
[(unsigned int) (string
- begin_ptr
)] = 0;
39 begin_ptr
= string
+ 1;
41 size_t length
= strlen(begin_ptr
);
42 memcpy(buffer
, begin_ptr
, length
);
47 ptr
= strchr(buffer
, '[');
49 ptr2
= strchr(ptr
+1, ']');
53 ptr
= strchr(ptr2
+1, ':');
55 // IPv4:port or name:port
56 ptr
= strchr(buffer
, ':');
65 port
= (in_port_t
) strtoul(ptr
, (char **) NULL
, 10);
67 memcached_server_free(servers
);
71 ptr2
= strchr(ptr
, ' ');
73 ptr2
= strchr(ptr
, ':');
78 weight
= uint32_t(strtoul(ptr2
, (char **) NULL
, 10));
80 memcached_server_free(servers
);
86 servers
= memcached_server_list_append_with_weight(servers
, buffer
, port
, weight
, &rc
);
88 if (isspace(*begin_ptr
)) {