diff --git a/common/globalvar.c b/common/globalvar.c index 971c219..778d8e6 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -165,14 +165,18 @@ static int nv_set(struct device_d *dev, struct param_d *p, const char *val) { + struct param_d *g; int ret; if (!val) val = ""; - ret = dev_set_param(&global_device, p->name, val); - if (ret) - return ret; + g = get_param_by_name(&global_device, p->name); + if (g) { + ret = dev_set_param(&global_device, p->name, val); + if (ret) + return ret; + } free(p->value); p->value = xstrdup(val); @@ -199,7 +203,6 @@ static int __nvvar_add(const char *name, const char *value) { struct param_d *p; - int ret; if (!IS_ENABLED(CONFIG_NVVAR)) return -ENOSYS; @@ -212,11 +215,6 @@ 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) value = dev_get_param(&global_device, name); @@ -387,6 +385,15 @@ 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 * @@ -403,10 +410,12 @@ return PTR_ERR(param); } - if (!value) - return 0; + if (value) + dev_set_param(&global_device, name, value); - return dev_set_param(&global_device, name, value); + globalvar_nv_sync(name); + + return 0; } static int globalvar_remove_unqualified(const char *name) @@ -425,15 +434,6 @@ 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;