{
switch (flag)
{
+ case MEMCACHED_CALLBACK_PREFIX_KEY:
+ {
+ char *key= (char *)data;
+
+ if (key)
+ {
+ size_t key_length= strlen(key);
+
+ if (memcachd_key_test((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
+ {
+ memset(ptr->prefix_key, 0, MEMCACHED_PREFIX_KEY_MAX_SIZE);
+ ptr->prefix_key_length= 0;
+ }
+
+ break;
+ }
case MEMCACHED_CALLBACK_USER_DATA:
{
ptr->user_data= data;
ptr->call_free= func;
break;
}
+ case MEMCACHED_CALLBACK_GET_FAILURE:
+ {
+ 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;
+ ptr->delete_trigger= func;
+ break;
+ }
default:
return MEMCACHED_FAILURE;
}
switch (flag)
{
+ case MEMCACHED_CALLBACK_PREFIX_KEY:
+ {
+ if (ptr->prefix_key[0] == 0)
+ {
+ *error= MEMCACHED_FAILURE;
+ return NULL;
+ }
+ else
+ {
+ *error= MEMCACHED_SUCCESS;
+ return (void *)ptr->prefix_key;
+ }
+ }
case MEMCACHED_CALLBACK_USER_DATA:
{
*error= ptr->user_data ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
*error= ptr->call_free ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
return (void *)ptr->call_free;
}
+ 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;
+ }
default:
WATCHPOINT_ASSERT(0);
*error= MEMCACHED_FAILURE;