X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_response.c;h=4b29a1cbbec259211ef3800954a580f13f4512f9;hb=69b905e54a2f5ad5038a3f75c269bbbb4c3e610f;hp=a695e9d8c40881eb40ec7f589c6d29407c45eeb2;hpb=79892ee7f064bbbb7768ec7ed700655da2c35275;p=m6w6%2Flibmemcached diff --git a/lib/memcached_response.c b/lib/memcached_response.c index a695e9d8..4b29a1cb 100644 --- a/lib/memcached_response.c +++ b/lib/memcached_response.c @@ -8,9 +8,9 @@ #include "common.h" #include "memcached_io.h" -memcached_return memcached_response(memcached_st *ptr, +memcached_return memcached_response(memcached_server_st *ptr, char *buffer, size_t buffer_length, - unsigned int server_key) + memcached_result_st *result) { unsigned int x; size_t send_length; @@ -20,7 +20,11 @@ memcached_return memcached_response(memcached_st *ptr, send_length= 0; - max_messages= memcached_server_response_count(ptr, server_key); + /* We may have old commands in the buffer not set, first purge */ + if (ptr->root->flags & MEM_NO_BLOCK) + (void)memcached_io_write(ptr, NULL, 0, 1); + + max_messages= memcached_server_response_count(ptr); for (x= 0; x < max_messages; x++) { size_t total_length= 0; @@ -30,8 +34,7 @@ memcached_return memcached_response(memcached_st *ptr, { unsigned int read_length; - read_length= memcached_io_read(ptr, server_key, - buffer_ptr, 1); + read_length= memcached_io_read(ptr, buffer_ptr, 1); if (read_length != 1) return MEMCACHED_UNKNOWN_READ_FAILURE; @@ -50,7 +53,7 @@ memcached_return memcached_response(memcached_st *ptr, buffer_ptr++; *buffer_ptr= 0; - memcached_server_response_decrement(ptr, server_key); + memcached_server_response_decrement(ptr); } switch(buffer[0]) @@ -58,9 +61,16 @@ memcached_return memcached_response(memcached_st *ptr, case 'V': /* VALUE || VERSION */ if (buffer[1] == 'A') /* VALUE */ { + memcached_return rc; + /* We add back in one because we will need to search for END */ - memcached_server_response_increment(ptr, server_key); - return MEMCACHED_SUCCESS; + memcached_server_response_increment(ptr); + if (result) + rc= value_fetch(ptr, buffer, result); + else + rc= value_fetch(ptr, buffer, &ptr->root->result); + + return rc; } else if (buffer[1] == 'E') /* VERSION */ { @@ -78,7 +88,7 @@ memcached_return memcached_response(memcached_st *ptr, { if (buffer[2] == 'A') /* STORED STATS */ { - memcached_server_response_increment(ptr, server_key); + memcached_server_response_increment(ptr); return MEMCACHED_STAT; } else if (buffer[1] == 'E')