From 4572a1c48d07da6c2a2c531f97030a056a7e2a38 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 29 Mar 2015 16:28:06 +0200 Subject: [PATCH] Create zlib_deflate wrapper functions --- libretro-common/file/file_extract.c | 31 +++++++++++++++++++++ libretro-common/formats/png/rpng_encode.c | 10 ++++--- libretro-common/include/file/file_extract.h | 6 ++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/libretro-common/file/file_extract.c b/libretro-common/file/file_extract.c index eb92daf742..6dd267fb15 100644 --- a/libretro-common/file/file_extract.c +++ b/libretro-common/file/file_extract.c @@ -306,6 +306,14 @@ bool zlib_inflate_init2(void *data) return true; } +void zlib_deflate_init(void *data, int level) +{ + z_stream *stream = (z_stream*)data; + + if (stream) + deflateInit(stream, level); +} + bool zlib_inflate_init(void *data) { z_stream *stream = (z_stream*)data; @@ -324,6 +332,13 @@ void zlib_stream_free(void *data) inflateEnd(ret); } +void zlib_stream_deflate_free(void *data) +{ + z_stream *ret = (z_stream*)data; + if (ret) + deflateEnd(ret); +} + bool zlib_inflate_data_to_file_init( zlib_file_handle_t *handle, const uint8_t *cdata, uint32_t csize, uint32_t size) @@ -367,6 +382,22 @@ error: return false; } +int zlib_deflate_data_to_file(void *data) +{ + int zstatus; + z_stream *stream = (z_stream*)data; + + if (!stream) + return -1; + + zstatus = deflate(stream, Z_FINISH); + + if (zstatus == Z_STREAM_END) + return 1; + + return 0; +} + int zlib_inflate_data_to_file_iterate(void *data) { int zstatus; diff --git a/libretro-common/formats/png/rpng_encode.c b/libretro-common/formats/png/rpng_encode.c index 3fcf5659d5..dadf28a39c 100644 --- a/libretro-common/formats/png/rpng_encode.c +++ b/libretro-common/formats/png/rpng_encode.c @@ -315,13 +315,15 @@ static bool rpng_save_image(const char *path, encode_buf, deflate_buf + 8); - deflateInit(&stream, 9); - if (deflate(&stream, Z_FINISH) != Z_STREAM_END) + zlib_deflate_init(&stream, 9); + + if (zlib_deflate_data_to_file(&stream) != 1) { - deflateEnd(&stream); + zlib_stream_deflate_free(&stream); GOTO_END_ERROR(); } - deflateEnd(&stream); + + zlib_stream_deflate_free(&stream); memcpy(deflate_buf + 4, "IDAT", 4); dword_write_be(deflate_buf + 0, zlib_stream_get_total_out(&stream)); diff --git a/libretro-common/include/file/file_extract.h b/libretro-common/include/file/file_extract.h index 4e068a6359..2193bef21a 100644 --- a/libretro-common/include/file/file_extract.h +++ b/libretro-common/include/file/file_extract.h @@ -117,6 +117,12 @@ void *zlib_stream_new(void); void zlib_stream_free(void *data); +void zlib_deflate_init(void *data, int level); + +int zlib_deflate_data_to_file(void *data); + +void zlib_stream_deflate_free(void *data); + bool zlib_inflate_init(void *data); bool zlib_inflate_init2(void *data);