fetch_result() implemented for memcached_result_st.
[m6w6/libmemcached] / lib / memcached_response.c
index d649922b0da164354d91bd276e16fadf8f44838b..19fa640076045faa1bdf0cdd5cbfbbad092e9cd1 100644 (file)
@@ -15,13 +15,18 @@ memcached_return memcached_response(memcached_st *ptr,
   unsigned int x;
   size_t send_length;
   char *buffer_ptr;
+  unsigned int max_messages;
+
 
   memset(buffer, 0, buffer_length);
   send_length= 0;
 
-  for (x= 0; x <= ptr->stack_responses; x++)
+  max_messages= memcached_server_response_count(ptr, server_key);
+  for (x= 0; x <=  max_messages; x++)
   {
+    size_t total_length= 0;
     buffer_ptr= buffer;
+
     while (1)
     {
       unsigned int read_length;
@@ -36,9 +41,14 @@ memcached_return memcached_response(memcached_st *ptr,
         break;
       else
         buffer_ptr++;
+
+      total_length++;
+      WATCHPOINT_ASSERT(total_length < buffer_length);
     }
+
+    if (memcached_server_response_count(ptr, server_key))
+      memcached_server_response_decrement(ptr, server_key);
   }
-  ptr->stack_responses= 0;
 
   switch(buffer[0])
   {
@@ -49,7 +59,7 @@ memcached_return memcached_response(memcached_st *ptr,
   case 'S': /* STORED STATS SERVER_ERROR */
     {
       if (buffer[2] == 'A') /* STORED STATS */
-        return MEMCACHED_SUCCESS;
+        return MEMCACHED_STAT;
       else if (buffer[1] == 'E')
         return MEMCACHED_SERVER_ERROR;
       else if (buffer[1] == 'T')
@@ -86,3 +96,15 @@ memcached_return memcached_response(memcached_st *ptr,
 
   return MEMCACHED_SUCCESS;
 }
+
+char *memcached_result_value(memcached_result_st *ptr)
+{
+  memcached_string_st *sptr= &ptr->value;
+  return memcached_string_value(sptr);
+}
+
+size_t memcached_result_length(memcached_result_st *ptr)
+{
+  memcached_string_st *sptr= &ptr->value;
+  return memcached_string_length(sptr);
+}