X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_callback.c;h=ea59f84453749356ecd01de10190fedaf99234ea;hb=2d9a2c63003b507c96c6fe470a98c3dd41f4f29c;hp=ad1ce2b1e65bb4d2bb81478201d1a76320c1231f;hpb=b369db6ab57bc940618281a2be848542a406bb7c;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_callback.c b/libmemcached/memcached_callback.c index ad1ce2b1..ea59f844 100644 --- a/libmemcached/memcached_callback.c +++ b/libmemcached/memcached_callback.c @@ -19,13 +19,23 @@ memcached_return memcached_callback_set(memcached_st *ptr, if (key) { - ptr->prefix_key_length= strlen(key); - if ((ptr->prefix_key_length > MEMCACHED_PREFIX_KEY_MAX_SIZE -1) + size_t key_length= strlen(key); + + if (memcached_key_test((const char **)&key, &key_length, 1) == MEMCACHED_BAD_KEY_PROVIDED) + { + return MEMCACHED_BAD_KEY_PROVIDED; + } + + if ((key_length > MEMCACHED_PREFIX_KEY_MAX_SIZE -1) || (strcpy(ptr->prefix_key, key) == NULL)) { ptr->prefix_key_length= 0; return MEMCACHED_BAD_KEY_PROVIDED; } + else + { + ptr->prefix_key_length= key_length; + } } else { @@ -42,43 +52,45 @@ memcached_return memcached_callback_set(memcached_st *ptr, } case MEMCACHED_CALLBACK_CLEANUP_FUNCTION: { - memcached_cleanup_func func= (memcached_cleanup_func)data; + memcached_cleanup_func func= *(memcached_cleanup_func *)&data; ptr->on_cleanup= func; break; } case MEMCACHED_CALLBACK_CLONE_FUNCTION: { - memcached_clone_func func= (memcached_clone_func)data; + memcached_clone_func func= *(memcached_clone_func *)&data; ptr->on_clone= func; break; } +#ifdef MEMCACHED_ENABLE_DEPRECATED case MEMCACHED_CALLBACK_MALLOC_FUNCTION: { - memcached_malloc_function func= (memcached_malloc_function)data; + memcached_malloc_function func= *(memcached_malloc_function *)&data; ptr->call_malloc= func; break; } case MEMCACHED_CALLBACK_REALLOC_FUNCTION: { - memcached_realloc_function func= (memcached_realloc_function)data; + memcached_realloc_function func= *(memcached_realloc_function *)&data; ptr->call_realloc= func; break; } case MEMCACHED_CALLBACK_FREE_FUNCTION: { - memcached_free_function func= (memcached_free_function)data; + memcached_free_function func= *(memcached_free_function *)&data; ptr->call_free= func; break; } +#endif case MEMCACHED_CALLBACK_GET_FAILURE: { - memcached_trigger_key func= (memcached_trigger_key)data; + memcached_trigger_key func= *(memcached_trigger_key *)&data; ptr->get_key_failure= func; break; } case MEMCACHED_CALLBACK_DELETE_TRIGGER: { - memcached_trigger_delete_key func= (memcached_trigger_delete_key)data; + memcached_trigger_delete_key func= *(memcached_trigger_delete_key *)&data; ptr->delete_trigger= func; break; } @@ -94,6 +106,7 @@ void *memcached_callback_get(memcached_st *ptr, memcached_return *error) { memcached_return local_error; + if (!error) error = &local_error; @@ -120,37 +133,39 @@ void *memcached_callback_get(memcached_st *ptr, case MEMCACHED_CALLBACK_CLEANUP_FUNCTION: { *error= ptr->on_cleanup ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return (void *)ptr->on_cleanup; + return *(void **)&ptr->on_cleanup; } case MEMCACHED_CALLBACK_CLONE_FUNCTION: { *error= ptr->on_clone ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return (void *)ptr->on_clone; + 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; + return *(void **)&ptr->call_malloc; } case MEMCACHED_CALLBACK_REALLOC_FUNCTION: { *error= ptr->call_realloc ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return (void *)ptr->call_realloc; + return *(void **)&ptr->call_realloc; } case MEMCACHED_CALLBACK_FREE_FUNCTION: { *error= ptr->call_free ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return (void *)ptr->call_free; + 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; + return *(void **)&ptr->get_key_failure; } case MEMCACHED_CALLBACK_DELETE_TRIGGER: { *error= ptr->delete_trigger ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; - return (void *)ptr->delete_trigger; + return *(void **)&ptr->delete_trigger; } default: WATCHPOINT_ASSERT(0);