diff --git a/common/globalvar.c b/common/globalvar.c index 1b3082a..fdfaf76 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -165,18 +165,14 @@ static int nv_set(struct device_d *dev, struct param_d *p, const char *val) { - struct param_d *g; int ret; if (!val) val = ""; - g = get_param_by_name(&global_device, p->name); - if (g) { - ret = dev_set_param(&global_device, p->name, val); - if (ret) - return ret; - } + ret = dev_set_param(&global_device, p->name, val); + if (ret) + return ret; free(p->value); p->value = xstrdup(val); @@ -203,6 +199,7 @@ static int __nvvar_add(const char *name, const char *value) { struct param_d *p; + int ret; if (!IS_ENABLED(CONFIG_NVVAR)) return -ENOSYS; @@ -215,6 +212,11 @@ return PTR_ERR(p); } + /* Create corresponding globalvar if it doesn't exist yet */ + ret = globalvar_add_simple(name, value); + if (ret && ret != -EEXIST) + return ret; + if (value) return nv_set(&nv_device, p, value); @@ -391,15 +393,6 @@ return dev_param_set_generic(dev, p, val); } -static void globalvar_nv_sync(const char *name) -{ - const char *val; - - val = dev_get_param(&nv_device, name); - if (val) - dev_set_param(&global_device, name, val); -} - /* * globalvar_add_simple * @@ -416,12 +409,10 @@ return PTR_ERR(param); } - if (value) - dev_set_param(&global_device, name, value); + if (!value) + return 0; - globalvar_nv_sync(name); - - return 0; + return dev_set_param(&global_device, name, value); } static int globalvar_remove_unqualified(const char *name) @@ -440,6 +431,15 @@ return 0; } +static void globalvar_nv_sync(const char *name) +{ + const char *val; + + val = dev_get_param(&nv_device, name); + if (val) + dev_set_param(&global_device, name, val); +} + int globalvar_add_simple_string(const char *name, char **value) { struct param_d *p;