diff options
Diffstat (limited to 'common/cmd_nvedit.c')
| -rw-r--r-- | common/cmd_nvedit.c | 55 | 
1 files changed, 52 insertions, 3 deletions
| diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c index df0e6dbaf..817f39b5d 100644 --- a/common/cmd_nvedit.c +++ b/common/cmd_nvedit.c @@ -4,7 +4,9 @@   *   * (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>   * Andreas Heppel <aheppel@sysgo.de> - + * + * Copyright 2011 Freescale Semiconductor, Inc. + *   * See file CREDITS for list of people who contributed to this   * project.   * @@ -160,6 +162,37 @@ int do_env_print (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	return rcode;  } +#ifdef CONFIG_CMD_GREPENV +static int do_env_grep (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	ENTRY *match; +	unsigned char matched[env_htab.size / 8]; +	int rcode = 1, arg = 1, idx; + +	if (argc < 2) +		return cmd_usage(cmdtp); + +	memset(matched, 0, env_htab.size / 8); + +	while (arg <= argc) { +		idx = 0; +		while ((idx = hstrstr_r(argv[arg], idx, &match, &env_htab))) { +			if (!(matched[idx / 8] & (1 << (idx & 7)))) { +				puts(match->key); +				puts("="); +				puts(match->data); +				puts("\n"); +			} +			matched[idx / 8] |= 1 << (idx & 7); +			rcode = 0; +		} +		arg++; +	} + +	return rcode; +} +#endif +  /*   * Set a new environment variable,   * or replace or delete an existing one. @@ -829,6 +862,9 @@ static cmd_tbl_t cmd_env_sub[] = {  #if defined(CONFIG_CMD_EXPORTENV)  	U_BOOT_CMD_MKENT(export, 4, 0, do_env_export, "", ""),  #endif +#if defined(CONFIG_CMD_GREPENV) +	U_BOOT_CMD_MKENT(grep, CONFIG_SYS_MAXARGS, 1, do_env_grep, "", ""), +#endif  #if defined(CONFIG_CMD_IMPORTENV)  	U_BOOT_CMD_MKENT(import, 5, 0, do_env_import, "", ""),  #endif @@ -878,8 +914,11 @@ U_BOOT_CMD(  #if defined(CONFIG_CMD_EDITENV)  	"env edit name - edit environment variable\n"  #endif -	"env export [-t | -b | -c] addr [size] - export environmnt\n" -	"env import [-d] [-t | -b | -c] addr [size] - import environmnt\n" +	"env export [-t | -b | -c] addr [size] - export environment\n" +#if defined(CONFIG_CMD_GREPENV) +	"env grep string [...] - search environment\n" +#endif +	"env import [-d] [-t | -b | -c] addr [size] - import environment\n"  	"env print [name ...] - print environment\n"  #if defined(CONFIG_CMD_RUN)  	"env run var [...] - run commands in an environment variable\n" @@ -911,6 +950,16 @@ U_BOOT_CMD_COMPLETE(  	var_complete  ); +#ifdef CONFIG_CMD_GREPENV +U_BOOT_CMD_COMPLETE( +	grepenv, CONFIG_SYS_MAXARGS, 0,  do_env_grep, +	"search environment variables", +	"string ...\n" +	"    - list environment name=value pairs matching 'string'", +	var_complete +); +#endif +  U_BOOT_CMD_COMPLETE(  	setenv, CONFIG_SYS_MAXARGS, 0,	do_env_set,  	"set environment variables", |