diff options
-rw-r--r-- | doc/coreutils.texi | 3 | ||||
-rw-r--r-- | src/dd.c | 10 |
2 files changed, 10 insertions, 3 deletions
diff --git a/doc/coreutils.texi b/doc/coreutils.texi index 935129f25..c9c61cef0 100644 --- a/doc/coreutils.texi +++ b/doc/coreutils.texi @@ -7573,6 +7573,9 @@ This makes @command{dd} write @var{bytes} per block. Set both input and output block sizes to @var{bytes}. This makes @command{dd} read and write @var{bytes} per block, overriding any @samp{ibs} and @samp{obs} settings. +In addition, if no data-transforming @option{conv} option is specified, +each input block is copied to the output as a single block, +without aggregating short reads. @item cbs=@var{bytes} @opindex cbs @@ -455,7 +455,7 @@ Usage: %s [OPERAND]...\n\ fputs (_("\ Copy a file, converting and formatting according to the operands.\n\ \n\ - bs=BYTES force ibs=BYTES and obs=BYTES\n\ + bs=BYTES read and write BYTES bytes at a time\n\ cbs=BYTES convert BYTES bytes at a time\n\ conv=CONVS convert the file as per the comma separated symbol list\n\ count=BLOCKS copy only BLOCKS input blocks\n\ @@ -1033,13 +1033,17 @@ scanargs (int argc, char *const *argv) if (blocksize) input_blocksize = output_blocksize = blocksize; + else + { + /* POSIX says dd aggregates short reads into + output_blocksize if bs= is not specified. */ + conversions_mask |= C_TWOBUFS; + } if (input_blocksize == 0) input_blocksize = DEFAULT_BLOCKSIZE; if (output_blocksize == 0) output_blocksize = DEFAULT_BLOCKSIZE; - if (input_blocksize != output_blocksize) - conversions_mask |= C_TWOBUFS; if (conversion_blocksize == 0) conversions_mask &= ~(C_BLOCK | C_UNBLOCK); |