| 205 | |
| 206 | |
| 207 | size_t ZlibRecompress(void *src, size_t src_len, size_t size_leanified /*= 0*/) |
| 208 | { |
| 209 | if (!is_fast) |
| 210 | { |
| 211 | size_t s = 0; |
| 212 | uint8_t *buffer = static_cast<uint8_t *>(tinfl_decompress_mem_to_heap(src, src_len, &s, TINFL_FLAG_PARSE_ZLIB_HEADER)); |
| 213 | if (!buffer) |
| 214 | { |
| 215 | cerr << "Decompress Zlib data failed." << endl; |
| 216 | } |
| 217 | else |
| 218 | { |
| 219 | ZopfliOptions zopfli_options; |
| 220 | ZopfliInitOptions(&zopfli_options); |
| 221 | zopfli_options.numiterations = iterations; |
| 222 | |
| 223 | size_t new_size = 0; |
| 224 | uint8_t *out_buffer = nullptr; |
| 225 | ZopfliZlibCompress(&zopfli_options, buffer, s, &out_buffer, &new_size); |
| 226 | mz_free(buffer); |
| 227 | if (new_size < src_len) |
| 228 | { |
| 229 | memcpy(static_cast<uint8_t *>(src) - size_leanified, out_buffer, new_size); |
| 230 | delete[] out_buffer; |
| 231 | return new_size; |
| 232 | } |
| 233 | delete[] out_buffer; |
| 234 | } |
| 235 | } |
| 236 | |
| 237 | memmove(static_cast<uint8_t *>(src) - size_leanified, src, src_len); |
| 238 | return src_len; |
| 239 | } |
no test coverage detected