2 +--------------------------------------------------------------------+
3 | libmemcached - 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 Michael Wallner <mike@php.net> |
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 *) index(server_strings
, ',');
30 begin_ptr
!= end_ptr
; string
= (char *) index(begin_ptr
, ','))
32 char buffer
[HUGE_STRING_LEN
];
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
= index(buffer
, ':');
56 port
= (in_port_t
) strtoul(ptr
, (char **) NULL
, 10);
58 memcached_server_free(servers
);
62 ptr2
= index(ptr
, ' ');
64 ptr2
= index(ptr
, ':');
69 weight
= uint32_t(strtoul(ptr2
, (char **) NULL
, 10));
71 memcached_server_free(servers
);
77 servers
= memcached_server_list_append_with_weight(servers
, buffer
, port
, weight
, &rc
);
79 if (isspace(*begin_ptr
)) {