diff options
Diffstat (limited to 'common/hush.c')
| -rw-r--r-- | common/hush.c | 60 | 
1 files changed, 52 insertions, 8 deletions
| diff --git a/common/hush.c b/common/hush.c index 093c42804..67bed39aa 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 */  /****************************************************************************/ |