X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_fetch.c;h=93215fb89f5be8a055de96806b37eadbfcf7a1ca;hb=901d63226e7c2385b6f169f9f09007f65a0c2fe4;hp=303e8cc3ae4d68a7f5c4f31f1ad39099454e5fc3;hpb=3b706525e1b66b907905bb9eddd7fd824e8311de;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_fetch.c b/libmemcached/memcached_fetch.c index 303e8cc3..93215fb8 100644 --- a/libmemcached/memcached_fetch.c +++ b/libmemcached/memcached_fetch.c @@ -14,6 +14,7 @@ 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; memcached_result_reset(result); @@ -25,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; } @@ -46,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; @@ -57,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; @@ -72,7 +79,7 @@ memcached_return value_fetch(memcached_server_st *ptr, { 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)