* [U-Boot] [PATCH v2 14/16] [PATCH] hush: add showvar command for hush shell.
@ 2008-10-15 7:40 Heiko Schocher
0 siblings, 0 replies; only message in thread
From: Heiko Schocher @ 2008-10-15 7:40 UTC (permalink / raw)
To: u-boot
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>
---
common/hush.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++-------
common/main.c | 4 +++
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
--
1.5.6.1
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2008-10-15 7:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-15 7:40 [U-Boot] [PATCH v2 14/16] [PATCH] hush: add showvar command for hush shell Heiko Schocher
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.