Skip to content

Commit 240734c

Browse files
author
bcoopers
committed
Only zero at most 64k at a time. We still use the doubling
reallocation strategy since extend() calls reserve() and/or push() for us.
1 parent 8d3e559 commit 240734c

File tree

1 file changed

+4
-8
lines changed

1 file changed

+4
-8
lines changed

src/libstd/io/mod.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -101,18 +101,14 @@ fn append_to_string<F>(buf: &mut String, f: F) -> Result<usize>
101101
fn read_to_end<R: Read + ?Sized>(r: &mut R, buf: &mut Vec<u8>) -> Result<usize> {
102102
let start_len = buf.len();
103103
let mut len = start_len;
104-
let min_cap_bump = 16;
104+
let mut new_write_size = 16;
105105
let ret;
106106
loop {
107107
if len == buf.len() {
108-
if buf.capacity() == buf.len() {
109-
// reserve() rounds up our request such that every request
110-
// (with maybe the exception of the first request) for the
111-
// same amount of space doubles our capacity.
112-
buf.reserve(min_cap_bump);
108+
if new_write_size < DEFAULT_BUF_SIZE {
109+
new_write_size *= 2;
113110
}
114-
let new_area = buf.capacity() - buf.len();
115-
buf.extend(iter::repeat(0).take(new_area));
111+
buf.extend(iter::repeat(0).take(new_write_size));
116112
}
117113

118114
match r.read(&mut buf[len..]) {

0 commit comments

Comments
 (0)