bin/169274: [patch] diff exit code always reports "trouble" when there are differences between 2 files

Garrett Cooper yanegomi at
Wed Jun 20 19:50:13 UTC 2012

The following reply was made to PR bin/169274; it has been noted by GNATS.

From: Garrett Cooper <yanegomi at>
To: Xin LI <delphij at>
Cc: freebsd-gnats-submit at
Subject: Re: bin/169274: [patch] diff exit code always reports "trouble" when
 there are differences between 2 files
Date: Wed, 20 Jun 2012 12:44:04 -0700

 On Wed, Jun 20, 2012 at 12:34 PM, Garrett Cooper <yanegomi at> wrote=
 > On Wed, Jun 20, 2012 at 12:13 PM, Xin LI <delphij at> wrote:
 >>> $ diff valid.output unittest.dip >/dev/null
 >>> $ echo $?
 >>> 2
 >> I tried a few possible permutations and got expected result (when file
 >> is not accessible I got 2, and otherwise 1), except the case that one
 >> file is binary. =A0It's not clear to me whether this is a bug or a
 >> feature, as our diff(1) does not have a RETURN VALUE section.
 > This is what I was referring to:
 > =A0 =A0 =A0 FILES =A0are =A0`FILE1 =A0FILE2' =A0or `DIR1 DIR2' or `DIR FI=
 LE...' or `FILE...
 > =A0 =A0 =A0 DIR'. =A0If --from-file or --to-file is given, there are no =
 > =A0 =A0 =A0 on =A0FILES. =A0If a FILE is `-', read standard input. =A0Exi=
 t status is 0 if
 > =A0 =A0 =A0 inputs are the same, 1 if different, 2 if trouble.
 > The definition of "trouble" here is unnecessarily ambiguous. I
 > interpret trouble to be:
 > 1. open failure.
 > 2. stat failure.
 > 3. read failure.
 > etc.
 > Comparing a binary file and text file does not constitute "trouble" --
 > they're just different.
 > It concerns me because there's a fine line -- in some cases -- between
 > binary and text files, depending on the content in the file (I'm
 > thinking of .shar files for instance or uuencoded scripts).
 >> With your proposed change, diff no longer distinguishes "trouble outputt=
 >> the diff because at least one file is binary and you don't know it"
 >> and "I know it's binary (--brief) or I know what I am doing (--text),
 >> just let me know if there is difference", which sounds like a
 >> regression IMHO.
 > Ok. That was the difference (binary vs text):
 > $ file valid.output unittest.dip
 > valid.output: ASCII text
 > unittest.dip: data
 > Where is that requirement mentioned in the manpage though? I can't
 > find it in the GNU diffutils manpage.
 > If this is a BSD diff requirement, then it's doing something clearly
 > different from GNU diff implementation. Whether or not the BSD
 > implementation has to conform is another thing entirely, but it would
 > be nice to keep the inconsistencies down to a minimum if at all
 > possible.
 Classic Garrett and screwing up context -- there's only one diff in
 base and it's GNU diff.

More information about the freebsd-bugs mailing list