X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_callback.c;h=d1c042429b4d5fd4569a98a649f0ede6f2ac957f;hb=29c13aacae8a79791e8912ff7520601aa8136d83;hp=6db2db82d3dbe1e86329f33157ecdca339370bb6;hpb=1d7f999b7d38db3308a0533a83fea23987fb0178;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_callback.c b/libmemcached/memcached_callback.c index 6db2db82..d1c04242 100644 --- a/libmemcached/memcached_callback.c +++ b/libmemcached/memcached_callback.c @@ -13,6 +13,38 @@ memcached_return memcached_callback_set(memcached_st *ptr, { 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; @@ -77,6 +109,19 @@ void *memcached_callback_get(memcached_st *ptr, 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;