about summary refs log tree commit diff
path: root/library
diff options
context:
space:
mode:
authorMatthias Krüger <476013+matthiaskrgr@users.noreply.github.com>2025-03-28 21:18:31 +0100
committerGitHub <noreply@github.com>2025-03-28 21:18:31 +0100
commit7c0a14f03008ce0b5f442f7a3fed236f686a1efc (patch)
treec685353f1b2df0e46f5efbedaa64a92226c128ba /library
parentb6699318fa320e2ea0e1e4ee58db9a49d8e68197 (diff)
parent9055765ce1c89b0bc619df39aa8ba66ad641da9b (diff)
downloadrust-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.rs8
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] };