Subject: bug#7362: dd strangeness

From: Pádraig Brady <[email-masked]>
Date: Fri, 04 Mar 2011 22:41:59 +0000

On 04/03/11 18:04, Paul Eggert wrote:
> On 03/04/2011 02:09 AM, Pádraig Brady wrote:
>> On 04/03/11 07:44, Paul Eggert wrote:
>>> +      /* If bs=SIZE is given and iflag=fullblock is not, warn if a
>>
>> Do you check that bs= is specified?
> 
> I meant to, but I inadvertently deleted that part of the change,
> which meant that the code didn't implement the comment correctly.
> Sorry about that; see below.
> 
>> Anyway, with this patch the following slightly contrived example will
>> warn:
> 
> The following further patch, which fixes the abovementioned typo,
> should address that problem.
> 
> --- a/src/dd.c
> +++ b/src/dd.c
> @@ -814,7 +814,7 @@ iread (int fd, char *buf, size_t size)
>        static bool warned;
>        static ssize_t prev_nread;
>  
> -      if (! warned && iread_fnc == iread
> +      if (! warned && ! (conversions_mask & C_TWOBUFS) && iread_fnc ==
> iread
>            && 0 < prev_nread && prev_nread < size

Looks good!
I can't think of an example where this might erroneously warn.

>            && (skip_records
>                || (0 < max_records && max_records < (uintmax_t) -1)))

If we more aggressively warn by removing the check for the counts above,
then we would directly address http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8171
Unfortunately that would give unwanted warnings though, in some cases.

cheers,
Pádraig.