From mboxrd@z Thu Jan 1 00:00:00 1970 From: James Chargin Date: Wed, 23 Oct 2013 06:55:02 -0700 Subject: [U-Boot] [PATCH] cmd_nvedit.c: Add env exists command In-Reply-To: <20131023000734.GA18309@gmail.com> References: <20131023000734.GA18309@gmail.com> Message-ID: <5267D536.2020605@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Andrew Ruder, On 10/22/2013 05:07 PM, Andrew Ruder wrote: > env exists is a way to test (in hush) if an environment variable > exists. A workaround existed using printenv but this new command > doesn't require all the stdout/stderr redirection to prevent > printing information to the screen. I was aware of the printenv workaround, and have used it. I share your misgivings about the stdout/stderr redirection, it seems clumsy, at best. I have, more recently, been using scripting of the form if test "X" != "X${var}"; then echo defined else echo undefined fi > > Example: > $ set testexists 1 > $ env exists testexists && echo "yes" > yes > $ env exists testexists || echo "no" > $ set testexists > $ env exists testexists && echo "yes" > $ env exists testexists || echo "no" > no > $ I've often thought that a "env exists" command might be a nice, consistent, addition. Thanks for adding it. Jim > > Signed-off-by: Andrew Ruder > --- > README | 1 + > common/cmd_nvedit.c | 23 +++++++++++++++++++++++ > 2 files changed, 24 insertions(+) > > diff --git a/README b/README > index 09662a4..0718459 100644 > --- a/README > +++ b/README > @@ -843,6 +843,7 @@ The following options need to be configured: > CONFIG_CMD_ELF * bootelf, bootvx > CONFIG_CMD_ENV_CALLBACK * display details about env callbacks > CONFIG_CMD_ENV_FLAGS * display details about env flags > + CONFIG_CMD_ENV_EXISTS * check existence of env variable > CONFIG_CMD_EXPORTENV * export the environment > CONFIG_CMD_EXT2 * ext2 command support > CONFIG_CMD_EXT4 * ext4 command support > diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c > index ba9ba16..0d4d02c 100644 > --- a/common/cmd_nvedit.c > +++ b/common/cmd_nvedit.c > @@ -1059,6 +1059,23 @@ sep_err: > } > #endif > > +#if defined(CONFIG_CMD_ENV_EXISTS) > +static int do_env_exists(cmd_tbl_t *cmdtp, int flag, int argc, > + char * const argv[]) > +{ > + ENTRY e, *ep; > + > + if (argc < 2) > + return CMD_RET_USAGE; > + > + e.key = argv[1]; > + e.data = NULL; > + hsearch_r(e, FIND, &ep, &env_htab, 0); > + > + return (ep == NULL) ? 1 : 0; > +} > +#endif > + > /* > * New command line interface: "env" command with subcommands > */ > @@ -1094,6 +1111,9 @@ static cmd_tbl_t cmd_env_sub[] = { > U_BOOT_CMD_MKENT(save, 1, 0, do_env_save, "", ""), > #endif > U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 0, do_env_set, "", ""), > +#if defined(CONFIG_CMD_ENV_EXISTS) > + U_BOOT_CMD_MKENT(exists, 2, 0, do_env_exists, "", ""), > +#endif > }; > > #if defined(CONFIG_NEEDS_MANUAL_RELOC) > @@ -1136,6 +1156,9 @@ static char env_help_text[] = > #if defined(CONFIG_CMD_EDITENV) > "env edit name - edit environment variable\n" > #endif > +#if defined(CONFIG_CMD_ENV_EXISTS) > + "env exists name - tests for existence of variable\n" > +#endif > #if defined(CONFIG_CMD_EXPORTENV) > "env export [-t | -b | -c] [-s size] addr [var ...] - export environment\n" > #endif > -- Jim Chargin AJA Video Systems jimc at aja.com (530) 271-3334 http://www.aja.com