diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2014-09-17 12:53:17 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2014-09-17 20:37:48 -0700 |
commit | f6de00f6cec3831b8f334de7dbd1b59115627457 (patch) | |
tree | 55cc1c94acb4b4a17d7b91782ef1795b322204c0 | |
parent | 1b76ead152e0a14b3c4b8469d74f44dad60617ae (diff) | |
download | grep-f6de00f6cec3831b8f334de7dbd1b59115627457.tar.gz |
grep: speed up processing of holes before EOF on Solaris
* src/grep.c (fillbuf): If SEEK_DATA fails with errno == ENXIO,
skip over the hole at EOF.
-rw-r--r-- | src/grep.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -720,7 +720,12 @@ fillbuf (size_t save, struct stat const *st) if (SEEK_DATA != SEEK_SET && !seek_data_failed) { + /* Solaris SEEK_DATA fails with errno == ENXIO in a hole at EOF. */ off_t data_start = lseek (bufdesc, bufoffset, SEEK_DATA); + if (data_start < 0 && errno == ENXIO + && usable_st_size (st) && bufoffset < st->st_size) + data_start = lseek (bufdesc, 0, SEEK_END); + if (data_start < 0) seek_data_failed = true; else |