|
15 | 15 | use std::cmp;
|
16 | 16 | use std::fmt;
|
17 | 17 | use std::io;
|
| 18 | +use std::io::BorrowedBuf; |
| 19 | +use std::io::BorrowedCursor; |
18 | 20 | use std::io::ErrorKind;
|
19 | 21 | use std::io::IoSliceMut;
|
20 | 22 | use std::io::Read;
|
21 |
| -use std::io::ReadBuf; |
22 | 23 | use std::io::Result;
|
23 | 24 | use std::mem::MaybeUninit;
|
24 | 25 |
|
@@ -94,21 +95,21 @@ impl<R: Read> std::io::Read for BufferReader<R> {
|
94 | 95 | Ok(nread)
|
95 | 96 | }
|
96 | 97 |
|
97 |
| - fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> io::Result<()> { |
| 98 | + fn read_buf(&mut self, mut cursor: BorrowedCursor<'_>) -> io::Result<()> { |
98 | 99 | // If we don't have any buffered data and we're doing a massive read
|
99 | 100 | // (larger than our internal buffer), bypass our internal buffer
|
100 | 101 | // entirely.
|
101 |
| - if self.pos == self.cap && buf.remaining() >= self.buf.len() { |
| 102 | + if self.pos == self.cap && cursor.capacity() >= self.buf.len() { |
102 | 103 | self.discard_buffer();
|
103 |
| - return self.inner.read_buf(buf); |
| 104 | + return self.inner.read_buf(cursor.reborrow()); |
104 | 105 | }
|
105 | 106 |
|
106 |
| - let prev = buf.filled_len(); |
| 107 | + let prev = cursor.written(); |
107 | 108 |
|
108 | 109 | let mut rem = self.fill_buf()?;
|
109 |
| - rem.read_buf(buf)?; |
| 110 | + rem.read_buf(cursor.reborrow())?; |
110 | 111 |
|
111 |
| - self.consume(buf.filled_len() - prev); //slice impl of read_buf known to never unfill buf |
| 112 | + self.consume(cursor.written() - prev); //slice impl of read_buf known to never unfill buf |
112 | 113 |
|
113 | 114 | Ok(())
|
114 | 115 | }
|
@@ -178,18 +179,18 @@ impl<R: Read> BufferRead for BufferReader<R> {
|
178 | 179 | fn fill_buf(&mut self) -> Result<&[u8]> {
|
179 | 180 | if self.pos >= self.cap {
|
180 | 181 | debug_assert!(self.pos == self.cap);
|
181 |
| - let mut readbuf = ReadBuf::uninit(&mut self.buf); |
| 182 | + let mut buf = BorrowedBuf::from(&mut (*self.buf)); |
182 | 183 |
|
183 | 184 | // SAFETY: `self.init` is either 0 or set to `readbuf.initialized_len()`
|
184 | 185 | // from the last time this function was called
|
185 | 186 | unsafe {
|
186 |
| - readbuf.assume_init(self.init); |
| 187 | + buf.set_init(self.init); |
187 | 188 | }
|
188 | 189 |
|
189 |
| - self.inner.read_buf(&mut readbuf)?; |
| 190 | + self.inner.read_buf(buf.unfilled())?; |
190 | 191 |
|
191 |
| - self.cap = readbuf.filled_len(); |
192 |
| - self.init = readbuf.initialized_len(); |
| 192 | + self.cap = buf.len(); |
| 193 | + self.init = buf.init_len(); |
193 | 194 |
|
194 | 195 | self.pos = 0;
|
195 | 196 | }
|
|
0 commit comments