aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-01-23 05:13:15 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2016-01-23 05:13:15 +0100
commiteb5091070f6876993d868d2b2bb49b4b4d3ed002 (patch)
treefd8633a0b0379c4932012a6625499994b0b2dd63
parentc7e47cf6273830a59f5d3f822e4a6855a80312c6 (diff)
downloadbusybox-w32-eb5091070f6876993d868d2b2bb49b4b4d3ed002.tar.gz
busybox-w32-eb5091070f6876993d868d2b2bb49b4b4d3ed002.tar.bz2
busybox-w32-eb5091070f6876993d868d2b2bb49b4b4d3ed002.zip
patch: correctly handle "patch FILE_TO_PATCH" form. Closes 7736
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/patch.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/editors/patch.c b/editors/patch.c
index cb25e4140..988021d77 100644
--- a/editors/patch.c
+++ b/editors/patch.c
@@ -372,10 +372,6 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
372 xmove_fd(xopen_stdin(argv[1]), STDIN_FILENO); 372 xmove_fd(xopen_stdin(argv[1]), STDIN_FILENO);
373 } 373 }
374 } 374 }
375 if (argv[0]) {
376 oldname = xstrdup(argv[0]);
377 newname = xstrdup(argv[0]);
378 }
379 375
380 // Loop through the lines in the patch 376 // Loop through the lines in the patch
381 for(;;) { 377 for(;;) {
@@ -486,10 +482,10 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
486 // or if new hunk is empty (zero context) after patching 482 // or if new hunk is empty (zero context) after patching
487 if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) { 483 if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) {
488 name = reverse ? newname : oldname; 484 name = reverse ? newname : oldname;
489 empty++; 485 empty = 1;
490 } 486 }
491 487
492 // handle -p path truncation. 488 // Handle -p path truncation.
493 for (i = 0, s = name; *s;) { 489 for (i = 0, s = name; *s;) {
494 if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i) 490 if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i)
495 break; 491 break;
@@ -500,6 +496,9 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
500 i++; 496 i++;
501 name = s; 497 name = s;
502 } 498 }
499 // If "patch FILE_TO_PATCH", completely ignore name from patch
500 if (argv[0])
501 name = argv[0];
503 502
504 if (empty) { 503 if (empty) {
505 // File is empty after the patches have been applied 504 // File is empty after the patches have been applied