diff --git a/common/globalvar.c b/common/globalvar.c index 32ca6a2..1b3082a 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -410,7 +410,7 @@ struct param_d *param; param = dev_add_param(&global_device, name, globalvar_simple_set, NULL, - 0); + PARAM_GLOBALVAR_UNQUALIFIED); if (IS_ERR(param)) { if (PTR_ERR(param) != -EEXIST) return PTR_ERR(param); @@ -424,9 +424,30 @@ return 0; } +static int globalvar_remove_unqualified(const char *name) +{ + struct param_d *p; + + p = get_param_by_name(&global_device, name); + if (!p) + return 0; + + if (!(p->flags & PARAM_GLOBALVAR_UNQUALIFIED)) + return -EEXIST; + + dev_remove_param(p); + + return 0; +} + int globalvar_add_simple_string(const char *name, char **value) { struct param_d *p; + int ret; + + ret = globalvar_remove_unqualified(name); + if (ret) + return ret; p = dev_add_param_string(&global_device, name, NULL, NULL, value, NULL); @@ -443,6 +464,11 @@ const char *format) { struct param_d *p; + int ret; + + ret = globalvar_remove_unqualified(name); + if (ret) + return ret; p = dev_add_param_int(&global_device, name, NULL, NULL, value, format, NULL); @@ -458,6 +484,11 @@ int globalvar_add_simple_bool(const char *name, int *value) { struct param_d *p; + int ret; + + ret = globalvar_remove_unqualified(name); + if (ret) + return ret; p = dev_add_param_bool(&global_device, name, NULL, NULL, value, NULL); @@ -474,6 +505,11 @@ const char * const *names, int max) { struct param_d *p; + int ret; + + ret = globalvar_remove_unqualified(name); + if (ret) + return ret; p = dev_add_param_enum(&global_device, name, NULL, NULL, value, names, max, NULL); @@ -503,6 +539,11 @@ int globalvar_add_simple_ip(const char *name, IPaddr_t *ip) { struct param_d *p; + int ret; + + ret = globalvar_remove_unqualified(name); + if (ret) + return ret; p = dev_add_param_ip(&global_device, name, NULL, NULL, ip, NULL); diff --git a/include/param.h b/include/param.h index 5eed97e..91f8aa3 100644 --- a/include/param.h +++ b/include/param.h @@ -6,6 +6,7 @@ #include #define PARAM_FLAG_RO (1 << 0) +#define PARAM_GLOBALVAR_UNQUALIFIED (1 << 1) struct device_d; typedef uint32_t IPaddr_t;