diff options
author | Mark Adler <madler@alumni.caltech.edu> | 2014-04-24 19:45:36 -0400 |
---|---|---|
committer | Mark Adler <madler@alumni.caltech.edu> | 2014-04-24 19:45:36 -0400 |
commit | 72c70060d8312cff06754779188d8adeb974f18c (patch) | |
tree | 09f276cf9d3c3c33ce91fec1807c29b3891010ec /gzlib.c | |
parent | 799c87c0d8fc5af306f8c7a160dfd3d75746c2ce (diff) | |
download | zlib-72c70060d8312cff06754779188d8adeb974f18c.tar.gz zlib-72c70060d8312cff06754779188d8adeb974f18c.tar.bz2 zlib-72c70060d8312cff06754779188d8adeb974f18c.zip |
Assure that gzoffset() is correct when appending.
An open() with O_APPEND followed by an lseek() to determine the
position will return zero for a non-empty file, even though the
next write will start at the end of the file. This commit works
around that by doing an lseek() to the end when appending.
Diffstat (limited to 'gzlib.c')
-rw-r--r-- | gzlib.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -248,8 +248,10 @@ local gzFile gz_open(path, fd, mode) | |||
248 | free(state); | 248 | free(state); |
249 | return NULL; | 249 | return NULL; |
250 | } | 250 | } |
251 | if (state->mode == GZ_APPEND) | 251 | if (state->mode == GZ_APPEND) { |
252 | LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */ | ||
252 | state->mode = GZ_WRITE; /* simplify later checks */ | 253 | state->mode = GZ_WRITE; /* simplify later checks */ |
254 | } | ||
253 | 255 | ||
254 | /* save the current position for rewinding (only if reading) */ | 256 | /* save the current position for rewinding (only if reading) */ |
255 | if (state->mode == GZ_READ) { | 257 | if (state->mode == GZ_READ) { |