X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fverbosity.c;h=fba00144aa46a4004a1c6cfd2f1720c43b2bd4c5;hb=6b46b12051fa265bbd9c2a17899a280c8bd82769;hp=e9fa3ef40212b0b2d339ee5bff43c91bb581a798;hpb=857ca43d65fe6a52474641130312d26d125bef15;p=awesomized%2Flibmemcached diff --git a/libmemcached/verbosity.c b/libmemcached/verbosity.c index e9fa3ef4..fba00144 100644 --- a/libmemcached/verbosity.c +++ b/libmemcached/verbosity.c @@ -1,38 +1,59 @@ #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 __attribute__((unused)), + 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; - rc= MEMCACHED_SUCCESS; - for (x= 0; x < memcached_server_count(ptr); x++) + memc_ptr= memcached_create(&local_memc); + + rc= memcached_server_add(memc_ptr, memcached_server_name(server), memcached_server_port(server)); + + if (rc == MEMCACHED_SUCCESS) { - memcached_return_t rrc; - memcached_server_instance_st *instance= - memcached_server_instance_fetch(ptr, x); + memcached_server_write_instance_st instance= + memcached_server_instance_fetch(memc_ptr, 0); - rrc= memcached_do(instance, buffer, send_length, true); - if (rrc != MEMCACHED_SUCCESS) + rc= memcached_do(instance, execute->buffer, execute->length, true); + + 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) +{ + size_t send_length; + memcached_server_fn callbacks[1]; + + 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 context = { .length= send_length, .buffer= buffer }; + + callbacks[0]= _set_verbosity; + + return memcached_server_cursor(ptr, callbacks, &context, 1); +}