patch: correctly handle "patch FILE_TO_PATCH" form. Closes 7736
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 23 Jan 2016 04:13:15 +0000 (05:13 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 23 Jan 2016 04:13:15 +0000 (05:13 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/patch.c

index cb25e4140878f906cf64ac2cbe77d8344429650b..988021d776609f22f33baf566ac2f748cb37a44c 100644 (file)
@@ -372,10 +372,6 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
                        xmove_fd(xopen_stdin(argv[1]), STDIN_FILENO);
                }
        }
-       if (argv[0]) {
-               oldname = xstrdup(argv[0]);
-               newname = xstrdup(argv[0]);
-       }
 
        // Loop through the lines in the patch
        for(;;) {
@@ -486,10 +482,10 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
                                // or if new hunk is empty (zero context) after patching
                                if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) {
                                        name = reverse ? newname : oldname;
-                                       empty++;
+                                       empty = 1;
                                }
 
-                               // handle -p path truncation.
+                               // Handle -p path truncation.
                                for (i = 0, s = name; *s;) {
                                        if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i)
                                                break;
@@ -500,6 +496,9 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
                                        i++;
                                        name = s;
                                }
+                               // If "patch FILE_TO_PATCH", completely ignore name from patch
+                               if (argv[0])
+                                       name = argv[0];
 
                                if (empty) {
                                        // File is empty after the patches have been applied