make compression of zstd archive type more similar to Zstandard CLI (store dictID and checksum by default in zstd type, no effect for 7z type)

This commit is contained in:
sebres
2023-09-14 18:18:09 +02:00
parent 5697b3dece
commit 8a5e1c82db
3 changed files with 22 additions and 0 deletions

View File

@@ -286,6 +286,9 @@ static HRESULT UpdateArchive(
CMyComPtr<ICompressProgressInfo> localProgress = localProgressSpec;
localProgressSpec->Init(updateCallback, true);
NCompress::NZSTD::CEncoder *encoderSpec = new NCompress::NZSTD::CEncoder;
// by zstd archive type store dictID and checksum (similar to zstd client)
encoderSpec->dictIDFlag = 1;
encoderSpec->checksumFlag = 1;
encoderSpec->unpackSize = unpackSize;
CMyComPtr<ICompressCoder> encoder = encoderSpec;
RINOK(props.SetCoderProps(encoderSpec, NULL));

View File

@@ -31,6 +31,8 @@ CEncoder::CEncoder():
_LdmMinMatch(-1),
_LdmBucketSizeLog(-1),
_LdmHashRateLog(-1),
dictIDFlag(-1),
checksumFlag(-1),
unpackSize(0)
{
_props.clear();
@@ -252,6 +254,15 @@ STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream,
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_contentSizeFlag, 1);
if (ZSTD_isError(err)) return E_INVALIDARG;
if (dictIDFlag != -1) {
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_dictIDFlag, dictIDFlag);
if (ZSTD_isError(err)) return E_INVALIDARG;
}
if (checksumFlag != -1) {
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_checksumFlag, checksumFlag);
if (ZSTD_isError(err)) return E_INVALIDARG;
}
if (unpackSize) {
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_srcSizeHint, (int)(unpackSize <= INT_MAX ? unpackSize : INT_MAX));
if (ZSTD_isError(err)) return E_INVALIDARG;
@@ -326,6 +337,12 @@ STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream,
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_ldmHashRateLog, _LdmHashRateLog);
if (ZSTD_isError(err)) return E_INVALIDARG;
}
//err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_literalCompressionMode, (int)ZSTD_ps_auto);
//if (ZSTD_isError(err)) return E_INVALIDARG;
//err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_enableDedicatedDictSearch, 1);
//if (ZSTD_isError(err)) return E_INVALIDARG;
}
for (;;) {

View File

@@ -68,6 +68,8 @@ class CEncoder:
public:
int dictIDFlag;
int checksumFlag;
UInt64 unpackSize;
MY_QUERYINTERFACE_BEGIN2(ICompressCoder)