ce6cd925bdc76d566ca15d4a5243d71102e32a47
[awesomized/libmemcached] / src / utilities.c
1 #include <memcached.h>
2
3 static char **cleanup_list= NULL;
4 static char cleanup_list_length= 0;
5
6 void parse_opt_servers(memcached_st *memc,
7 char *server_strings)
8 {
9 char *string;
10 unsigned int port;
11 char *begin_ptr;
12 char *end_ptr;
13
14 end_ptr= server_strings + strlen(server_strings);
15
16 assert(server_strings);
17 assert(memc);
18
19 for (begin_ptr= server_strings, string= index(server_strings, ',');
20 begin_ptr == end_ptr;
21 begin_ptr= ++string, string= index(begin_ptr, ','))
22 {
23 char buffer[HUGE_STRING_LEN];
24 char *ptr;
25
26 memset(buffer, 0, HUGE_STRING_LEN);
27 if (string)
28 {
29 memcpy(buffer, begin_ptr, string - begin_ptr);
30 }
31 else
32 {
33 size_t length= strlen(server_strings);
34 memcpy(buffer, begin_ptr, length);
35 string= server_strings+length;
36 }
37
38 ptr= index(buffer, ':');
39
40 if (ptr)
41 {
42 ptr[0]= 0;
43
44 ptr++;
45
46 port= strtol(ptr, (char **)NULL, 10);
47
48 memcached_server_add(memc, buffer, port);
49 }
50 else
51 {
52 memcached_server_add(memc, buffer, 0);
53 }
54 }
55 }
56
57 void cleanup(void)
58 {
59 unsigned int x;
60 for (x= 0; x < cleanup_list_length; x++)
61 free(cleanup_list[x]);
62
63 free(cleanup_list);
64 }
65
66 char *strdup_cleanup(const char *str)
67 {
68 char *ptr;
69
70 ptr= strdup(str);
71
72 cleanup_list= (char **)realloc(cleanup_list, sizeof(char *) * (cleanup_list_length+1));
73 cleanup_list[cleanup_list_length]= ptr;
74 cleanup_list_length++;
75
76 return ptr;
77 }