svn commit: trunk/busybox/shell
vda at busybox.net
vda at busybox.net
Sat May 5 08:11:41 PDT 2007
Author: vda
Date: 2007-05-05 08:11:40 -0700 (Sat, 05 May 2007)
New Revision: 18561
Log:
hush: stop generating extra empty pipes in parse stage.
Modified:
trunk/busybox/shell/hush.c
Changeset:
Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c 2007-05-05 15:10:52 UTC (rev 18560)
+++ trunk/busybox/shell/hush.c 2007-05-05 15:11:40 UTC (rev 18561)
@@ -2685,8 +2685,8 @@
&& child->argv == NULL
&& child->redirects == NULL
) {
- debug_printf_parse("done_command: skipping null command\n");
- return 0;
+ debug_printf_parse("done_command: skipping null cmd, num_progs=%d\n", pi->num_progs);
+ return pi->num_progs;
}
pi->num_progs++;
debug_printf_parse("done_command: ++num_progs=%d\n", pi->num_progs);
@@ -2712,26 +2712,28 @@
ctx->child = child;
/* but ctx->pipe and ctx->list_head remain unchanged */
- return 0;
+ return pi->num_progs; /* used only for 0/nonzero check */
}
static int done_pipe(struct p_context *ctx, pipe_style type)
{
struct pipe *new_p;
+ int not_null;
debug_printf_parse("done_pipe entered, followup %d\n", type);
- done_command(ctx); /* implicit closure of previous command */
+ not_null = done_command(ctx); /* implicit closure of previous command */
ctx->pipe->followup = type;
ctx->pipe->r_mode = ctx->res_w;
- new_p = new_pipe();
- ctx->pipe->next = new_p;
- ctx->pipe = new_p;
- ctx->child = NULL;
-// TODO: even just <enter> on command line basically generates
-// tree of three NOPs (!).
-// Can we detect that previous done_command have seen "skipping null command"
-// condition and NOT create new pipe here?
- done_command(ctx); /* set up new pipe to accept commands */
+ /* Without this check, even just <enter> on command line generates
+ * tree of three NOPs (!). Which is harmless but annoying.
+ * IOW: it is safe to do it unconditionally. */
+ if (not_null) {
+ new_p = new_pipe();
+ ctx->pipe->next = new_p;
+ ctx->pipe = new_p;
+ ctx->child = NULL;
+ done_command(ctx); /* set up new pipe to accept commands */
+ }
debug_printf_parse("done_pipe return 0\n");
return 0;
}
More information about the busybox-cvs
mailing list