detect EOF earlier
The initial probe-for-empty-source by stack_buffer_copy only detected EOF if the source was empty but not when it was merely small which lead to additional calls to read() after Ok(0) had already been returned in the stack copy routine
This commit is contained in:
parent
8d8f06b277
commit
78aa5e511c
1 changed files with 7 additions and 5 deletions
|
@ -264,11 +264,13 @@ impl<A: Allocator> BufferedWriterSpec for Vec<u8, A> {
|
|||
fn copy_from<R: Read + ?Sized>(&mut self, reader: &mut R) -> Result<u64> {
|
||||
let mut bytes = 0;
|
||||
|
||||
// avoid allocating before we have determined that there's anything to read
|
||||
if self.capacity() == 0 {
|
||||
bytes = stack_buffer_copy(&mut reader.take(DEFAULT_BUF_SIZE as u64), self)?;
|
||||
if bytes == 0 {
|
||||
return Ok(0);
|
||||
// avoid inflating empty/small vecs before we have determined that there's anything to read
|
||||
if self.capacity() < DEFAULT_BUF_SIZE {
|
||||
let stack_read_limit = DEFAULT_BUF_SIZE as u64;
|
||||
bytes = stack_buffer_copy(&mut reader.take(stack_read_limit), self)?;
|
||||
// fewer bytes than requested -> EOF reached
|
||||
if bytes < stack_read_limit {
|
||||
return Ok(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue