diff options
| author | yukang <moorekang@gmail.com> | 2023-01-08 05:02:04 +0800 |
|---|---|---|
| committer | yukang <moorekang@gmail.com> | 2023-01-08 05:02:04 +0800 |
| commit | eae615dfdd9222a49182e59cc15bd47da1d536b6 (patch) | |
| tree | 0a478eac89a5cbaaec2ead2d1320a1fa996fb24c | |
| parent | 2afe58571e53d48a1fc2354271abe5aff60c5c44 (diff) | |
| download | rust-eae615dfdd9222a49182e59cc15bd47da1d536b6.tar.gz rust-eae615dfdd9222a49182e59cc15bd47da1d536b6.zip | |
Remove unnecessary lseek syscall when using std::fs::read
| -rw-r--r-- | library/std/src/fs.rs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/library/std/src/fs.rs b/library/std/src/fs.rs index f357d505fe8..6ddd5c28cc2 100644 --- a/library/std/src/fs.rs +++ b/library/std/src/fs.rs @@ -250,7 +250,9 @@ pub fn read<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> { fn inner(path: &Path) -> io::Result<Vec<u8>> { let mut file = File::open(path)?; let mut bytes = Vec::new(); - file.read_to_end(&mut bytes)?; + let size = file.metadata().map(|m| m.len()).unwrap_or(0); + bytes.reserve(size as usize); + io::default_read_to_end(&mut file, &mut bytes)?; Ok(bytes) } inner(path.as_ref()) @@ -289,7 +291,9 @@ pub fn read_to_string<P: AsRef<Path>>(path: P) -> io::Result<String> { fn inner(path: &Path) -> io::Result<String> { let mut file = File::open(path)?; let mut string = String::new(); - file.read_to_string(&mut string)?; + let size = file.metadata().map(|m| m.len()).unwrap_or(0); + string.reserve(size as usize); + io::default_read_to_string(&mut file, &mut string)?; Ok(string) } inner(path.as_ref()) |
