X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fcompress_serial.c;h=20e069c075358f804a12bed2bf8e21eaf5f615e2;hb=8b74fa415edfefeee5869704d39ee8de1e82b422;hp=b3c6293eef95019aec730229f4e8aab3c5b0c14e;hpb=f37825b3fdadf2102a66e11769fd381cafe154a0;p=wimlib diff --git a/src/compress_serial.c b/src/compress_serial.c index b3c6293e..20e069c0 100644 --- a/src/compress_serial.c +++ b/src/compress_serial.c @@ -28,18 +28,18 @@ #include "wimlib.h" #include "wimlib/assert.h" -#include "wimlib/compress_chunks.h" +#include "wimlib/chunk_compressor.h" #include "wimlib/util.h" #include struct serial_chunk_compressor { struct chunk_compressor base; - struct wimlib_lzx_context *comp_ctx; + struct wimlib_compressor *compressor; u8 *udata; u8 *cdata; - unsigned ulen; - unsigned clen; + u32 ulen; + u32 clen; }; static void @@ -50,6 +50,7 @@ serial_chunk_compressor_destroy(struct chunk_compressor *_ctx) if (ctx == NULL) return; + wimlib_free_compressor(ctx->compressor); FREE(ctx->udata); FREE(ctx->cdata); FREE(ctx); @@ -74,17 +75,17 @@ serial_chunk_compressor_submit_chunk(struct chunk_compressor *_ctx, static bool serial_chunk_compressor_get_chunk(struct chunk_compressor *_ctx, - const void **cdata_ret, unsigned *csize_ret, - unsigned *usize_ret) + const void **cdata_ret, u32 *csize_ret, + u32 *usize_ret) { struct serial_chunk_compressor *ctx = (struct serial_chunk_compressor*)_ctx; if (ctx->ulen == 0) return false; - ctx->clen = compress_chunk(ctx->udata, ctx->ulen, - ctx->cdata, ctx->base.out_ctype, - ctx->comp_ctx); + ctx->clen = wimlib_compress(ctx->udata, ctx->ulen, + ctx->cdata, ctx->ulen - 1, + ctx->compressor); if (ctx->clen) { *cdata_ret = ctx->cdata; @@ -101,14 +102,16 @@ serial_chunk_compressor_get_chunk(struct chunk_compressor *_ctx, int new_serial_chunk_compressor(int out_ctype, u32 out_chunk_size, - struct wimlib_lzx_context *comp_ctx, struct chunk_compressor **compressor_ret) { struct serial_chunk_compressor *ctx; + int ret; + + wimlib_assert(out_chunk_size > 0); ctx = CALLOC(1, sizeof(*ctx)); if (ctx == NULL) - goto err; + return WIMLIB_ERR_NOMEM; ctx->base.out_ctype = out_ctype; ctx->base.out_chunk_size = out_chunk_size; @@ -117,17 +120,24 @@ new_serial_chunk_compressor(int out_ctype, u32 out_chunk_size, ctx->base.submit_chunk = serial_chunk_compressor_submit_chunk; ctx->base.get_chunk = serial_chunk_compressor_get_chunk; - ctx->comp_ctx = comp_ctx; + + ret = wimlib_create_compressor(out_ctype, out_chunk_size, + NULL, &ctx->compressor); + if (ret) + goto err; + ctx->udata = MALLOC(out_chunk_size); ctx->cdata = MALLOC(out_chunk_size - 1); ctx->ulen = 0; - if (ctx->udata == NULL || ctx->cdata == NULL) + if (ctx->udata == NULL || ctx->cdata == NULL) { + ret = WIMLIB_ERR_NOMEM; goto err; + } *compressor_ret = &ctx->base; return 0; err: serial_chunk_compressor_destroy(&ctx->base); - return WIMLIB_ERR_NOMEM; + return ret; }