Cleanup for version 0.26
[awesomized/libmemcached] / libmemcached / memcached_response.c
index 5c44e5f2b78e494ac53d659d66827875faa196b3..940c9f8844e26632181e09b404a9b8c277a75585 100644 (file)
@@ -67,40 +67,11 @@ memcached_return memcached_response(memcached_server_st *ptr,
   return memcached_read_one_response(ptr, buffer, buffer_length, result);
 }
 
-static memcached_return memcached_readline(memcached_server_st *ptr,
-                                           char *buffer,
-                                           size_t size)
-{
-  bool line_complete= false;
-  char *buffer_ptr= buffer;
-  int total_nr=0;
-
-  while (!line_complete)
-  {
-    if (memcached_io_read(ptr, buffer_ptr, 1) != 1)
-      return MEMCACHED_UNKNOWN_READ_FAILURE;
-
-    WATCHPOINT_ASSERT(*buffer_ptr != '\0');
-    if (*buffer_ptr == '\n')
-      line_complete=true;
-    else
-    {
-      ++buffer_ptr;
-      ++total_nr;
-    }
-
-    if (total_nr == size)
-      return MEMCACHED_PROTOCOL_ERROR;
-  }
-
-  return MEMCACHED_SUCCESS;
-}
-
 static memcached_return textual_read_one_response(memcached_server_st *ptr,
                                                   char *buffer, size_t buffer_length,
                                                   memcached_result_st *result)
 {
-  memcached_return rc=memcached_readline(ptr, buffer, buffer_length);
+  memcached_return rc= memcached_io_readline(ptr, buffer, buffer_length);
   if (rc != MEMCACHED_SUCCESS)
     return rc;
 
@@ -185,7 +156,7 @@ static memcached_return textual_read_one_response(memcached_server_st *ptr,
     }
   }
 
-  return MEMCACHED_SUCCESS;
+  /* NOTREACHED */
 }
 
 char *memcached_result_value(memcached_result_st *ptr)
@@ -329,14 +300,30 @@ static memcached_return binary_read_one_response(memcached_server_st *ptr,
   else if (header.response.bodylen) 
   {
      /* What should I do with the error message??? just discard it for now */
-    char buffer[SMALL_STRING_LEN];
+    char hole[SMALL_STRING_LEN];
     while (bodylen > 0) 
     {
       size_t nr= (bodylen > SMALL_STRING_LEN) ? SMALL_STRING_LEN : bodylen;
-      if (memcached_safe_read(ptr, buffer, nr) != MEMCACHED_SUCCESS)
+      if (memcached_safe_read(ptr, hole, nr) != MEMCACHED_SUCCESS)
         return MEMCACHED_UNKNOWN_READ_FAILURE;
       bodylen -= nr;
     }
+
+    /* This might be an error from one of the quiet commands.. if
+     * so, just throw it away and get the next one. What about creating
+     * a callback to the user with the error information?
+     */
+    switch (header.response.opcode)
+    {
+    case PROTOCOL_BINARY_CMD_SETQ:
+    case PROTOCOL_BINARY_CMD_ADDQ:
+    case PROTOCOL_BINARY_CMD_REPLACEQ:
+    case PROTOCOL_BINARY_CMD_APPENDQ:
+    case PROTOCOL_BINARY_CMD_PREPENDQ:
+      return binary_read_one_response(ptr, buffer, buffer_length, result);
+    default:
+      break;
+    }
   }
 
   memcached_return rc= MEMCACHED_SUCCESS;