mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Barebox List <barebox@lists.infradead.org>
Cc: "Edmund Henniges" <eh@emlix.com>, "Daniel Glöckner" <dg@emlix.com>
Subject: [PATCH 17/20] globalvar: Add helper for deprecated variable names
Date: Mon, 25 May 2020 12:33:46 +0200	[thread overview]
Message-ID: <20200525103349.19449-18-s.hauer@pengutronix.de> (raw)
In-Reply-To: <20200525103349.19449-1-s.hauer@pengutronix.de>

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.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 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);
-- 
2.26.2


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

  parent reply	other threads:[~2020-05-25 10:34 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-25 10:33 [PATCH v2 00/20] Slices and fastboot over UDP Sascha Hauer
2020-05-25 10:33 ` [PATCH 01/20] poller: Give pollers a name Sascha Hauer
2020-05-25 10:33 ` [PATCH 02/20] poller: Add a poller command Sascha Hauer
2020-05-25 10:33 ` [PATCH 03/20] fastboot: split generic code from USB gadget Sascha Hauer
2020-05-25 10:33 ` [PATCH 04/20] fastboot: don't close fd 0 when downloading to ram Sascha Hauer
2020-05-25 10:33 ` [PATCH 05/20] fastboot: Use unique tempfile name Sascha Hauer
2020-05-25 10:33 ` [PATCH 06/20] Introduce slices Sascha Hauer
2020-05-25 10:33 ` [PATCH 07/20] Introduce idle slice Sascha Hauer
2020-05-25 10:33 ` [PATCH 08/20] net: Add a slice to struct eth_device Sascha Hauer
2020-05-25 10:33 ` [PATCH 09/20] net: mdiobus: Add slice Sascha Hauer
2020-05-25 10:33 ` [PATCH 10/20] usb: Add a slice to usb host controllers Sascha Hauer
2020-05-25 10:33 ` [PATCH 11/20] usbnet: Add slice Sascha Hauer
2020-05-25 10:33 ` [PATCH 12/20] net: Call net_poll() in a poller Sascha Hauer
2020-05-25 10:33 ` [PATCH 13/20] net: reply to ping requests Sascha Hauer
2020-05-25 10:33 ` [PATCH 14/20] usbnet: Be more friendly in the receive path Sascha Hauer
2020-05-25 10:33 ` [PATCH 15/20] poller: Allow to run pollers inside of pollers Sascha Hauer
2020-05-25 10:33 ` [PATCH 16/20] defconfigs: update renamed fastboot options Sascha Hauer
2020-05-25 10:33 ` Sascha Hauer [this message]
2020-05-25 17:27   ` [PATCH 17/20] globalvar: Add helper for deprecated variable names Ahmad Fatoum
2020-05-25 10:33 ` [PATCH 18/20] fastboot: rename usbgadget.fastboot_* variables to fastboot.* Sascha Hauer
2020-05-25 10:33 ` [PATCH 19/20] fastboot net: implement fastboot over UDP Sascha Hauer
2020-05-25 10:33 ` [PATCH 20/20] fastboot net: remove may_send Sascha Hauer
2020-05-25 19:45   ` Daniel Glöckner
2020-05-26  6:02     ` Sascha Hauer
2020-06-15 16:36       ` Daniel Glöckner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200525103349.19449-18-s.hauer@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=dg@emlix.com \
    --cc=eh@emlix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox