aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Alessandrelli2017-04-07 01:29:02 +0200
committerFabio Alessandrelli2017-05-12 20:01:53 +0200
commit3044d0aed3f281a4d63d1591c5e82bbf094e0d2a (patch)
treeeb25a25e7ef87a346f8f036df9a7575d8bc2fff9
parentaa167fa04b2767ef8d38646c05d52b6a24261d81 (diff)
downloadgodot-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.cpp19
-rw-r--r--core/io/compression.h2
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();
};