- ptr->write_buffer[ptr->write_buffer_offset]= buffer[x];
- ptr->write_buffer_offset++;
- WATCHPOINT_ASSERT(ptr->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;