aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2011-10-02 20:21:29 +0200
committerArnold D. Robbins <arnold@skeeve.com>2011-10-02 20:21:29 +0200
commit953f97ddd184f3dfb1ce16ee2965012965b17fac (patch)
tree96c79805953c5e58856a323f0d5426caf9e16510 /io.c
parent8dbfb49319c538b0682d4dbcc977ba5b811b86b0 (diff)
downloadegawk-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.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/io.c b/io.c
index bece1a56..df79499c 100644
--- a/io.c
+++ b/io.c
@@ -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);