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 7047c10
Showing 1 changed file with 19 additions and 22 deletions.
41 changes: 19 additions & 22 deletions libmemcached/io.cc
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,8 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
}

char *buffer_ptr= static_cast<char *>(buffer);
while (length)
size_t remain= length;
while (remain)
{
if (ptr->read_buffer_length == 0)
{
Expand All @@ -551,27 +552,31 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
return io_fill_ret;
}
}
if (length > 1)
if (remain > 1)
{
size_t difference= (length > ptr->read_buffer_length) ? ptr->read_buffer_length : length;
memcpy(buffer_ptr, ptr->read_ptr, difference);
size_t difference= (remain > ptr->read_buffer_length) ? ptr->read_buffer_length : remain;
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;
remain-= 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;
}
}

*nread = (ssize_t)(buffer_ptr - (char*)buffer);
*nread = (ssize_t)(length - remain);

return MEMCACHED_SUCCESS;
}
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 7047c10

Please sign in to comment.