diff options
author | Ori Bernstein <ori@eigenstate.org> | 2019-10-09 17:36:02 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2019-10-09 17:36:02 -0700 |
commit | e3a43c4f2b3751da67d24e40a77d8bcac3957520 (patch) | |
tree | c64b26c0054ac53c45aa996d23b61ad40c1719af /sys/src/cmd/awk/lib.c | |
parent | db911d4fef8d2bcfc6c314fcd3c06f35f5b4249c (diff) |
awk: make empty FS unicodely-correct.
Diffstat (limited to 'sys/src/cmd/awk/lib.c')
-rw-r--r-- | sys/src/cmd/awk/lib.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/src/cmd/awk/lib.c b/sys/src/cmd/awk/lib.c index 6ea282bae..2c5a60465 100644 --- a/sys/src/cmd/awk/lib.c +++ b/sys/src/cmd/awk/lib.c @@ -249,7 +249,7 @@ void fldbld(void) /* create fields from current record */ /* the fields are all stored in this one array with \0's */ char *r, *fr, sep; Cell *p; - int i, j, n; + int i, j, n, w; if (donefld) return; @@ -287,15 +287,18 @@ void fldbld(void) /* create fields from current record */ } *fr = 0; } else if ((sep = *inputFS) == 0) { /* new: FS="" => 1 char/field */ - for (i = 0; *r != 0; r++) { - char buf[2]; + for (i = 0; *r != 0; r += w) { + char buf[UTFmax + 1]; + Rune chr; + i++; if (i > nfields) growfldtab(i); if (freeable(fldtab[i])) xfree(fldtab[i]->sval); - buf[0] = *r; - buf[1] = 0; + w = chartorune(&chr, r); + n = runetochar(buf, &chr); + buf[n] = 0; fldtab[i]->sval = tostring(buf); fldtab[i]->tval = FLD | STR; } |