svn commit: trunk/busybox: editors libbb

vda at busybox.net vda at busybox.net
Wed Jan 17 23:16:16 UTC 2007


Author: vda
Date: 2007-01-17 15:16:16 -0800 (Wed, 17 Jan 2007)
New Revision: 17357

Log:
sed,get_line_from_file: improve comments


Modified:
   trunk/busybox/editors/sed.c
   trunk/busybox/libbb/get_line_from_file.c


Changeset:
Modified: trunk/busybox/editors/sed.c
===================================================================
--- trunk/busybox/editors/sed.c	2007-01-17 19:51:00 UTC (rev 17356)
+++ trunk/busybox/editors/sed.c	2007-01-17 23:16:16 UTC (rev 17357)
@@ -576,28 +576,33 @@
 	/* go through the replacement string */
 	for (i = 0; replace[i]; i++) {
 		/* if we find a backreference (\1, \2, etc.) print the backref'ed * text */
-		if (replace[i] == '\\' && replace[i+1] >= '0' && replace[i+1] <= '9') {
-			int backref = replace[++i]-'0';
-
-			/* print out the text held in bbg.regmatch[backref] */
-			if (bbg.regmatch[backref].rm_so != -1) {
-				j = bbg.regmatch[backref].rm_so;
-				while (j < bbg.regmatch[backref].rm_eo)
-					pipe_putc(line[j++]);
+		if (replace[i] == '\\') {
+			unsigned backref = replace[++i] - '0';
+			if (backref <= 9) {
+				/* print out the text held in bbg.regmatch[backref] */
+				if (bbg.regmatch[backref].rm_so != -1) {
+					j = bbg.regmatch[backref].rm_so;
+					while (j < bbg.regmatch[backref].rm_eo)
+						pipe_putc(line[j++]);
+				}
+				continue;
 			}
+			/* I _think_ it is impossible to get '\' to be
+			 * the last char in replace string. Thus we dont check
+			 * for replace[i] == NUL. (counterexample anyone?) */
+			/* if we find a backslash escaped character, print the character */
+			pipe_putc(replace[i]);
+			continue;
 		}
-
-		/* if we find a backslash escaped character, print the character */
-		else if (replace[i] == '\\') pipe_putc(replace[++i]);
-
 		/* if we find an unescaped '&' print out the whole matched text. */
-		else if (replace[i] == '&') {
+		if (replace[i] == '&') {
 			j = bbg.regmatch[0].rm_so;
 			while (j < bbg.regmatch[0].rm_eo)
 				pipe_putc(line[j++]);
+			continue;
 		}
 		/* Otherwise just output the character. */
-		else pipe_putc(replace[i]);
+		pipe_putc(replace[i]);
 	}
 }
 
@@ -722,6 +727,9 @@
 	lc = 0;
 	flush_append();
 	while (bbg.current_input_file < bbg.input_file_count) {
+		/* Read line up to a newline or NUL byte, inclusive,
+		 * return malloc'ed char[]. length of the chunk read
+		 * is stored in len. NULL if EOF/error */
 		temp = bb_get_chunk_from_file(
 			bbg.input_file_list[bbg.current_input_file], &len);
 		if (temp) {
@@ -753,7 +761,8 @@
  * echo -n thingy >z1
  * echo -n again >z2
  * >znull
- * sed "s/i/z/" z1 z2 znull | hexdump -vC output:
+ * sed "s/i/z/" z1 z2 znull | hexdump -vC
+ * output:
  * gnu sed 4.1.5:
  * 00000000  74 68 7a 6e 67 79 0a 61  67 61 7a 6e              |thzngy.agazn|
  * bbox:
@@ -771,8 +780,9 @@
 		last_puts_char = '\n';
 	}
 	fputs(s, file);
-	/* 'x': we don't care what is it, but we know it isn't '\n' */
-	if (s[0]) last_puts_char = 'x';
+	/* why 'x'? - just something which is not '\n' */
+	if (s[0])
+		last_puts_char = 'x';
 	if (!(last_char & 0x100)) { /* had trailing '\n' or '\0'? */
 		last_char &= 0xff;
 		fputc(last_char, file);

Modified: trunk/busybox/libbb/get_line_from_file.c
===================================================================
--- trunk/busybox/libbb/get_line_from_file.c	2007-01-17 19:51:00 UTC (rev 17356)
+++ trunk/busybox/libbb/get_line_from_file.c	2007-01-17 23:16:16 UTC (rev 17357)
@@ -13,8 +13,9 @@
 
 /* This function reads an entire line from a text file, up to a newline
  * or NUL byte, inclusive.  It returns a malloc'ed char * which must be
- * stored and free'ed by the caller.  If end is null '\n' isn't considered
- * end of line.  If end isn't null, length of the chunk read is stored in it. */
+ * stored and free'ed by the caller.  If end is NULL '\n' isn't considered
+ * end of line.  If end isn't NULL, length of the chunk read is stored in it.
+ * Return NULL if EOF/error */
 
 char *bb_get_chunk_from_file(FILE * file, int *end)
 {




More information about the busybox-cvs mailing list