char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, size_t *value_length, uint32_t *flags, memcached_return *error) { memcached_result_st *result_buffer= &ptr->result; while (ptr->cursor_server < ptr->number_of_hosts) { char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; if (memcached_server_response_count(&ptr->hosts[ptr->cursor_server]) == 0) { ptr->cursor_server++; continue; } *error= memcached_response(&ptr->hosts[ptr->cursor_server], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, result_buffer); if (*error == MEMCACHED_END) /* END means that we move on to the next */ { memcached_server_response_reset(&ptr->hosts[ptr->cursor_server]); ptr->cursor_server++; continue; } else if (*error == MEMCACHED_SUCCESS) { *value_length= memcached_string_length(&result_buffer->value); if (key) { strncpy(key, result_buffer->key, result_buffer->key_length); *key_length= result_buffer->key_length; } if (result_buffer->flags) *flags= result_buffer->flags; else *flags= 0; return memcached_string_c_copy(&result_buffer->value); } else { *value_length= 0; return NULL; } } ptr->cursor_server= 0; *value_length= 0; return NULL; }
size_t memcached_result_length(const memcached_result_st *self) { const memcached_string_st *sptr= &self->value; return memcached_string_length(sptr); }