diff options
Diffstat (limited to '7zip/Archive/Zip/ZipAddCommon.cpp')
-rwxr-xr-x | 7zip/Archive/Zip/ZipAddCommon.cpp | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/7zip/Archive/Zip/ZipAddCommon.cpp b/7zip/Archive/Zip/ZipAddCommon.cpp index 84cada5b..c2b79212 100755 --- a/7zip/Archive/Zip/ZipAddCommon.cpp +++ b/7zip/Archive/Zip/ZipAddCommon.cpp @@ -198,34 +198,53 @@ HRESULT CAddCommon::Compress(ISequentialInStream *inStream, IOutStream *outStrea if (method == NFileHeader::NCompressionMethod::kDeflated || method == NFileHeader::NCompressionMethod::kDeflated64) { - NWindows::NCOM::CPropVariant properties[2] = + NWindows::NCOM::CPropVariant properties[] = { _options.NumPasses, - _options.NumFastBytes + _options.NumFastBytes, + _options.NumMatchFinderCycles }; - PROPID propIDs[2] = + PROPID propIDs[] = { NCoderPropID::kNumPasses, - NCoderPropID::kNumFastBytes + NCoderPropID::kNumFastBytes, + NCoderPropID::kMatchFinderCycles }; + int numProps = sizeof(propIDs) / sizeof(propIDs[0]); + if (!_options.NumMatchFinderCyclesDefined) + numProps--; CMyComPtr<ICompressSetCoderProperties> setCoderProperties; - RINOK(_compressEncoder.QueryInterface(IID_ICompressSetCoderProperties, &setCoderProperties)); - RINOK(setCoderProperties->SetCoderProperties(propIDs, properties, 2)); - } else if (method == NFileHeader::NCompressionMethod::kBZip2) + _compressEncoder.QueryInterface(IID_ICompressSetCoderProperties, &setCoderProperties); + if (setCoderProperties) + { + RINOK(setCoderProperties->SetCoderProperties(propIDs, properties, numProps)); + } + } + else if (method == NFileHeader::NCompressionMethod::kBZip2) { - NWindows::NCOM::CPropVariant properties[1] = + NWindows::NCOM::CPropVariant properties[] = { + _options.DicSize, _options.NumPasses + #ifdef COMPRESS_MT + , _options.NumThreads + #endif }; - PROPID propIDs[1] = + PROPID propIDs[] = { - NCoderPropID::kNumPasses, + NCoderPropID::kDictionarySize, + NCoderPropID::kNumPasses + #ifdef COMPRESS_MT + , NCoderPropID::kNumThreads + #endif }; CMyComPtr<ICompressSetCoderProperties> setCoderProperties; - RINOK(_compressEncoder.QueryInterface(IID_ICompressSetCoderProperties, &setCoderProperties)); - RINOK(setCoderProperties->SetCoderProperties(propIDs, properties, 1)); + _compressEncoder.QueryInterface(IID_ICompressSetCoderProperties, &setCoderProperties); + if (setCoderProperties) + { + RINOK(setCoderProperties->SetCoderProperties(propIDs, properties, sizeof(propIDs) / sizeof(propIDs[0]))); + } } - } CMyComPtr<ISequentialOutStream> outStreamNew; if (_options.PasswordIsDefined) |