[git commit] patch: make -p count path components, not slashes (think /blah//thing)

Denys Vlasenko vda.linux at googlemail.com
Mon Oct 10 17:59:38 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=39ec6a2ad5dae93c125b766eb8e705742216797a
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Rob Landley <rob at landley.net>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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 1f2a49b..13785ef 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 8caeed5..2759d2a 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


More information about the busybox-cvs mailing list