[U-Boot] [PATCH] Handle environment variables like commands

Wolfgang Denk wd at denx.de
Sun Oct 19 14:05:15 CEST 2008


Dear Stefano Babic,

In message <1224078992-16173-1-git-send-email-sbabic at denx.de> you wrote:
> The command interpreter checks always if an environment variable
> for that name exists and in this case the content of the variable
> is executed. It becomes possible to redefine all U-Boot commands.
> A new "builtin" command is added to be able to run builtin U-boot commands
> even if they are redefined.
> For this reason, builtin is a reserved word an no environment
----------------------------------------------^^ and

> variable can be set with this name.
...

> --- a/common/hush.c
> +++ b/common/hush.c
> @@ -1677,9 +1677,16 @@ static int run_pipe_real(struct pipe *pi)
>  					child->argv[i]);
>  				return -1;
>  			}
> -			/* Look up command in command table */
>  
> +			/* Check if exists a variable with that name, builtin is forbidden */
> +			if ((strcmp (child->argv[i], "builtin") != 0) && (p = getenv (child->argv[i])) != NULL )  {
> +				int rcode;
> +				rcode = (parse_string_outer(p,
> +			                    FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0);
> +				return rcode;
> +			}

We have a problem here.

Assume a simple test case like this:

	=> setenv bootm 'echo Run bootm command; builtin bootm'

The idea of the extension is that something like

	=> bootm ${kernel} ${fdt} ${ramdisk}

will still work.

Unfortunately, it doesn't, as we have no way to pass the arguments to
the (substituted) command to the commands run in the executed script.


One idea to solve this  problem  would  be  to  introduce  positional
parameters,  similar  to  how  it's  being  done in the shell. In the
script, we could then refer to the original command args using  "$1",
"$2", ... so the example above would look like that:

	=> setenv bootm 'echo Run bootm command; builtin bootm $1 $2 $3"


I have to admit that I didn't spend much thought on this yet, so all
feedback or sugggestions of alternative / better ideas is
welcome.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Marriage is the triumph  of  imagination  over  intelligence.  Second
marriage is the triumph of hope over experience.


More information about the U-Boot mailing list