env: remove vars that are not in default env
current env_set_default_vars() doesn't delete var that are not in the imported env. hashtable removes vars that are not in the imported env but present in the current env only if H_NOCLEAR flag is not set. This change is to avoid passing H_NOCLEAR flag if specific vars are passed to env_set_default_vars() Without this change: Marvell>> env default boot_mode Marvell>> With the change: Marvell>> env default boot_mode WARNING: 'boot_mode' not in imported env, deleting it! Signed-off-by: Ravi Minnikanti <rminnikanti@marvell.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:

committed by
Tom Rini

parent
dbb6b5a010
commit
2a521d01e6
@@ -79,7 +79,8 @@ The *env default* command resets the selected variables in the U-Boot
|
|||||||
environment to their default values.
|
environment to their default values.
|
||||||
|
|
||||||
var
|
var
|
||||||
list of variable name.
|
list of variable names. If variable is not part of default
|
||||||
|
environment, it is deleted with a warning message on console.
|
||||||
\-a
|
\-a
|
||||||
all U-Boot environment.
|
all U-Boot environment.
|
||||||
\-f
|
\-f
|
||||||
@@ -309,6 +310,7 @@ Delete environment variable in memory::
|
|||||||
Reset environment variable to default value, in memory::
|
Reset environment variable to default value, in memory::
|
||||||
|
|
||||||
=> env default bootcmd
|
=> env default bootcmd
|
||||||
|
=> env default ipaddr serverip
|
||||||
=> env default -a
|
=> env default -a
|
||||||
|
|
||||||
Save current environment in persistent storage::
|
Save current environment in persistent storage::
|
||||||
|
10
env/common.c
vendored
10
env/common.c
vendored
@@ -401,7 +401,15 @@ int env_set_default_vars(int nvars, char * const vars[], int flags)
|
|||||||
* Special use-case: import from default environment
|
* Special use-case: import from default environment
|
||||||
* (and use \0 as a separator)
|
* (and use \0 as a separator)
|
||||||
*/
|
*/
|
||||||
flags |= H_NOCLEAR | H_DEFAULT;
|
|
||||||
|
/*
|
||||||
|
* When vars are passed remove variables that are not in
|
||||||
|
* the default environment.
|
||||||
|
*/
|
||||||
|
if (!nvars)
|
||||||
|
flags |= H_NOCLEAR;
|
||||||
|
|
||||||
|
flags |= H_DEFAULT;
|
||||||
return himport_r(&env_htab, default_environment,
|
return himport_r(&env_htab, default_environment,
|
||||||
sizeof(default_environment), '\0',
|
sizeof(default_environment), '\0',
|
||||||
flags, 0, nvars, vars);
|
flags, 0, nvars, vars);
|
||||||
|
27
test/env/cmd_ut_env.c
vendored
27
test/env/cmd_ut_env.c
vendored
@@ -9,6 +9,33 @@
|
|||||||
#include <test/suites.h>
|
#include <test/suites.h>
|
||||||
#include <test/ut.h>
|
#include <test/ut.h>
|
||||||
|
|
||||||
|
static int env_test_env_cmd(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
ut_assertok(run_command("setenv non_default_var1 1", 0));
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
ut_assertok(run_command("setenv non_default_var2 1", 0));
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
ut_assertok(run_command("env print non_default_var1", 0));
|
||||||
|
ut_assert_nextline("non_default_var1=1");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
ut_assertok(run_command("env default non_default_var1 non_default_var2", 0));
|
||||||
|
ut_assert_nextline("WARNING: 'non_default_var1' not in imported env, deleting it!");
|
||||||
|
ut_assert_nextline("WARNING: 'non_default_var2' not in imported env, deleting it!");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
ut_asserteq(1, run_command("env exists non_default_var1", 0));
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
ut_asserteq(1, run_command("env exists non_default_var2", 0));
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ENV_TEST(env_test_env_cmd, UT_TESTF_CONSOLE_REC);
|
||||||
|
|
||||||
int do_ut_env(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
int do_ut_env(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||||
{
|
{
|
||||||
struct unit_test *tests = UNIT_TEST_SUITE_START(env_test);
|
struct unit_test *tests = UNIT_TEST_SUITE_START(env_test);
|
||||||
|
Reference in New Issue
Block a user