diff --git a/src/lib.rs b/src/lib.rs index 423ca1d..9d20478 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1005,6 +1005,20 @@ impl DirEntry { /// [`std::fs::metadata`]: https://doc.rust-lang.org/std/fs/fn.metadata.html /// [`std::fs::symlink_metadata`]: https://doc.rust-lang.org/stable/std/fs/fn.symlink_metadata.html pub fn metadata(&self) -> Result { + self.metadata_internal() + } + + #[cfg(windows)] + fn metadata_internal(&self) -> Result { + if self.follow_link { + fs::metadata(&self.path) + } else { + Ok(self.metadata.clone()) + }.map_err(|err| Error::from_entry(self, err)) + } + + #[cfg(not(windows))] + fn metadata_internal(&self) -> Result { if self.follow_link { fs::metadata(&self.path) } else { @@ -1064,7 +1078,7 @@ impl DirEntry { let ty = ent.file_type().map_err(|err| { Error::from_path(depth, path.clone(), err) })?; - let md = fs::metadata(&path).map_err(|err| { + let md = ent.metadata().map_err(|err| { Error::from_path(depth, path.clone(), err) })?; Ok(DirEntry {