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 | |
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.
-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) { |