From 39ec6a2ad5dae93c125b766eb8e705742216797a Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 10 Oct 2011 19:59:38 +0200 Subject: patch: make -p count path components, not slashes (think /blah//thing) Signed-off-by: Rob Landley Signed-off-by: Denys Vlasenko --- editors/patch.c | 18 ++++++++++-------- testsuite/patch.tests | 16 ++++++++++++++++ 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) // We're deleting oldname if new file is /dev/null (before -p) // or if new hunk is empty (zero context) after patching - if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) - { + if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) { name = reverse ? newname : oldname; empty++; } // handle -p path truncation. - for (i=0, s = name; *s;) { - if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i) break; - if (*(s++)=='/') { - name = s; - i++; - } + for (i = 0, s = name; *s;) { + if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i) + break; + if (*s++ != '/') + continue; + while (*s == '/') + s++; + i++; + name = s; } 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 +qwerty " +# testing "test name" "command(s)" "expected result" "file input" "stdin" +testing "patch understands ...dir///dir..." \ + 'patch -p1 2>&1; echo $?' \ +"\ +patching file dir2///file +patch: can't open 'dir2///file': No such file or directory +1 +" "" "\ +--- bogus_dir///dir2///file ++++ bogus_dir///dir2///file +@@ -1,2 +1,3 @@ + qwe ++asd + zxc +" + rm input.orig 2>/dev/null exit $FAILCOUNT -- cgit v1.2.3