From 60695fac0957a4032ee84057de676ab8e3ddbb5d Mon Sep 17 00:00:00 2001 From: Ali MJ Al-Nasrawy Date: Mon, 5 Apr 2021 23:21:34 +0300 Subject: Avoid unneccessary syscalls for entry metadata For non-symlink files and directories, there is no need to call `std::fs::metadata()` as the metadata are already obtained via `entry.metadata()` --- src/listing.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/listing.rs b/src/listing.rs index 53d7233..9d74906 100644 --- a/src/listing.rs +++ b/src/listing.rs @@ -255,13 +255,16 @@ pub fn directory_listing( // show file url as relative to static path let file_url = utf8_percent_encode(&p.to_string_lossy(), FRAGMENT).to_string(); let file_name = entry.file_name().to_string_lossy().to_string(); - let is_symlink = match entry.metadata() { - Ok(metadata) => metadata.file_type().is_symlink(), - Err(_) => continue, + let (is_symlink, metadata) = match entry.metadata() { + Ok(metadata) if metadata.file_type().is_symlink() => { + // for symlinks, get the metadata of the original file + (true, std::fs::metadata(entry.path())) + } + res => (false, res), }; // if file is a directory, add '/' to the end of the name - if let Ok(metadata) = std::fs::metadata(entry.path()) { + if let Ok(metadata) = metadata { if skip_symlinks && is_symlink { continue; } -- cgit v1.2.3