diff options
author | Ori Bernstein <ori@eigenstate.org> | 2022-06-25 18:58:55 +0000 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2022-06-25 18:58:55 +0000 |
commit | 5579176f4a885bb83119bb49598c357ce8db2343 (patch) | |
tree | 4ca9d76459e9f64485467b6aa6b7aa51eb18427e /sys/src/cmd/awk | |
parent | 5ee86cf824c5591aa92118c0cd9d71b005e789d0 (diff) |
awk: initialize records fully in recinit()
when using records in BEGIN, we would read
from the field table before we read into it;
this ensures that the fields are an empty
string before we start touching their contents.
Diffstat (limited to 'sys/src/cmd/awk')
-rw-r--r-- | sys/src/cmd/awk/lib.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/src/cmd/awk/lib.c b/sys/src/cmd/awk/lib.c index 2c5a60465..5044d3123 100644 --- a/sys/src/cmd/awk/lib.c +++ b/sys/src/cmd/awk/lib.c @@ -54,11 +54,13 @@ static Cell dollar1 = { OCELL, CFLD, nil, "", 0.0, FLD|STR|DONTFREE }; void recinit(unsigned int n) { + assert(n > 0); record = (char *) malloc(n); fields = (char *) malloc(n); fldtab = (Cell **) malloc((nfields+1) * sizeof(Cell *)); if (record == nil || fields == nil || fldtab == nil) FATAL("out of space for $0 and fields"); + record[0] = '\0'; fldtab[0] = (Cell *) malloc(sizeof (Cell)); *fldtab[0] = dollar0; fldtab[0]->sval = record; @@ -108,7 +110,7 @@ int getrec(char **pbuf, int *pbufsize, int isrecord) /* get next input record */ firsttime = 0; initgetrec(); } - dprint( ("RS=<%s>, FS=<%s>, AARGC=%g, FILENAME=%s\n", + dprint( ("RS=<%s>, FS=<%s>, AARGC=%g, FILENAME=%s\n", *RS, *FS, *AARGC, *FILENAME) ); if (isrecord) { donefld = 0; |