X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fxpress-compress.c;h=6fb7e1c4846a92db78d9969875b1aa41e35d6b36;hp=2637ce93cab8fa3de765b37fa6e0980431764043;hb=d50b480a1d69beeb27b88da767f293d4d77d7a3b;hpb=883833a4b3dabec325edf1ca938000f91d587c00 diff --git a/src/xpress-compress.c b/src/xpress-compress.c index 2637ce93..6fb7e1c4 100644 --- a/src/xpress-compress.c +++ b/src/xpress-compress.c @@ -34,13 +34,10 @@ #include "wimlib/compressor_ops.h" #include "wimlib/compress_common.h" #include "wimlib/error.h" +#include "wimlib/lz_hash.h" #include "wimlib/util.h" #include "wimlib/xpress.h" -#ifdef HAVE_ALLOCA_H -# include -#endif -#include #include struct xpress_record_ctx { @@ -313,7 +310,22 @@ oom: return WIMLIB_ERR_NOMEM; } +static u64 +xpress_get_needed_memory(size_t max_window_size, + const struct wimlib_compressor_params_header *params) +{ + u64 size = 0; + + size += sizeof(struct xpress_compressor); + size += max_window_size + 8; + size += max_window_size * sizeof(((struct xpress_compressor*)0)->matches[0]); + size += max_window_size * sizeof(((struct xpress_compressor*)0)->prev_tab[0]); + + return size; +} + const struct compressor_ops xpress_compressor_ops = { + .get_needed_memory = xpress_get_needed_memory, .create_compressor = xpress_create_compressor, .compress = xpress_compress, .free_compressor = xpress_free_compressor,