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 21, 2025
1 parent 3499c5e commit cc873d7
Showing 1 changed file with 18 additions and 18 deletions.
36 changes: 18 additions & 18 deletions libmemcached/io.cc
Original file line number Diff line number Diff line change
Expand Up @@ -538,8 +538,12 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
return MEMCACHED_CONNECTION_FAILURE;
}

ssize_t unused_nread;
if (nread == NULL) nread= &unused_nread;

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

length-= difference;
ptr->read_ptr+= difference;
ptr->read_buffer_length-= difference;
buffer_ptr+= difference;
}
else
size_t to_copy= (length - (size_t)*nread) < ptr->read_buffer_length ?
(length - (size_t)*nread) : ptr->read_buffer_length;
if (buffer_ptr)
{
*buffer_ptr= *ptr->read_ptr;
ptr->read_ptr++;
ptr->read_buffer_length--;
buffer_ptr++;
break;
if (to_copy > 1) {
memcpy(buffer_ptr, ptr->read_ptr, to_copy);
} else {
*buffer_ptr = *ptr->read_ptr;
}
buffer_ptr += to_copy;
}
}

*nread = (ssize_t)(buffer_ptr - (char*)buffer);
*nread += to_copy;
ptr->read_ptr+= to_copy;
ptr->read_buffer_length-= to_copy;
}

return MEMCACHED_SUCCESS;
}
Expand Down

0 comments on commit cc873d7

Please sign in to comment.