aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2011-10-10 19:59:38 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2011-10-10 19:59:38 +0200
commit39ec6a2ad5dae93c125b766eb8e705742216797a (patch)
tree7bae67387dcebb1ad580bf8d4a4597a20d6e20c8
parentcc87588a613ce5de8cb47b04f63ba267d1ecfd1e (diff)
downloadbusybox-w32-39ec6a2ad5dae93c125b766eb8e705742216797a.tar.gz
busybox-w32-39ec6a2ad5dae93c125b766eb8e705742216797a.tar.bz2
busybox-w32-39ec6a2ad5dae93c125b766eb8e705742216797a.zip
patch: make -p count path components, not slashes (think /blah//thing)
Signed-off-by: Rob Landley <rob@landley.net> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/patch.c18
-rwxr-xr-xtestsuite/patch.tests16
2 files changed, 26 insertions, 8 deletions
diff --git a/editors/patch.c b/editors/patch.c
index 1f2a49b66..13785ef46 100644
--- a/editors/patch.c
+++ b/editors/patch.c
@@ -474,19 +474,21 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
474 474
475 // We're deleting oldname if new file is /dev/null (before -p) 475 // We're deleting oldname if new file is /dev/null (before -p)
476 // or if new hunk is empty (zero context) after patching 476 // or if new hunk is empty (zero context) after patching
477 if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) 477 if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) {
478 {
479 name = reverse ? newname : oldname; 478 name = reverse ? newname : oldname;
480 empty++; 479 empty++;
481 } 480 }
482 481
483 // handle -p path truncation. 482 // handle -p path truncation.
484 for (i=0, s = name; *s;) { 483 for (i = 0, s = name; *s;) {
485 if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i) break; 484 if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i)
486 if (*(s++)=='/') { 485 break;
487 name = s; 486 if (*s++ != '/')
488 i++; 487 continue;
489 } 488 while (*s == '/')
489 s++;
490 i++;
491 name = s;
490 } 492 }
491 493
492 if (empty) { 494 if (empty) {
diff --git a/testsuite/patch.tests b/testsuite/patch.tests
index 8caeed5bd..2759d2ad4 100755
--- a/testsuite/patch.tests
+++ b/testsuite/patch.tests
@@ -226,6 +226,22 @@ qwerty
226+qwerty 226+qwerty
227" 227"
228 228
229# testing "test name" "command(s)" "expected result" "file input" "stdin"
230testing "patch understands ...dir///dir..." \
231 'patch -p1 2>&1; echo $?' \
232"\
233patching file dir2///file
234patch: can't open 'dir2///file': No such file or directory
2351
236" "" "\
237--- bogus_dir///dir2///file
238+++ bogus_dir///dir2///file
239@@ -1,2 +1,3 @@
240 qwe
241+asd
242 zxc
243"
244
229rm input.orig 2>/dev/null 245rm input.orig 2>/dev/null
230 246
231exit $FAILCOUNT 247exit $FAILCOUNT