summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shishkin2011-01-25 18:03:46 +0200
committerDenys Vlasenko2011-01-26 01:09:12 +0100
commitf18a82d9b320146e367217aba6664b1efb1be68c (patch)
treeefc0fbe0b51877df6254e873322333b434ae1416
parent8d0e0cdadf726beab28ccdc7d69738c1534e1f74 (diff)
downloadbusybox-f18a82d9b320146e367217aba6664b1efb1be68c.zip
busybox-f18a82d9b320146e367217aba6664b1efb1be68c.tar.gz
diff: return 1 when skipping directories with -r, but without -N
Diff in diffutils will return 1 in case -r option is specified without -N something exists only in one of the directories. Signed-off-by: Alexander Shishkin <virtuoso@slind.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/diff.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/editors/diff.c b/editors/diff.c
index cc7ba47..ca4a4ea 100644
--- a/editors/diff.c
+++ b/editors/diff.c
@@ -794,7 +794,9 @@ static int FAST_FUNC skip_dir(const char *filename,
free(othername);
if (r != 0 || !S_ISDIR(osb.st_mode)) {
/* other dir doesn't have similarly named
- * directory, don't recurse */
+ * directory, don't recurse; return 1 upon
+ * exit, just like diffutils' diff */
+ exit_status |= 1;
return SKIP;
}
}
@@ -846,9 +848,10 @@ static void diffdir(char *p[2], const char *s_start)
break;
pos = !dp[0] ? 1 : (!dp[1] ? -1 : strcmp(dp[0], dp[1]));
k = pos > 0;
- if (pos && !(option_mask32 & FLAG(N)))
+ if (pos && !(option_mask32 & FLAG(N))) {
printf("Only in %s: %s\n", p[k], dp[k]);
- else {
+ exit_status |= 1;
+ } else {
char *fullpath[2], *path[2]; /* if -N */
for (i = 0; i < 2; i++) {