diff --git a/ed.c b/ed.c index 30edaae..992bed5 100644 --- a/ed.c +++ b/ed.c @@ -244,6 +244,7 @@ gettxt(int line) return addchar('\0', &text); repeat: + chksignals(); if (!csize || off < lasto || off - lasto >= csize) { block = off & ~(CACHESIZ-1); if (lseek(scratch, block, SEEK_SET) < 0 || @@ -257,7 +258,7 @@ repeat: ++off; addchar(*p, &text); } - if (csize && p == buf + csize) + if (csize == CACHESIZ && p == buf + csize) goto repeat; addchar('\n', &text); diff --git a/tests/0007-ed.sh b/tests/0007-ed.sh new file mode 100755 index 0000000..cbb2939 --- /dev/null +++ b/tests/0007-ed.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +set -e + +tmp=tmp.$$ + +trap 'rm -f $tmp' EXIT +trap 'rm -f $tmp; kill -KILL $$' HUP INT TERM + +printf 'something important' > $tmp +ed $tmp </dev/null | grep something | diff -w $tmp - +1p +EOF