[PATCH] common: cli_hush: Restore clear local variable support

From: Stefan Herbrechtsmeier stefan.herbrechtsmeier@weidmueller.com
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
---
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..c3f7dd12a0 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 == NULL) { free(name); return -1; } *value++ = 0;
+ if (*value == 0) { + unset_local_var(name); + free(name); + return 0; + } + for(cur = top_vars; cur; cur = cur->next) { if(strcmp(cur->name, name)==0) break; -- 2.30.2
________________________________ Kommanditgesellschaft - Sitz: Detmold - Amtsgericht Lemgo HRA 2790 - Komplementärin: Weidmüller Interface Führungsgesellschaft mbH - Sitz: Detmold - Amtsgericht Lemgo HRB 3924; Geschäftsführer: Dr. Timo Berger, Volker Bibelhausen, Dr. Sebastian Durst, André Sombecki; USt-ID-Nr. DE124599660

Hi Stefan,
On Sat, 1 Apr 2023 at 03:43, Stefan Herbrechtsmeier stefan.herbrechtsmeier-oss@weidmueller.com wrote:
From: Stefan Herbrechtsmeier stefan.herbrechtsmeier@weidmueller.com
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
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..c3f7dd12a0 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 == NULL) {
if (!value)
free(name); return -1; } *value++ = 0;
if (*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.30.2
I think this should have a test, e.g. in test/py/tests/test_hush_if_test.py or perhaps a C test?
Regards, Simon

Hi Simon,
Am 01.04.2023 um 08:31 schrieb Simon Glass:
Hi Stefan,
On Sat, 1 Apr 2023 at 03:43, Stefan Herbrechtsmeier stefan.herbrechtsmeier-oss@weidmueller.com wrote:
From: Stefan Herbrechtsmeier stefan.herbrechtsmeier@weidmueller.com
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
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..c3f7dd12a0 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 == NULL) {
if (!value)
I reuse the existing style of the file. Should I always use the kernel / u-boot style for changes?
free(name); return -1; } *value++ = 0;
if (*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.30.2
I think this should have a test, e.g. in test/py/tests/test_hush_if_test.py or perhaps a C test?
I will extend the python test.
Regards Stefan
________________________________ Kommanditgesellschaft - Sitz: Detmold - Amtsgericht Lemgo HRA 2790 - Komplementärin: Weidmüller Interface Führungsgesellschaft mbH - Sitz: Detmold - Amtsgericht Lemgo HRB 3924; Geschäftsführer: Dr. Timo Berger, Volker Bibelhausen, Dr. Sebastian Durst, André Sombecki; USt-ID-Nr. DE124599660
participants (2)
-
Simon Glass
-
Stefan Herbrechtsmeier