From 87b6398b46421c5dadacdda6b4be2d9d71588107 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Tue, 7 Oct 2014 13:59:43 -0600 Subject: cli: hush: Adjust 'run' command to run each line of the env var The run command treats each argument an an environment variable. It gets the value of each variable and executes it as a command. If an environment variable contains a newline and the hush cli is used, it is supposed to execute each line one after the other. Normally a newline signals to hush to exit - this is used in normal command line entry - after a command is entered we want to return to allow the user to enter the next one. But environment variables obviously need to execute to completion. Add a special case for the execution of environment variables which continues when a newline is seen, and add a few tests to check this behaviour. Note: it's not impossible that this may cause regressions in other areas. I can't think of a case but with any change of behaviour with limited test coverage there is always a risk. From what I can tell this behaviour has been around since at least U-Boot 2011.03, although this pre-dates sandbox and I have not tested it on real hardware. Reported-by: Wolfgang Denk Signed-off-by: Simon Glass --- test/command_ut.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'test') diff --git a/test/command_ut.c b/test/command_ut.c index ae6466d..e136075 100644 --- a/test/command_ut.c +++ b/test/command_ut.c @@ -66,7 +66,21 @@ static int do_ut_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) assert(run_command_list("false", -1, 0) == 1); assert(run_command_list("echo", -1, 0) == 0); + run_command("setenv foo 'setenv monty 1; setenv python 2'", 0); + run_command("run foo", 0); + assert(getenv("monty") != NULL); + assert(!strcmp("1", getenv("monty"))); + assert(getenv("python") != NULL); + assert(!strcmp("2", getenv("python"))); + #ifdef CONFIG_SYS_HUSH_PARSER + run_command("setenv foo 'setenv black 1\nsetenv adder 2'", 0); + run_command("run foo", 0); + assert(getenv("black") != NULL); + assert(!strcmp("1", getenv("black"))); + assert(getenv("adder") != NULL); + assert(!strcmp("2", getenv("adder"))); + /* Test the 'test' command */ #define HUSH_TEST(name, expr, expected_result) \ -- cgit v1.1