patch: make -p count path components, not slashes (think /blah//thing)
No binary (build failed)
—
(log yok)
| @@ -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) { | |
| @@ -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 | |