aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2014-04-24 19:45:36 -0400
committerMark Adler <madler@alumni.caltech.edu>2014-04-24 19:45:36 -0400
commit72c70060d8312cff06754779188d8adeb974f18c (patch)
tree09f276cf9d3c3c33ce91fec1807c29b3891010ec
parent799c87c0d8fc5af306f8c7a160dfd3d75746c2ce (diff)
downloadzlib-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 '')
-rw-r--r--gzlib.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gzlib.c b/gzlib.c
index fae202e..ced2cb8 100644
--- a/gzlib.c
+++ b/gzlib.c
@@ -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) {