[BusyBox-cvs] busybox/editors sed.c,1.140,1.141

Glenn McGrath bug1 at busybox.net
Sun Sep 14 16:28:11 UTC 2003


Update of /var/cvs/busybox/editors
In directory winder:/tmp/cvs-serv28649/editors

Modified Files:
	sed.c 
Log Message:
Memory cleanups and fix for `echo "foo" | sed 's/foo/bar/;H;q'`


Index: sed.c
===================================================================
RCS file: /var/cvs/busybox/editors/sed.c,v
retrieving revision 1.140
retrieving revision 1.141
diff -u -d -r1.140 -r1.141
--- sed.c	14 Sep 2003 15:24:18 -0000	1.140
+++ sed.c	14 Sep 2003 16:28:08 -0000	1.141
@@ -865,6 +865,7 @@
 				case 'd':
 					altered++;
 					deleted = 1;
+					force_print = 0;
 					break;
 
 				case 's':
@@ -1031,16 +1032,29 @@
 					break;
 				case 'g':	/* Replace pattern space with hold space */
 					free(pattern_space);
-					pattern_space = strdup(hold_space);
+					if (hold_space) {
+						pattern_space = strdup(hold_space);
+					}
 					break;
 				case 'G': {	/* Append newline and hold space to pattern space */
-					int pattern_space_size = 0;
+					int pattern_space_size = 2;
+					int hold_space_size = 0;
+
 					if (pattern_space) {
-						pattern_space_size = strlen(pattern_space);
+						pattern_space_size += strlen(pattern_space);
+					}
+					if (hold_space) {
+						hold_space_size = strlen(hold_space);
+					}
+					pattern_space = xrealloc(pattern_space, pattern_space_size + hold_space_size);
+					if (pattern_space_size == 2) {
+						strcat(pattern_space, "\n");
+					} else {
+						strcpy(pattern_space, "\n");
+					}
+					if (hold_space) {
+						strcat(pattern_space, hold_space);
 					}
-					pattern_space = xrealloc(pattern_space, pattern_space_size + strlen(hold_space) + 2);
-					strcat(pattern_space, "\n");
-					strcat(pattern_space, hold_space); 
 					break;
 				}
 				case 'h':	/* Replace hold space with pattern space */




More information about the busybox-cvs mailing list