bug#80583: "dd" fails to account for short final write
Paul Eggert <[email protected]> Wed, 11 Mar 2026 12:04:53 -0700
| Newsgroups | gmane.comp.gnu.core-utils.bugs |
|---|---|
| Organization | UCLA Computer Science Department |
| Message-ID | <[email protected]> |
On 2026-03-11 11:54, Collin Funk wrote:
> Minor style thing, but I thought it looked a bit nicer to write:
>
> w_partial += nwritten != 0;
Hah! I had the following instead, which I thought was even clearer.
Pádraig's change to src/dd.c is fine of course. First to fix and all that.
> diff --git a/src/dd.c b/src/dd.c
> index 07b1c6445..585d02bb6 100644
> --- a/src/dd.c
> +++ b/src/dd.c
> @@ -2261,15 +2261,13 @@ dd_copy (void)
> {
> idx_t nwritten = iwrite (STDOUT_FILENO, obuf, n_bytes_read);
> w_bytes += nwritten;
> + w_partial += 0 < nwritten && nwritten < input_blocksize;
> + w_full += nwritten == input_blocksize;
> if (nwritten != n_bytes_read)
> {
> diagnose (errno, _("error writing %s"), quoteaf (output_file));
> return EXIT_FAILURE;
> }
> - else if (n_bytes_read == input_blocksize)
> - w_full++;
> - else
> - w_partial++;
> continue;
> }