summaryrefslogtreecommitdiff
path: root/package/busybox/busybox-1.17.0/busybox-1.17.0-diff.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/busybox-1.17.0/busybox-1.17.0-diff.patch')
-rw-r--r--package/busybox/busybox-1.17.0/busybox-1.17.0-diff.patch50
1 files changed, 46 insertions, 4 deletions
diff --git a/package/busybox/busybox-1.17.0/busybox-1.17.0-diff.patch b/package/busybox/busybox-1.17.0/busybox-1.17.0-diff.patch
index ba3da8d70..98309006f 100644
--- a/package/busybox/busybox-1.17.0/busybox-1.17.0-diff.patch
+++ b/package/busybox/busybox-1.17.0/busybox-1.17.0-diff.patch
@@ -1,20 +1,62 @@
diff -urpN busybox-1.17.0/editors/diff.c busybox-1.17.0-diff/editors/diff.c
--- busybox-1.17.0/editors/diff.c 2010-06-24 04:40:43.000000000 +0200
-+++ busybox-1.17.0-diff/editors/diff.c 2010-07-10 03:52:33.000000000 +0200
-@@ -760,9 +760,11 @@ static int FAST_FUNC add_to_dirlist(cons
++++ busybox-1.17.0-diff/editors/diff.c 2010-07-19 00:27:45.000000000 +0200
+@@ -121,6 +121,7 @@ typedef struct FILE_and_pos_t {
+ struct globals {
+ smallint exit_status;
+ int opt_U_context;
++ const char *other_dir;
+ char *label[2];
+ struct stat stb[2];
+ };
+@@ -760,9 +761,11 @@ static int FAST_FUNC add_to_dirlist(cons
void *userdata, int depth UNUSED_PARAM)
{
struct dlist *const l = userdata;
+ const char *file = filename + l->len;
++ while (*file == '/')
++ file++;
l->dl = xrealloc_vector(l->dl, 6, l->e);
- /* + 1 skips "/" after dirname */
- l->dl[l->e] = xstrdup(filename + l->len + 1);
-+ while (*file == '/')
-+ file++;
+ l->dl[l->e] = xstrdup(file);
l->e++;
return TRUE;
}
+@@ -778,6 +781,25 @@ static int FAST_FUNC skip_dir(const char
+ add_to_dirlist(filename, sb, userdata, depth);
+ return SKIP;
+ }
++ if (!(option_mask32 & FLAG(N))) {
++ /* -r without -N: no need to recurse into dirs
++ * which do not exist on the "other side".
++ * Testcase: diff -r /tmp /
++ * (it would recurse deep into /proc without this code) */
++ struct dlist *const l = userdata;
++ filename += l->len;
++ if (filename[0]) {
++ struct stat osb;
++ char *othername = concat_path_file(G.other_dir, filename);
++ int r = stat(othername, &osb);
++ free(othername);
++ if (r != 0 || !S_ISDIR(osb.st_mode)) {
++ /* other dir doesn't have similarly named
++ * directory, don't recurse */
++ return SKIP;
++ }
++ }
++ }
+ return TRUE;
+ }
+
+@@ -791,6 +813,7 @@ static void diffdir(char *p[2], const ch
+ /*list[i].s = list[i].e = 0; - memset did it */
+ /*list[i].dl = NULL; */
+
++ G.other_dir = p[1 - i];
+ /* We need to trim root directory prefix.
+ * Using list.len to specify its length,
+ * add_to_dirlist will remove it. */
diff -urpN busybox-1.17.0/testsuite/diff.tests busybox-1.17.0-diff/testsuite/diff.tests
--- busybox-1.17.0/testsuite/diff.tests 2010-06-24 04:40:43.000000000 +0200
+++ busybox-1.17.0-diff/testsuite/diff.tests 2010-07-10 01:31:51.000000000 +0200