50 void *dst,
const size_t dst_max_size,
51 const void *src,
const size_t src_size,
58 if (dst_max_size < src_size) {
61 memcpy(dst, src, src_size);
62 *actual_size = src_size;
66 struct libdeflate_compressor *compressor = ctx->libdeflate_compressor[level];
68 const int libdeflate_level =
76 struct libdeflate_options opts = {0};
77 opts.sizeof_options =
sizeof(opts);
78 opts.free_func = ctx->free_func;
79 opts.malloc_func = ctx->malloc_func;
81 compressor = libdeflate_alloc_compressor_ex(libdeflate_level, &opts);
85 ctx->libdeflate_compressor[level] = compressor;
88 const size_t size = libdeflate_gzip_compress(compressor,
98 struct libdeflate_compressor *compressor = ctx->libdeflate_compressor[level];
100 const int libdeflate_level =
108 struct libdeflate_options opts = {0};
109 opts.sizeof_options =
sizeof(opts);
110 opts.free_func = ctx->free_func;
111 opts.malloc_func = ctx->malloc_func;
113 compressor = libdeflate_alloc_compressor_ex(libdeflate_level, &opts);
117 ctx->libdeflate_compressor[level] = compressor;
120 const size_t size = libdeflate_zlib_compress(compressor,
130 struct libdeflate_compressor *compressor = ctx->libdeflate_compressor[level];
132 const int libdeflate_level =
140 struct libdeflate_options opts = {0};
141 opts.sizeof_options =
sizeof(opts);
142 opts.free_func = ctx->free_func;
143 opts.malloc_func = ctx->malloc_func;
145 compressor = libdeflate_alloc_compressor_ex(libdeflate_level, &opts);
149 ctx->libdeflate_compressor[level] = compressor;
152 const size_t size = libdeflate_deflate_compress(compressor,
162 LZ4F_preferences_t prefs = LZ4F_INIT_PREFERENCES;
163 prefs.frameInfo.contentSize = src_size;
164 prefs.compressionLevel =
170 LZ4HC_CLEVEL_DEFAULT;
172 const size_t size = LZ4F_compressFrame(
177 if (LZ4F_isError(size)) {
185 const lzma_allocator allocator = {
186 .alloc = compressor_lzma_malloc,
187 .free = compressor_lzma_free,
191 lzma_stream stream = LZMA_STREAM_INIT;
192 stream.allocator = &allocator;
194 const uint32_t preset =
202 lzma_ret ret = lzma_easy_encoder(&stream, preset, LZMA_CHECK_CRC64);
203 if (ret != LZMA_OK) {
207 stream.next_in = (uint8_t *)src;
208 stream.avail_in = src_size;
209 stream.next_out = (uint8_t *)dst;
210 stream.avail_out = dst_max_size;
213 ret = lzma_code(&stream, LZMA_FINISH);
214 }
while (ret == LZMA_OK);
219 case LZMA_STREAM_END:
220 *actual_size = stream.total_out;
223 if (stream.avail_out == 0) {
233 if (!ctx->zstd_cctx) {
234 ctx->zstd_cctx = ZSTD_createCCtx();
238 const int compression_level =
246 const size_t size = ZSTD_compressCCtx(ctx->zstd_cctx,
251 switch (ZSTD_getErrorCode(size)) {
252 case ZSTD_error_no_error:
255 case ZSTD_error_dstSize_tooSmall:
257 case ZSTD_error_memory_allocation:
enum clod_compression_result clod_compress(struct clod_compressor *ctx, void *dst, const size_t dst_max_size, const void *src, const size_t src_size, size_t *actual_size, const enum clod_compression_method method, const enum clod_compression_level level)