From 3d3af5c8caa2a28977a75c2ad2d69942203fa442 Mon Sep 17 00:00:00 2001 From: Michael Debertol Date: Thu, 17 Jun 2021 22:54:04 +0200 Subject: [PATCH] ln: don't return an empty path in `relative_path` --- src/uu/ln/src/ln.rs | 5 ++++- tests/by-util/test_ln.rs | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/uu/ln/src/ln.rs b/src/uu/ln/src/ln.rs index ce1dd15b0..29cab58e5 100644 --- a/src/uu/ln/src/ln.rs +++ b/src/uu/ln/src/ln.rs @@ -382,12 +382,15 @@ fn relative_path<'a>(src: &Path, dst: &Path) -> Result> { let src_iter = src_abs.components().skip(suffix_pos).map(|x| x.as_os_str()); - let result: PathBuf = dst_abs + let mut result: PathBuf = dst_abs .components() .skip(suffix_pos + 1) .map(|_| OsStr::new("..")) .chain(src_iter) .collect(); + if result.as_os_str().is_empty() { + result.push("."); + } Ok(result.into()) } diff --git a/tests/by-util/test_ln.rs b/tests/by-util/test_ln.rs index fc97ff779..9fa73c0bc 100644 --- a/tests/by-util/test_ln.rs +++ b/tests/by-util/test_ln.rs @@ -580,3 +580,11 @@ fn test_relative_src_already_symlink() { ucmd.arg("-sr").arg("file2").arg("file3").succeeds(); assert!(at.resolve_link("file3").ends_with("file1")); } + +#[test] +fn test_relative_recursive() { + let (at, mut ucmd) = at_and_ucmd!(); + at.mkdir("dir"); + ucmd.args(&["-sr", "dir", "dir/recursive"]).succeeds(); + assert_eq!(at.resolve_link("dir/recursive"), "."); +}