diff options
| author | Ed Maste <emaste@FreeBSD.org> | 2017-02-19 17:23:27 +0000 |
|---|---|---|
| committer | Ed Maste <emaste@FreeBSD.org> | 2017-02-19 17:23:27 +0000 |
| commit | 5dff7be120bf34b61d43b37f3951cf223bc52485 (patch) | |
| tree | 53e7634f5344586eb76338ffa3150ca36d8e4a1a /usr.bin | |
| parent | c6d57d307353774889976a6f89f01a402146349d (diff) | |
Notes
Diffstat (limited to 'usr.bin')
| -rw-r--r-- | usr.bin/grep/file.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/usr.bin/grep/file.c b/usr.bin/grep/file.c index 81f227d80739..34831f199877 100644 --- a/usr.bin/grep/file.c +++ b/usr.bin/grep/file.c @@ -219,12 +219,18 @@ grep_fgetln(struct file *f, size_t *lenp) if (bufrem == 0) /* EOF: return partial line */ break; - if ((p = memchr(bufpos, '\n', bufrem)) == NULL) + if ((p = memchr(bufpos, '\n', bufrem)) == NULL && + filebehave != FILE_MMAP) continue; - /* got it: finish up the line (like code above) */ - ++p; - diff = p - bufpos; - len += diff; + if (p == NULL) { + /* mmap EOF: return partial line, consume buffer */ + diff = len; + } else { + /* got it: finish up the line (like code above) */ + ++p; + diff = p - bufpos; + len += diff; + } if (grep_lnbufgrow(len)) goto error; memcpy(lnbuf + off, bufpos, diff); |
