aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/diff.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/coreutils/diff.c b/coreutils/diff.c
index 072e4bc20..923239ab1 100644
--- a/coreutils/diff.c
+++ b/coreutils/diff.c
@@ -907,13 +907,12 @@ static int diffreg(char *ofile1, char *ofile2, int flags)
if (LONE_DASH(file1) && LONE_DASH(file2))
goto closem;
- f1 = stdin;
+ f1 = f2 = stdin;
if (flags & D_EMPTY1)
f1 = xfopen(bb_dev_null, "r");
else if (NOT_LONE_DASH(file1))
f1 = xfopen(file1, "r");
- f2 = stdin;
if (flags & D_EMPTY2)
f2 = xfopen(bb_dev_null, "r");
else if (NOT_LONE_DASH(file2))
@@ -1166,8 +1165,8 @@ static void diffdir(char *p1, char *p2)
int diff_main(int argc, char **argv)
{
int gotstdin = 0;
-
char *U_opt;
+ char *f1, *f2;
llist_t *L_arg = NULL;
opt_complementary = "L::";
@@ -1212,34 +1211,37 @@ int diff_main(int argc, char **argv)
bb_error_msg("missing filename");
bb_show_usage();
}
- if (LONE_DASH(argv[0])) {
+
+ f1 = argv[0];
+ f2 = argv[1];
+ if (LONE_DASH(f1)) {
fstat(STDIN_FILENO, &stb1);
gotstdin = 1;
} else
- xstat(argv[0], &stb1);
- if (LONE_DASH(argv[1])) {
+ xstat(f1, &stb1);
+ if (LONE_DASH(f2)) {
fstat(STDIN_FILENO, &stb2);
gotstdin = 1;
} else
- xstat(argv[1], &stb2);
+ xstat(f2, &stb2);
if (gotstdin && (S_ISDIR(stb1.st_mode) || S_ISDIR(stb2.st_mode)))
bb_error_msg_and_die("can't compare - to a directory");
if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) {
#if ENABLE_FEATURE_DIFF_DIR
- diffdir(argv[0], argv[1]);
+ diffdir(f1, f2);
#else
bb_error_msg_and_die("directory comparison not supported");
#endif
} else {
if (S_ISDIR(stb1.st_mode)) {
- argv[0] = concat_path_file(argv[0], argv[1]);
- xstat(argv[0], &stb1);
+ f1 = concat_path_file(f1, f2);
+ xstat(f1, &stb1);
}
if (S_ISDIR(stb2.st_mode)) {
- argv[1] = concat_path_file(argv[1], argv[0]);
+ f2 = concat_path_file(f2, f1);
xstat(argv[1], &stb2);
}
- print_status(diffreg(argv[0], argv[1], 0), argv[0], argv[1], NULL);
+ print_status(diffreg(f1, f2, 0), f1, f2, NULL);
}
return status;
}