summaryrefslogtreecommitdiff
path: root/editors/patch.c
diff options
context:
space:
mode:
authorDenys Vlasenko2009-08-20 23:33:19 +0200
committerDenys Vlasenko2009-08-20 23:33:19 +0200
commitd7874ed1d498454b3c7342f9e6df0aacb9873186 (patch)
tree424e75417b35ccd42cfcfb6ce9c0e519f8dd9c2f /editors/patch.c
parent0793491ff884bbb70b51c2b05c42d5dad60bcc5f (diff)
downloadbusybox-d7874ed1d498454b3c7342f9e6df0aacb9873186.zip
busybox-d7874ed1d498454b3c7342f9e6df0aacb9873186.tar.gz
patch: support -N. By Olivier Duclos (olivier.duclos AT gmail.com)
function old new delta packed_usage 26646 26656 +10 patch_main 1101 1110 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors/patch.c')
-rw-r--r--editors/patch.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/editors/patch.c b/editors/patch.c
index e8482a7..4a97151 100644
--- a/editors/patch.c
+++ b/editors/patch.c
@@ -74,12 +74,18 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
int patch_level;
int ret = 0;
char plus = '+';
+ unsigned opt;
+ enum {
+ OPT_R = (1 << 2),
+ OPT_N = (1 << 3),
+ };
xfunc_error_retval = 2;
{
const char *p = "-1";
const char *i = "-"; /* compat */
- if (getopt32(argv, "p:i:R", &p, &i) & 4)
+ opt = getopt32(argv, "p:i:RN", &p, &i);
+ if (opt & OPT_R)
plus = '-';
patch_level = xatoi(p); /* can be negative! */
patch_file = xfopen_stdin(i);
@@ -202,6 +208,10 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
src_line = NULL;
}
}
+ /* Do not patch an already patched hunk with -N */
+ if (src_line == 0 && (opt & OPT_N)) {
+ continue;
+ }
if (!src_line) {
bb_error_msg("hunk #%u FAILED at %u", hunk_count, hunk_offset_start);
bad_hunk_count++;