diff options
| author | Fabio Alessandrelli | 2017-04-07 01:29:02 +0200 |
|---|---|---|
| committer | Fabio Alessandrelli | 2017-05-12 20:01:53 +0200 |
| commit | 3044d0aed3f281a4d63d1591c5e82bbf094e0d2a (patch) | |
| tree | eb25a25e7ef87a346f8f036df9a7575d8bc2fff9 | |
| parent | aa167fa04b2767ef8d38646c05d52b6a24261d81 (diff) | |
| download | godot-3044d0aed3f281a4d63d1591c5e82bbf094e0d2a.tar.gz godot-3044d0aed3f281a4d63d1591c5e82bbf094e0d2a.tar.zst godot-3044d0aed3f281a4d63d1591c5e82bbf094e0d2a.zip | |
Compression::compress properly returns compressed size
selective pick from cbbcf727035c8b481889f605337a96a9e58ed970
| -rw-r--r-- | core/io/compression.cpp | 19 | ||||
| -rw-r--r-- | core/io/compression.h | 2 |
2 files changed, 12 insertions, 9 deletions
diff --git a/core/io/compression.cpp b/core/io/compression.cpp index e04d1d162..652f60966 100644 --- a/core/io/compression.cpp +++ b/core/io/compression.cpp @@ -104,19 +104,21 @@ int Compression::get_max_compressed_buffer_size(int p_src_size, Mode p_mode) { ERR_FAIL_V(-1); } -void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode) { +int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode) { switch (p_mode) { case MODE_FASTLZ: { + int ret_size=0; + if (p_dst_max_size < 16) { uint8_t dst[16]; - fastlz_decompress(p_src, p_src_size, dst, 16); + ret_size = fastlz_decompress(p_src, p_src_size, dst, 16); copymem(p_dst, dst, p_dst_max_size); } else { - fastlz_decompress(p_src, p_src_size, p_dst, p_dst_max_size); + ret_size = fastlz_decompress(p_src, p_src_size, p_dst, p_dst_max_size); } - return; + return ret_size; } break; case MODE_DEFLATE: { @@ -127,7 +129,7 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t * strm.avail_in = 0; strm.next_in = Z_NULL; int err = inflateInit(&strm); - ERR_FAIL_COND(err != Z_OK); + ERR_FAIL_COND_V(err != Z_OK, -1); strm.avail_in = p_src_size; strm.avail_out = p_dst_max_size; @@ -135,11 +137,12 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t * strm.next_out = p_dst; err = inflate(&strm, Z_FINISH); + int total = strm.total_out; inflateEnd(&strm); - ERR_FAIL_COND(err != Z_STREAM_END); - return; + ERR_FAIL_COND_V(err != Z_STREAM_END, -1); + return total; } break; } - ERR_FAIL(); + ERR_FAIL_V(-1); } diff --git a/core/io/compression.h b/core/io/compression.h index b5f0db9e9..a982a074b 100644 --- a/core/io/compression.h +++ b/core/io/compression.h @@ -41,7 +41,7 @@ public: static int compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ); static int get_max_compressed_buffer_size(int p_src_size, Mode p_mode = MODE_FASTLZ); - static void decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ); + static int decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ); Compression(); }; |
