From 930ef109928969fa17b8ccf2a05aa4aeff10f3e3 Mon Sep 17 00:00:00 2001
From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
Date: Mon, 3 Apr 2023 15:50:00 +0200
Subject: [PATCH] common: cli_hush: Restore clear local variable support
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

The u-boot hush shell doesn’t support the unset command to clear a
variable and therefore an empty value ("c=") should be a valid value
for the set_local_var function to clear the variable. This partial
reverts commit aa722529635c ("common: cli_hush: avoid dead code") and
only checks for a `=` in the string. Additionally explicit call the
unset_local_var function to remove the variable if the value is empty.

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 common/cli_hush.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/common/cli_hush.c b/common/cli_hush.c
index 1ad7a509df..171069f5f4 100644
--- a/common/cli_hush.c
+++ b/common/cli_hush.c
@@ -2171,12 +2171,18 @@ int set_local_var(const char *s, int flg_export)
 	 * NAME=VALUE format.  So the first order of business is to
 	 * split 's' on the '=' into 'name' and 'value' */
 	value = strchr(name, '=');
-	if (value == NULL || *(value + 1) == 0) {
+	if (!value) {
 		free(name);
 		return -1;
 	}
 	*value++ = 0;
 
+	if (!*value) {
+		unset_local_var(name);
+		free(name);
+		return 0;
+	}
+
 	for(cur = top_vars; cur; cur = cur->next) {
 		if(strcmp(cur->name, name)==0)
 			break;
-- 
2.39.5