X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fcallback.cc;h=36f4b309ed99f81d43b647a3dc91aafcfccbb537;hb=7a02267fc940f3f3431f2c5b7a648fe3577519a9;hp=bb13a87bc8abb52b0168ef607ae313cd8ef3fe89;hpb=a6253e0a9ee914db2e55680a83cd03fdd5a2bc40;p=m6w6%2Flibmemcached diff --git a/libmemcached/callback.cc b/libmemcached/callback.cc index bb13a87b..36f4b309 100644 --- a/libmemcached/callback.cc +++ b/libmemcached/callback.cc @@ -12,7 +12,9 @@ #include #include +#ifndef __INTEL_COMPILER #pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif /* These functions provide data and function callback support @@ -28,57 +30,56 @@ memcached_return_t memcached_callback_set(memcached_st *ptr, { 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: - { - 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: { + 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_FAILURE; + return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("Invalid callback supplied")); } return MEMCACHED_SUCCESS; @@ -89,73 +90,64 @@ void *memcached_callback_get(memcached_st *ptr, memcached_return_t *error) { 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 behavior passed to memcached_behavior_set()"); + *error= MEMCACHED_FAILURE; + return NULL; }