Message ID | 20230403135001.14573-1-stefan.herbrechtsmeier-oss@weidmueller.com |
---|---|
State | Accepted |
Delegated to: | Tom Rini |
Headers | show |
Series | [v2,1/2] common: cli_hush: Restore clear local variable support | expand |
On Tue, 4 Apr 2023 at 01:50, 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> > > --- > > Changes in v2: > - Use `!var` instead of `var == NULL` > > common/cli_hush.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) Reviewed-by: Simon Glass <sjg@chromium.org>
On Mon, Apr 03, 2023 at 03:50:00PM +0200, Stefan Herbrechtsmeier 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> > Reviewed-by: Simon Glass <sjg@chromium.org> Applied to u-boot/master, thanks!
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;