summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2014-10-07 13:59:43 -0600
committerTom Rini <trini@ti.com>2014-10-27 11:03:33 -0400
commit87b6398b46421c5dadacdda6b4be2d9d71588107 (patch)
tree8bccf0ee67b008451ede6289836c07bb956b3c45 /include
parent0cf876154922118d8fb1b4c30f527c95a113bef3 (diff)
downloadu-boot-imx-87b6398b46421c5dadacdda6b4be2d9d71588107.zip
u-boot-imx-87b6398b46421c5dadacdda6b4be2d9d71588107.tar.gz
u-boot-imx-87b6398b46421c5dadacdda6b4be2d9d71588107.tar.bz2
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 <wd@denx.de> Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include')
-rw-r--r--include/cli_hush.h1
-rw-r--r--include/command.h1
2 files changed, 2 insertions, 0 deletions
diff --git a/include/cli_hush.h b/include/cli_hush.h
index 4951eef..57c870d 100644
--- a/include/cli_hush.h
+++ b/include/cli_hush.h
@@ -11,6 +11,7 @@
#define FLAG_EXIT_FROM_LOOP 1
#define FLAG_PARSE_SEMICOLON (1 << 1) /* symbol ';' is special for parser */
#define FLAG_REPARSING (1 << 2) /* >=2nd pass */
+#define FLAG_CONT_ON_NEWLINE (1 << 3) /* continue when we see \n */
extern int u_boot_hush_start(void);
extern int parse_string_outer(const char *, int);
diff --git a/include/command.h b/include/command.h
index 6f06db1..bd3fc04 100644
--- a/include/command.h
+++ b/include/command.h
@@ -147,6 +147,7 @@ int cmd_process(int flag, int argc, char * const argv[],
*/
#define CMD_FLAG_REPEAT 0x0001 /* repeat last command */
#define CMD_FLAG_BOOTD 0x0002 /* command is from bootd */
+#define CMD_FLAG_ENV 0x0004 /* command is from the environment */
#ifdef CONFIG_AUTO_COMPLETE
# define _CMD_COMPLETE(x) x,