aboutsummaryrefslogtreecommitdiff
path: root/editors/patch.c
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2010-10-04 00:49:48 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-10-04 00:49:48 +0200
commit9d113cac425d7f496da4d7b6f309b707cedd6b61 (patch)
treefbb6ba5da0145c5ebb9cd5fa960735778b0db917 /editors/patch.c
parente2069fb325f598c81a37222c8e44436439757029 (diff)
downloadbusybox-9d113cac425d7f496da4d7b6f309b707cedd6b61.tar.gz
patch: tweaks
1) Eliminate spurious warnings about possibly reduced hunks. Instead only note a possible location if we don't find a non-reversed place to apply it. (Otherwise, hunks that move code forward around within a file look reversed at the removal site.) 2) Open the source file read-only, so we can apply patches to read-only files. 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.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/editors/patch.c b/editors/patch.c
index c40f54155..0bde2cab3 100644
--- a/editors/patch.c
+++ b/editors/patch.c
@@ -344,14 +344,12 @@ static int apply_one_hunk(void)
while (plist && *plist->data == "+-"[reverse]) {
if (data && !strcmp(data, plist->data+1)) {
if (!backwarn) {
- backwarn++;
+ backwarn = TT.linenum;
if (option_mask32 & FLAG_IGNORE) {
dummy_revert = 1;
reverse ^= 1;
continue;
}
- fdprintf(2,"Possibly reversed hunk %d at %ld\n",
- TT.hunknum, TT.linenum);
}
}
plist = plist->next;
@@ -364,6 +362,10 @@ static int apply_one_hunk(void)
// Does this hunk need to match EOF?
if (!plist && matcheof) break;
+ if (backwarn)
+ fdprintf(2,"Possibly reversed hunk %d at %ld\n",
+ TT.hunknum, TT.linenum);
+
// File ended before we found a place for this hunk.
fail_hunk();
goto done;
@@ -592,7 +594,7 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
TT.filein = xopen3(name, O_CREAT|O_EXCL|O_RDWR, 0666);
} else {
printf("patching file %s\n", name);
- TT.filein = xopen(name, O_RDWR);
+ TT.filein = xopen(name, O_RDONLY);
}
TT.fileout = copy_tempfile(TT.filein, name, &TT.tempname);
TT.linenum = 0;