eggert@SM.UNISYS.COM (Paul Eggert) (11/06/88)
Consider the following scenario, where GNU diff 1.4 (SunOS 4.0 + Sun-3/60)
compares a file to a directory.
% mkdir a b a/x
% touch b/x
% diff a b
a/x is a directory but b/x is not
% echo status = $?
status = 2
% diff a b/x
diff: a/x is a directory but b/x is not
% echo status = $?
status = 2
The exit statuses should both be 1, not 2: 1 means "differences found" and 2
means "trouble". There's no standard here: for example, SunOS 4.0 diff yields
exit statuses 1 and 2, respectively, while Vax 4.3BSD diff yields 2 and 1. But
I think 2 should be reserved for real errors like "permission denied", and 1
should be used when files merely differ in type (i.e. file vs directory).
Here is a fix.
*** diff1.4/diff.c Sat Nov 5 13:31:24 1988
--- diffnew/diff.c Sat Nov 5 13:20:42 1988
***************
*** 487,493 ****
{
error ("%s is a directory but %s is not",
inf[dir_arg].name, inf[fnm_arg].name);
! val = 2;
}
else
val = diff_2_files (inf, depth);
--- 487,493 ----
{
error ("%s is a directory but %s is not",
inf[dir_arg].name, inf[fnm_arg].name);
! val = 1;
}
else
val = diff_2_files (inf, depth);
***************
*** 517,523 ****
inf[1].name, inf[0].name);
}
! val = 2;
}
else
{
--- 517,523 ----
inf[1].name, inf[0].name);
}
! val = 1;
}
else
{