diff options
author | Mark Adler <madler@alumni.caltech.edu> | 2011-10-12 23:24:31 -0700 |
---|---|---|
committer | Mark Adler <madler@alumni.caltech.edu> | 2011-12-11 18:22:04 -0800 |
commit | 98f5779f4257682ba9b5fc490557618e3f15f84b (patch) | |
tree | 09082da8f556b04ba8aa299cf55eb979a3dfa063 /gzlib.c | |
parent | 70e3b1ca56f2ffe8944d3ac0d59b8781127bf94f (diff) | |
download | zlib-98f5779f4257682ba9b5fc490557618e3f15f84b.tar.gz |
Fix gzeof() to behave just like feof() when read is not past end of file.
Before, gzeof() would return true (accurately) when the last read request
went just up to the end of the uncompressed data. In the analogous case,
feof() would return false, only returning true when a read request goes
past the end of the file. This patch corrects gzeof() to behave in the
same way as feof(), as noted in the zlib.h documentation.
Diffstat (limited to 'gzlib.c')
-rw-r--r-- | gzlib.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -78,6 +78,7 @@ local void gz_reset(state) state->x.have = 0; /* no output data available */ if (state->mode == GZ_READ) { /* for reading ... */ state->eof = 0; /* not at end of file */ + state->past = 0; /* have not read past end yet */ state->how = LOOK; /* look for gzip header */ } state->seek = 0; /* no seek request pending */ @@ -331,6 +332,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) return -1; state->x.have = 0; state->eof = 0; + state->past = 0; state->seek = 0; gz_error(state, Z_OK, NULL); state->strm.avail_in = 0; @@ -453,8 +455,7 @@ int ZEXPORT gzeof(file) return 0; /* return end-of-file state */ - return state->mode == GZ_READ ? - (state->eof && state->strm.avail_in == 0 && state->x.have == 0) : 0; + return state->mode == GZ_READ ? state->past : 0; } /* -- see zlib.h -- */ @@ -491,8 +492,10 @@ void ZEXPORT gzclearerr(file) return; /* clear error and end-of-file */ - if (state->mode == GZ_READ) + if (state->mode == GZ_READ) { state->eof = 0; + state->past = 0; + } gz_error(state, Z_OK, NULL); } |