From d99efb9de42dcb3c513d167848699082a3998ecf Mon Sep 17 00:00:00 2001 From: veeso Date: Sat, 23 Jan 2021 12:20:34 +0100 Subject: [PATCH] SCP File transfer: when listing directory entries, check if a symlink points to a directory or to a file --- CHANGELOG.md | 1 + src/filetransfer/scp_transfer.rs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42f0959..4c9a61f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ FIXME: Released on - Bugfix: - Solved file index in explorer files at start of termscp, in case the first entry is an hidden file + - SCP File transfer: when listing directory entries, check if a symlink points to a directory or to a file ## 0.3.1 diff --git a/src/filetransfer/scp_transfer.rs b/src/filetransfer/scp_transfer.rs index b4d6066..3367036 100644 --- a/src/filetransfer/scp_transfer.rs +++ b/src/filetransfer/scp_transfer.rs @@ -83,7 +83,8 @@ impl ScpFileTransfer { } // Collect metadata // Get if is directory and if is symlink - let (is_dir, is_symlink): (bool, bool) = match metadata.get(1).unwrap().as_str() { + let (mut is_dir, is_symlink): (bool, bool) = match metadata.get(1).unwrap().as_str() + { "-" => (false, false), "l" => (false, true), "d" => (true, false), @@ -135,12 +136,21 @@ impl ScpFileTransfer { Err(_) => None, }; // Get filesize - let filesize: usize = metadata.get(6).unwrap().as_str().parse::().unwrap_or(0); + let filesize: usize = metadata + .get(6) + .unwrap() + .as_str() + .parse::() + .unwrap_or(0); // Get link and name let (file_name, symlink_path): (String, Option) = match is_symlink { true => self.get_name_and_link(metadata.get(8).unwrap().as_str()), false => (String::from(metadata.get(8).unwrap().as_str()), None), }; + // Check if symlink points to a directory + if let Some(symlink_path) = symlink_path.as_ref() { + is_dir = symlink_path.is_dir(); + } // Get symlink let symlink: Option> = match symlink_path { None => None,