Browse Source

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>
Yaniv Levinsky 6 years ago
parent
commit
477f8116d5
3 changed files with 5 additions and 4 deletions
  1. 1 1
      cmd/nvedit.c
  2. 3 2
      env/common.c
  3. 1 1
      include/environment.h

+ 1 - 1
cmd/nvedit.c

@@ -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;
 	}
 

+ 3 - 2
env/common.c

@@ -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);
 }
 
 /*

+ 1 - 1
include/environment.h

@@ -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);