Commit a patch by Larry Doolittle which fixes recursive calls to file_peek,
and improves some debugging messages.
diff --git a/shell/hush.c b/shell/hush.c
index 40787a4..0dc2d62 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -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,12 +933,11 @@
 	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; 
+		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;
 }