aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorozan yigit <ozan.yigit@gmail.com>2021-07-24 15:10:25 -0400
committerozan yigit <ozan.yigit@gmail.com>2021-07-24 15:10:25 -0400
commit39133291204ab182e6fd24baacab0bb3a3f86606 (patch)
treed3ddae72e80e5e5692c36b096d722c723c976345
parent30fb6ef0da1f33473637a711381b58961331dc5f (diff)
parent92f9e8a9be1e6ded911f66c5cb81f28093c5450e (diff)
downloadone-true-awk-39133291204ab182e6fd24baacab0bb3a3f86606.tar.gz
Merge branch 'fix-readrec' of https://github.com/mpinjr/awk into staging
-rw-r--r--lib.c3
-rwxr-xr-xtestdir/T.misc7
2 files changed, 9 insertions, 1 deletions
diff --git a/lib.c b/lib.c
index 82b804b..8c8f477 100644
--- a/lib.c
+++ b/lib.c
@@ -242,6 +242,7 @@ int readrec(char **pbuf, int *pbufsize, FILE *inf, bool newflag) /* read one rec
}
if (found)
setptr(patbeg, '\0');
+ isrec = (found == 0 && *buf == '\0') ? 0 : 1;
} else {
if ((sep = *rs) == 0) {
sep = '\n';
@@ -271,10 +272,10 @@ int readrec(char **pbuf, int *pbufsize, FILE *inf, bool newflag) /* read one rec
if (!adjbuf(&buf, &bufsize, 1+rr-buf, recsize, &rr, "readrec 3"))
FATAL("input record `%.30s...' too long", buf);
*rr = 0;
+ isrec = (c == EOF && rr == buf) ? 0 : 1;
}
*pbuf = buf;
*pbufsize = bufsize;
- isrec = *buf || !feof(inf);
DPRINTF("readrec saw <%s>, returns %d\n", buf, isrec);
return isrec;
}
diff --git a/testdir/T.misc b/testdir/T.misc
index 77e6dd1..ad34ab8 100755
--- a/testdir/T.misc
+++ b/testdir/T.misc
@@ -186,6 +186,13 @@ BEGIN { RS = ""
}' >foo1
$awk 'END {print NR}' foo1 | grep 4 >/dev/null || echo 'BAD: T.misc abcdef fails'
+# Test for RS regex matching an empty record at EOF
+echo a | $awk 1 RS='a\n' > foo1
+cat << \EOF > foo2
+
+EOF
+diff foo1 foo2 || echo 'BAD: T.misc RS regex matching an empty record at EOF fails'
+
# Test for RS regex being reapplied
echo aaa1a2a | $awk 1 RS='^a' >foo1
cat << \EOF > foo2