From 32304af5404c70307c6854d17d5b9a9d6e1cccfa Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 29 Mar 2015 14:30:53 +0200 Subject: [PATCH] Create zlib_inflate_init --- libretro-common/file/file_extract.c | 24 ++++++++++++++------- libretro-common/formats/png/rpng_decode.c | 6 +++--- libretro-common/include/file/file_extract.h | 2 ++ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/libretro-common/file/file_extract.c b/libretro-common/file/file_extract.c index 3023f2a878..3e408c4c02 100644 --- a/libretro-common/file/file_extract.c +++ b/libretro-common/file/file_extract.c @@ -292,20 +292,25 @@ static uint32_t read_le(const uint8_t *data, unsigned size) void *zlib_stream_new(void) { - z_stream *ret = (z_stream*)calloc(1, sizeof(z_stream)); + return (z_stream*)calloc(1, sizeof(z_stream)); +} - if (inflateInit2(ret, -MAX_WBITS) != Z_OK) - return NULL; - return ret; +bool zlib_inflate_init(void *data) +{ + z_stream *stream = (z_stream*)data; + + if (!stream) + return false; + if (inflateInit2(stream, -MAX_WBITS) != Z_OK) + return false; + return true; } void zlib_stream_free(void *data) { z_stream *ret = (z_stream*)data; - if (!ret) - return; - - inflateEnd(ret); + if (ret) + inflateEnd(ret); } bool zlib_inflate_data_to_file_init( @@ -319,6 +324,9 @@ bool zlib_inflate_data_to_file_init( if (!(handle->stream = (z_stream*)zlib_stream_new())) goto error; + + if (!(zlib_inflate_init(handle->stream))) + goto error; handle->data = (uint8_t*)malloc(size); diff --git a/libretro-common/formats/png/rpng_decode.c b/libretro-common/formats/png/rpng_decode.c index a34180d03f..d3683e225a 100644 --- a/libretro-common/formats/png/rpng_decode.c +++ b/libretro-common/formats/png/rpng_decode.c @@ -643,14 +643,14 @@ bool rpng_load_image_argb_process_init(struct rpng_t *rpng, rpng->process.inflate_buf_size = 0; rpng->process.inflate_buf = NULL; - if (inflateInit(&rpng->process.stream) != Z_OK) - return false; - png_pass_geom(&rpng->ihdr, rpng->ihdr.width, rpng->ihdr.height, NULL, NULL, &rpng->process.inflate_buf_size); if (rpng->ihdr.interlace == 1) /* To be sure. */ rpng->process.inflate_buf_size *= 2; + if (inflateInit(&rpng->process.stream) != Z_OK) + return false; + rpng->process.inflate_buf = (uint8_t*)malloc(rpng->process.inflate_buf_size); if (!rpng->process.inflate_buf) return false; diff --git a/libretro-common/include/file/file_extract.h b/libretro-common/include/file/file_extract.h index a3e9bc006f..75ddf427fd 100644 --- a/libretro-common/include/file/file_extract.h +++ b/libretro-common/include/file/file_extract.h @@ -117,5 +117,7 @@ void *zlib_stream_new(void); void zlib_stream_free(void *data); +bool zlib_inflate_init(void *data); + #endif