- if (ptr->hosts[server_key].write_ptr == 0)
- ptr->hosts[server_key].write_ptr= ptr->hosts[server_key].write_buffer;
- WATCHPOINT_ASSERT(ptr->hosts[server_key].write_ptr);
- *ptr->hosts[server_key].write_ptr= buffer[x];
- ptr->hosts[server_key].write_ptr++;
- ptr->hosts[server_key].write_buffer_offset++;
-
- if (ptr->hosts[server_key].write_buffer_offset == MEMCACHED_MAX_BUFFER)
+ char *write_ptr;
+ size_t should_write;
+
+ should_write= MEMCACHED_MAX_BUFFER - ptr->write_buffer_offset;
+ write_ptr= ptr->write_buffer + ptr->write_buffer_offset;
+
+ should_write= (should_write < length) ? should_write : length;
+
+ memcpy(write_ptr, buffer_ptr, should_write);
+ ptr->write_buffer_offset+= should_write;
+ buffer_ptr+= should_write;
+ length-= should_write;
+
+ if (ptr->write_buffer_offset == MEMCACHED_MAX_BUFFER)