diff --git a/common/hush.c b/common/hush.c index 6cb921d..3aa9d50 100644 --- a/common/hush.c +++ b/common/hush.c @@ -1642,6 +1642,15 @@ static int run_pipe_real(struct pipe *pi) * Is it really safe for inline use? Experimentally, * things seem to work with glibc. */ setup_redirects(child, squirrel); + + child->argv += i; /* XXX horrible hack */ + rcode = x->function(child); + /* XXX restore hack so free() can work right */ + child->argv -= i; + restore_redirects(squirrel); + } + return rcode; + } #else /* check ";", because ,example , argv consist from * "help;flinfo" must not execute @@ -1674,22 +1683,11 @@ static int run_pipe_real(struct pipe *pi) if ((child->argc - i) > cmdtp->maxargs) return cmd_usage(cmdtp); #endif - child->argv+=i; /* XXX horrible hack */ -#ifndef __U_BOOT__ - rcode = x->function(child); -#else /* OK - call function to do the command */ - rcode = cmd_call(cmdtp, flag, child->argc-i, - &child->argv[i]); + rcode = cmd_call(cmdtp, flag, child->argc, + child->argv); if (!cmdtp->repeatable) flag_repeat = 0; -#endif - child->argv-=i; /* XXX restore hack so free() can work right */ -#ifndef __U_BOOT__ - - restore_redirects(squirrel); -#endif - return rcode; } }