diff options
| author | Matthias Krüger <476013+matthiaskrgr@users.noreply.github.com> | 2025-03-28 21:18:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-28 21:18:31 +0100 |
| commit | 7c0a14f03008ce0b5f442f7a3fed236f686a1efc (patch) | |
| tree | c685353f1b2df0e46f5efbedaa64a92226c128ba /library | |
| parent | b6699318fa320e2ea0e1e4ee58db9a49d8e68197 (diff) | |
| parent | 9055765ce1c89b0bc619df39aa8ba66ad641da9b (diff) | |
| download | rust-7c0a14f03008ce0b5f442f7a3fed236f686a1efc.tar.gz rust-7c0a14f03008ce0b5f442f7a3fed236f686a1efc.zip | |
Rollup merge of #139069 - a1phyr:better_take, r=joboet
`io::Take`: avoid new `BorrowedBuf` creation in some case If `self.limit == buf.capacity()`, doing the whole `BorrowedBuf` dance is not necessary.
Diffstat (limited to 'library')
| -rw-r--r-- | library/std/src/io/mod.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/library/std/src/io/mod.rs b/library/std/src/io/mod.rs index 6579b6887aa..314cbb45d49 100644 --- a/library/std/src/io/mod.rs +++ b/library/std/src/io/mod.rs @@ -2989,11 +2989,11 @@ impl<T: Read> Read for Take<T> { return Ok(()); } - if self.limit <= buf.capacity() as u64 { - // if we just use an as cast to convert, limit may wrap around on a 32 bit target - let limit = cmp::min(self.limit, usize::MAX as u64) as usize; + if self.limit < buf.capacity() as u64 { + // The condition above guarantees that `self.limit` fits in `usize`. + let limit = self.limit as usize; - let extra_init = cmp::min(limit as usize, buf.init_ref().len()); + let extra_init = cmp::min(limit, buf.init_ref().len()); // SAFETY: no uninit data is written to ibuf let ibuf = unsafe { &mut buf.as_mut()[..limit] }; |
