Subject: bug#9956: Linux program "sum"

From: Pádraig Brady <[email-masked]>
Date: Mon, 07 Nov 2011 00:22:54 +0000

On 11/06/2011 01:12 PM, Jim Meyering wrote:
> Pádraig Brady wrote:
>> On 11/04/2011 06:37 PM, Rodney Rieck wrote:
>>>    Hello,
>>>
>>>    This is about the Linux program "sum" that computes checksums and
>>>    number of blocks in a file.  I'm not writing about a program error I've
>>>    found -- I am writing about how the output from the program is
>>>    formatted.
>>>
>>>    If you type in something like this:  sum -r *
>>>
>>>    and if there are multiple files present in the current directory, you
>>>    will get output like this for each file it checks:
>>>
>>>    [check_sum] [number_of_blocks] [file_name]
>>>
>>>    If though on the command line you change the "*" to a single file name,
>>>    the output is the same except that it doesn't print/display the
>>>    "[file_name]", I guess because that seems redundant because the file
>>>    name is already known and was typed in on the command line.
>>
>> I consider that a bug.
>> freebsd always outputs the file name for example.
>> This means that if you do `find -type f | xargs sum`,
>> the last entry could be without a file name.
>>
>> Now we can't change without consideration for backwards compat,
>> though I'd be inclined to fix this inconsistency.
> 
> The existing behavior is compatible with that of UCB sum,
> and -r (the default) selects BSD compatibility:
> 
>     solaris10$ : > k && /usr/ucb/sum k
>     00000     0
>     solaris10$ /usr/ucb/sum k k
>     00000     0 k
>     00000     0 k
> 
> Since GNU sum's raison d'etre is compatibility, I'd have a hard
> time justifying a change that would render it incompatible.
> 

Interesting. On solaris:

$ echo 1 > 1
$ sum -r 1
32802      1 1
$ /usr/ucb/sum 1
32802     1

UCB being the "Berkley" variant.
However BSD changed to always outputting the filename at some stage
because `sum` does so on FreeBSD, and has since 1993 according to
  http://svnweb.freebsd.org/base/head/usr.bin/cksum/

This suggests that the UCB variant was added to solaris around 1989
  http://src.illumos.org/source/xref/illumos-gate/usr/src/ucbcmd/sum/sum.c

So I'm guessing this was changed in the BSD source sometime
between 1989 and 1993.

cheers,
Pádraig.