From 824575c76230ffffce9905bb8ec70486c6a16905 Mon Sep 17 00:00:00 2001 From: Maxim Smirnov Date: Sun, 26 Oct 2025 21:38:45 +0300 Subject: [PATCH] Fix sh var unset --- toys/pending/sh.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toys/pending/sh.c b/toys/pending/sh.c index bebe7bd5..664f9cf4 100644 --- a/toys/pending/sh.c +++ b/toys/pending/sh.c @@ -1043,7 +1043,7 @@ static struct sh_vars *setvar_long(char *s, int freeable, struct sh_fcall *ff) // Add if necessary, set value, and remove again if we added but set failed if (!(was = vv = findvar(s, &ff))) (vv = addvar(s, ff))->flags = VAR_NOFREE; if (!setvar_found(s, freeable, vv)) { - if (!was) memmove(vv, vv+1, sizeof(ff->vars)*(--ff->varslen-(vv-ff->vars))); + if (!was) memmove(vv, vv+1, sizeof(struct sh_vars)*(ff->varslen-- -(vv-ff->vars))); return 0; } @@ -1078,7 +1078,7 @@ static int unsetvar(char *name) // free from global context } else { if (!(var->flags&VAR_NOFREE)) free(var->str); - memmove(var, var+1, sizeof(ff->vars)*(ff->varslen-- -(var-ff->vars))); + memmove(var, var+1, sizeof(struct sh_vars)*(ff->varslen-- -(var-ff->vars))); } if (!strcmp(name, "IFS")) do ff->ifs = " \t\n"; while ((ff = ff->next) != TT.ff->prev); -- 2.39.5