diff options
| author | bors <bors@rust-lang.org> | 2021-01-09 07:48:53 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-01-09 07:48:53 +0000 |
| commit | 1f9dc9a1821d55b1641c517feac7fcd6ac76aadc (patch) | |
| tree | 5012db6a542759c3b80345ad4fe77aa97b1a1cb1 | |
| parent | c87ef0a2fcedaa865ff7713953824d0ea9734720 (diff) | |
| parent | 97baac4184e3dfa4a98c076bdfe9b88266e47633 (diff) | |
| download | rust-1f9dc9a1821d55b1641c517feac7fcd6ac76aadc.tar.gz rust-1f9dc9a1821d55b1641c517feac7fcd6ac76aadc.zip | |
Auto merge of #80755 - sunfishcode:path-cleanup/copy, r=nagisa
Optimize away some path lookups in the generic `fs::copy` implementation This also eliminates a use of a `Path` convenience function, in support of #80741, refactoring `std::path` to focus on pure data structures and algorithms.
| -rw-r--r-- | library/std/src/sys_common/fs.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/library/std/src/sys_common/fs.rs b/library/std/src/sys_common/fs.rs index e30e8018a31..6bdb26cd078 100644 --- a/library/std/src/sys_common/fs.rs +++ b/library/std/src/sys_common/fs.rs @@ -5,19 +5,21 @@ use crate::io::{self, Error, ErrorKind}; use crate::path::Path; pub fn copy(from: &Path, to: &Path) -> io::Result<u64> { - if !from.is_file() { + let mut reader = fs::File::open(from)?; + let metadata = reader.metadata()?; + + if !metadata.is_file() { return Err(Error::new( ErrorKind::InvalidInput, "the source path is not an existing regular file", )); } - let mut reader = fs::File::open(from)?; let mut writer = fs::File::create(to)?; - let perm = reader.metadata()?.permissions(); + let perm = metadata.permissions(); let ret = io::copy(&mut reader, &mut writer)?; - fs::set_permissions(to, perm)?; + writer.set_permissions(perm)?; Ok(ret) } |
