summaryrefslogtreecommitdiff
path: root/editors/patch.c
diff options
context:
space:
mode:
authorRob Landley2011-10-10 19:59:38 +0200
committerDenys Vlasenko2011-10-10 19:59:38 +0200
commit39ec6a2ad5dae93c125b766eb8e705742216797a (patch)
tree7bae67387dcebb1ad580bf8d4a4597a20d6e20c8 /editors/patch.c
parentcc87588a613ce5de8cb47b04f63ba267d1ecfd1e (diff)
downloadbusybox-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.c18
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) {