diff --git a/src/uu/ls/src/ls.rs b/src/uu/ls/src/ls.rs index 32707da36ff..2f3a2d1b59a 100644 --- a/src/uu/ls/src/ls.rs +++ b/src/uu/ls/src/ls.rs @@ -1671,7 +1671,7 @@ fn display_item_long( #[cfg(unix)] { if config.inode { - let _ = write!(out, "{} ", get_inode(md)); + let _ = write!(out, "{} ", get_inode(item.md())); } } @@ -1736,8 +1736,8 @@ fn display_item_long( } #[cfg(unix)] -fn get_inode(metadata: &Metadata) -> String { - format!("{:8}", metadata.ino()) +fn get_inode(metadata: Option<&Metadata>) -> String { + metadata.map_or_else(|| format!("{:>8}", "?"), |md| format!("{:>8}", md.ino())) } // Currently getpwuid is `linux` target only. If it's broken out into @@ -1970,7 +1970,7 @@ fn display_file_name( #[cfg(unix)] { if config.format != Format::Long && config.inode { - name = path.md().map_or_else(|| "?".to_string(), get_inode) + " " + &name; + name = get_inode(path.md()) + " " + &name; } } diff --git a/tests/by-util/test_ls.rs b/tests/by-util/test_ls.rs index 56711d6e0c8..09efb542bf4 100644 --- a/tests/by-util/test_ls.rs +++ b/tests/by-util/test_ls.rs @@ -2259,6 +2259,7 @@ fn test_ls_dangling_symlinks() { at.mkdir("temp_dir"); at.symlink_file("does_not_exist", "temp_dir/dangle"); + at.symlink_file("temp_dir", "temp_dir/a"); scene.ucmd().arg("-L").arg("temp_dir/dangle").fails(); scene.ucmd().arg("-H").arg("temp_dir/dangle").fails(); @@ -2273,8 +2274,13 @@ fn test_ls_dangling_symlinks() { .ucmd() .arg("-Li") .arg("temp_dir") + .arg("-w40") .succeeds() // this should fail, though at the moment, ls lacks a way to propagate errors encountered during display - .stdout_contains(if cfg!(windows) { "dangle" } else { "? dangle" }); + .stdout_contains(if cfg!(windows) { + "dangle" + } else { + " ? dangle" + }); } #[test]