Adding new memcached_clone() function
[awesomized/libmemcached] / lib / memcached.c
1 /*
2 Memcached library
3 */
4 #include "common.h"
5
6 memcached_st *memcached_create(memcached_st *ptr)
7 {
8 if (!ptr)
9 {
10 ptr= (memcached_st *)malloc(sizeof(memcached_st));
11
12 if (!ptr)
13 return NULL; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */
14
15 memset(ptr, 0, sizeof(memcached_st));
16 ptr->is_allocated= MEMCACHED_ALLOCATED;
17 }
18 else
19 {
20 memset(ptr, 0, sizeof(memcached_st));
21 }
22
23 return ptr;
24 }
25
26 void memcached_free(memcached_st *ptr)
27 {
28 if (ptr->hosts)
29 {
30 memcached_quit(ptr);
31 memcached_server_list_free(ptr->hosts);
32 ptr->hosts= NULL;
33 }
34
35 if (ptr->is_allocated == MEMCACHED_ALLOCATED)
36 free(ptr);
37 else
38 memset(ptr, 0, sizeof(memcached_st));
39 }
40
41 memcached_st *memcached_clone(memcached_st *clone, memcached_st *ptr)
42 {
43 memcached_return rc;
44 memcached_st *new_clone;
45
46 if (ptr == NULL)
47 return memcached_create(clone);
48
49 new_clone= memcached_create(clone);
50
51
52 rc= memcached_server_push(new_clone, ptr->hosts);
53
54 if (rc != MEMCACHED_SUCCESS)
55 {
56 memcached_free(new_clone);
57
58 return NULL;
59 }
60
61
62 new_clone->flags= ptr->flags;
63 new_clone->number_of_hosts= ptr->number_of_hosts;
64 new_clone->send_size= ptr->send_size;
65 new_clone->recv_size= ptr->recv_size;
66
67 return new_clone;
68 }