On Thu, Apr 11, 2024 at 03:26:53AM +0200, Christoph Anton Mitterer wrote: > > With all the recently merged patches... any chance that we get this > issue(s) here fixed? > Or at least those, where it's clear what should happen? Thanks for the reminder. This patch should fix the problem. ---8<--- Local variables and other variables with the flag VSTRFIXED set could not be unexported using the unset command. Fix this by adding a special case in setvareq for them. Reported-by: Christoph Anton Mitterer <calestyo@xxxxxxxxxxxx> Fixes: e3c9a7dd7097 ("[VAR] Move unsetvar functionality into setvareq") Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> diff --git a/src/var.c b/src/var.c index 21e0abf..6f85be3 100644 --- a/src/var.c +++ b/src/var.c @@ -255,6 +255,8 @@ struct var *setvareq(char *s, int flags) vpp = findvar(s); vp = *vpp; if (vp) { + unsigned bits; + if (vp->flags & VREADONLY) { const char *n; @@ -274,8 +276,11 @@ struct var *setvareq(char *s, int flags) if ((vp->flags & (VTEXTFIXED|VSTACK)) == 0) ckfree(vp->text); - if (((flags & (VEXPORT|VREADONLY|VSTRFIXED|VUNSET)) | - (vp->flags & VSTRFIXED)) == VUNSET) { + if ((flags & (VEXPORT|VREADONLY|VSTRFIXED|VUNSET)) != VUNSET) + bits = ~(VTEXTFIXED|VSTACK|VNOSAVE|VUNSET); + else if ((vp->flags & VSTRFIXED)) + bits = VSTRFIXED; + else { *vpp = vp->next; ckfree(vp); out_free: @@ -284,7 +289,7 @@ out_free: goto out; } - flags |= vp->flags & ~(VTEXTFIXED|VSTACK|VNOSAVE|VUNSET); + flags |= vp->flags & bits; } else { if (flags & VNOSET) goto out; -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt