diff options
author | Rob Landley | 2011-10-10 19:59:38 +0200 |
---|---|---|
committer | Denys Vlasenko | 2011-10-10 19:59:38 +0200 |
commit | 39ec6a2ad5dae93c125b766eb8e705742216797a (patch) | |
tree | 7bae67387dcebb1ad580bf8d4a4597a20d6e20c8 /editors/patch.c | |
parent | cc87588a613ce5de8cb47b04f63ba267d1ecfd1e (diff) | |
download | busybox-39ec6a2ad5dae93c125b766eb8e705742216797a.zip busybox-39ec6a2ad5dae93c125b766eb8e705742216797a.tar.gz |
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>
Diffstat (limited to 'editors/patch.c')
-rw-r--r-- | editors/patch.c | 18 |
1 files changed, 10 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) { |