X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_response.c;h=1ea0c725ea12ca94ad0446ff2d894e1554fd9960;hb=ef9ddf55563059fcf3608bab479e15f28e9ceb0f;hp=554169300fa61a279029d903a7359bb2a16a62c4;hpb=29da9304fc64e62ae3c80916bac92d38c41f7f79;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_response.c b/libmemcached/memcached_response.c index 55416930..1ea0c725 100644 --- a/libmemcached/memcached_response.c +++ b/libmemcached/memcached_response.c @@ -80,7 +80,6 @@ static memcached_return textual_value_fetch(memcached_server_st *ptr, char *end_ptr; char *next_ptr; size_t value_length; - size_t read_length; size_t to_read; char *value_ptr; @@ -167,7 +166,6 @@ static memcached_return textual_value_fetch(memcached_server_st *ptr, } value_ptr= memcached_string_value(&result->value); - read_length= 0; /* We read the \r\n into the string since not doing so is more cycles then the waster of memory to do so. @@ -176,8 +174,12 @@ static memcached_return textual_value_fetch(memcached_server_st *ptr, some people lazy about using the return length. */ to_read= (value_length) + 2; - read_length= memcached_io_read(ptr, value_ptr, to_read); - if (read_length != (size_t)(value_length + 2)) + ssize_t read_length= 0; + memcached_return rrc= memcached_io_read(ptr, value_ptr, to_read, &read_length); + if (rrc != MEMCACHED_SUCCESS) + return rrc; + + if (read_length != (ssize_t)(value_length + 2)) { goto read_error; } @@ -268,6 +270,10 @@ static memcached_return textual_read_one_response(memcached_server_st *ptr, else return MEMCACHED_UNKNOWN_READ_FAILURE; } + case 'I': /* CLIENT ERROR */ + /* We add back in one because we will need to search for END */ + memcached_server_response_increment(ptr); + return MEMCACHED_ITEM; case 'C': /* CLIENT ERROR */ return MEMCACHED_CLIENT_ERROR; default: @@ -389,13 +395,11 @@ static memcached_return binary_read_one_response(memcached_server_st *ptr, WATCHPOINT_ASSERT(bodylen == 0); return MEMCACHED_SUCCESS; } - break; case PROTOCOL_BINARY_CMD_NOOP: { WATCHPOINT_ASSERT(bodylen == 0); return MEMCACHED_END; } - break; case PROTOCOL_BINARY_CMD_STAT: { if (bodylen == 0)