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>
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_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 @@
 								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++;
diff --git a/include/usage.h b/include/usage.h
index accda33..81ddbd2 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -3218,11 +3218,12 @@
 	)
 
 #define patch_trivial_usage \
-       "[-p NUM] [-i DIFF] [-R]"
+       "[-p NUM] [-i DIFF] [-R] [-N]"
 #define patch_full_usage "\n\n" \
        "	-p NUM	Strip NUM leading components from file names" \
      "\n	-i DIFF	Read DIFF instead of stdin" \
      "\n	-R	Reverse patch" \
+     "\n	-N	Ignore already applied patches" \
 
 #define patch_example_usage \
        "$ patch -p1 < example.diff\n" \