Simplify gzseek() now that raw after gzip is ignored.
This commit is contained in:
parent
50e440f081
commit
8e0d212910
1
gzguts.h
1
gzguts.h
@ -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 */
|
||||||
|
2
gzlib.c
2
gzlib.c
@ -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;
|
||||||
|
7
gzread.c
7
gzread.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user