From d5ab05998ca068b9a2e217285b15318ad2e5bdb8 Mon Sep 17 00:00:00 2001 From: Pádraig Brady Date: Fri, 21 Nov 2008 23:17:44 +0100 Subject: Revert part of "dd: avoid unnecessary memory copies" This reverts part of commit fbd87029cfc494a72bb73ade27ef46382c5bc832. Paul Eggert noticed the problem in http://lists.gnu.org/archive/html/bug-coreutils/2008-11/msg00153.html * doc/coreutils.texi (dd invocation): Clarify. --- doc/coreutils.texi | 3 +++ 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 diff --git a/src/dd.c b/src/dd.c index e1e38e954..e54cc14df 100644 --- a/src/dd.c +++ b/src/dd.c @@ -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); -- cgit v1.2.3-70-g09d2