From 606c1badd26077a4d7b4a52c8d3df2840e743647 Mon Sep 17 00:00:00 2001 From: Zephiris Date: Fri, 4 Nov 2016 21:03:54 -0700 Subject: [PATCH] ls: Change symlink behavior to be more POSIX compliant. Symlink directories are read by default, and symlink targets are listed on Windows. --- src/ls/ls.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/ls/ls.rs b/src/ls/ls.rs index f73cf4326..dcf52ae81 100644 --- a/src/ls/ls.rs +++ b/src/ls/ls.rs @@ -147,7 +147,7 @@ fn list(options: getopts::Matches) { if p.is_dir() && !options.opt_present("d") { dir = true; - if !options.opt_present("L") { + if options.opt_present("l") && !(options.opt_present("L")) { if let Ok(md) = p.symlink_metadata() { if md.file_type().is_symlink() { dir = false; @@ -451,6 +451,21 @@ fn display_file_name(path: &Path, name.push('@'); } } + + if options.opt_present("long") && metadata.file_type().is_symlink() { + if let Ok(target) = path.read_link() { + // We don't bother updating width here because it's not used for long listings + let code = if target.exists() { + "fi" + } else { + "mi" + }; + let target_name = target.to_string_lossy().to_string(); + name.push_str(" -> "); + name.push_str(&target_name); + } + } + name.into() }