X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fverbosity.c;h=d71fced7ab75baa31f0b057d0a24a35c58a6607d;hb=30e386cd241ac56fd9205d12c143761475307705;hp=00c89fbf8716b03e2b0d607bf24fb5b7950f44cc;hpb=ba24508f51eed2af4f0192589801db2f945eac7b;p=m6w6%2Flibmemcached diff --git a/libmemcached/verbosity.c b/libmemcached/verbosity.c index 00c89fbf..d71fced7 100644 --- a/libmemcached/verbosity.c +++ b/libmemcached/verbosity.c @@ -1,38 +1,60 @@ #include "common.h" -memcached_return_t memcached_verbosity(memcached_st *ptr, uint32_t verbosity) +struct context_st +{ + size_t length; + const char *buffer; +}; + +static memcached_return_t _set_verbosity(const memcached_st *ptr, + const memcached_server_st *server, + void *context) { - uint32_t x; - size_t send_length; memcached_return_t rc; + memcached_st local_memc; + memcached_st *memc_ptr; char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; - send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, - "verbosity %u\r\n", verbosity); - unlikely (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE) - return MEMCACHED_WRITE_FAILURE; + struct context_st *execute= (struct context_st *)context; + (void)ptr; + + memc_ptr= memcached_create(&local_memc); - rc= MEMCACHED_SUCCESS; - for (x= 0; x < memcached_server_count(ptr); x++) + rc= memcached_server_add(memc_ptr, memcached_server_name(server), memcached_server_port(server)); + + if (rc == MEMCACHED_SUCCESS) { - memcached_return_t rrc; memcached_server_write_instance_st instance= - memcached_server_instance_fetch(ptr, x); + memcached_server_instance_fetch(memc_ptr, 0); + + rc= memcached_do(instance, execute->buffer, execute->length, true); - rrc= memcached_do(instance, buffer, send_length, true); - if (rrc != MEMCACHED_SUCCESS) + if (rc == MEMCACHED_SUCCESS) { - rc= MEMCACHED_SOME_ERRORS; - continue; + rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL); } - - unlikely (ptr->flags.use_udp) - continue; - - rrc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL); - if (rrc != MEMCACHED_SUCCESS) - rc= MEMCACHED_SOME_ERRORS; } + memcached_free(memc_ptr); + return rc; } + +memcached_return_t memcached_verbosity(memcached_st *ptr, uint32_t verbosity) +{ + int send_length; + memcached_server_fn callbacks[1]; + + char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; + + send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, + "verbosity %u\r\n", verbosity); + if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE || send_length < 0) + return MEMCACHED_WRITE_FAILURE; + + struct context_st context = { .length= (size_t)send_length, .buffer= buffer }; + + callbacks[0]= _set_verbosity; + + return memcached_server_cursor(ptr, callbacks, &context, 1); +}