From cc2d6ea99d817be3ddc29d43424f6cdc8b1cf658 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 29 Mar 2015 15:52:17 +0200 Subject: [PATCH] Create more zlib wrapper functions --- libretro-common/file/file_extract.c | 38 +++++++++++++++++++++ libretro-common/formats/png/rpng_decode.c | 11 +++--- libretro-common/include/file/file_extract.h | 9 +++++ 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/libretro-common/file/file_extract.c b/libretro-common/file/file_extract.c index b28c52693b..eb92daf742 100644 --- a/libretro-common/file/file_extract.c +++ b/libretro-common/file/file_extract.c @@ -799,3 +799,41 @@ void zlib_set_stream(void *data, stream->next_in = (uint8_t*)next_in; stream->next_out = next_out; } + +uint32_t zlib_stream_get_avail_in(void *data) +{ + z_stream *stream = (z_stream*)data; + + if (!stream) + return 0; + + return stream->avail_in; +} + +uint32_t zlib_stream_get_avail_out(void *data) +{ + z_stream *stream = (z_stream*)data; + + if (!stream) + return 0; + + return stream->avail_out; +} + +uint64_t zlib_stream_get_total_out(void *data) +{ + z_stream *stream = (z_stream*)data; + + if (!stream) + return 0; + + return stream->total_out; +} + +void zlib_stream_decrement_total_out(void *data, unsigned subtraction) +{ + z_stream *stream = (z_stream*)data; + + if (stream) + stream->total_out -= subtraction; +} diff --git a/libretro-common/formats/png/rpng_decode.c b/libretro-common/formats/png/rpng_decode.c index 28c84206dd..30fd10179e 100644 --- a/libretro-common/formats/png/rpng_decode.c +++ b/libretro-common/formats/png/rpng_decode.c @@ -351,7 +351,7 @@ static int png_reverse_filter_init(const struct png_ihdr *ihdr, png_pass_geom(&pngp->ihdr, pngp->pass.width, pngp->pass.height, NULL, NULL, &pngp->pass.size); - if (pngp->pass.size > pngp->stream.total_out) + if (pngp->pass.size > zlib_stream_get_total_out(&pngp->stream)) { free(pngp->data); return -1; @@ -367,7 +367,7 @@ static int png_reverse_filter_init(const struct png_ihdr *ihdr, png_pass_geom(ihdr, ihdr->width, ihdr->height, &pngp->bpp, &pngp->pitch, &pass_size); - if (pngp->stream.total_out < pass_size) + if (zlib_stream_get_total_out(&pngp->stream) < pass_size) return -1; pngp->restore_buf_size = 0; @@ -523,7 +523,8 @@ static int png_reverse_filter_adam7_iterate(uint32_t **data_, pngp->inflate_buf += pngp->pass.size; pngp->adam7_restore_buf_size += pngp->pass.size; - pngp->stream.total_out -= pngp->pass.size; + + zlib_stream_decrement_total_out(&pngp->stream, pngp->pass.size); png_reverse_filter_adam7_deinterlace_pass(data, ihdr, pngp->data, pngp->pass.width, pngp->pass.height, &passes[pngp->pass.pos]); @@ -582,8 +583,8 @@ int rpng_load_image_argb_process_inflate_init(struct rpng_t *rpng, uint32_t **data, unsigned *width, unsigned *height) { int zstatus; - bool to_continue = (rpng->process.stream.avail_in > 0 - && rpng->process.stream.avail_out > 0); + bool to_continue = (zlib_stream_get_avail_in(&rpng->process.stream) > 0 + && zlib_stream_get_avail_out(&rpng->process.stream) > 0); if (!to_continue) goto end; diff --git a/libretro-common/include/file/file_extract.h b/libretro-common/include/file/file_extract.h index ae79cf3f0f..4e068a6359 100644 --- a/libretro-common/include/file/file_extract.h +++ b/libretro-common/include/file/file_extract.h @@ -128,5 +128,14 @@ void zlib_set_stream(void *data, uint8_t *next_out ); +uint32_t zlib_stream_get_avail_in(void *data); + +uint32_t zlib_stream_get_avail_out(void *data); + +uint64_t zlib_stream_get_total_out(void *data); + +void zlib_stream_decrement_total_out(void *data, + unsigned subtraction); + #endif