aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-08-20 23:33:19 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-08-20 23:33:19 +0200
commitd7874ed1d498454b3c7342f9e6df0aacb9873186 (patch)
tree424e75417b35ccd42cfcfb6ce9c0e519f8dd9c2f
parent0793491ff884bbb70b51c2b05c42d5dad60bcc5f (diff)
downloadbusybox-w32-d7874ed1d498454b3c7342f9e6df0aacb9873186.tar.gz
busybox-w32-d7874ed1d498454b3c7342f9e6df0aacb9873186.tar.bz2
busybox-w32-d7874ed1d498454b3c7342f9e6df0aacb9873186.zip
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>
-rw-r--r--editors/patch.c12
-rw-r--r--include/usage.h3
2 files changed, 13 insertions, 2 deletions
diff --git a/editors/patch.c b/editors/patch.c
index e8482a7a9..4a9715144 100644
--- a/editors/patch.c
+++ b/editors/patch.c
@@ -74,12 +74,18 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
74 int patch_level; 74 int patch_level;
75 int ret = 0; 75 int ret = 0;
76 char plus = '+'; 76 char plus = '+';
77 unsigned opt;
78 enum {
79 OPT_R = (1 << 2),
80 OPT_N = (1 << 3),
81 };
77 82
78 xfunc_error_retval = 2; 83 xfunc_error_retval = 2;
79 { 84 {
80 const char *p = "-1"; 85 const char *p = "-1";
81 const char *i = "-"; /* compat */ 86 const char *i = "-"; /* compat */
82 if (getopt32(argv, "p:i:R", &p, &i) & 4) 87 opt = getopt32(argv, "p:i:RN", &p, &i);
88 if (opt & OPT_R)
83 plus = '-'; 89 plus = '-';
84 patch_level = xatoi(p); /* can be negative! */ 90 patch_level = xatoi(p); /* can be negative! */
85 patch_file = xfopen_stdin(i); 91 patch_file = xfopen_stdin(i);
@@ -202,6 +208,10 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
202 src_line = NULL; 208 src_line = NULL;
203 } 209 }
204 } 210 }
211 /* Do not patch an already patched hunk with -N */
212 if (src_line == 0 && (opt & OPT_N)) {
213 continue;
214 }
205 if (!src_line) { 215 if (!src_line) {
206 bb_error_msg("hunk #%u FAILED at %u", hunk_count, hunk_offset_start); 216 bb_error_msg("hunk #%u FAILED at %u", hunk_count, hunk_offset_start);
207 bad_hunk_count++; 217 bad_hunk_count++;
diff --git a/include/usage.h b/include/usage.h
index accda3341..81ddbd23c 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -3218,11 +3218,12 @@
3218 ) 3218 )
3219 3219
3220#define patch_trivial_usage \ 3220#define patch_trivial_usage \
3221 "[-p NUM] [-i DIFF] [-R]" 3221 "[-p NUM] [-i DIFF] [-R] [-N]"
3222#define patch_full_usage "\n\n" \ 3222#define patch_full_usage "\n\n" \
3223 " -p NUM Strip NUM leading components from file names" \ 3223 " -p NUM Strip NUM leading components from file names" \
3224 "\n -i DIFF Read DIFF instead of stdin" \ 3224 "\n -i DIFF Read DIFF instead of stdin" \
3225 "\n -R Reverse patch" \ 3225 "\n -R Reverse patch" \
3226 "\n -N Ignore already applied patches" \
3226 3227
3227#define patch_example_usage \ 3228#define patch_example_usage \
3228 "$ patch -p1 < example.diff\n" \ 3229 "$ patch -p1 < example.diff\n" \