diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index 6f3de690d..eeda3c083 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -176,16 +176,27 @@ where .map_err_context(|| "failed to read input".to_string())?; if options.raw { - match decode(sum.clone()) { - Ok(bytes) => { - stdout().write_all(&bytes)?; - } - Err(_) => { - //bsd, sysv and crc have output generated without encode() + match options.algo_name { + ALGORITHM_OPTIONS_CRC + | ALGORITHM_OPTIONS_SYSV + | ALGORITHM_OPTIONS_BSD => { let bytes = sum.parse::().unwrap().to_be_bytes(); + let mut first_nonzero = 0; + for byte in bytes { + if byte != 0 { + break; + } + first_nonzero += 1; + } + stdout().write_all(&bytes[first_nonzero..])?; + } + _ =>{ + let bytes = decode(sum).unwrap(); stdout().write_all(&bytes)?; } + } + return Ok(()); } // The BSD checksum output is 5 digit integer diff --git a/tests/fixtures/cksum/raw/blake2b_single_file.expected b/tests/fixtures/cksum/raw/blake2b_single_file.expected index 4955b2f99..19b311220 100644 --- a/tests/fixtures/cksum/raw/blake2b_single_file.expected +++ b/tests/fixtures/cksum/raw/blake2b_single_file.expected @@ -1 +1 @@ -�����`�x� �f��W���Et�B��l��W^J�0�aX´��8�����5�B��9m�� \ No newline at end of file +`x fWEtBlW^J0aX´85B9m \ No newline at end of file