[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