From f18a82d9b320146e367217aba6664b1efb1be68c Mon Sep 17 00:00:00 2001 From: Alexander Shishkin Date: Tue, 25 Jan 2011 18:03:46 +0200 Subject: 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 Signed-off-by: Denys Vlasenko --- editors/diff.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'editors') diff --git a/editors/diff.c b/editors/diff.c index cc7ba472e..ca4a4eae7 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++) { -- cgit v1.2.3