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>
This commit is contained in:
parent
cc87588a61
commit
39ec6a2ad5
@ -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)
|
// We're deleting oldname if new file is /dev/null (before -p)
|
||||||
// or if new hunk is empty (zero context) after patching
|
// 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;
|
name = reverse ? newname : oldname;
|
||||||
empty++;
|
empty++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle -p path truncation.
|
// handle -p path truncation.
|
||||||
for (i = 0, s = name; *s;) {
|
for (i = 0, s = name; *s;) {
|
||||||
if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i) break;
|
if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i)
|
||||||
if (*(s++)=='/') {
|
break;
|
||||||
name = s;
|
if (*s++ != '/')
|
||||||
|
continue;
|
||||||
|
while (*s == '/')
|
||||||
|
s++;
|
||||||
i++;
|
i++;
|
||||||
}
|
name = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty) {
|
if (empty) {
|
||||||
|
@ -226,6 +226,22 @@ qwerty
|
|||||||
+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
|
rm input.orig 2>/dev/null
|
||||||
|
|
||||||
exit $FAILCOUNT
|
exit $FAILCOUNT
|
||||||
|
Loading…
Reference in New Issue
Block a user