diff options
author | Mark Adler <madler@alumni.caltech.edu> | 2017-02-04 23:58:37 -0800 |
---|---|---|
committer | Mark Adler <madler@alumni.caltech.edu> | 2017-02-15 22:39:26 -0800 |
commit | a3622937453f517285f851817a7505f54f4f19aa (patch) | |
tree | ba1286c2e4be51ed5dc3aac1f51c83fa781fc898 | |
parent | 38e8ce32afbaa82f67d992b9f3056f281fe69259 (diff) | |
download | zlib-a3622937453f517285f851817a7505f54f4f19aa.tar.gz zlib-a3622937453f517285f851817a7505f54f4f19aa.tar.bz2 zlib-a3622937453f517285f851817a7505f54f4f19aa.zip |
Avoid a conversion error in gzseek when off_t type too small.
This is a problem in the odd case that the second argument of
LSEEK is a larger type than off_t. Apparently MinGW defines off_t
to be 32 bits, but _lseeki64 has a 64-bit second argument.
Also undo a previous commit to permit MinGW to use _lseeki64.
-rw-r--r-- | gzlib.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | #include "gzguts.h" | 6 | #include "gzguts.h" |
7 | 7 | ||
8 | #if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__) | 8 | #if defined(_WIN32) && !defined(__BORLANDC__) |
9 | # define LSEEK _lseeki64 | 9 | # define LSEEK _lseeki64 |
10 | #else | 10 | #else |
11 | #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 | 11 | #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 |
@@ -397,7 +397,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) | |||
397 | /* if within raw area while reading, just go there */ | 397 | /* if within raw area while reading, just go there */ |
398 | if (state->mode == GZ_READ && state->how == COPY && | 398 | if (state->mode == GZ_READ && state->how == COPY && |
399 | state->x.pos + offset >= 0) { | 399 | state->x.pos + offset >= 0) { |
400 | ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); | 400 | ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR); |
401 | if (ret == -1) | 401 | if (ret == -1) |
402 | return -1; | 402 | return -1; |
403 | state->x.have = 0; | 403 | state->x.have = 0; |