Re: [PATCH 17/20] globalvar: Add helper for deprecated variable names

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5/25/20 12:33 PM, Sascha Hauer wrote:
> When globalvars are renamed across releases it's not nice when variables
> in the persistent environment loose their meaning. This adds a helper
> function which adds an alias for the old names. When the persistent
> variables still use the old names then their values are automatically
> written to variables with the new names.
This still breaks scripts in env that reference an alias_deprecated
variable, but I guess that's an ok trade-off as the user gets a warning
on boot, even if the script doesn't run.

Reviewed-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx>

> Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
> ---
>  common/globalvar.c  | 41 +++++++++++++++++++++++++++++++++++++++--
>  include/globalvar.h |  5 +++++
>  2 files changed, 44 insertions(+), 2 deletions(-)
> 
> diff --git a/common/globalvar.c b/common/globalvar.c
> index c87f2c9339..5e91cc815f 100644
> --- a/common/globalvar.c
> +++ b/common/globalvar.c
> @@ -293,6 +293,40 @@ int nvvar_remove(const char *name)
>  	return ret;
>  }
>  
> +struct globalvar_deprecated {
> +	char *newname;
> +	char *oldname;
> +	struct list_head list;
> +};
> +
> +static LIST_HEAD(globalvar_deprecated_list);
> +
> +void globalvar_alias_deprecated(const char *oldname, const char *newname)
> +{
> +	struct globalvar_deprecated *gd;
> +
> +	gd = xzalloc(sizeof(*gd));
> +	gd->newname = xstrdup(newname);
> +	gd->oldname = xstrdup(oldname);
> +	list_add_tail(&gd->list, &globalvar_deprecated_list);
> +}
> +
> +static const char *globalvar_new_name(const char *oldname)
> +{
> +	struct globalvar_deprecated *gd;
> +
> +	list_for_each_entry(gd, &globalvar_deprecated_list, list) {
> +		if (!strcmp(oldname, gd->oldname)) {
> +			pr_warn("nv.%s is deprecated, converting to nv.%s\n", oldname,
> +				gd->newname);
> +			nv_dirty = 1;
> +			return gd->newname;
> +		}
> +	}
> +
> +	return oldname;
> +}
> +
>  int nvvar_load(void)
>  {
>  	char *val;
> @@ -308,6 +342,8 @@ int nvvar_load(void)
>  		return -ENOENT;
>  
>  	while ((d = readdir(dir))) {
> +		const char *n;
> +
>  		if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
>  			continue;
>  
> @@ -316,10 +352,11 @@ int nvvar_load(void)
>  		pr_debug("%s: Setting \"%s\" to \"%s\"\n",
>  				__func__, d->d_name, val);
>  
> -		ret = __nvvar_add(d->d_name, val);
> +		n = globalvar_new_name(d->d_name);
> +		ret = __nvvar_add(n, val);
>  		if (ret)
>  			pr_err("failed to create nv variable %s: %s\n",
> -					d->d_name, strerror(-ret));
> +					n, strerror(-ret));
>  	}
>  
>  	closedir(dir);
> diff --git a/include/globalvar.h b/include/globalvar.h
> index fc85e93e14..db229e239c 100644
> --- a/include/globalvar.h
> +++ b/include/globalvar.h
> @@ -33,6 +33,7 @@ int nvvar_remove(const char *name);
>  void globalvar_print(void);
>  
>  void dev_param_init_from_nv(struct device_d *dev, const char *name);
> +void globalvar_alias_deprecated(const char *newname, const char *oldname);
>  
>  #else
>  static inline int globalvar_add_simple(const char *name, const char *value)
> @@ -114,6 +115,10 @@ static inline void dev_param_init_from_nv(struct device_d *dev, const char *name
>  {
>  }
>  
> +static inline void globalvar_alias_deprecated(const char *newname, const char *oldname)
> +{
> +}
> +
>  #endif
>  
>  void nv_var_set_clean(void);
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux