diff options
author | Andrew Bartlett <abartlet@samba.org> | 2023-03-28 15:42:39 +1300 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2023-03-31 01:48:30 +0000 |
commit | 0ab5552c8c32e7d7196b5a33eaa5533ccac53d0e (patch) | |
tree | 6b8e8d8aa2a5b415e97994ea9b7149d85ec6d4ed /lib/compression | |
parent | 976dfc7585fcce594f5e77c8bb8ccc9644625f95 (diff) | |
download | samba-0ab5552c8c32e7d7196b5a33eaa5533ccac53d0e.tar.gz |
lib/compression: Add helper function lzxpress_huffman_max_compressed_size()
This allows the calculation of the worst case to be shared with callers.
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Diffstat (limited to 'lib/compression')
-rw-r--r-- | lib/compression/lzxpress_huffman.c | 23 | ||||
-rw-r--r-- | lib/compression/lzxpress_huffman.h | 8 |
2 files changed, 25 insertions, 6 deletions
diff --git a/lib/compression/lzxpress_huffman.c b/lib/compression/lzxpress_huffman.c index 3eac8e3b2b6..6d383e4f8ca 100644 --- a/lib/compression/lzxpress_huffman.c +++ b/lib/compression/lzxpress_huffman.c @@ -1210,6 +1210,21 @@ static ssize_t lzx_huffman_compress_block(struct lzxhuff_compressor_context *cmp return bytes_written; } +/* + * lzxpress_huffman_max_compressed_size() + * + * Return the most bytes the compression can take, to allow + * pre-allocation. + */ +size_t lzxpress_huffman_max_compressed_size(size_t input_size) +{ + /* + * In the worst case, the output size should be about the same as the + * input size, plus the 256 byte header per 64k block. We aim for + * ample, but within the order of magnitude. + */ + return input_size + (input_size / 8) + 270; +} /* * lzxpress_huffman_compress_talloc() @@ -1236,12 +1251,8 @@ ssize_t lzxpress_huffman_compress_talloc(TALLOC_CTX *mem_ctx, uint8_t **output) { struct lzxhuff_compressor_mem *cmp = NULL; - /* - * In the worst case, the output size should be about the same as the - * input size, plus the 256 byte header per 64k block. We aim for - * ample, but within the order of magnitude. - */ - size_t alloc_size = input_size + (input_size / 8) + 270; + size_t alloc_size = lzxpress_huffman_max_compressed_size(input_size); + ssize_t output_size; *output = talloc_array(mem_ctx, uint8_t, alloc_size); diff --git a/lib/compression/lzxpress_huffman.h b/lib/compression/lzxpress_huffman.h index 04de448bcce..232e58920f5 100644 --- a/lib/compression/lzxpress_huffman.h +++ b/lib/compression/lzxpress_huffman.h @@ -83,5 +83,13 @@ uint8_t *lzxpress_huffman_decompress_talloc(TALLOC_CTX *mem_ctx, size_t input_size, size_t output_size); +/* + * lzxpress_huffman_max_compressed_size() + * + * Return the most bytes the compression can take, to allow + * pre-allocation. + */ +size_t lzxpress_huffman_max_compressed_size(size_t input_size); + #endif /* HAVE_LZXPRESS_HUFFMAN_H */ |