Turned up warnings in code
[m6w6/libmemcached] / libmemcached / memcached_fetch.c
index 37cec5d30366a857b9e99f7e7424170a5ff75326..4cd3e6a584b9a45280076d571aebb6b3d6d348d3 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; !(iscntrl(*string_ptr) || isspace(*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)
@@ -123,9 +127,9 @@ read_error:
 }
 
 char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, 
-                    size_t *value_length, 
-                    uint32_t *flags,
-                    memcached_return *error)
+                      size_t *value_length, 
+                      uint32_t *flags,
+                      memcached_return *error)
 {
   memcached_result_st *result_buffer= &ptr->result;