diff options
Diffstat (limited to 'lib/zstd/zstd_compress_module.c')
| -rw-r--r-- | lib/zstd/zstd_compress_module.c | 75 | 
1 files changed, 74 insertions, 1 deletions
| diff --git a/lib/zstd/zstd_compress_module.c b/lib/zstd/zstd_compress_module.c index bd8784449b31..7651b53551c8 100644 --- a/lib/zstd/zstd_compress_module.c +++ b/lib/zstd/zstd_compress_module.c @@ -1,6 +1,6 @@  // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause  /* - * Copyright (c) Facebook, Inc. + * Copyright (c) Meta Platforms, Inc. and affiliates.   * All rights reserved.   *   * This source code is licensed under both the BSD-style license (found in the @@ -16,6 +16,7 @@  #include "common/zstd_deps.h"  #include "common/zstd_internal.h" +#include "compress/zstd_compress_internal.h"  #define ZSTD_FORWARD_IF_ERR(ret)            \  	do {                                \ @@ -92,12 +93,64 @@ zstd_compression_parameters zstd_get_cparams(int level,  }  EXPORT_SYMBOL(zstd_get_cparams); +size_t zstd_cctx_set_param(zstd_cctx *cctx, ZSTD_cParameter param, int value) +{ +	return ZSTD_CCtx_setParameter(cctx, param, value); +} +EXPORT_SYMBOL(zstd_cctx_set_param); +  size_t zstd_cctx_workspace_bound(const zstd_compression_parameters *cparams)  {  	return ZSTD_estimateCCtxSize_usingCParams(*cparams);  }  EXPORT_SYMBOL(zstd_cctx_workspace_bound); +// Used by zstd_cctx_workspace_bound_with_ext_seq_prod() +static size_t dummy_external_sequence_producer( +	void *sequenceProducerState, +	ZSTD_Sequence *outSeqs, size_t outSeqsCapacity, +	const void *src, size_t srcSize, +	const void *dict, size_t dictSize, +	int compressionLevel, +	size_t windowSize) +{ +	(void)sequenceProducerState; +	(void)outSeqs; (void)outSeqsCapacity; +	(void)src; (void)srcSize; +	(void)dict; (void)dictSize; +	(void)compressionLevel; +	(void)windowSize; +	return ZSTD_SEQUENCE_PRODUCER_ERROR; +} + +static void init_cctx_params_from_compress_params( +	ZSTD_CCtx_params *cctx_params, +	const zstd_compression_parameters *compress_params) +{ +	ZSTD_parameters zstd_params; +	memset(&zstd_params, 0, sizeof(zstd_params)); +	zstd_params.cParams = *compress_params; +	ZSTD_CCtxParams_init_advanced(cctx_params, zstd_params); +} + +size_t zstd_cctx_workspace_bound_with_ext_seq_prod(const zstd_compression_parameters *compress_params) +{ +	ZSTD_CCtx_params cctx_params; +	init_cctx_params_from_compress_params(&cctx_params, compress_params); +	ZSTD_CCtxParams_registerSequenceProducer(&cctx_params, NULL, dummy_external_sequence_producer); +	return ZSTD_estimateCCtxSize_usingCCtxParams(&cctx_params); +} +EXPORT_SYMBOL(zstd_cctx_workspace_bound_with_ext_seq_prod); + +size_t zstd_cstream_workspace_bound_with_ext_seq_prod(const zstd_compression_parameters *compress_params) +{ +	ZSTD_CCtx_params cctx_params; +	init_cctx_params_from_compress_params(&cctx_params, compress_params); +	ZSTD_CCtxParams_registerSequenceProducer(&cctx_params, NULL, dummy_external_sequence_producer); +	return ZSTD_estimateCStreamSize_usingCCtxParams(&cctx_params); +} +EXPORT_SYMBOL(zstd_cstream_workspace_bound_with_ext_seq_prod); +  zstd_cctx *zstd_init_cctx(void *workspace, size_t workspace_size)  {  	if (workspace == NULL) @@ -209,5 +262,25 @@ size_t zstd_end_stream(zstd_cstream *cstream, zstd_out_buffer *output)  }  EXPORT_SYMBOL(zstd_end_stream); +void zstd_register_sequence_producer( +  zstd_cctx *cctx, +  void* sequence_producer_state, +  zstd_sequence_producer_f sequence_producer +) { +	ZSTD_registerSequenceProducer(cctx, sequence_producer_state, sequence_producer); +} +EXPORT_SYMBOL(zstd_register_sequence_producer); + +size_t zstd_compress_sequences_and_literals(zstd_cctx *cctx, void* dst, size_t dst_capacity, +					    const zstd_sequence *in_seqs, size_t in_seqs_size, +					    const void* literals, size_t lit_size, size_t lit_capacity, +					    size_t decompressed_size) +{ +	return ZSTD_compressSequencesAndLiterals(cctx, dst, dst_capacity, in_seqs, +						 in_seqs_size, literals, lit_size, +						 lit_capacity, decompressed_size); +} +EXPORT_SYMBOL(zstd_compress_sequences_and_literals); +  MODULE_LICENSE("Dual BSD/GPL");  MODULE_DESCRIPTION("Zstd Compressor"); | 
