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>
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 return memcached_set_prefix_key(ptr
, (char*)data
, data
? strlen((char*)data
) : 0);
29 case MEMCACHED_CALLBACK_USER_DATA
:
34 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION
:
36 memcached_cleanup_fn func
= *(memcached_cleanup_fn
*)&data
;
37 ptr
->on_cleanup
= func
;
40 case MEMCACHED_CALLBACK_CLONE_FUNCTION
:
42 memcached_clone_fn func
= *(memcached_clone_fn
*)&data
;
46 #ifdef MEMCACHED_ENABLE_DEPRECATED
47 case MEMCACHED_CALLBACK_MALLOC_FUNCTION
:
49 memcached_malloc_function func
= *(memcached_malloc_fn
*)&data
;
50 ptr
->call_malloc
= func
;
53 case MEMCACHED_CALLBACK_REALLOC_FUNCTION
:
55 memcached_realloc_function func
= *(memcached_realloc_fn
*)&data
;
56 ptr
->call_realloc
= func
;
59 case MEMCACHED_CALLBACK_FREE_FUNCTION
:
61 memcached_free_function func
= *(memcached_free_fn
*)&data
;
66 case MEMCACHED_CALLBACK_GET_FAILURE
:
68 memcached_trigger_key_fn func
= *(memcached_trigger_key_fn
*)&data
;
69 ptr
->get_key_failure
= func
;
72 case MEMCACHED_CALLBACK_DELETE_TRIGGER
:
74 memcached_trigger_delete_key_fn func
= *(memcached_trigger_delete_key_fn
*)&data
;
75 ptr
->delete_trigger
= func
;
78 case MEMCACHED_CALLBACK_MAX
:
80 return MEMCACHED_FAILURE
;
83 return MEMCACHED_SUCCESS
;
86 void *memcached_callback_get(memcached_st
*ptr
,
87 const memcached_callback_t flag
,
88 memcached_return_t
*error
)
90 memcached_return_t local_error
;
97 case MEMCACHED_CALLBACK_PREFIX_KEY
:
101 *error
= MEMCACHED_SUCCESS
;
102 return (void *)memcached_array_string(ptr
->prefix_key
);
106 *error
= MEMCACHED_FAILURE
;
110 case MEMCACHED_CALLBACK_USER_DATA
:
112 *error
= ptr
->user_data
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
113 return (void *)ptr
->user_data
;
115 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION
:
117 *error
= ptr
->on_cleanup
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
118 return *(void **)&ptr
->on_cleanup
;
120 case MEMCACHED_CALLBACK_CLONE_FUNCTION
:
122 *error
= ptr
->on_clone
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
123 return *(void **)&ptr
->on_clone
;
125 #ifdef MEMCACHED_ENABLE_DEPRECATED
126 case MEMCACHED_CALLBACK_MALLOC_FUNCTION
:
128 *error
= ptr
->call_malloc
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
129 return *(void **)&ptr
->call_malloc
;
131 case MEMCACHED_CALLBACK_REALLOC_FUNCTION
:
133 *error
= ptr
->call_realloc
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
134 return *(void **)&ptr
->call_realloc
;
136 case MEMCACHED_CALLBACK_FREE_FUNCTION
:
138 *error
= ptr
->call_free
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
139 return *(void **)&ptr
->call_free
;
142 case MEMCACHED_CALLBACK_GET_FAILURE
:
144 *error
= ptr
->get_key_failure
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
145 return *(void **)&ptr
->get_key_failure
;
147 case MEMCACHED_CALLBACK_DELETE_TRIGGER
:
149 *error
= ptr
->delete_trigger
? MEMCACHED_SUCCESS
: MEMCACHED_FAILURE
;
150 return *(void **)&ptr
->delete_trigger
;
152 case MEMCACHED_CALLBACK_MAX
:
154 WATCHPOINT_ASSERT(0);
155 *error
= MEMCACHED_FAILURE
;