From 8768ba98af1cf44e9a24fa7dbdf013de4afecf62 Mon Sep 17 00:00:00 2001 From: Mark Adler Date: Fri, 30 Sep 2011 22:19:12 -0700 Subject: [PATCH] Fix gzclose() to return the actual error last encountered. --- gzwrite.c | 13 ++++++++----- zlib.h | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/gzwrite.c b/gzwrite.c index d08f309..8eeca4e 100644 --- a/gzwrite.c +++ b/gzwrite.c @@ -504,7 +504,7 @@ int ZEXPORT gzsetparams(file, level, strategy) int ZEXPORT gzclose_w(file) gzFile file; { - int ret = 0; + int ret = Z_OK; gz_statep state; /* get internal structure */ @@ -519,17 +519,20 @@ int ZEXPORT gzclose_w(file) /* check for seek request */ if (state->seek) { state->seek = 0; - ret += gz_zero(state, state->skip); + if (gz_zero(state, state->skip) == -1) + ret = state->err; } /* flush, free memory, and close file */ - ret += gz_comp(state, Z_FINISH); + if (gz_comp(state, Z_FINISH) == -1) + ret = state->err; (void)deflateEnd(&(state->strm)); free(state->out); free(state->in); gz_error(state, Z_OK, NULL); free(state->path); - ret += close(state->fd); + if (close(state->fd) == -1) + ret = Z_ERRNO; free(state); - return ret ? Z_ERRNO : Z_OK; + return ret; } diff --git a/zlib.h b/zlib.h index d358a62..16b20ce 100644 --- a/zlib.h +++ b/zlib.h @@ -1446,7 +1446,7 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); must not be called more than once on the same allocation. gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a - file operation error, or Z_OK on success. + file operation error, Z_MEM_ERROR if out of memory, or Z_OK on success. */ ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));