From mboxrd@z Thu Jan 1 00:00:00 1970 From: James Byrne Date: Thu, 21 Nov 2019 14:32:48 +0000 Subject: [U-Boot] [PATCH v2 3/3] env: Provide programmatic equivalent to 'setenv -f' In-Reply-To: <20191121143240.122610-1-james.byrne@origamienergy.com> References: <20191121143240.122610-1-james.byrne@origamienergy.com> Message-ID: <0102016e8e614227-a8c99a21-6a99-4611-b510-a723bc021b52-000000@eu-west-1.amazonses.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Add env_force_set() to provide an equivalent to 'setenv -f' that can be used programmatically. Signed-off-by: James Byrne --- 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