diff options
author | Heiko Schocher <hs@denx.de> | 2008-10-15 09:40:28 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2008-10-18 21:54:02 +0200 |
commit | 81473f67810c4c9b7efaed8dee258ed6bc4c7983 (patch) | |
tree | 8a700ac42b73d5ec6f01bd4466440d62465bd7f1 | |
parent | 67b23a322848d828a5e45c0567b72762bfde7abf (diff) | |
download | u-boot-imx-81473f67810c4c9b7efaed8dee258ed6bc4c7983.zip u-boot-imx-81473f67810c4c9b7efaed8dee258ed6bc4c7983.tar.gz u-boot-imx-81473f67810c4c9b7efaed8dee258ed6bc4c7983.tar.bz2 |
hush: add showvar command for hush shell.
This new command shows the local variables defined in
the hush shell:
=> help showvar
showvar
- print values of all hushshell variables
showvar name ...
- print value of hushshell variable 'name'
Also make the set_local_var() and unset_local_var ()
no longer static, so it is possible to define local
hush shell variables at boot time. If CONFIG_HUSH_INIT_VAR
is defined, u-boot calls hush_init_var (), where
boardspecific code can define local hush shell
variables at boottime.
Signed-off-by: Heiko Schocher <hs@denx.de>
-rw-r--r-- | common/hush.c | 60 | ||||
-rw-r--r-- | common/main.c | 4 | ||||
-rw-r--r-- | include/hush.h | 6 |
3 files changed, 62 insertions, 8 deletions
diff --git a/common/hush.c b/common/hush.c index 093c428..67bed39 100644 --- a/common/hush.c +++ b/common/hush.c @@ -501,10 +501,6 @@ static void remove_bg_job(struct pipe *pi); static char **make_list_in(char **inp, char *name); static char *insert_var_value(char *inp); static char *get_local_var(const char *var); -#ifndef __U_BOOT__ -static void unset_local_var(const char *name); -#endif -static int set_local_var(const char *s, int flg_export); #ifndef __U_BOOT__ /* Table of built-in functions. They can be forked or not, depending on @@ -2204,7 +2200,7 @@ static char *get_local_var(const char *s) flg_export==0 if only local (not exporting) variable flg_export==1 if "new" exporting environ flg_export>1 if current startup environ (not call putenv()) */ -static int set_local_var(const char *s, int flg_export) +int set_local_var(const char *s, int flg_export) { char *name, *value; int result=0; @@ -2295,8 +2291,7 @@ static int set_local_var(const char *s, int flg_export) return result; } -#ifndef __U_BOOT__ -static void unset_local_var(const char *name) +void unset_local_var(const char *name) { struct variables *cur; @@ -2311,8 +2306,10 @@ static void unset_local_var(const char *name) error_msg("%s: readonly variable", name); return; } else { +#ifndef __U_BOOT__ if(cur->flg_export) unsetenv(cur->name); +#endif free(cur->name); free(cur->value); while (next->next != cur) @@ -2323,7 +2320,6 @@ static void unset_local_var(const char *name) } } } -#endif static int is_assignment(const char *s) { @@ -3588,5 +3584,53 @@ static char * make_string(char ** inp) return str; } +#ifdef __U_BOOT__ +int do_showvar (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + int i, k; + int rcode = 0; + struct variables *cur; + + if (argc == 1) { /* Print all env variables */ + for (cur = top_vars; cur; cur = cur->next) { + printf ("%s=%s\n", cur->name, cur->value); + if (ctrlc ()) { + puts ("\n ** Abort\n"); + return 1; + } + } + return 0; + } + for (i = 1; i < argc; ++i) { /* print single env variables */ + char *name = argv[i]; + + k = -1; + for (cur = top_vars; cur; cur = cur->next) { + if(strcmp (cur->name, name) == 0) { + k = 0; + printf ("%s=%s\n", cur->name, cur->value); + } + if (ctrlc ()) { + puts ("\n ** Abort\n"); + return 1; + } + } + if (k < 0) { + printf ("## Error: \"%s\" not defined\n", name); + rcode ++; + } + } + return rcode; +} + +U_BOOT_CMD( + showvar, CFG_MAXARGS, 1, do_showvar, + "showvar- print local hushshell variables\n", + "\n - print values of all hushshell variables\n" + "showvar name ...\n" + " - print value of hushshell variable 'name'\n" +); + +#endif #endif /* CFG_HUSH_PARSER */ /****************************************************************************/ diff --git a/common/main.c b/common/main.c index c06ea07..9a9fc9d 100644 --- a/common/main.c +++ b/common/main.c @@ -341,6 +341,10 @@ void main_loop (void) u_boot_hush_start (); #endif +#if defined(CONFIG_HUSH_INIT_VAR) + hush_init_var (); +#endif + #ifdef CONFIG_AUTO_COMPLETE install_auto_complete(); #endif diff --git a/include/hush.h b/include/hush.h index 20e48db..0805ff3 100644 --- a/include/hush.h +++ b/include/hush.h @@ -32,4 +32,10 @@ extern int u_boot_hush_start(void); extern int parse_string_outer(char *, int); extern int parse_file_outer(void); +int set_local_var(const char *s, int flg_export); +void unset_local_var(const char *name); + +#if defined(CONFIG_HUSH_INIT_VAR) +extern int hush_init_var (void); +#endif #endif |