diff --git a/src/uu/dd/src/dd.rs b/src/uu/dd/src/dd.rs index eb38e542e..9d9b426b7 100644 --- a/src/uu/dd/src/dd.rs +++ b/src/uu/dd/src/dd.rs @@ -334,16 +334,13 @@ where let mut bytes_total = 0; for chunk in buf.chunks(self.obs) { - match self.write(chunk)? { - wlen if wlen < chunk.len() => { - writes_partial += 1; - bytes_total += wlen; - } - wlen => { - writes_complete += 1; - bytes_total += wlen; - } + let wlen = self.write(chunk)?; + if wlen < self.obs { + writes_partial += 1; + } else { + writes_complete += 1; } + bytes_total += wlen; } Ok(WriteStat { diff --git a/tests/by-util/test_dd.rs b/tests/by-util/test_dd.rs index 70153621f..f9e4120b4 100644 --- a/tests/by-util/test_dd.rs +++ b/tests/by-util/test_dd.rs @@ -692,5 +692,15 @@ fn test_seek_do_not_overwrite() { assert_eq!(at.read("outfile"), "a2"); } +#[test] +fn test_partial_records_out() { + new_ucmd!() + .args(&["bs=2", "status=noxfer"]) + .pipe_in("abc") + .succeeds() + .stdout_is("abc") + .stderr_is("1+1 records in\n1+1 records out\n"); +} + // conv=[ascii,ebcdic,ibm], conv=[ucase,lcase], conv=[block,unblock], conv=sync // TODO: Move conv tests from unit test module