Simplify gzseek() now that raw after gzip is ignored.

This commit is contained in:
Mark Adler 2011-09-26 18:34:07 -07:00
parent 50e440f081
commit 8e0d212910
3 changed files with 4 additions and 6 deletions

View File

@ -98,7 +98,6 @@ typedef struct {
unsigned have; /* amount of output data unused at next */ unsigned have; /* amount of output data unused at next */
int eof; /* true if end of input file reached */ int eof; /* true if end of input file reached */
z_off64_t start; /* where the gzip data started, for rewinding */ z_off64_t start; /* where the gzip data started, for rewinding */
z_off64_t raw; /* where the raw data started, for seeking */
int how; /* 0: get header, 1: copy, 2: decompress */ int how; /* 0: get header, 1: copy, 2: decompress */
int direct; /* true if last read direct, false if gzip */ int direct; /* true if last read direct, false if gzip */
/* just for writing */ /* just for writing */

View File

@ -310,7 +310,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
/* if within raw area while reading, just go there */ /* if within raw area while reading, just go there */
if (state->mode == GZ_READ && state->how == COPY && if (state->mode == GZ_READ && state->how == COPY &&
state->pos + offset >= state->raw) { state->pos + offset >= 0) {
ret = LSEEK(state->fd, offset - state->have, SEEK_CUR); ret = LSEEK(state->fd, offset - state->have, SEEK_CUR);
if (ret == -1) if (ret == -1)
return -1; return -1;

View File

@ -144,10 +144,9 @@ local int gz_look(state)
return 0; return 0;
} }
/* doing raw i/o, save start of raw data for seeking, copy any leftover /* doing raw i/o, copy any leftover input to output -- this assumes that
input to output -- this assumes that the output buffer is larger than the output buffer is larger than the input buffer, which also assures
the input buffer, which also assures space for gzungetc() */ space for gzungetc() */
state->raw = state->pos;
state->next = state->out; state->next = state->out;
if (strm->avail_in) { if (strm->avail_in) {
memcpy(state->next, strm->next_in, strm->avail_in); memcpy(state->next, strm->next_in, strm->avail_in);