[BusyBox] nassssty, nassssty hush bug

Larry Doolittle ldoolitt at recycle.lbl.gov
Wed May 23 11:08:37 UTC 2001


With the appended patch in place, hush will run

echo THIS IS A TEST >foo
cat $(echo FOO | tr 'A-Z' 'a-z') | tr 'A-Z' 'a-z'

correctly, both interactively and from a script.
Whew.

     - Larry

--- /home/ldoolitt/cvs/busybox/hush.c	Tue May 22 15:35:46 2001
+++ hush.c	Wed May 23 10:04:43 2001
@@ -278,6 +278,7 @@
  * available?  Where is it documented? */
 struct in_str {
 	const char *p;
+	char peek_buf[2];
 	int __promptme;
 	int promptmode;
 	FILE *file;
@@ -932,10 +933,9 @@
 	if (i->p && *i->p) {
 		return *i->p;
 	} else {
-		static char buffer[2];
-		buffer[0] = fgetc(i->file);
-		buffer[1] = '\0';
-		i->p = buffer;
+		i->peek_buf[0] = fgetc(i->file);
+		i->peek_buf[1] = '\0';
+		i->p = i->peek_buf;
 		debug_printf("b_peek: got a %d\n", *i->p);
 		return *i->p; 
 	}
@@ -1513,8 +1513,8 @@
 					perror_msg("tcsetpgrp-4");
 			} else {
 				rcode = pipe_wait(pi);
-				debug_printf("pipe_wait returned %d\n",rcode);
 			}
+			debug_printf("pipe_wait returned %d\n",rcode);
 		}
 		last_return_code=rcode;
 		if ( rmode == RES_IF || rmode == RES_ELIF )
@@ -2347,7 +2347,7 @@
 					done_pipe(ctx,PIPE_SEQ);
 			}
 			if (ch == end_trigger && !dest->quote && ctx->w==RES_NONE) {
-				debug_printf("leaving parse_stream\n");
+				debug_printf("leaving parse_stream (triggered)\n");
 				return 0;
 			}
 #if 0
@@ -2471,6 +2471,7 @@
 	 * that is, we were really supposed to get end_trigger, and never got
 	 * one before the EOF.  Can't use the standard "syntax error" return code,
 	 * so that parse_stream_outer can distinguish the EOF and exit smoothly. */
+	debug_printf("leaving parse_stream (EOF)\n");
 	if (end_trigger != '\0') return -1;
 	return 0;
 }





More information about the busybox mailing list