Lion fixes, distcheck fix:
[awesomized/libmemcached] / libmemcached / callback.cc
1 /* LibMemcached
2 * Copyright (C) 2006-2009 Brian Aker
3 * All rights reserved.
4 *
5 * Use and distribution licensed under the BSD license. See
6 * the COPYING file in the parent directory for full text.
7 *
8 * Summary: Change any of the possible callbacks.
9 *
10 */
11
12 #include <libmemcached/common.h>
13 #include <sys/types.h>
14
15 #ifndef __INTEL_COMPILER
16 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
17 #endif
18
19 /*
20 These functions provide data and function callback support
21 */
22
23 memcached_return_t memcached_callback_set(memcached_st *ptr,
24 const memcached_callback_t flag,
25 const void *data)
26 {
27 switch (flag)
28 {
29 case MEMCACHED_CALLBACK_PREFIX_KEY:
30 {
31 return memcached_set_namespace(ptr, (char*)data, data ? strlen((char*)data) : 0);
32 }
33 case MEMCACHED_CALLBACK_USER_DATA:
34 {
35 ptr->user_data= const_cast<void *>(data);
36 break;
37 }
38 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION:
39 {
40 memcached_cleanup_fn func= *(memcached_cleanup_fn *)&data;
41 ptr->on_cleanup= func;
42 break;
43 }
44 case MEMCACHED_CALLBACK_CLONE_FUNCTION:
45 {
46 memcached_clone_fn func= *(memcached_clone_fn *)&data;
47 ptr->on_clone= func;
48 break;
49 }
50 #ifdef MEMCACHED_ENABLE_DEPRECATED
51 case MEMCACHED_CALLBACK_MALLOC_FUNCTION:
52 {
53 memcached_malloc_function func= *(memcached_malloc_fn *)&data;
54 ptr->call_malloc= func;
55 break;
56 }
57 case MEMCACHED_CALLBACK_REALLOC_FUNCTION:
58 {
59 memcached_realloc_function func= *(memcached_realloc_fn *)&data;
60 ptr->call_realloc= func;
61 break;
62 }
63 case MEMCACHED_CALLBACK_FREE_FUNCTION:
64 {
65 memcached_free_function func= *(memcached_free_fn *)&data;
66 ptr->call_free= func;
67 break;
68 }
69 #endif
70 case MEMCACHED_CALLBACK_GET_FAILURE:
71 {
72 memcached_trigger_key_fn func= *(memcached_trigger_key_fn *)&data;
73 ptr->get_key_failure= func;
74 break;
75 }
76 case MEMCACHED_CALLBACK_DELETE_TRIGGER:
77 {
78 memcached_trigger_delete_key_fn func= *(memcached_trigger_delete_key_fn *)&data;
79 ptr->delete_trigger= func;
80 break;
81 }
82 case MEMCACHED_CALLBACK_MAX:
83 return MEMCACHED_FAILURE;
84 }
85
86 return MEMCACHED_SUCCESS;
87 }
88
89 void *memcached_callback_get(memcached_st *ptr,
90 const memcached_callback_t flag,
91 memcached_return_t *error)
92 {
93 memcached_return_t local_error;
94
95 if (error == NULL)
96 {
97 error = &local_error;
98 }
99
100 switch (flag)
101 {
102 case MEMCACHED_CALLBACK_PREFIX_KEY:
103 {
104 if (ptr->_namespace)
105 {
106 *error= MEMCACHED_SUCCESS;
107 return (void *)memcached_array_string(ptr->_namespace);
108 }
109 else
110 {
111 *error= MEMCACHED_FAILURE;
112 return NULL;
113 }
114 }
115 case MEMCACHED_CALLBACK_USER_DATA:
116 {
117 *error= ptr->user_data ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
118 return (void *)ptr->user_data;
119 }
120 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION:
121 {
122 *error= ptr->on_cleanup ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
123 return *(void **)&ptr->on_cleanup;
124 }
125 case MEMCACHED_CALLBACK_CLONE_FUNCTION:
126 {
127 *error= ptr->on_clone ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
128 return *(void **)&ptr->on_clone;
129 }
130 #ifdef MEMCACHED_ENABLE_DEPRECATED
131 case MEMCACHED_CALLBACK_MALLOC_FUNCTION:
132 {
133 *error= ptr->call_malloc ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
134 return *(void **)&ptr->call_malloc;
135 }
136 case MEMCACHED_CALLBACK_REALLOC_FUNCTION:
137 {
138 *error= ptr->call_realloc ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
139 return *(void **)&ptr->call_realloc;
140 }
141 case MEMCACHED_CALLBACK_FREE_FUNCTION:
142 {
143 *error= ptr->call_free ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
144 return *(void **)&ptr->call_free;
145 }
146 #endif
147 case MEMCACHED_CALLBACK_GET_FAILURE:
148 {
149 *error= ptr->get_key_failure ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
150 return *(void **)&ptr->get_key_failure;
151 }
152 case MEMCACHED_CALLBACK_DELETE_TRIGGER:
153 {
154 *error= ptr->delete_trigger ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
155 return *(void **)&ptr->delete_trigger;
156 }
157 case MEMCACHED_CALLBACK_MAX:
158 default:
159 assert_msg(0, "Invalid behavior passed to memcached_behavior_set()");
160 *error= MEMCACHED_FAILURE;
161 return NULL;
162 }
163 }