cmd: nvedit: propagate envflag to set_default_vars

The env_flag in do_env_default() doesn't get propagated and therefore
gets ignored by himport_r(). This breaks to ability to "forcibly" reset
variables to their default values using the environment command.

Scenario example of the problem:
	# setenv kernel uImage
	# setenv .flags kernel:so
	# env default -f kernel
	## Error: Can't overwrite "kernel"
	himport_r: can't insert "kernel=zImage" into hash table

Change the call path so it will pass the flag correctly.

Signed-off-by: Yaniv Levinsky <yaniv.levinsky@compulab.co.il>
Acked-by: Igor Grinberg <grinberg@compulab.co.il>
This commit is contained in:
Yaniv Levinsky 2018-06-24 19:16:55 +03:00 committed by Tom Rini
parent 30091494eb
commit 477f8116d5
3 changed files with 5 additions and 4 deletions

View file

@ -807,7 +807,7 @@ static int do_env_default(cmd_tbl_t *cmdtp, int flag,
} }
if (!all && (argc > 0)) { if (!all && (argc > 0)) {
/* Reset individual variables */ /* Reset individual variables */
set_default_vars(argc, argv); set_default_vars(argc, argv, env_flag);
return 0; return 0;
} }

5
env/common.c vendored
View file

@ -91,15 +91,16 @@ void set_default_env(const char *s)
/* [re]set individual variables to their value in the default environment */ /* [re]set individual variables to their value in the default environment */
int set_default_vars(int nvars, char * const vars[]) int 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_INTERACTIVE;
return himport_r(&env_htab, (const char *)default_environment, return himport_r(&env_htab, (const char *)default_environment,
sizeof(default_environment), '\0', sizeof(default_environment), '\0',
H_NOCLEAR | H_INTERACTIVE, 0, nvars, vars); flags, 0, nvars, vars);
} }
/* /*

View file

@ -275,7 +275,7 @@ char *env_get_default(const char *name);
void set_default_env(const char *s); void set_default_env(const char *s);
/* [re]set individual variables to their value in the default environment */ /* [re]set individual variables to their value in the default environment */
int set_default_vars(int nvars, char * const vars[]); int set_default_vars(int nvars, char * const vars[], int flags);
/* Import from binary representation into hash table */ /* Import from binary representation into hash table */
int env_import(const char *buf, int check); int env_import(const char *buf, int check);