Cleaning out asserts;
[awesomized/libmemcached] / lib / memcached_parse.c
1 /*
2 I debated about putting this in the client library since it does an
3 action I don't really believe belongs in the library.
4
5 Frankly its too damn useful not to be here though.
6 */
7
8 #include <memcached.h>
9 #include <common.h>
10
11 memcached_server_st *memcached_servers_parse(char *server_strings)
12 {
13 char *string;
14 unsigned int port;
15 char *begin_ptr;
16 char *end_ptr;
17 memcached_server_st *servers= NULL;
18 memcached_return rc;
19
20 WATCHPOINT_ASSERT(server_strings);
21
22 end_ptr= server_strings + strlen(server_strings);
23
24 for (begin_ptr= server_strings, string= index(server_strings, ',');
25 begin_ptr != end_ptr;
26 string= index(begin_ptr, ','))
27 {
28 char buffer[HUGE_STRING_LEN];
29 char *ptr;
30 port= 0;
31
32 memset(buffer, 0, HUGE_STRING_LEN);
33 if (string)
34 {
35 memcpy(buffer, begin_ptr, string - begin_ptr);
36 begin_ptr= string+1;
37 }
38 else
39 {
40 size_t length= strlen(begin_ptr);
41 memcpy(buffer, begin_ptr, length);
42 begin_ptr= end_ptr;
43 }
44
45 ptr= index(buffer, ':');
46
47 if (ptr)
48 {
49 ptr[0]= 0;
50
51 ptr++;
52
53 port= strtol(ptr, (char **)NULL, 10);
54 }
55
56 servers= memcached_server_list_append(servers, buffer, port, &rc);
57
58 if (isspace(*begin_ptr))
59 begin_ptr++;
60 }
61
62 return servers;
63 }