Fix gzclose() to return the actual error last encountered.

This commit is contained in:
Mark Adler 2011-09-30 22:19:12 -07:00
parent acfc85772a
commit 8768ba98af
2 changed files with 9 additions and 6 deletions

View File

@ -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;
}

2
zlib.h
View File

@ -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));