From 7ae9e0a7eb65146f90cb90403af0914b110f60cd Mon Sep 17 00:00:00 2001 From: Terts Diepraam Date: Sun, 26 Dec 2021 21:46:57 +0100 Subject: [PATCH] cksum: accept directories as empty files --- src/uu/cksum/src/cksum.rs | 12 +++++++++--- tests/by-util/test_cksum.rs | 5 ++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index a2d5112ec..ca87da2a8 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -80,12 +80,18 @@ fn cksum(fname: &str) -> io::Result<(u32, usize)> { let mut crc = 0u32; let mut size = 0usize; - let file; let mut rd: Box = match fname { "-" => Box::new(stdin()), _ => { - file = File::open(Path::new(fname))?; - Box::new(BufReader::new(file)) + let p = Path::new(fname); + + // Directories should not give an error, but should be interpreted + // as empty files to match GNU semantics. + if p.is_dir() { + Box::new(BufReader::new(io::empty())) as Box + } else { + Box::new(BufReader::new(File::open(p)?)) as Box + } } }; diff --git a/tests/by-util/test_cksum.rs b/tests/by-util/test_cksum.rs index bf31ceb18..66bdba9e3 100644 --- a/tests/by-util/test_cksum.rs +++ b/tests/by-util/test_cksum.rs @@ -74,9 +74,8 @@ fn test_invalid_file() { at.mkdir(folder_name); ts.ucmd() .arg(folder_name) - .fails() - .no_stdout() - .stderr_contains("cksum: asdf: Is a directory"); + .succeeds() + .stdout_only("4294967295 0 asdf\n"); } // Make sure crc is correct for files larger than 32 bytes