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>
lime2-spi
Yaniv Levinsky 6 years ago committed by Tom Rini
parent 30091494eb
commit 477f8116d5
  1. 2
      cmd/nvedit.c
  2. 5
      env/common.c
  3. 2
      include/environment.h

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

5
env/common.c vendored

@ -91,15 +91,16 @@ void set_default_env(const char *s)
/* [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
* (and use \0 as a separator)
*/
flags |= H_NOCLEAR | H_INTERACTIVE;
return himport_r(&env_htab, (const char *)default_environment,
sizeof(default_environment), '\0',
H_NOCLEAR | H_INTERACTIVE, 0, nvars, vars);
flags, 0, nvars, vars);
}
/*

@ -275,7 +275,7 @@ char *env_get_default(const char *name);
void set_default_env(const char *s);
/* [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 */
int env_import(const char *buf, int check);

Loading…
Cancel
Save