X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Ffetch.cc;h=8867d53d0cc711bc5b6cee9c001bd573015c361f;hb=6949713f6af6882749d4827e6af46c3ca7c3e8ff;hp=5a353d29e2fa19e72f2ff67c2ea6844fea799670;hpb=276e5c1e7fefa8f7061270f79443a704231c819e;p=awesomized%2Flibmemcached diff --git a/libmemcached/fetch.cc b/libmemcached/fetch.cc index 5a353d29..8867d53d 100644 --- a/libmemcached/fetch.cc +++ b/libmemcached/fetch.cc @@ -86,7 +86,9 @@ char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, } if (value_length) + { *value_length= memcached_string_length(&result_buffer->value); + } if (key) { @@ -115,19 +117,23 @@ char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, if (flags) *flags= result_buffer->item_flags; - return memcached_string_c_copy(&result_buffer->value); + return memcached_string_take_value(&result_buffer->value); } memcached_result_st *memcached_fetch_result(memcached_st *ptr, memcached_result_st *result, memcached_return_t *error) { - memcached_server_st *server; - memcached_return_t unused; if (not error) error= &unused; + if (not ptr) + { + *error= MEMCACHED_INVALID_ARGUMENTS; + return NULL; + } + if (ptr->flags.use_udp) { *error= MEMCACHED_NOT_SUPPORTED; @@ -136,20 +142,34 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, if (not result) { - if (not (result= memcached_result_create(ptr, NULL))) + // If we have already initialized (ie it is in use) our internal, we + // create one. + if (memcached_is_initialized(&ptr->result)) { - *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE; - return NULL; + if (not (result= memcached_result_create(ptr, NULL))) + { + *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE; + return NULL; + } + } + else + { + result= memcached_result_create(ptr, &ptr->result); } } *error= MEMCACHED_MAXIMUM_RETURN; // We use this to see if we ever go into the loop + memcached_server_st *server; while ((server= memcached_io_get_readable_server(ptr))) { char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; *error= memcached_response(server, buffer, sizeof(buffer), result); - if (*error == MEMCACHED_SUCCESS) + if (*error == MEMCACHED_IN_PROGRESS) + { + continue; + } + else if (*error == MEMCACHED_SUCCESS) { result->count++; return result;