X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fdump.c;h=18c159748bdd1e70d24e5fd78f6fd4ac285cdc3f;hb=f285e1b3821f56a8983b5ce9fb1a0070e7bb0a1c;hp=0e556e61d6d1951c2aa880695c286d1dd147a27f;hpb=85062bec3fe9000e4da8e0a08cea88ebbccc20b2;p=awesomized%2Flibmemcached diff --git a/libmemcached/dump.c b/libmemcached/dump.c index 0e556e61..18c15974 100644 --- a/libmemcached/dump.c +++ b/libmemcached/dump.c @@ -11,7 +11,6 @@ static memcached_return_t ascii_dump(memcached_st *ptr, memcached_dump_fn *callb { memcached_return_t rc= MEMCACHED_SUCCESS; char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; - size_t send_length; uint32_t server_key; uint32_t x; @@ -20,16 +19,22 @@ static memcached_return_t ascii_dump(memcached_st *ptr, memcached_dump_fn *callb for (server_key= 0; server_key < memcached_server_count(ptr); server_key++) { - memcached_server_instance_st *instance; + memcached_server_write_instance_st instance; instance= memcached_server_instance_fetch(ptr, server_key); /* 256 I BELIEVE is the upper limit of slabs */ for (x= 0; x < 256; x++) { - send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, - "stats cachedump %u 0 0\r\n", x); + int send_length; + send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, + "stats cachedump %u 0 0\r\n", x); - rc= memcached_do(instance, buffer, send_length, 1); + if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE || send_length < 0) + { + return MEMCACHED_FAILURE; + } + + rc= memcached_do(instance, buffer, (size_t)send_length, true); unlikely (rc != MEMCACHED_SUCCESS) goto error; @@ -85,7 +90,16 @@ error: memcached_return_t memcached_dump(memcached_st *ptr, memcached_dump_fn *callback, void *context, uint32_t number_of_callbacks) { - /* No support for Binary protocol yet */ + memcached_return_t rc; + if ((rc= initialize_query(ptr)) != MEMCACHED_SUCCESS) + { + return rc; + } + + /* + No support for Binary protocol yet + @todo Fix this so that we just flush, switch to ascii, and then go back to binary. + */ if (ptr->flags.binary_protocol) return MEMCACHED_FAILURE;