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>
diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index d456d2f..1955dee 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -807,7 +807,7 @@
}
if (!all && (argc > 0)) {
/* Reset individual variables */
- set_default_vars(argc, argv);
+ set_default_vars(argc, argv, env_flag);
return 0;
}
diff --git a/env/common.c b/env/common.c
index dc8a14f..6cf5edd 100644
--- a/env/common.c
+++ b/env/common.c
@@ -91,15 +91,16 @@
/* [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);
}
/*
diff --git a/include/environment.h b/include/environment.h
index 70b7eda..2fe1f3e 100644
--- a/include/environment.h
+++ b/include/environment.h
@@ -275,7 +275,7 @@
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);