diff --git a/tokio/src/fs/file.rs b/tokio/src/fs/file.rs index 033b2982c7d..fcc78bd1b73 100644 --- a/tokio/src/fs/file.rs +++ b/tokio/src/fs/file.rs @@ -233,13 +233,14 @@ impl File { /// let std_file = std::fs::File::open("foo.txt").unwrap(); /// let file = tokio::fs::File::from_std(std_file); /// ``` - pub fn from_std(std: StdFile) -> File { + pub fn from_std(mut std: StdFile) -> File { + let pos = std.stream_position().unwrap_or(0); File { std: Arc::new(std), inner: Mutex::new(Inner { state: State::Idle(Some(Buf::with_capacity(0))), last_write_err: None, - pos: 0, + pos, }), } } diff --git a/tokio/src/fs/mocks.rs b/tokio/src/fs/mocks.rs index b718ed54f95..8fd4473a4f5 100644 --- a/tokio/src/fs/mocks.rs +++ b/tokio/src/fs/mocks.rs @@ -59,6 +59,12 @@ impl Read for MockFile { } } +impl Seek for MockFile { + fn seek(&mut self, pos: SeekFrom) -> io::Result { + self.inner_seek(pos) + } +} + impl Read for &'_ MockFile { fn read(&mut self, dst: &mut [u8]) -> io::Result { self.inner_read(dst)