X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fexist.cc;h=d2dc34dd6a1126f7e8afc463405d82a0da698525;hb=64e070cda2cc99513fdbaae770a473d5338c9378;hp=b8d4b0d876a325255d6ec9d36a94098f75b087de;hpb=e097b6cf87ee49c74404642a0862171ecc605d67;p=awesomized%2Flibmemcached diff --git a/libmemcached/exist.cc b/libmemcached/exist.cc index b8d4b0d8..d2dc34dd 100644 --- a/libmemcached/exist.cc +++ b/libmemcached/exist.cc @@ -38,34 +38,41 @@ static memcached_return_t ascii_exist(memcached_st *memc, memcached_server_write_instance_st instance, const char *key, size_t key_length) { - struct libmemcached_io_vector_st vector[]= + libmemcached_io_vector_st vector[]= { - { sizeof("add ") -1, "add " }, - { memcached_array_size(memc->_namespace), memcached_array_string(memc->_namespace) }, - { key_length, key }, - { sizeof(" 0") -1, " 0" }, - { sizeof(" 2678400") -1, " 2678400" }, - { sizeof(" 0") -1, " 0" }, - { 2, "\r\n" }, - { 2, "\r\n" } + { NULL, 0 }, + { memcached_literal_param("add ") }, + { memcached_array_string(memc->_namespace), memcached_array_size(memc->_namespace) }, + { key, key_length }, + { memcached_literal_param(" 0") }, + { memcached_literal_param(" 2678400") }, + { memcached_literal_param(" 0") }, + { memcached_literal_param("\r\n") }, + { memcached_literal_param("\r\n") } }; /* Send command header */ - memcached_return_t rc= memcached_vdo(instance, vector, 8, true); + memcached_return_t rc= memcached_vdo(instance, vector, 9, true); if (rc == MEMCACHED_SUCCESS) { char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL); if (rc == MEMCACHED_NOTSTORED) + { rc= MEMCACHED_SUCCESS; + } if (rc == MEMCACHED_STORED) + { rc= MEMCACHED_NOTFOUND; + } } if (rc == MEMCACHED_WRITE_FAILURE) + { memcached_io_reset(instance); + } return rc; } @@ -87,16 +94,17 @@ static memcached_return_t binary_exist(memcached_st *memc, memcached_server_writ +memcached_array_size(memc->_namespace) +request.message.header.request.extlen)); - struct libmemcached_io_vector_st vector[]= + libmemcached_io_vector_st vector[]= { - { send_length, request.bytes }, - { memcached_array_size(memc->_namespace), memcached_array_string(memc->_namespace) }, - { key_length, key } + { NULL, 0 }, + { request.bytes, send_length }, + { memcached_array_string(memc->_namespace), memcached_array_size(memc->_namespace) }, + { key, key_length } }; /* write the header */ memcached_return_t rc; - if ((rc= memcached_vdo(instance, vector, 3, true)) != MEMCACHED_SUCCESS) + if ((rc= memcached_vdo(instance, vector, 4, true)) != MEMCACHED_SUCCESS) { memcached_io_reset(instance); return (rc == MEMCACHED_SUCCESS) ? MEMCACHED_WRITE_FAILURE : rc; @@ -123,17 +131,16 @@ memcached_return_t memcached_exist_by_key(memcached_st *memc, const char *key, size_t key_length) { memcached_return_t rc; - if (memcached_failed(rc= initialize_query(memc))) + if (memcached_failed(rc= initialize_query(memc, true))) { return rc; } - if (memc->flags.use_udp) + if (memcached_is_udp(memc)) { return MEMCACHED_NOT_SUPPORTED; } - uint32_t server_key= memcached_generate_hash_with_redistribution(memc, group_key, group_key_length); memcached_server_write_instance_st instance; instance= memcached_server_instance_fetch(memc, server_key);