ref: f94873ffbdff4f0abfede0e36e43bfdbc97695d3
parent: a20312fedddfd8a6338a98b17a85e41ea3d3843a
author: qwx <qwx@sciops.net>
date: Sat Nov 8 18:21:59 EST 2025
awk: treat all empty strings equally (thanks cinap_lenrek)
--- a/sys/src/cmd/awk/run.c
+++ b/sys/src/cmd/awk/run.c
@@ -328,7 +328,7 @@
y = gettemp();
y->csub = CCOPY; /* prevents freeing until call is over */
y->nval = x->nval; /* BUG? */
- y->sval = x->sval != nil && x->sval != EMPTY ? tostring(x->sval) : EMPTY;
+ y->sval = x->sval != nil && *x->sval ? tostring(x->sval) : EMPTY;
y->fval = x->fval;
y->tval = x->tval & ~(CON|FLD|REC|DONTFREE); /* copy is not constant or field */
if (y->sval == EMPTY)
--- a/sys/src/cmd/awk/tran.c
+++ b/sys/src/cmd/awk/tran.c
@@ -229,7 +229,7 @@
p->sval = (char *) ENVtab;
p->tval = ARR;
} else {- p->sval = s != nil && s != EMPTY ? tostring(s) : EMPTY;
+ p->sval = s && *s ? tostring(s) : EMPTY;
p->tval = t;
if (p->sval == EMPTY)
p->tval |= DONTFREE;
@@ -342,7 +342,7 @@
donefld = 0; /* mark $1... invalid */
donerec = 1;
}
- t = s != nil && s != EMPTY ? tostring(s) : EMPTY; /* in case it's self-assign */
+ t = s && *s ? tostring(s) : EMPTY; /* in case it's self-assign */
vp->tval &= ~NUM;
vp->tval |= STR;
if (freeable(vp))
--
⑨