diff options
| author | Dylan DPC <99973273+Dylan-DPC@users.noreply.github.com> | 2023-03-19 15:33:58 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-19 15:33:58 +0530 |
| commit | 654204f455332618f55dd808e9fe4fc4ae1d6a2f (patch) | |
| tree | 4b53b762c6146a97e5ef92ad2893be979ea03edd | |
| parent | 462e7e7a100eeb6f7ff3bfaa66464ff0ab1aa0ad (diff) | |
| parent | c21f1d09de3a6a7bb4952f400919e936032b8ee2 (diff) | |
| download | rust-654204f455332618f55dd808e9fe4fc4ae1d6a2f.tar.gz rust-654204f455332618f55dd808e9fe4fc4ae1d6a2f.zip | |
Rollup merge of #109022 - tmiasko:read-buf-exact, r=dtolnay
read_buf_exact: on error, all read bytes are appended to the buffer Guarantee that when `read_buf_exact` returns, all bytes read will be appended to the buffer. Including the case when the operations fails. The motivating use case are operations on a non-blocking reader. When `read_buf_exact` fails with `ErrorKind::WouldBlock` error, the operation can be resumed at a later time.
| -rw-r--r-- | library/std/src/io/mod.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/library/std/src/io/mod.rs b/library/std/src/io/mod.rs index b2b6d86134b..4b31c552eed 100644 --- a/library/std/src/io/mod.rs +++ b/library/std/src/io/mod.rs @@ -823,8 +823,22 @@ pub trait Read { /// Read the exact number of bytes required to fill `cursor`. /// - /// This is equivalent to the [`read_exact`](Read::read_exact) method, except that it is passed a [`BorrowedCursor`] rather than `[u8]` to - /// allow use with uninitialized buffers. + /// This is similar to the [`read_exact`](Read::read_exact) method, except + /// that it is passed a [`BorrowedCursor`] rather than `[u8]` to allow use + /// with uninitialized buffers. + /// + /// # Errors + /// + /// If this function encounters an error of the kind [`ErrorKind::Interrupted`] + /// then the error is ignored and the operation will continue. + /// + /// If this function encounters an "end of file" before completely filling + /// the buffer, it returns an error of the kind [`ErrorKind::UnexpectedEof`]. + /// + /// If any other read error is encountered then this function immediately + /// returns. + /// + /// If this function returns an error, all bytes read will be appended to `cursor`. #[unstable(feature = "read_buf", issue = "78485")] fn read_buf_exact(&mut self, mut cursor: BorrowedCursor<'_>) -> Result<()> { while cursor.capacity() > 0 { |
