about summary refs log tree commit diff
path: root/library
diff options
context:
space:
mode:
authornils <48135649+Nilstrieb@users.noreply.github.com>2023-01-11 17:30:56 +0100
committerGitHub <noreply@github.com>2023-01-11 17:30:56 +0100
commit9a820f7397d26efd75184abddf25f4fb2e5ebf37 (patch)
tree6aa87fa85434f55b43792f5ef091005a9516a941 /library
parent6e0c404f769ae93254dacc37338e05e07e659148 (diff)
parentf7bc68bb4edd1974f7c4aa6113902132429c00e8 (diff)
downloadrust-9a820f7397d26efd75184abddf25f4fb2e5ebf37.tar.gz
rust-9a820f7397d26efd75184abddf25f4fb2e5ebf37.zip
Rollup merge of #106664 - chenyukang:yukang/fix-106597-remove-lseek, r=cuviper
Remove unnecessary lseek syscall when using std::fs::read

Fixes #106597
r? ```@bjorn3```
Diffstat (limited to 'library')
-rw-r--r--library/std/src/fs.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/library/std/src/fs.rs b/library/std/src/fs.rs
index f357d505fe8..5c5ef0b1125 100644
--- a/library/std/src/fs.rs
+++ b/library/std/src/fs.rs
@@ -249,8 +249,9 @@ pub struct DirBuilder {
 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);
+        let mut bytes = Vec::with_capacity(size as usize);
+        io::default_read_to_end(&mut file, &mut bytes)?;
         Ok(bytes)
     }
     inner(path.as_ref())
@@ -288,8 +289,9 @@ pub fn read<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> {
 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);
+        let mut string = String::with_capacity(size as usize);
+        io::default_read_to_string(&mut file, &mut string)?;
         Ok(string)
     }
     inner(path.as_ref())