X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_fetch.c;h=f728bebc45fe690504aaa233ae064f51cd780e5c;hb=29c13aacae8a79791e8912ff7520601aa8136d83;hp=303e8cc3ae4d68a7f5c4f31f1ad39099454e5fc3;hpb=3b706525e1b66b907905bb9eddd7fd824e8311de;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_fetch.c b/libmemcached/memcached_fetch.c index 303e8cc3..f728bebc 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; !(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; } @@ -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) @@ -120,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; @@ -180,8 +187,6 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, if (result == NULL) result= memcached_result_create(ptr, NULL); - WATCHPOINT_ASSERT(result->value.is_allocated != MEMCACHED_USED); - #ifdef UNUSED if (ptr->flags & MEM_NO_BLOCK) memcached_io_preread(ptr); @@ -212,7 +217,7 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, } /* We have completed reading data */ - if (result->is_allocated == MEMCACHED_ALLOCATED) + if (result->is_allocated) memcached_result_free(result); else memcached_string_reset(&result->value);