Skip to content

Commit

Permalink
INTERNAL: Refactor the memcached_io_read function
Browse files Browse the repository at this point in the history
  • Loading branch information
ing-eoking committed Jan 22, 2025
1 parent 3499c5e commit 9b3f24a
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions libmemcached/io.cc
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,7 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
}

char *buffer_ptr= static_cast<char *>(buffer);
*nread= 0;
while (length)
{
if (ptr->read_buffer_length == 0)
Expand All @@ -554,19 +555,23 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
if (length > 1)
{
size_t difference= (length > ptr->read_buffer_length) ? ptr->read_buffer_length : length;
memcpy(buffer_ptr, ptr->read_ptr, difference);
if (buffer_ptr) {
memcpy(buffer_ptr, ptr->read_ptr, difference);
buffer_ptr+= difference;
}

length-= difference;
ptr->read_ptr+= difference;
ptr->read_buffer_length-= difference;
buffer_ptr+= difference;
}
else
{
*buffer_ptr= *ptr->read_ptr;
if (buffer_ptr) {
*buffer_ptr= *ptr->read_ptr;
buffer_ptr++;
}
ptr->read_ptr++;
ptr->read_buffer_length--;
buffer_ptr++;
break;
}
}
Expand Down Expand Up @@ -847,22 +852,14 @@ memcached_return_t memcached_safe_read(memcached_server_write_instance_st ptr,
void *dta,
size_t size)
{
size_t offset= 0;
char *data= static_cast<char *>(dta);
ssize_t nread;
memcached_return_t rc;

while (offset < size)
{
ssize_t nread;
memcached_return_t rc;

while (memcached_continue(rc= memcached_io_read(ptr, data + offset, size - offset, &nread))) { };

if (memcached_failed(rc))
{
return rc;
}
while (memcached_continue(rc= memcached_io_read(ptr, data, size, &nread))) {}

offset+= (size_t) nread;
if (memcached_failed(rc)) {
return rc;
}

return MEMCACHED_SUCCESS;
Expand Down

0 comments on commit 9b3f24a

Please sign in to comment.