X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fcallback.cc;h=bb001febd7f17399fbe6d603863d9b1aae0030ce;hb=326e812b0ca940bf90aaadf69312a0316091d0cb;hp=84f99359d78d138e697ca80f8b84f1107fc82c4d;hpb=60c68bea5d034012f935eb849d92781c345c7214;p=awesomized%2Flibmemcached diff --git a/libmemcached/callback.cc b/libmemcached/callback.cc index 84f99359..bb001feb 100644 --- a/libmemcached/callback.cc +++ b/libmemcached/callback.cc @@ -20,144 +20,141 @@ These functions provide data and function callback support */ -memcached_return_t memcached_callback_set(memcached_st *ptr, +memcached_return_t memcached_callback_set(memcached_st *shell, const memcached_callback_t flag, const void *data) { - switch (flag) + Memcached* ptr= memcached2Memcached(shell); + if (ptr) { - case MEMCACHED_CALLBACK_PREFIX_KEY: - { - return memcached_set_namespace(ptr, (char*)data, data ? strlen((char*)data) : 0); - } - case MEMCACHED_CALLBACK_USER_DATA: - { - ptr->user_data= const_cast(data); - break; - } - case MEMCACHED_CALLBACK_CLEANUP_FUNCTION: - { - memcached_cleanup_fn func= *(memcached_cleanup_fn *)&data; - ptr->on_cleanup= func; - break; - } - case MEMCACHED_CALLBACK_CLONE_FUNCTION: - { - memcached_clone_fn func= *(memcached_clone_fn *)&data; - ptr->on_clone= func; - break; - } -#ifdef MEMCACHED_ENABLE_DEPRECATED - case MEMCACHED_CALLBACK_MALLOC_FUNCTION: - { - memcached_malloc_function func= *(memcached_malloc_fn *)&data; - ptr->call_malloc= func; - break; - } - case MEMCACHED_CALLBACK_REALLOC_FUNCTION: - { - memcached_realloc_function func= *(memcached_realloc_fn *)&data; - ptr->call_realloc= func; - break; - } - case MEMCACHED_CALLBACK_FREE_FUNCTION: + switch (flag) { - memcached_free_function func= *(memcached_free_fn *)&data; - ptr->call_free= func; - break; - } -#endif - case MEMCACHED_CALLBACK_GET_FAILURE: - { - memcached_trigger_key_fn func= *(memcached_trigger_key_fn *)&data; - ptr->get_key_failure= func; - break; - } - case MEMCACHED_CALLBACK_DELETE_TRIGGER: - { - memcached_trigger_delete_key_fn func= *(memcached_trigger_delete_key_fn *)&data; - ptr->delete_trigger= func; - break; + case MEMCACHED_CALLBACK_PREFIX_KEY: + { + return memcached_set_namespace(ptr, (char*)data, data ? strlen((char*)data) : 0); + } + + case MEMCACHED_CALLBACK_USER_DATA: + { + ptr->user_data= const_cast(data); + break; + } + + case MEMCACHED_CALLBACK_CLEANUP_FUNCTION: + { + memcached_cleanup_fn func= *(memcached_cleanup_fn *)&data; + ptr->on_cleanup= func; + break; + } + + case MEMCACHED_CALLBACK_CLONE_FUNCTION: + { + memcached_clone_fn func= *(memcached_clone_fn *)&data; + ptr->on_clone= func; + break; + } + + case MEMCACHED_CALLBACK_GET_FAILURE: + { + memcached_trigger_key_fn func= *(memcached_trigger_key_fn *)&data; + ptr->get_key_failure= func; + break; + } + + case MEMCACHED_CALLBACK_DELETE_TRIGGER: + { + if (data) // NULL would mean we are disabling. + { + if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS)) + { + return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("Delete triggers cannot be used if buffering is enabled")); + } + + if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_NOREPLY)) + { + return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("Delete triggers cannot be used if MEMCACHED_BEHAVIOR_NOREPLY is set")); + } + } + + memcached_trigger_delete_key_fn func= *(memcached_trigger_delete_key_fn *)&data; + ptr->delete_trigger= func; + break; + } + + case MEMCACHED_CALLBACK_MAX: + return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("Invalid callback supplied")); } - case MEMCACHED_CALLBACK_MAX: - return MEMCACHED_FAILURE; + + return MEMCACHED_SUCCESS; } - return MEMCACHED_SUCCESS; + return MEMCACHED_INVALID_ARGUMENTS; } -void *memcached_callback_get(memcached_st *ptr, +void *memcached_callback_get(memcached_st *shell, const memcached_callback_t flag, memcached_return_t *error) { + Memcached* ptr= memcached2Memcached(shell); memcached_return_t local_error; - if (error == NULL) { error = &local_error; } + if (ptr == NULL) + { + *error= MEMCACHED_INVALID_ARGUMENTS; + return NULL; + } + switch (flag) { case MEMCACHED_CALLBACK_PREFIX_KEY: { + *error= MEMCACHED_SUCCESS; if (ptr->_namespace) { - *error= MEMCACHED_SUCCESS; return (void *)memcached_array_string(ptr->_namespace); } - else - { - *error= MEMCACHED_FAILURE; - return NULL; - } + return NULL; } + case MEMCACHED_CALLBACK_USER_DATA: { *error= ptr->user_data ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; return (void *)ptr->user_data; } + case MEMCACHED_CALLBACK_CLEANUP_FUNCTION: { *error= ptr->on_cleanup ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; return *(void **)&ptr->on_cleanup; } + case MEMCACHED_CALLBACK_CLONE_FUNCTION: { *error= ptr->on_clone ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; return *(void **)&ptr->on_clone; } -#ifdef MEMCACHED_ENABLE_DEPRECATED - case MEMCACHED_CALLBACK_MALLOC_FUNCTION: - { - *error= ptr->call_malloc ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return *(void **)&ptr->call_malloc; - } - case MEMCACHED_CALLBACK_REALLOC_FUNCTION: - { - *error= ptr->call_realloc ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return *(void **)&ptr->call_realloc; - } - case MEMCACHED_CALLBACK_FREE_FUNCTION: - { - *error= ptr->call_free ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return *(void **)&ptr->call_free; - } -#endif + case MEMCACHED_CALLBACK_GET_FAILURE: { *error= ptr->get_key_failure ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; return *(void **)&ptr->get_key_failure; } + case MEMCACHED_CALLBACK_DELETE_TRIGGER: { *error= ptr->delete_trigger ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; return *(void **)&ptr->delete_trigger; } + case MEMCACHED_CALLBACK_MAX: - default: - assert_msg(0, "Invalid behavior passed to memcached_behavior_set()"); - *error= MEMCACHED_FAILURE; - return NULL; + break; } + + assert_msg(0, "Invalid callback passed to memcached_callback_get()"); + *error= MEMCACHED_FAILURE; + return NULL; }