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.
13 #include <sys/types.h>
16 These functions provide data and function callback support
19 memcached_return_t
memcached_callback_set(memcached_st
*ptr
,
20 const memcached_callback_t flag
,
25 case MEMCACHED_CALLBACK_PREFIX_KEY
:
27 char *key
= (char *)data
;
31 size_t key_length
= strlen(key
);
33 if (memcached_key_test((const char **)&key
, &key_length
, 1) == MEMCACHED_BAD_KEY_PROVIDED
)
34 return memcached_set_error(ptr
, MEMCACHED_BAD_KEY_PROVIDED
, NULL
);
36 if ((key_length
> MEMCACHED_PREFIX_KEY_MAX_SIZE
-1))
37 return memcached_set_error(ptr
, MEMCACHED_KEY_TOO_BIG
, NULL
);
39 memcached_array_free(ptr
->prefix_key
);
40 ptr
->prefix_key
= memcached_strcpy(ptr
, (const char *)data
, strlen((const char*)data
));
42 if (! ptr
->prefix_key
)
43 return memcached_set_error(ptr
, MEMCACHED_MEMORY_ALLOCATION_FAILURE
, NULL
);
47 memcached_array_free(ptr
->prefix_key
);
48 ptr
->prefix_key
= NULL
;
53 case MEMCACHED_CALLBACK_USER_DATA
:
58 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION
:
60 memcached_cleanup_fn func
= *(memcached_cleanup_fn
*)&data
;
61 ptr
->on_cleanup
= func
;
64 case MEMCACHED_CALLBACK_CLONE_FUNCTION
:
66 memcached_clone_fn func
= *(memcached_clone_fn
*)&data
;
70 #ifdef MEMCACHED_ENABLE_DEPRECATED
71 case MEMCACHED_CALLBACK_MALLOC_FUNCTION
:
73 memcached_malloc_function func
= *(memcached_malloc_fn
*)&data
;
74 ptr
->call_malloc
= func
;
77 case MEMCACHED_CALLBACK_REALLOC_FUNCTION
:
79 memcached_realloc_function func
= *(memcached_realloc_fn
*)&data
;
80 ptr
->call_realloc
= func
;
83 case MEMCACHED_CALLBACK_FREE_FUNCTION
:
85 memcached_free_function func
= *(memcached_free_fn
*)&data
;
90 case MEMCACHED_CALLBACK_GET_FAILURE
:
92 memcached_trigger_key_fn func
= *(memcached_trigger_key_fn
*)&data
;
93 ptr
->get_key_failure
= func
;
96 case MEMCACHED_CALLBACK_DELETE_TRIGGER
:
98 memcached_trigger_delete_key_fn func
= *(memcached_trigger_delete_key_fn
*)&data
;
99 ptr
->delete_trigger
= func
;
102 case MEMCACHED_CALLBACK_MAX
:
104 return MEMCACHED_FAILURE
;
107 return MEMCACHED_SUCCESS
;
110 void *memcached_callback_get(memcached_st
*ptr
,
111 const memcached_callback_t flag
,
112 memcached_return_t
*error
)
114 memcached_return_t local_error
;
117 error
= &local_error
;
121 case MEMCACHED_CALLBACK_PREFIX_KEY
:
125 *error
= MEMCACHED_SUCCESS
;
126 return (void *)memcached_array_string(ptr
->prefix_key
);
130 *error
= MEMCACHED_FAILURE
;
134 case MEMCACHED_CALLBACK_USER_DATA
:
136 *error
= ptr
->user_data
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
137 return (void *)ptr
->user_data
;
139 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION
:
141 *error
= ptr
->on_cleanup
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
142 return *(void **)&ptr
->on_cleanup
;
144 case MEMCACHED_CALLBACK_CLONE_FUNCTION
:
146 *error
= ptr
->on_clone
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
147 return *(void **)&ptr
->on_clone
;
149 #ifdef MEMCACHED_ENABLE_DEPRECATED
150 case MEMCACHED_CALLBACK_MALLOC_FUNCTION
:
152 *error
= ptr
->call_malloc
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
153 return *(void **)&ptr
->call_malloc
;
155 case MEMCACHED_CALLBACK_REALLOC_FUNCTION
:
157 *error
= ptr
->call_realloc
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
158 return *(void **)&ptr
->call_realloc
;
160 case MEMCACHED_CALLBACK_FREE_FUNCTION
:
162 *error
= ptr
->call_free
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
163 return *(void **)&ptr
->call_free
;
166 case MEMCACHED_CALLBACK_GET_FAILURE
:
168 *error
= ptr
->get_key_failure
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
169 return *(void **)&ptr
->get_key_failure
;
171 case MEMCACHED_CALLBACK_DELETE_TRIGGER
:
173 *error
= ptr
->delete_trigger
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
174 return *(void **)&ptr
->delete_trigger
;
176 case MEMCACHED_CALLBACK_MAX
:
178 WATCHPOINT_ASSERT(0);
179 *error
= MEMCACHED_FAILURE
;