[U-Boot] [PATCH v2 3/3] env: Provide programmatic equivalent to 'setenv -f'
James Byrne
james.byrne at origamienergy.com
Thu Nov 21 14:32:48 UTC 2019
Add env_force_set() to provide an equivalent to 'setenv -f' that can be
used programmatically.
Signed-off-by: James Byrne <james.byrne at origamienergy.com>
---
Changes in v2: None
cmd/nvedit.c | 17 ++++++++++++++---
include/env.h | 13 +++++++++++++
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index b30669a45e..106c69147b 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -241,16 +241,27 @@ static int do_env_update(const char *name, const char *value, int env_flag)
return 0;
}
-int env_set(const char *varname, const char *varvalue)
+static int do_programmatic_env_set(const char *varname, const char *varvalue,
+ int env_flag)
{
/* before import into hashtable */
if (!(gd->flags & GD_FLG_ENV_READY))
return 1;
if (!varvalue || varvalue[0] == '\0')
- return do_env_remove(varname, H_PROGRAMMATIC);
+ return do_env_remove(varname, H_PROGRAMMATIC | env_flag);
+
+ return do_env_update(varname, varvalue, H_PROGRAMMATIC | env_flag);
+}
+
+int env_set(const char *varname, const char *varvalue)
+{
+ return do_programmatic_env_set(varname, varvalue, 0);
+}
- return do_env_update(varname, varvalue, H_PROGRAMMATIC);
+int env_force_set(const char *varname, const char *varvalue)
+{
+ return do_programmatic_env_set(varname, varvalue, H_FORCE);
}
#ifndef CONFIG_SPL_BUILD
diff --git a/include/env.h b/include/env.h
index b72239f6a5..da54f51805 100644
--- a/include/env.h
+++ b/include/env.h
@@ -145,6 +145,19 @@ int env_get_yesno(const char *var);
*/
int env_set(const char *varname, const char *value);
+/**
+ * env_force_set() - forcibly set an environment variable
+ *
+ * This sets or deletes the value of an environment variable. It is the same
+ * as env_set(), except that the variable will be forcibly updated/deleted,
+ * even if it has access protection flags set.
+ *
+ * @varname: Variable to adjust
+ * @value: Value to set for the variable, or NULL or "" to delete the variable
+ * @return 0 if OK, 1 on error
+ */
+int env_force_set(const char *varname, const char *varvalue);
+
/**
* env_get_ulong() - Return an environment variable as an integer value
*
--
2.24.0
More information about the U-Boot
mailing list