2 * Copyright (C) 2006-2009 Brian Aker
5 * Use and distribution licensed under the BSD license. See
6 * the COPYING file in the parent directory for full text.
8 * Summary: Change any of the possible callbacks.
12 #include <libmemcached/common.h>
13 #include <sys/types.h>
15 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
18 These functions provide data and function callback support
21 memcached_return_t
memcached_callback_set(memcached_st
*ptr
,
22 const memcached_callback_t flag
,
27 case MEMCACHED_CALLBACK_PREFIX_KEY
:
29 return memcached_set_namespace(ptr
, (char*)data
, data
? strlen((char*)data
) : 0);
31 case MEMCACHED_CALLBACK_USER_DATA
:
33 ptr
->user_data
= const_cast<void *>(data
);
36 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION
:
38 memcached_cleanup_fn func
= *(memcached_cleanup_fn
*)&data
;
39 ptr
->on_cleanup
= func
;
42 case MEMCACHED_CALLBACK_CLONE_FUNCTION
:
44 memcached_clone_fn func
= *(memcached_clone_fn
*)&data
;
48 #ifdef MEMCACHED_ENABLE_DEPRECATED
49 case MEMCACHED_CALLBACK_MALLOC_FUNCTION
:
51 memcached_malloc_function func
= *(memcached_malloc_fn
*)&data
;
52 ptr
->call_malloc
= func
;
55 case MEMCACHED_CALLBACK_REALLOC_FUNCTION
:
57 memcached_realloc_function func
= *(memcached_realloc_fn
*)&data
;
58 ptr
->call_realloc
= func
;
61 case MEMCACHED_CALLBACK_FREE_FUNCTION
:
63 memcached_free_function func
= *(memcached_free_fn
*)&data
;
68 case MEMCACHED_CALLBACK_GET_FAILURE
:
70 memcached_trigger_key_fn func
= *(memcached_trigger_key_fn
*)&data
;
71 ptr
->get_key_failure
= func
;
74 case MEMCACHED_CALLBACK_DELETE_TRIGGER
:
76 memcached_trigger_delete_key_fn func
= *(memcached_trigger_delete_key_fn
*)&data
;
77 ptr
->delete_trigger
= func
;
80 case MEMCACHED_CALLBACK_MAX
:
81 return MEMCACHED_FAILURE
;
84 return MEMCACHED_SUCCESS
;
87 void *memcached_callback_get(memcached_st
*ptr
,
88 const memcached_callback_t flag
,
89 memcached_return_t
*error
)
91 memcached_return_t local_error
;
98 case MEMCACHED_CALLBACK_PREFIX_KEY
:
102 *error
= MEMCACHED_SUCCESS
;
103 return (void *)memcached_array_string(ptr
->_namespace
);
107 *error
= MEMCACHED_FAILURE
;
111 case MEMCACHED_CALLBACK_USER_DATA
:
113 *error
= ptr
->user_data
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
114 return (void *)ptr
->user_data
;
116 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION
:
118 *error
= ptr
->on_cleanup
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
119 return *(void **)&ptr
->on_cleanup
;
121 case MEMCACHED_CALLBACK_CLONE_FUNCTION
:
123 *error
= ptr
->on_clone
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
124 return *(void **)&ptr
->on_clone
;
126 #ifdef MEMCACHED_ENABLE_DEPRECATED
127 case MEMCACHED_CALLBACK_MALLOC_FUNCTION
:
129 *error
= ptr
->call_malloc
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
130 return *(void **)&ptr
->call_malloc
;
132 case MEMCACHED_CALLBACK_REALLOC_FUNCTION
:
134 *error
= ptr
->call_realloc
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
135 return *(void **)&ptr
->call_realloc
;
137 case MEMCACHED_CALLBACK_FREE_FUNCTION
:
139 *error
= ptr
->call_free
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
140 return *(void **)&ptr
->call_free
;
143 case MEMCACHED_CALLBACK_GET_FAILURE
:
145 *error
= ptr
->get_key_failure
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
146 return *(void **)&ptr
->get_key_failure
;
148 case MEMCACHED_CALLBACK_DELETE_TRIGGER
:
150 *error
= ptr
->delete_trigger
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
151 return *(void **)&ptr
->delete_trigger
;
153 case MEMCACHED_CALLBACK_MAX
:
155 WATCHPOINT_ASSERT(0);
156 *error
= MEMCACHED_FAILURE
;