svn commit: trunk/busybox: editors include

landley at busybox.net landley at busybox.net
Thu Sep 1 03:02:52 UTC 2005


Author: landley
Date: 2005-08-31 20:02:23 -0700 (Wed, 31 Aug 2005)
New Revision: 11307

Log:
Patch -i support from Berhnard Fischer.


Modified:
   trunk/busybox/TODO
   trunk/busybox/editors/patch.c
   trunk/busybox/include/usage.h


Changeset:
Modified: trunk/busybox/TODO
===================================================================
--- trunk/busybox/TODO	2005-09-01 02:57:45 UTC (rev 11306)
+++ trunk/busybox/TODO	2005-09-01 03:02:23 UTC (rev 11307)
@@ -39,8 +39,8 @@
   Would be nice.  The basic susv3 options, plus fuser -k.
 ---
 patch
-  should have -i support, and simple fuzz factor support to apply patches
-  at an offset shouldn't take up too much space.
+  should have simple fuzz factor support to apply patches at an offset which
+  shouldn't take up too much space.
 ---
 man
   It would be nice to have a man command.  Not one that handles troff or

Modified: trunk/busybox/editors/patch.c
===================================================================
--- trunk/busybox/editors/patch.c	2005-09-01 02:57:45 UTC (rev 11306)
+++ trunk/busybox/editors/patch.c	2005-09-01 03:02:23 UTC (rev 11307)
@@ -107,14 +107,24 @@
 {
 	unsigned int patch_level = -1;
 	char *patch_line;
-	int ret = 0;
+	int ret;
+	FILE *patch_file = NULL;
 
-	/* Handle 'p' option */
-	if (argv[1] && (argv[1][0] == '-') && (argv[1][1] == 'p')) {
-		patch_level = atoi(&argv[1][2]);
+	{
+		char *p, *i;
+		ret = bb_getopt_ulflags(argc, argv, "p:i:", &p, &i);
+		if (ret & 1)
+			patch_level = bb_xgetularg10_bnd(p, -1, USHRT_MAX);
+		if (ret & 2) {
+			patch_file = bb_xfopen(i, "r");
+		}
+		ret = 0;
 	}
 
-	patch_line = bb_get_line_from_file(stdin);
+	if (!patch_file)
+		patch_file = stdin;
+
+	patch_line = bb_get_line_from_file(patch_file);
 	while (patch_line) {
 		FILE *src_stream;
 		FILE *dst_stream;
@@ -133,14 +143,14 @@
 		 */
 		while (patch_line && strncmp(patch_line, "--- ", 4) != 0) {
 			free(patch_line);
-			patch_line = bb_get_line_from_file(stdin);
+			patch_line = bb_get_line_from_file(patch_file);
 		}
 
 		/* Extract the filename used before the patch was generated */
 		original_filename = extract_filename(patch_line, patch_level);
 		free(patch_line);
 
-		patch_line = bb_get_line_from_file(stdin);
+		patch_line = bb_get_line_from_file(patch_file);
 		if (strncmp(patch_line, "+++ ", 4) != 0) {
 			ret = 2;
 			bb_error_msg("Invalid patch");
@@ -183,7 +193,7 @@
 		printf("patching file %s\n", new_filename);
 
 		/* Handle each hunk */
-		patch_line = bb_get_line_from_file(stdin);
+		patch_line = bb_get_line_from_file(patch_file);
 		while (patch_line) {
 			unsigned int count;
 			unsigned int src_beg_line;
@@ -214,7 +224,7 @@
 			}
 			hunk_offset_start = src_cur_line;
 
-			while ((patch_line = bb_get_line_from_file(stdin)) != NULL) {
+			while ((patch_line = bb_get_line_from_file(patch_file)) != NULL) {
 				if ((*patch_line == '-') || (*patch_line == ' ')) {
 					char *src_line = NULL;
 					if (src_stream) {

Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h	2005-09-01 02:57:45 UTC (rev 11306)
+++ trunk/busybox/include/usage.h	2005-09-01 03:02:23 UTC (rev 11307)
@@ -2064,11 +2064,13 @@
 	"\t-u\tUnlocks (re-enables) the specified user account"
 
 #define patch_trivial_usage \
-	"[-p<num>]"
+	"[-p<num>] [-i<patch.diff>]"
 #define patch_full_usage \
-	"[-p<num>]"
+	"[-p<num>]\n" \
+	"[-i<diff>]"
 #define patch_example_usage \
-	"$ patch -p1 <example.diff"
+	"$ patch -p1 <example.diff\n" \
+	"$ patch -p0 -i example.diff"
 
 #define pidof_trivial_usage \
 	"process-name [OPTION] [process-name ...]"



More information about the busybox-cvs mailing list