Simple fix in stats.
[awesomized/libmemcached] / libmemcached / memcached_fetch.c
index 37cec5d30366a857b9e99f7e7424170a5ff75326..93215fb89f5be8a055de96806b37eadbfcf7a1ca 100644 (file)
@@ -14,11 +14,10 @@ memcached_return value_fetch(memcached_server_st *ptr,
   size_t to_read;
   char *value_ptr;
 
+  WATCHPOINT_ASSERT(ptr->root);
   end_ptr= buffer + MEMCACHED_DEFAULT_COMMAND_SIZE;
 
-  result->key_length= 0;
-  result->flags= 0;
-  memcached_string_reset(&result->value);
+  memcached_result_reset(result);
 
   string_ptr= buffer;
   string_ptr+= 6; /* "VALUE " */
@@ -27,15 +26,21 @@ memcached_return value_fetch(memcached_server_st *ptr,
   /* We load the key */
   {
     char *key;
+    size_t prefix_length;
 
     key= result->key;
     result->key_length= 0;
 
-    for (; isgraph(*string_ptr); string_ptr++)
+    for (prefix_length= ptr->root->prefix_key_length; isgraph(*string_ptr); string_ptr++)
     {
-      *key= *string_ptr;
-      key++;
-      result->key_length++;
+      if (prefix_length == 0)
+      {
+        *key= *string_ptr;
+        key++;
+        result->key_length++;
+      }
+      else
+        prefix_length--;
     }
     result->key[result->key_length]= 0;
   }
@@ -48,7 +53,7 @@ memcached_return value_fetch(memcached_server_st *ptr,
   if (end_ptr == string_ptr)
     goto read_error;
   for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-  result->flags= (uint32_t)strtol(next_ptr, &string_ptr, 10);
+  result->flags= strtoul(next_ptr, &string_ptr, 10);
 
   if (end_ptr == string_ptr)
     goto read_error;
@@ -59,7 +64,7 @@ memcached_return value_fetch(memcached_server_st *ptr,
     goto read_error;
 
   for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-  value_length= (size_t)strtoll(next_ptr, &string_ptr, 10);
+  value_length= (size_t)strtoull(next_ptr, &string_ptr, 10);
 
   if (end_ptr == string_ptr)
     goto read_error;
@@ -69,13 +74,12 @@ memcached_return value_fetch(memcached_server_st *ptr,
   {
     /* Skip past the \r\n */
     string_ptr+= 2;
-    result->cas= 0;
   }
   else
   {
     string_ptr++;
     for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-    result->cas= (size_t)strtoll(next_ptr, &string_ptr, 10);
+    result->cas= strtoull(next_ptr, &string_ptr, 10);
   }
 
   if (end_ptr < string_ptr)