diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2011-10-02 20:21:29 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2011-10-02 20:21:29 +0200 |
commit | 953f97ddd184f3dfb1ce16ee2965012965b17fac (patch) | |
tree | 96c79805953c5e58856a323f0d5426caf9e16510 /io.c | |
parent | 8dbfb49319c538b0682d4dbcc977ba5b811b86b0 (diff) | |
download | egawk-953f97ddd184f3dfb1ce16ee2965012965b17fac.tar.gz egawk-953f97ddd184f3dfb1ce16ee2965012965b17fac.tar.bz2 egawk-953f97ddd184f3dfb1ce16ee2965012965b17fac.zip |
Fix RT handling if partial terminators.
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -2870,8 +2870,12 @@ scan_data: while (*bp++ != '\n') continue; - if (bp >= iop->dataend) { /* no terminator */ + if (bp >= iop->dataend) { /* no full terminator */ iop->scanoff = recm->len = bp - iop->off - 1; + if (bp == iop->dataend) { /* half a terminator */ + recm->rt_start = bp - 1; + recm->rt_len = 1; + } *state = INDATA; return NOTERM; } @@ -3042,9 +3046,10 @@ get_a_record(char **out, /* pointer to pointer to data */ /* else leave it alone */ } else if (matchrec == rsnullscan) { - if (rtval->stlen <= recm.rt_len) + if (rtval->stlen >= recm.rt_len) { rtval->stlen = recm.rt_len; - else + free_wstr(rtval); + } else set_RT(recm.rt_start, recm.rt_len); } else set_RT(recm.rt_start, recm.rt_len); |