This includes work for partitioning by key. Dormando wished for these methods.
[m6w6/libmemcached] / lib / memcached_response.c
index d0962a2d759e27b27839181d14251f81f02a89e8..076b0a6fc2bd67a49c3d5d22e50f9405102c0553 100644 (file)
@@ -18,7 +18,6 @@ memcached_return memcached_response(memcached_st *ptr,
   unsigned int max_messages;
 
 
-  memset(buffer, 0, buffer_length);
   send_length= 0;
 
   max_messages= memcached_server_response_count(ptr, server_key);
@@ -43,8 +42,13 @@ memcached_return memcached_response(memcached_st *ptr,
         buffer_ptr++;
 
       total_length++;
-      assert(total_length < buffer_length);
+      WATCHPOINT_ASSERT(total_length < buffer_length);
+
+      if (total_length >= buffer_length)
+        return MEMCACHED_PROTOCOL_ERROR;
     }
+    buffer_ptr++;
+    *buffer_ptr= 0;
 
     if (memcached_server_response_count(ptr, server_key))
       memcached_server_response_decrement(ptr, server_key);
@@ -52,7 +56,7 @@ memcached_return memcached_response(memcached_st *ptr,
 
   switch(buffer[0])
   {
-  case 'V': /* VALUE */
+  case 'V': /* VALUE || VERSION */
     return MEMCACHED_SUCCESS;
   case 'O': /* OK */
     return MEMCACHED_SUCCESS;
@@ -96,3 +100,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);
+}