diff --git a/gzguts.h b/gzguts.h index 0f8fb79f..63b0c3f4 100644 --- a/gzguts.h +++ b/gzguts.h @@ -98,7 +98,6 @@ typedef struct { unsigned have; /* amount of output data unused at next */ int eof; /* true if end of input file reached */ 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 direct; /* true if last read direct, false if gzip */ /* just for writing */ diff --git a/gzlib.c b/gzlib.c index c59bcda3..b26b0c2f 100644 --- a/gzlib.c +++ b/gzlib.c @@ -310,7 +310,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) /* if within raw area while reading, just go there */ 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); if (ret == -1) return -1; diff --git a/gzread.c b/gzread.c index 960bf126..a41e5d94 100644 --- a/gzread.c +++ b/gzread.c @@ -144,10 +144,9 @@ local int gz_look(state) return 0; } - /* doing raw i/o, save start of raw data for seeking, copy any leftover - input to output -- this assumes that the output buffer is larger than - the input buffer, which also assures space for gzungetc() */ - state->raw = state->pos; + /* doing raw i/o, copy any leftover input to output -- this assumes that + the output buffer is larger than the input buffer, which also assures + space for gzungetc() */ state->next = state->out; if (strm->avail_in) { memcpy(state->next, strm->next_in, strm->avail_in);