Kevin's patch bug13
[m6w6/libmemcached] / lib / memcached_response.c
index a695e9d8c40881eb40ec7f589c6d29407c45eeb2..4b29a1cbbec259211ef3800954a580f13f4512f9 100644 (file)
@@ -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')