diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index 40c06a386..6f3de690d 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -5,6 +5,7 @@ // spell-checker:ignore (ToDO) fname, algo use clap::{crate_version, value_parser, Arg, ArgAction, Command}; +use hex::decode; use hex::encode; use std::error::Error; use std::ffi::OsStr; @@ -151,12 +152,12 @@ fn cksum<'a, I>(mut options: Options, files: I) -> UResult<()> where I: Iterator, { - let files_vec: Vec<_> = files.collect(); - if options.raw && files_vec.len() > 1 { + let files: Vec<_> = files.collect(); + if options.raw && files.len() > 1 { return Err(Box::new(CkSumError::RawMultipleFiles)); } - for filename in files_vec { + for filename in files { let filename = Path::new(filename); let stdin_buf; let file_buf; @@ -175,8 +176,16 @@ where .map_err_context(|| "failed to read input".to_string())?; if options.raw { - let bytes_str = sum.parse::().unwrap().to_be_bytes(); - stdout().write_all(&bytes_str)?; + match decode(sum.clone()) { + Ok(bytes) => { + stdout().write_all(&bytes)?; + } + Err(_) => { + //bsd, sysv and crc have output generated without encode() + let bytes = sum.parse::().unwrap().to_be_bytes(); + stdout().write_all(&bytes)?; + } + } return Ok(()); } // The BSD checksum output is 5 digit integer diff --git a/tests/by-util/test_cksum.rs b/tests/by-util/test_cksum.rs index 52ac09911..b3db0bf0a 100644 --- a/tests/by-util/test_cksum.rs +++ b/tests/by-util/test_cksum.rs @@ -289,14 +289,16 @@ fn test_length_is_zero() { #[test] fn test_raw_single_file() { - new_ucmd!() - .arg("--raw") - .arg("lorem_ipsum.txt") - .succeeds() - .no_stderr() - .stdout_is_fixture_bytes("raw_single_file.expected"); + for algo in ALGOS { + new_ucmd!() + .arg("--raw") + .arg("lorem_ipsum.txt") + .arg(format!("--algorithm={algo}")) + .succeeds() + .no_stderr() + .stdout_is_fixture_bytes(format!("raw/{algo}_single_file.expected")); + } } - #[test] fn test_raw_multiple_files() { new_ucmd!() diff --git a/tests/fixtures/cksum/raw/blake2b_single_file.expected b/tests/fixtures/cksum/raw/blake2b_single_file.expected new file mode 100644 index 000000000..4955b2f99 --- /dev/null +++ b/tests/fixtures/cksum/raw/blake2b_single_file.expected @@ -0,0 +1 @@ +�����`�x� �f��W���Et�B��l��W^J�0�aX´��8�����5�B��9m�� \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/bsd_single_file.expected b/tests/fixtures/cksum/raw/bsd_single_file.expected new file mode 100644 index 000000000..538ab19f7 --- /dev/null +++ b/tests/fixtures/cksum/raw/bsd_single_file.expected @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/cksum/raw_single_file.expected b/tests/fixtures/cksum/raw/crc_single_file.expected similarity index 100% rename from tests/fixtures/cksum/raw_single_file.expected rename to tests/fixtures/cksum/raw/crc_single_file.expected diff --git a/tests/fixtures/cksum/raw/md5_single_file.expected b/tests/fixtures/cksum/raw/md5_single_file.expected new file mode 100644 index 000000000..e7b47aebb Binary files /dev/null and b/tests/fixtures/cksum/raw/md5_single_file.expected differ diff --git a/tests/fixtures/cksum/raw/sha1_single_file.expected b/tests/fixtures/cksum/raw/sha1_single_file.expected new file mode 100644 index 000000000..0f634be47 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha1_single_file.expected @@ -0,0 +1 @@ +к؈:=m毽(%, \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sha224_single_file.expected b/tests/fixtures/cksum/raw/sha224_single_file.expected new file mode 100644 index 000000000..bc3fa6bf1 Binary files /dev/null and b/tests/fixtures/cksum/raw/sha224_single_file.expected differ diff --git a/tests/fixtures/cksum/raw/sha256_single_file.expected b/tests/fixtures/cksum/raw/sha256_single_file.expected new file mode 100644 index 000000000..b9ce06f39 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha256_single_file.expected @@ -0,0 +1 @@ + PP 0P g^ SkEC[+? \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sha384_single_file.expected b/tests/fixtures/cksum/raw/sha384_single_file.expected new file mode 100644 index 000000000..4b337f859 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha384_single_file.expected @@ -0,0 +1,3 @@ +K + 2iJMϸ/gLZ{WZ3S +H \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sha512_single_file.expected b/tests/fixtures/cksum/raw/sha512_single_file.expected new file mode 100644 index 000000000..79f78cf00 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha512_single_file.expected @@ -0,0 +1 @@ +Td%VՎsؚ!Yyu)f|T,Bn^OऊVgD k!= \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sm3_single_file.expected b/tests/fixtures/cksum/raw/sm3_single_file.expected new file mode 100644 index 000000000..3506406dc --- /dev/null +++ b/tests/fixtures/cksum/raw/sm3_single_file.expected @@ -0,0 +1 @@ +m)k] (0CyMg@pi \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sysv_single_file.expected b/tests/fixtures/cksum/raw/sysv_single_file.expected new file mode 100644 index 000000000..b975da49c --- /dev/null +++ b/tests/fixtures/cksum/raw/sysv_single_file.expected @@ -0,0 +1 @@ +I \ No newline at end of file