X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_get.c;h=aa50d70bcf0423e7e6d6bc7e68b109b2c7649d8e;hb=151506dd4b5da014f23438226ee286772a78dfd3;hp=0b775d3d7a0c467627648cc6e4605aa011504cd3;hpb=ccd00450d57624afba24bfbb6e76d1d69d0ad0f8;p=m6w6%2Flibmemcached diff --git a/lib/memcached_get.c b/lib/memcached_get.c index 0b775d3d..aa50d70b 100644 --- a/lib/memcached_get.c +++ b/lib/memcached_get.c @@ -1,4 +1,4 @@ -#include +#include "common.h" static char *memcached_value_fetch(memcached_st *ptr, char *key, size_t *key_length, size_t *value_length, @@ -15,11 +15,11 @@ static char *memcached_value_fetch(memcached_st *ptr, char *key, size_t *key_len assert(flags); assert(error); + memset(buffer, 0, MEMCACHED_DEFAULT_COMMAND_SIZE); end_ptr= buffer + MEMCACHED_DEFAULT_COMMAND_SIZE; *value_length= 0; - memset(buffer, 0, MEMCACHED_DEFAULT_COMMAND_SIZE); *error= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, server_key); if (*error == MEMCACHED_SUCCESS) @@ -128,6 +128,9 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, size_t send_length; char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; unsigned int server_key; + char *value; + memcached_return rc; + LIBMEMCACHED_MEMCACHED_GET_START(); *value_length= 0; *error= memcached_connect(ptr); @@ -148,8 +151,19 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, return NULL; } - return memcached_value_fetch(ptr, key, &key_length, value_length, flags, + value= memcached_value_fetch(ptr, key, &key_length, value_length, flags, error, 0, server_key); + /* We need to read END */ + rc= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, server_key); + if (rc != MEMCACHED_NOTFOUND) + { + free(value); + *value_length= 0; + *error= MEMCACHED_PROTOCOL_ERROR; + } + LIBMEMCACHED_MEMCACHED_GET_END(); + + return value; } memcached_return memcached_mget(memcached_st *ptr, @@ -160,6 +174,7 @@ memcached_return memcached_mget(memcached_st *ptr, unsigned int x; memcached_return rc; memcached_string_st **cursor_key_exec; + LIBMEMCACHED_MEMCACHED_MGET_START(); ptr->cursor_server= 0; memset(buffer, 0, HUGE_STRING_LEN); @@ -225,6 +240,7 @@ memcached_return memcached_mget(memcached_st *ptr, free(cursor_key_exec); + LIBMEMCACHED_MEMCACHED_MGET_END(); return rc; }