summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/lzma/CPP
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2023-12-06 07:58:49 +1100
committer Vas Crabb <vas@vastheman.com>2023-12-06 07:58:49 +1100
commit79bef1e23049fdac25f1fefd132e0b6c7d2cc3a1 (patch)
tree643e9313fe86f583c4022c338677cbc12b761df7 /3rdparty/lzma/CPP
parent512ccf0c7c9b4f08e41038b2ed2de220e140385b (diff)
3rdparty/lzma: Updated to version 23.01.
Diffstat (limited to '3rdparty/lzma/CPP')
-rw-r--r--3rdparty/lzma/CPP/7zip/7zip.mak4
-rw-r--r--3rdparty/lzma/CPP/7zip/7zip_gcc.mak73
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.cpp166
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.h15
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.cpp290
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.h43
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zExtract.cpp119
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp116
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h63
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.cpp147
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.h95
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp168
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.h16
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.cpp269
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.h22
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zItem.h11
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.cpp90
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.h41
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.cpp126
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.h8
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zRegister.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp15
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.h32
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp924
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.h21
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/7z/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Archive.def2
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Archive2.def2
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/ArchiveExports.cpp15
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp94
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.h108
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.h14
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp28
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp29
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h46
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.cpp52
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.h51
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp4
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h14
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/ParseProperties.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/Common/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/DllExports2.cpp14
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/IArchive.h349
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/LzmaHandler.cpp103
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/SplitHandler.cpp87
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/XzHandler.cpp225
-rw-r--r--3rdparty/lzma/CPP/7zip/Archive/XzHandler.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp98
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile6
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile.gcc18
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile6
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/Format7zR/makefile4
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp44
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp82
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile4
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc5
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp96
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp42
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile7
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile.gcc12
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXCon/resource.rc6
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp26
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h21
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp12
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp71
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp70
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h13
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/makefile11
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp65
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp29
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h14
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXWin/makefile9
-rw-r--r--3rdparty/lzma/CPP/7zip/Bundles/SFXWin/resource.rc5
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/CWrappers.cpp49
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/CWrappers.h6
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/CreateCoder.cpp113
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/CreateCoder.h53
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/FilePathAutoRename.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/FileStreams.cpp125
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/FileStreams.h113
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/FilterCoder.cpp365
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/FilterCoder.h148
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/InBuffer.cpp22
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/InBuffer.h16
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.cpp302
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.h59
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/LimitedStreams.cpp46
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h116
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/LockedStream.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/MethodId.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/MethodProps.cpp71
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/MethodProps.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/MultiOutStream.cpp849
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/MultiOutStream.h160
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/OffsetStream.cpp10
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/OffsetStream.h22
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/OutBuffer.cpp24
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/OutBuffer.h10
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/ProgressUtils.cpp10
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/ProgressUtils.h24
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/PropId.cpp4
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/RegisterArc.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/RegisterCodec.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/StreamBinder.cpp37
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/StreamBinder.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/StreamObjects.cpp37
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/StreamObjects.h84
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/StreamUtils.cpp53
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/StreamUtils.h22
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/UniqBlocks.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/VirtThread.cpp6
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/VirtThread.h6
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.cpp895
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.h125
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Bcj2Register.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/BcjCoder.cpp12
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/BcjCoder.h32
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/BcjRegister.cpp4
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/BranchMisc.cpp97
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/BranchMisc.h56
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/BranchRegister.cpp26
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/ByteSwap.cpp105
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/CodecExports.cpp69
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/CopyCoder.cpp27
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/CopyCoder.h37
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/DeltaFilter.cpp48
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp58
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.h99
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp22
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.h32
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/Lzma2Register.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.cpp53
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h102
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.cpp41
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.h27
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/LzmaRegister.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.cpp46
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.h66
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.cpp20
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.h24
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/PpmdRegister.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/XzDecoder.cpp20
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/XzDecoder.h53
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/XzEncoder.cpp28
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/XzEncoder.h29
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/7zAes.cpp32
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/7zAes.h41
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/7zAesRegister.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/MyAes.cpp253
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/MyAes.h113
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/MyAesReg.cpp21
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/RandGen.cpp38
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/RandGen.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Crypto/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/Guid.txt6
-rw-r--r--3rdparty/lzma/CPP/7zip/ICoder.h406
-rw-r--r--3rdparty/lzma/CPP/7zip/IDecl.h62
-rw-r--r--3rdparty/lzma/CPP/7zip/IPassword.h27
-rw-r--r--3rdparty/lzma/CPP/7zip/IProgress.h19
-rw-r--r--3rdparty/lzma/CPP/7zip/IStream.h176
-rw-r--r--3rdparty/lzma/CPP/7zip/LzmaDec.mak2
-rw-r--r--3rdparty/lzma/CPP/7zip/MyVersionInfo.rc2
-rw-r--r--3rdparty/lzma/CPP/7zip/PropID.h6
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.cpp144
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.dsp94
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Client7z/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp36
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h26
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp303
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h151
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.cpp233
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp269
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h200
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/Bench.cpp1105
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/Bench.h23
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/DefaultName.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/DirItem.h18
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp128
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ExitCode.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/Extract.cpp59
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/Extract.h11
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ExtractMode.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.cpp190
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.h92
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h92
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp314
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.h136
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.cpp451
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.h45
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp60
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.h6
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/Property.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.cpp9
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/SortUtils.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/TempFiles.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/Update.cpp563
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/Update.h93
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/UpdateAction.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp203
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.h177
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.cpp10
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.h9
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.cpp39
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Common/ZipRegistry.h17
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.cpp8
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/Console.mak4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/Console.manifest3
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/ConsoleClose.h8
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp42
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h63
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/HashCon.cpp2
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/HashCon.h17
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/List.cpp84
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/List.h8
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/Main.cpp176
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/MainAr.cpp50
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp6
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h16
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp10
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp24
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h25
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp15
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/makefile3
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Console/makefile.gcc11
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp7
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.h8
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp419
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h19
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/DialogSize.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp161
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h159
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/FormatUtils.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/LangUtils.h18
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h53
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp12
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp10
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h12
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp18
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h33
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp127
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h47
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyName.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h2
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/StdAfx.h83
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp97
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h13
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/FileManager/resource.h10
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/GUI/7zG.exe.manifest23
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp62
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.h30
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp43
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.h6
-rw-r--r--3rdparty/lzma/CPP/7zip/UI/GUI/HashGUI.h4
-rw-r--r--3rdparty/lzma/CPP/7zip/warn_clang.mak40
-rw-r--r--3rdparty/lzma/CPP/7zip/warn_clang_mac.mak48
-rw-r--r--3rdparty/lzma/CPP/7zip/warn_gcc.mak42
-rw-r--r--3rdparty/lzma/CPP/Build.mak87
-rw-r--r--3rdparty/lzma/CPP/Common/AutoPtr.h10
-rw-r--r--3rdparty/lzma/CPP/Common/C_FileIO.h4
-rw-r--r--3rdparty/lzma/CPP/Common/ComTry.h4
-rw-r--r--3rdparty/lzma/CPP/Common/CommandLineParser.h4
-rw-r--r--3rdparty/lzma/CPP/Common/Common.h290
-rw-r--r--3rdparty/lzma/CPP/Common/CrcReg.cpp45
-rw-r--r--3rdparty/lzma/CPP/Common/Defs.h6
-rw-r--r--3rdparty/lzma/CPP/Common/DynLimBuf.cpp2
-rw-r--r--3rdparty/lzma/CPP/Common/DynLimBuf.h4
-rw-r--r--3rdparty/lzma/CPP/Common/DynamicBuffer.h10
-rw-r--r--3rdparty/lzma/CPP/Common/IntToString.cpp10
-rw-r--r--3rdparty/lzma/CPP/Common/IntToString.h4
-rw-r--r--3rdparty/lzma/CPP/Common/Lang.h17
-rw-r--r--3rdparty/lzma/CPP/Common/ListFileUtils.cpp4
-rw-r--r--3rdparty/lzma/CPP/Common/ListFileUtils.h8
-rw-r--r--3rdparty/lzma/CPP/Common/MyBuffer.h49
-rw-r--r--3rdparty/lzma/CPP/Common/MyBuffer2.h33
-rw-r--r--3rdparty/lzma/CPP/Common/MyCom.h370
-rw-r--r--3rdparty/lzma/CPP/Common/MyException.h4
-rw-r--r--3rdparty/lzma/CPP/Common/MyGuidDef.h22
-rw-r--r--3rdparty/lzma/CPP/Common/MyInitGuid.h26
-rw-r--r--3rdparty/lzma/CPP/Common/MyLinux.h4
-rw-r--r--3rdparty/lzma/CPP/Common/MyString.cpp140
-rw-r--r--3rdparty/lzma/CPP/Common/MyString.h89
-rw-r--r--3rdparty/lzma/CPP/Common/MyTypes.h21
-rw-r--r--3rdparty/lzma/CPP/Common/MyUnknown.h13
-rw-r--r--3rdparty/lzma/CPP/Common/MyVector.h21
-rw-r--r--3rdparty/lzma/CPP/Common/MyWindows.cpp8
-rw-r--r--3rdparty/lzma/CPP/Common/MyWindows.h120
-rw-r--r--3rdparty/lzma/CPP/Common/NewHandler.cpp184
-rw-r--r--3rdparty/lzma/CPP/Common/NewHandler.h20
-rw-r--r--3rdparty/lzma/CPP/Common/Sha256Reg.cpp29
-rw-r--r--3rdparty/lzma/CPP/Common/StdAfx.h4
-rw-r--r--3rdparty/lzma/CPP/Common/StdInStream.cpp5
-rw-r--r--3rdparty/lzma/CPP/Common/StdInStream.h12
-rw-r--r--3rdparty/lzma/CPP/Common/StdOutStream.cpp8
-rw-r--r--3rdparty/lzma/CPP/Common/StdOutStream.h18
-rw-r--r--3rdparty/lzma/CPP/Common/StringConvert.cpp3
-rw-r--r--3rdparty/lzma/CPP/Common/StringConvert.h4
-rw-r--r--3rdparty/lzma/CPP/Common/StringToInt.h4
-rw-r--r--3rdparty/lzma/CPP/Common/TextConfig.cpp8
-rw-r--r--3rdparty/lzma/CPP/Common/TextConfig.h4
-rw-r--r--3rdparty/lzma/CPP/Common/UTFConvert.cpp196
-rw-r--r--3rdparty/lzma/CPP/Common/UTFConvert.h64
-rw-r--r--3rdparty/lzma/CPP/Common/Wildcard.cpp14
-rw-r--r--3rdparty/lzma/CPP/Common/Wildcard.h6
-rw-r--r--3rdparty/lzma/CPP/Common/XzCrc64Reg.cpp25
-rw-r--r--3rdparty/lzma/CPP/Windows/COM.h32
-rw-r--r--3rdparty/lzma/CPP/Windows/Clipboard.h6
-rw-r--r--3rdparty/lzma/CPP/Windows/CommonDialog.cpp291
-rw-r--r--3rdparty/lzma/CPP/Windows/CommonDialog.h44
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ComboBox.cpp8
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ComboBox.h22
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/CommandBar.h12
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/Dialog.cpp51
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/Dialog.h114
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/Edit.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ImageList.h6
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ListView.cpp47
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ListView.h51
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ProgressBar.h24
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/PropertyPage.cpp90
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/PropertyPage.h20
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ReBar.h6
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/Static.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/StatusBar.h10
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/StdAfx.h7
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/ToolBar.h6
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/Trackbar.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/Window2.cpp14
-rw-r--r--3rdparty/lzma/CPP/Windows/Control/Window2.h16
-rw-r--r--3rdparty/lzma/CPP/Windows/DLL.cpp50
-rw-r--r--3rdparty/lzma/CPP/Windows/DLL.h49
-rw-r--r--3rdparty/lzma/CPP/Windows/Defs.h5
-rw-r--r--3rdparty/lzma/CPP/Windows/ErrorMsg.cpp8
-rw-r--r--3rdparty/lzma/CPP/Windows/ErrorMsg.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/FileDir.cpp235
-rw-r--r--3rdparty/lzma/CPP/Windows/FileDir.h6
-rw-r--r--3rdparty/lzma/CPP/Windows/FileFind.cpp36
-rw-r--r--3rdparty/lzma/CPP/Windows/FileFind.h14
-rw-r--r--3rdparty/lzma/CPP/Windows/FileIO.cpp38
-rw-r--r--3rdparty/lzma/CPP/Windows/FileIO.h51
-rw-r--r--3rdparty/lzma/CPP/Windows/FileLink.cpp79
-rw-r--r--3rdparty/lzma/CPP/Windows/FileMapping.h6
-rw-r--r--3rdparty/lzma/CPP/Windows/FileName.cpp171
-rw-r--r--3rdparty/lzma/CPP/Windows/FileName.h38
-rw-r--r--3rdparty/lzma/CPP/Windows/FileSystem.cpp24
-rw-r--r--3rdparty/lzma/CPP/Windows/FileSystem.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/Handle.h8
-rw-r--r--3rdparty/lzma/CPP/Windows/MemoryGlobal.h12
-rw-r--r--3rdparty/lzma/CPP/Windows/MemoryLock.cpp28
-rw-r--r--3rdparty/lzma/CPP/Windows/MemoryLock.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/NtCheck.h14
-rw-r--r--3rdparty/lzma/CPP/Windows/PropVariant.cpp8
-rw-r--r--3rdparty/lzma/CPP/Windows/PropVariant.h10
-rw-r--r--3rdparty/lzma/CPP/Windows/PropVariantConv.cpp10
-rw-r--r--3rdparty/lzma/CPP/Windows/PropVariantConv.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/Registry.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/ResourceString.h5
-rw-r--r--3rdparty/lzma/CPP/Windows/SecurityUtils.cpp38
-rw-r--r--3rdparty/lzma/CPP/Windows/SecurityUtils.h12
-rw-r--r--3rdparty/lzma/CPP/Windows/Shell.cpp574
-rw-r--r--3rdparty/lzma/CPP/Windows/Shell.h62
-rw-r--r--3rdparty/lzma/CPP/Windows/StdAfx.h8
-rw-r--r--3rdparty/lzma/CPP/Windows/Synchronization.cpp24
-rw-r--r--3rdparty/lzma/CPP/Windows/Synchronization.h50
-rw-r--r--3rdparty/lzma/CPP/Windows/System.cpp58
-rw-r--r--3rdparty/lzma/CPP/Windows/System.h17
-rw-r--r--3rdparty/lzma/CPP/Windows/SystemInfo.cpp291
-rw-r--r--3rdparty/lzma/CPP/Windows/SystemInfo.h5
-rw-r--r--3rdparty/lzma/CPP/Windows/Thread.h6
-rw-r--r--3rdparty/lzma/CPP/Windows/TimeUtils.cpp4
-rw-r--r--3rdparty/lzma/CPP/Windows/TimeUtils.h4
-rw-r--r--3rdparty/lzma/CPP/Windows/Window.cpp10
-rw-r--r--3rdparty/lzma/CPP/Windows/Window.h113
401 files changed, 15008 insertions, 9235 deletions
diff --git a/3rdparty/lzma/CPP/7zip/7zip.mak b/3rdparty/lzma/CPP/7zip/7zip.mak
index 7fbe2ada738..6f4a0a1c7fe 100644
--- a/3rdparty/lzma/CPP/7zip/7zip.mak
+++ b/3rdparty/lzma/CPP/7zip/7zip.mak
@@ -5,14 +5,14 @@ OBJS = \
$(WIN_OBJS) \
$(WIN_CTRL_OBJS) \
$(7ZIP_COMMON_OBJS) \
- $(AR_OBJS) \
- $(AR_COMMON_OBJS) \
$(UI_COMMON_OBJS) \
$(AGENT_OBJS) \
$(CONSOLE_OBJS) \
$(EXPLORER_OBJS) \
$(FM_OBJS) \
$(GUI_OBJS) \
+ $(AR_COMMON_OBJS) \
+ $(AR_OBJS) \
$(7Z_OBJS) \
$(CAB_OBJS) \
$(CHM_OBJS) \
diff --git a/3rdparty/lzma/CPP/7zip/7zip_gcc.mak b/3rdparty/lzma/CPP/7zip/7zip_gcc.mak
index f65cff2eddf..8bf0594ef6b 100644
--- a/3rdparty/lzma/CPP/7zip/7zip_gcc.mak
+++ b/3rdparty/lzma/CPP/7zip/7zip_gcc.mak
@@ -12,23 +12,35 @@ ifdef USE_JWASM
MY_ASM = jwasm
endif
+ifndef RC
+RC=windres.exe --target=pe-x86-64
+RC=windres.exe -F pe-i386
+RC=windres.exe
+endif
+
PROGPATH = $(O)/$(PROG)
PROGPATH_STATIC = $(O)/$(PROG)s
ifneq ($(CC), xlc)
-CFLAGS_WARN_WALL = -Wall -Werror -Wextra
+CFLAGS_WARN_WALL = -Werror -Wall -Wextra
endif
# for object file
+# -Wa,-aln=test.s
+# -save-temps
CFLAGS_BASE_LIST = -c
# CFLAGS_BASE_LIST = -S
CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
-DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
-fPIC
-# -D_7ZIP_AFFINITY_DISABLE
+FLAGS_FLTO = -ffunction-sections
+FLAGS_FLTO = -flto
+FLAGS_FLTO =
+#
+# -DZ7_AFFINITY_DISABLE
ifdef SystemDrive
@@ -83,8 +95,7 @@ endif
else
LDFLAGS = $(LDFLAGS_STATIC)
-# -s is not required for clang, do we need it for GGC ???
-# -s
+# -s is not required for clang, do we need it for GCC ???
#-static -static-libgcc -static-libstdc++
@@ -113,7 +124,7 @@ MY_MKDIR=mkdir
DEL_OBJ_EXE = -$(RM) $(O)\*.o $(O)\$(PROG).exe $(O)\$(PROG).dll
endif
-LIB2_GUI = -lOle32 -lGdi32 -lComctl32 -lComdlg32 $(LIB_HTMLHELP)
+LIB2_GUI = -lOle32 -lGdi32 -lComctl32 -lComdlg32 -lShell32 $(LIB_HTMLHELP)
LIB2 = -loleaut32 -luuid -ladvapi32 -lUser32 $(LIB2_GUI)
CXXFLAGS_EXTRA = -DUNICODE -D_UNICODE
@@ -126,7 +137,7 @@ RM = rm -f
MY_MKDIR=mkdir -p
DEL_OBJ_EXE = -$(RM) $(PROGPATH) $(PROGPATH_STATIC) $(OBJS)
-# CFLAGS_BASE := $(CFLAGS_BASE) -D_7ZIP_ST
+# CFLAGS_BASE := $(CFLAGS_BASE) -DZ7_ST
# CXXFLAGS_EXTRA = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
# LOCAL_LIBS=-lpthread
@@ -138,7 +149,7 @@ endif
-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
+CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(FLAGS_FLTO) $(CC_SHARED) -o $@
ifdef IS_MINGW
@@ -170,7 +181,7 @@ endif # IS_MINGW
ifdef USE_ASM
-CONSOLE_ASM_FLAGS=-D_7ZIP_ASM
+CONSOLE_ASM_FLAGS=-DZ7_7ZIP_ASM
else
CONSOLE_ASM_FLAGS=
endif
@@ -179,7 +190,7 @@ CXX_WARN_FLAGS =
#-Wno-invalid-offsetof
#-Wno-reorder
-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
+CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(FLAGS_FLTO) $(CXXFLAGS_EXTRA) $(CC_SHARED) $(CXX_WARN_FLAGS) $(CXX_STD_FLAGS) -o $@
STATIC_TARGET=
ifdef COMPL_STATIC
@@ -192,7 +203,20 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
$(O):
$(MY_MKDIR) $(O)
-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
+# LDFLAGS3= -flto
+# LDFLAGS3= -Wl,--gc-sections
+# -Wl,--print-gc-sections
+
+ifneq ($(CC), $(CROSS_COMPILE)clang)
+LFLAGS_STRIP = -s
+endif
+
+LFLAGS_ALL = $(LFLAGS_STRIP) $(MY_ARCH_2) $(LDFLAGS) $(FLAGS_FLTO) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
+
+# -s : GCC : Remove all symbol table and relocation information from the executable.
+# -s : CLANG : unsupported
+# -s
+
$(PROGPATH): $(OBJS)
$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
@@ -206,7 +230,14 @@ $(PROGPATH_STATIC): $(OBJS)
ifndef NO_DEFAULT_RES
$O/resource.o: resource.rc
- windres.exe $(RFLAGS) resource.rc $O/resource.o
+ $(RC) $(RFLAGS) resource.rc $@
+
+# windres.exe : in old version mingw:
+# $(RFLAGS) resource.rc $O/resource.o
+# windres.exe : in new version mingw:
+# $(RC) $(RFLAGS) resource.rc -FO $@
+
+
endif
$O/LzmaAlone.o: LzmaAlone.cpp
@@ -383,6 +414,8 @@ $O/MethodId.o: ../../Common/MethodId.cpp
$(CXX) $(CXXFLAGS) $<
$O/MethodProps.o: ../../Common/MethodProps.cpp
$(CXX) $(CXXFLAGS) $<
+$O/MultiOutStream.o: ../../Common/MultiOutStream.cpp
+ $(CXX) $(CXXFLAGS) $<
$O/OffsetStream.o: ../../Common/OffsetStream.cpp
$(CXX) $(CXXFLAGS) $<
$O/OutBuffer.o: ../../Common/OutBuffer.cpp
@@ -1144,10 +1177,19 @@ $O/Sha256.o: ../../../../C/Sha256.c
$(CC) $(CFLAGS) $<
$O/Sort.o: ../../../../C/Sort.c
$(CC) $(CFLAGS) $<
+$O/SwapBytes.o: ../../../../C/SwapBytes.c
+ $(CC) $(CFLAGS) $<
$O/Xz.o: ../../../../C/Xz.c
$(CC) $(CFLAGS) $<
$O/XzCrc64.o: ../../../../C/XzCrc64.c
$(CC) $(CFLAGS) $<
+$O/XzDec.o: ../../../../C/XzDec.c
+ $(CC) $(CFLAGS) $<
+$O/XzEnc.o: ../../../../C/XzEnc.c
+ $(CC) $(CFLAGS) $<
+$O/XzIn.o: ../../../../C/XzIn.c
+ $(CC) $(CFLAGS) $<
+
ifdef USE_ASM
ifdef IS_X64
@@ -1216,7 +1258,7 @@ $O/LzmaDecOpt.o: ../../../../Asm/arm64/LzmaDecOpt.S ../../../../Asm/arm64/7zAsm.
endif
$O/LzmaDec.o: ../../../../C/LzmaDec.c
- $(CC) $(CFLAGS) -D_LZMA_DEC_OPT $<
+ $(CC) $(CFLAGS) -DZ7_LZMA_DEC_OPT $<
else
@@ -1227,13 +1269,6 @@ endif
-$O/XzDec.o: ../../../../C/XzDec.c
- $(CC) $(CFLAGS) $<
-$O/XzEnc.o: ../../../../C/XzEnc.c
- $(CC) $(CFLAGS) $<
-$O/XzIn.o: ../../../../C/XzIn.c
- $(CC) $(CFLAGS) $<
-
$O/7zMain.o: ../../../../C/Util/7z/7zMain.c
$(CC) $(CFLAGS) $<
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h
index 9e8463452d6..ac1f6ad14ca 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h
@@ -1,7 +1,7 @@
// 7zCompressionMode.h
-#ifndef __7Z_COMPRESSION_MODE_H
-#define __7Z_COMPRESSION_MODE_H
+#ifndef ZIP7_INC_7Z_COMPRESSION_MODE_H
+#define ZIP7_INC_7Z_COMPRESSION_MODE_H
#include "../../Common/MethodId.h"
#include "../../Common/MethodProps.h"
@@ -53,7 +53,7 @@ struct CCompressionMethodMode
bool DefaultMethod_was_Inserted;
bool Filter_was_Inserted;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
UInt32 NumThreads;
bool NumThreads_WasForced;
bool MultiThreadMixer;
@@ -69,7 +69,7 @@ struct CCompressionMethodMode
CCompressionMethodMode():
DefaultMethod_was_Inserted(false)
, Filter_was_Inserted(false)
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
, NumThreads(1)
, NumThreads_WasForced(false)
, MultiThreadMixer(true)
@@ -79,6 +79,10 @@ struct CCompressionMethodMode
, PasswordIsDefined(false)
{}
+#ifdef Z7_CPP_IS_SUPPORTED_default
+ CCompressionMethodMode(const CCompressionMethodMode &) = default;
+ CCompressionMethodMode& operator =(const CCompressionMethodMode &) = default;
+#endif
~CCompressionMethodMode() { Password.Wipe_and_Empty(); }
};
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.cpp
index c27c8fbc6ac..5420dcee30d 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.cpp
@@ -5,25 +5,23 @@
#include "../../Common/LimitedStreams.h"
#include "../../Common/ProgressUtils.h"
#include "../../Common/StreamObjects.h"
+#include "../../Common/StreamUtils.h"
#include "7zDecode.h"
namespace NArchive {
namespace N7z {
-class CDecProgress:
- public ICompressProgressInfo,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CDecProgress
+ , ICompressProgressInfo
+)
CMyComPtr<ICompressProgressInfo> _progress;
public:
CDecProgress(ICompressProgressInfo *progress): _progress(progress) {}
-
- MY_UNKNOWN_IMP1(ICompressProgressInfo)
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
};
-STDMETHODIMP CDecProgress::SetRatioInfo(const UInt64 * /* inSize */, const UInt64 *outSize)
+Z7_COM7F_IMF(CDecProgress::SetRatioInfo(const UInt64 * /* inSize */, const UInt64 *outSize))
{
return _progress->SetRatioInfo(NULL, outSize);
}
@@ -110,20 +108,23 @@ static bool AreBindInfoExEqual(const CBindInfoEx &a1, const CBindInfoEx &a2)
}
CDecoder::CDecoder(bool useMixerMT):
- _bindInfoPrev_Defined(false),
- _useMixerMT(useMixerMT)
-{}
+ _bindInfoPrev_Defined(false)
+{
+ #if defined(USE_MIXER_ST) && defined(USE_MIXER_MT)
+ _useMixerMT = useMixerMT;
+ #else
+ UNUSED_VAR(useMixerMT)
+ #endif
+}
-struct CLockedInStream:
- public IUnknown,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_0(
+ CLockedInStream
+)
+public:
CMyComPtr<IInStream> Stream;
UInt64 Pos;
- MY_UNKNOWN_IMP
-
#ifdef USE_MIXER_MT
NWindows::NSynchronization::CCriticalSection CriticalSection;
#endif
@@ -132,10 +133,10 @@ struct CLockedInStream:
#ifdef USE_MIXER_MT
-class CLockedSequentialInStreamMT:
- public ISequentialInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CLockedSequentialInStreamMT
+ , ISequentialInStream
+)
CLockedInStream *_glob;
UInt64 _pos;
CMyComPtr<IUnknown> _globRef;
@@ -146,24 +147,20 @@ public:
_glob = lockedInStream;
_pos = startPos;
}
-
- MY_UNKNOWN_IMP1(ISequentialInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
};
-STDMETHODIMP CLockedSequentialInStreamMT::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CLockedSequentialInStreamMT::Read(void *data, UInt32 size, UInt32 *processedSize))
{
NWindows::NSynchronization::CCriticalSectionLock lock(_glob->CriticalSection);
if (_pos != _glob->Pos)
{
- RINOK(_glob->Stream->Seek((Int64)_pos, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekSet(_glob->Stream, _pos))
_glob->Pos = _pos;
}
UInt32 realProcessedSize = 0;
- HRESULT res = _glob->Stream->Read(data, size, &realProcessedSize);
+ const HRESULT res = _glob->Stream->Read(data, size, &realProcessedSize);
_pos += realProcessedSize;
_glob->Pos = _pos;
if (processedSize)
@@ -176,10 +173,10 @@ STDMETHODIMP CLockedSequentialInStreamMT::Read(void *data, UInt32 size, UInt32 *
#ifdef USE_MIXER_ST
-class CLockedSequentialInStreamST:
- public ISequentialInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CLockedSequentialInStreamST
+ , ISequentialInStream
+)
CLockedInStream *_glob;
UInt64 _pos;
CMyComPtr<IUnknown> _globRef;
@@ -190,22 +187,18 @@ public:
_glob = lockedInStream;
_pos = startPos;
}
-
- MY_UNKNOWN_IMP1(ISequentialInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
};
-STDMETHODIMP CLockedSequentialInStreamST::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CLockedSequentialInStreamST::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (_pos != _glob->Pos)
{
- RINOK(_glob->Stream->Seek((Int64)_pos, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekSet(_glob->Stream, _pos))
_glob->Pos = _pos;
}
UInt32 realProcessedSize = 0;
- HRESULT res = _glob->Stream->Read(data, size, &realProcessedSize);
+ const HRESULT res = _glob->Stream->Read(data, size, &realProcessedSize);
_pos += realProcessedSize;
_glob->Pos = _pos;
if (processedSize)
@@ -234,9 +227,9 @@ HRESULT CDecoder::Decode(
, bool &dataAfterEnd_Error
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
- #if !defined(_7ZIP_ST)
+ #if !defined(Z7_ST)
, bool mtMode, UInt32 numThreads, UInt64 memUsage
#endif
)
@@ -268,7 +261,7 @@ HRESULT CDecoder::Decode(
We don't need to init isEncrypted and passwordIsDefined
We must upgrade them only
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
isEncrypted = false;
passwordIsDefined = false;
#endif
@@ -300,13 +293,13 @@ HRESULT CDecoder::Decode(
#endif
}
- RINOK(_mixer->SetBindInfo(bindInfo));
+ RINOK(_mixer->SetBindInfo(bindInfo))
FOR_VECTOR(i, folderInfo.Coders)
{
const CCoderInfo &coderInfo = folderInfo.Coders[i];
- #ifndef _SFX
+ #ifndef Z7_SFX
// we don't support RAR codecs here
if ((coderInfo.MethodID >> 8) == 0x403)
return E_NOTIMPL;
@@ -315,7 +308,7 @@ HRESULT CDecoder::Decode(
CCreatedCoder cod;
RINOK(CreateCoder_Id(
EXTERNAL_CODECS_LOC_VARS
- coderInfo.MethodID, false, cod));
+ coderInfo.MethodID, false, cod))
if (coderInfo.IsSimpleCoder())
{
@@ -333,13 +326,13 @@ HRESULT CDecoder::Decode(
// now there is no codec that uses another external codec
/*
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CMyComPtr<ISetCompressCodecsInfo> setCompressCodecsInfo;
decoderUnknown.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo);
if (setCompressCodecsInfo)
{
// we must use g_ExternalCodecs also
- RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(__externalCodecs->GetCodecs));
+ RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(_externalCodecs->GetCodecs));
}
#endif
*/
@@ -349,14 +342,14 @@ HRESULT CDecoder::Decode(
_bindInfoPrev_Defined = true;
}
- RINOK(_mixer->ReInit2());
+ RINOK(_mixer->ReInit2())
UInt32 packStreamIndex = 0;
UInt32 unpackStreamIndexStart = folders.FoToCoderUnpackSizes[folderIndex];
unsigned i;
- #if !defined(_7ZIP_ST)
+ #if !defined(Z7_ST)
bool mt_wasUsed = false;
#endif
@@ -365,59 +358,81 @@ HRESULT CDecoder::Decode(
const CCoderInfo &coderInfo = folderInfo.Coders[i];
IUnknown *decoder = _mixer->GetCoder(i).GetUnknown();
- #if !defined(_7ZIP_ST)
+ // now there is no codec that uses another external codec
+ /*
+ #ifdef Z7_EXTERNAL_CODECS
+ {
+ Z7_DECL_CMyComPtr_QI_FROM(ISetCompressCodecsInfo,
+ setCompressCodecsInfo, decoder)
+ if (setCompressCodecsInfo)
+ {
+ // we must use g_ExternalCodecs also
+ RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(_externalCodecs->GetCodecs))
+ }
+ }
+ #endif
+ */
+
+ #if !defined(Z7_ST)
if (!mt_wasUsed)
{
if (mtMode)
{
- CMyComPtr<ICompressSetCoderMt> setCoderMt;
- decoder->QueryInterface(IID_ICompressSetCoderMt, (void **)&setCoderMt);
+ Z7_DECL_CMyComPtr_QI_FROM(ICompressSetCoderMt,
+ setCoderMt, decoder)
if (setCoderMt)
{
mt_wasUsed = true;
- RINOK(setCoderMt->SetNumberOfThreads(numThreads));
+ RINOK(setCoderMt->SetNumberOfThreads(numThreads))
}
}
// if (memUsage != 0)
{
- CMyComPtr<ICompressSetMemLimit> setMemLimit;
- decoder->QueryInterface(IID_ICompressSetMemLimit, (void **)&setMemLimit);
+ Z7_DECL_CMyComPtr_QI_FROM(ICompressSetMemLimit,
+ setMemLimit, decoder)
if (setMemLimit)
{
mt_wasUsed = true;
- RINOK(setMemLimit->SetMemLimit(memUsage));
+ RINOK(setMemLimit->SetMemLimit(memUsage))
}
}
}
#endif
{
- CMyComPtr<ICompressSetDecoderProperties2> setDecoderProperties;
- decoder->QueryInterface(IID_ICompressSetDecoderProperties2, (void **)&setDecoderProperties);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICompressSetDecoderProperties2,
+ setDecoderProperties, decoder)
+ const CByteBuffer &props = coderInfo.Props;
+ const UInt32 size32 = (UInt32)props.Size();
+ if (props.Size() != size32)
+ return E_NOTIMPL;
if (setDecoderProperties)
{
- const CByteBuffer &props = coderInfo.Props;
- const UInt32 size32 = (UInt32)props.Size();
- if (props.Size() != size32)
- return E_NOTIMPL;
HRESULT res = setDecoderProperties->SetDecoderProperties2((const Byte *)props, size32);
if (res == E_INVALIDARG)
res = E_NOTIMPL;
- RINOK(res);
+ RINOK(res)
+ }
+ else if (size32 != 0)
+ {
+ // v23: we fail, if decoder doesn't support properties
+ return E_NOTIMPL;
}
}
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
{
- CMyComPtr<ICryptoSetPassword> cryptoSetPassword;
- decoder->QueryInterface(IID_ICryptoSetPassword, (void **)&cryptoSetPassword);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICryptoSetPassword,
+ cryptoSetPassword, decoder)
if (cryptoSetPassword)
{
isEncrypted = true;
if (!getTextPassword)
return E_NOTIMPL;
CMyComBSTR_Wipe passwordBSTR;
- RINOK(getTextPassword->CryptoGetTextPassword(&passwordBSTR));
+ RINOK(getTextPassword->CryptoGetTextPassword(&passwordBSTR))
passwordIsDefined = true;
password.Wipe_and_Empty();
size_t len = 0;
@@ -429,23 +444,24 @@ HRESULT CDecoder::Decode(
CByteBuffer_Wipe buffer(len * 2);
for (size_t k = 0; k < len; k++)
{
- wchar_t c = passwordBSTR[k];
+ const wchar_t c = passwordBSTR[k];
((Byte *)buffer)[k * 2] = (Byte)c;
((Byte *)buffer)[k * 2 + 1] = (Byte)(c >> 8);
}
- RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, (UInt32)buffer.Size()));
+ RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, (UInt32)buffer.Size()))
}
}
#endif
bool finishMode = false;
{
- CMyComPtr<ICompressSetFinishMode> setFinishMode;
- decoder->QueryInterface(IID_ICompressSetFinishMode, (void **)&setFinishMode);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICompressSetFinishMode,
+ setFinishMode, decoder)
if (setFinishMode)
{
finishMode = fullUnpack;
- RINOK(setFinishMode->SetFinishMode(BoolToUInt(finishMode)));
+ RINOK(setFinishMode->SetFinishMode(BoolToUInt(finishMode)))
}
}
@@ -497,8 +513,8 @@ HRESULT CDecoder::Decode(
if (folderInfo.PackStreams.Size() > 1)
{
// lockedInStream.Pos = (UInt64)(Int64)-1;
- // RINOK(inStream->Seek(0, STREAM_SEEK_CUR, &lockedInStream.Pos));
- RINOK(inStream->Seek((Int64)(startPos + packPositions[0]), STREAM_SEEK_SET, &lockedInStreamSpec->Pos));
+ // RINOK(InStream_GetPos(inStream, lockedInStream.Pos))
+ RINOK(inStream->Seek((Int64)(startPos + packPositions[0]), STREAM_SEEK_SET, &lockedInStreamSpec->Pos))
lockedInStreamSpec->Stream = inStream;
#ifdef USE_MIXER_MT
@@ -523,7 +539,7 @@ HRESULT CDecoder::Decode(
if (folderInfo.PackStreams.Size() == 1)
{
- RINOK(inStream->Seek((Int64)packPos, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekSet(inStream, packPos))
packStream = inStream;
}
else
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.h
index eeb146e384c..ee9d9c255b1 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zDecode.h
@@ -1,7 +1,7 @@
// 7zDecode.h
-#ifndef __7Z_DECODE_H
-#define __7Z_DECODE_H
+#ifndef ZIP7_INC_7Z_DECODE_H
+#define ZIP7_INC_7Z_DECODE_H
#include "../Common/CoderMixer2.h"
@@ -24,10 +24,13 @@ struct CBindInfoEx: public NCoderMixer2::CBindInfo
class CDecoder
{
bool _bindInfoPrev_Defined;
+ #ifdef USE_MIXER_ST
+ #ifdef USE_MIXER_MT
+ bool _useMixerMT;
+ #endif
+ #endif
CBindInfoEx _bindInfoPrev;
- bool _useMixerMT;
-
#ifdef USE_MIXER_ST
NCoderMixer2::CMixerST *_mixerST;
#endif
@@ -57,9 +60,9 @@ public:
, ISequentialInStream **inStreamMainRes
, bool &dataAfterEnd_Error
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
- #if !defined(_7ZIP_ST)
+ #if !defined(Z7_ST)
, bool mtMode, UInt32 numThreads, UInt64 memUsage
#endif
);
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.cpp
index 83b0f18f4bc..78c91cfa28b 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.cpp
@@ -2,6 +2,8 @@
#include "StdAfx.h"
+#include "../../../Common/ComTry.h"
+
#include "../../Common/CreateCoder.h"
#include "../../Common/FilterCoder.h"
#include "../../Common/LimitedStreams.h"
@@ -19,11 +21,11 @@ void CEncoder::InitBindConv()
{
unsigned numIn = _bindInfo.Coders.Size();
- _SrcIn_to_DestOut.ClearAndSetSize(numIn);
- _DestOut_to_SrcIn.ClearAndSetSize(numIn);
+ SrcIn_to_DestOut.ClearAndSetSize(numIn);
+ DestOut_to_SrcIn.ClearAndSetSize(numIn);
unsigned numOut = _bindInfo.GetNum_Bonds_and_PackStreams();
- _SrcOut_to_DestIn.ClearAndSetSize(numOut);
+ SrcOut_to_DestIn.ClearAndSetSize(numOut);
// _DestIn_to_SrcOut.ClearAndSetSize(numOut);
UInt32 destIn = 0;
@@ -38,15 +40,15 @@ void CEncoder::InitBindConv()
numIn--;
numOut -= coder.NumStreams;
- _SrcIn_to_DestOut[numIn] = destOut;
- _DestOut_to_SrcIn[destOut] = numIn;
+ SrcIn_to_DestOut[numIn] = destOut;
+ DestOut_to_SrcIn[destOut] = numIn;
destOut++;
for (UInt32 j = 0; j < coder.NumStreams; j++, destIn++)
{
UInt32 index = numOut + j;
- _SrcOut_to_DestIn[index] = destIn;
+ SrcOut_to_DestIn[index] = destIn;
// _DestIn_to_SrcOut[destIn] = index;
}
}
@@ -62,8 +64,8 @@ void CEncoder::SetFolder(CFolder &folder)
{
CBond &fb = folder.Bonds[i];
const NCoderMixer2::CBond &mixerBond = _bindInfo.Bonds[_bindInfo.Bonds.Size() - 1 - i];
- fb.PackIndex = _SrcOut_to_DestIn[mixerBond.PackIndex];
- fb.UnpackIndex = _SrcIn_to_DestOut[mixerBond.UnpackIndex];
+ fb.PackIndex = SrcOut_to_DestIn[mixerBond.PackIndex];
+ fb.UnpackIndex = SrcIn_to_DestOut[mixerBond.UnpackIndex];
}
folder.Coders.SetSize(_bindInfo.Coders.Size());
@@ -81,15 +83,16 @@ void CEncoder::SetFolder(CFolder &folder)
folder.PackStreams.SetSize(_bindInfo.PackStreams.Size());
for (i = 0; i < _bindInfo.PackStreams.Size(); i++)
- folder.PackStreams[i] = _SrcOut_to_DestIn[_bindInfo.PackStreams[i]];
+ folder.PackStreams[i] = SrcOut_to_DestIn[_bindInfo.PackStreams[i]];
}
static HRESULT SetCoderProps2(const CProps &props, const UInt64 *dataSizeReduce, IUnknown *coder)
{
- CMyComPtr<ICompressSetCoderProperties> setCoderProperties;
- coder->QueryInterface(IID_ICompressSetCoderProperties, (void **)&setCoderProperties);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICompressSetCoderProperties,
+ setCoderProperties, coder)
if (setCoderProperties)
return props.SetCoderProps(setCoderProperties, dataSizeReduce);
return props.AreThereNonOptionalProps() ? E_INVALIDARG : S_OK;
@@ -103,11 +106,11 @@ void CMtEncMultiProgress::Init(ICompressProgressInfo *progress)
OutSize = 0;
}
-STDMETHODIMP CMtEncMultiProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 * /* outSize */)
+Z7_COM7F_IMF(CMtEncMultiProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 * /* outSize */))
{
UInt64 outSize2;
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
#endif
outSize2 = OutSize;
@@ -146,7 +149,7 @@ HRESULT CEncoder::CreateMixerCoder(
#endif
}
- RINOK(_mixer->SetBindInfo(_bindInfo));
+ RINOK(_mixer->SetBindInfo(_bindInfo))
FOR_VECTOR (m, _options.Methods)
{
@@ -158,23 +161,27 @@ HRESULT CEncoder::CreateMixerCoder(
{
RINOK(CreateCoder_Index(
EXTERNAL_CODECS_LOC_VARS
- (unsigned)methodFull.CodecIndex, true, cod));
+ (unsigned)methodFull.CodecIndex, true, cod))
}
else
{
RINOK(CreateCoder_Id(
EXTERNAL_CODECS_LOC_VARS
- methodFull.Id, true, cod));
+ methodFull.Id, true, cod))
}
- if (cod.NumStreams != methodFull.NumStreams)
- return E_FAIL;
if (!cod.Coder && !cod.Coder2)
+ {
+ return E_NOTIMPL; // unsupported method, if encoder
+ // return E_FAIL;
+ }
+
+ if (cod.NumStreams != methodFull.NumStreams)
return E_FAIL;
CMyComPtr<IUnknown> encoderCommon = cod.Coder ? (IUnknown *)cod.Coder : (IUnknown *)cod.Coder2;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (methodFull.Set_NumThreads)
{
CMyComPtr<ICompressSetCoderMt> setCoderMt;
@@ -184,12 +191,12 @@ HRESULT CEncoder::CreateMixerCoder(
RINOK(setCoderMt->SetNumberOfThreads(
/* _options.NumThreads */
methodFull.NumThreads
- ));
+ ))
}
}
#endif
- RINOK(SetCoderProps2(methodFull, inSizeForReduce, encoderCommon));
+ RINOK(SetCoderProps2(methodFull, inSizeForReduce, encoderCommon))
/*
CMyComPtr<ICryptoResetSalt> resetSalt;
@@ -202,13 +209,13 @@ HRESULT CEncoder::CreateMixerCoder(
// now there is no codec that uses another external codec
/*
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CMyComPtr<ISetCompressCodecsInfo> setCompressCodecsInfo;
encoderCommon.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo);
if (setCompressCodecsInfo)
{
// we must use g_ExternalCodecs also
- RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(__externalCodecs->GetCodecs));
+ RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(_externalCodecs->GetCodecs));
}
#endif
*/
@@ -226,7 +233,7 @@ HRESULT CEncoder::CreateMixerCoder(
((Byte *)buffer)[i * 2] = (Byte)c;
((Byte *)buffer)[i * 2 + 1] = (Byte)(c >> 8);
}
- RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, (UInt32)sizeInBytes));
+ RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, (UInt32)sizeInBytes))
}
_mixer->AddCoder(cod);
@@ -236,85 +243,94 @@ HRESULT CEncoder::CreateMixerCoder(
-class CSequentialOutTempBufferImp2:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
- CInOutTempBuffer *_buf;
+Z7_CLASS_IMP_COM_1(
+ CSequentialOutTempBufferImp2
+ , ISequentialOutStream
+)
public:
- CMtEncMultiProgress *_mtProgresSpec;
+ CInOutTempBuffer TempBuffer;
+ CMtEncMultiProgress *_mtProgressSpec;
- CSequentialOutTempBufferImp2(): _buf(0), _mtProgresSpec(NULL) {}
- void Init(CInOutTempBuffer *buffer) { _buf = buffer; }
- MY_UNKNOWN_IMP1(ISequentialOutStream)
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
+ CSequentialOutTempBufferImp2(): _mtProgressSpec(NULL) {}
};
-STDMETHODIMP CSequentialOutTempBufferImp2::Write(const void *data, UInt32 size, UInt32 *processed)
+Z7_COM7F_IMF(CSequentialOutTempBufferImp2::Write(const void *data, UInt32 size, UInt32 *processed))
{
- HRESULT res = _buf->Write_HRESULT(data, size);
- if (res != S_OK)
- {
- if (processed)
- *processed = 0;
- return res;
- }
+ COM_TRY_BEGIN
+ if (processed)
+ *processed = 0;
+ RINOK(TempBuffer.Write_HRESULT(data, size))
if (processed)
*processed = size;
- if (_mtProgresSpec)
- _mtProgresSpec->AddOutSize(size);
+ if (_mtProgressSpec)
+ _mtProgressSpec->AddOutSize(size);
return S_OK;
+ COM_TRY_END
}
-class CSequentialOutMtNotify:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CSequentialOutMtNotify
+ , ISequentialOutStream
+)
public:
CMyComPtr<ISequentialOutStream> _stream;
- CMtEncMultiProgress *_mtProgresSpec;
+ CMtEncMultiProgress *_mtProgressSpec;
- CSequentialOutMtNotify(): _mtProgresSpec(NULL) {}
- MY_UNKNOWN_IMP1(ISequentialOutStream)
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
+ CSequentialOutMtNotify(): _mtProgressSpec(NULL) {}
};
-STDMETHODIMP CSequentialOutMtNotify::Write(const void *data, UInt32 size, UInt32 *processed)
+Z7_COM7F_IMF(CSequentialOutMtNotify::Write(const void *data, UInt32 size, UInt32 *processed))
{
UInt32 realProcessed = 0;
HRESULT res = _stream->Write(data, size, &realProcessed);
if (processed)
*processed = realProcessed;
- if (_mtProgresSpec)
- _mtProgresSpec->AddOutSize(size);
+ if (_mtProgressSpec)
+ _mtProgressSpec->AddOutSize(size);
return res;
}
+static HRESULT FillProps_from_Coder(IUnknown *coder, CByteBuffer &props)
+{
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICompressWriteCoderProperties,
+ writeCoderProperties, coder)
+ if (writeCoderProperties)
+ {
+ CDynBufSeqOutStream *outStreamSpec = new CDynBufSeqOutStream;
+ CMyComPtr<ISequentialOutStream> dynOutStream(outStreamSpec);
+ outStreamSpec->Init();
+ RINOK(writeCoderProperties->WriteCoderProperties(dynOutStream))
+ outStreamSpec->CopyToBuffer(props);
+ }
+ else
+ props.Free();
+ return S_OK;
+}
-HRESULT CEncoder::Encode(
+HRESULT CEncoder::Encode1(
DECL_EXTERNAL_CODECS_LOC_VARS
ISequentialInStream *inStream,
// const UInt64 *inStreamSize,
const UInt64 *inSizeForReduce,
+ UInt64 expectedDataSize,
CFolder &folderItem,
- CRecordVector<UInt64> &coderUnpackSizes,
- UInt64 &unpackSize,
+ // CRecordVector<UInt64> &coderUnpackSizes,
+ // UInt64 &unpackSize,
ISequentialOutStream *outStream,
CRecordVector<UInt64> &packSizes,
ICompressProgressInfo *compressProgress)
{
- RINOK(EncoderConstr());
+ RINOK(EncoderConstr())
if (!_mixerRef)
{
- RINOK(CreateMixerCoder(EXTERNAL_CODECS_LOC_VARS inSizeForReduce));
+ RINOK(CreateMixerCoder(EXTERNAL_CODECS_LOC_VARS inSizeForReduce))
}
- RINOK(_mixer->ReInit2());
+ RINOK(_mixer->ReInit2())
CMtEncMultiProgress *mtProgressSpec = NULL;
CMyComPtr<ICompressProgressInfo> mtProgress;
@@ -322,30 +338,21 @@ HRESULT CEncoder::Encode(
CSequentialOutMtNotify *mtOutStreamNotifySpec = NULL;
CMyComPtr<ISequentialOutStream> mtOutStreamNotify;
- CObjectVector<CInOutTempBuffer> inOutTempBuffers;
- CObjectVector<CSequentialOutTempBufferImp2 *> tempBufferSpecs;
+ CRecordVector<CSequentialOutTempBufferImp2 *> tempBufferSpecs;
CObjectVector<CMyComPtr<ISequentialOutStream> > tempBuffers;
- unsigned numMethods = _bindInfo.Coders.Size();
-
unsigned i;
for (i = 1; i < _bindInfo.PackStreams.Size(); i++)
{
- CInOutTempBuffer &iotb = inOutTempBuffers.AddNew();
- iotb.Create();
- iotb.InitWriting();
- }
-
- for (i = 1; i < _bindInfo.PackStreams.Size(); i++)
- {
- CSequentialOutTempBufferImp2 *tempBufferSpec = new CSequentialOutTempBufferImp2;
+ CSequentialOutTempBufferImp2 *tempBufferSpec = new CSequentialOutTempBufferImp2();
CMyComPtr<ISequentialOutStream> tempBuffer = tempBufferSpec;
- tempBufferSpec->Init(&inOutTempBuffers[i - 1]);
- tempBuffers.Add(tempBuffer);
tempBufferSpecs.Add(tempBufferSpec);
+ tempBuffers.Add(tempBuffer);
}
+ const unsigned numMethods = _bindInfo.Coders.Size();
+
for (i = 0; i < numMethods; i++)
_mixer->SetCoderInfo(i, NULL, NULL, false);
@@ -360,15 +367,19 @@ HRESULT CEncoder::Encode(
*/
+ /*
CSequentialInStreamSizeCount2 *inStreamSizeCountSpec = new CSequentialInStreamSizeCount2;
CMyComPtr<ISequentialInStream> inStreamSizeCount = inStreamSizeCountSpec;
+ */
CSequentialOutStreamSizeCount *outStreamSizeCountSpec = NULL;
CMyComPtr<ISequentialOutStream> outStreamSizeCount;
- inStreamSizeCountSpec->Init(inStream);
+ // inStreamSizeCountSpec->Init(inStream);
+
+ // ISequentialInStream *inStreamPointer = inStreamSizeCount;
+ ISequentialInStream *inStreamPointer = inStream;
- ISequentialInStream *inStreamPointer = inStreamSizeCount;
CRecordVector<ISequentialOutStream *> outStreamPointers;
SetFolder(folderItem);
@@ -376,49 +387,66 @@ HRESULT CEncoder::Encode(
for (i = 0; i < numMethods; i++)
{
IUnknown *coder = _mixer->GetCoder(i).GetUnknown();
+ /*
+ {
+ CEncoder *sfEncoder = NULL;
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IGetSfEncoderInternal,
+ sf, coder)
+ if (sf)
+ {
+ RINOK(sf->GetSfEncoder(&sfEncoder));
+ if (!sfEncoder)
+ return E_FAIL;
- CMyComPtr<ICryptoResetInitVector> resetInitVector;
- coder->QueryInterface(IID_ICryptoResetInitVector, (void **)&resetInitVector);
- if (resetInitVector)
+ }
+ }
+ */
+ /*
+ #ifdef Z7_EXTERNAL_CODECS
{
- resetInitVector->ResetInitVector();
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ISetCompressCodecsInfo,
+ setCompressCodecsInfo, coder)
+ if (setCompressCodecsInfo)
+ {
+ // we must use g_ExternalCodecs also
+ RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(_externalCodecs->GetCodecs))
+ }
}
-
+ #endif
+ */
{
- CMyComPtr<ICompressSetCoderPropertiesOpt> optProps;
- coder->QueryInterface(IID_ICompressSetCoderPropertiesOpt, (void **)&optProps);
- if (optProps)
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICryptoResetInitVector,
+ resetInitVector, coder)
+ if (resetInitVector)
{
- PROPID propID = NCoderPropID::kExpectedDataSize;
- NWindows::NCOM::CPropVariant prop = (UInt64)unpackSize;
- RINOK(optProps->SetCoderPropertiesOpt(&propID, &prop, 1));
+ RINOK(resetInitVector->ResetInitVector())
}
}
-
- CMyComPtr<ICompressWriteCoderProperties> writeCoderProperties;
- coder->QueryInterface(IID_ICompressWriteCoderProperties, (void **)&writeCoderProperties);
-
- CByteBuffer &props = folderItem.Coders[numMethods - 1 - i].Props;
-
- if (writeCoderProperties)
{
- CDynBufSeqOutStream *outStreamSpec = new CDynBufSeqOutStream;
- CMyComPtr<ISequentialOutStream> dynOutStream(outStreamSpec);
- outStreamSpec->Init();
- RINOK(writeCoderProperties->WriteCoderProperties(dynOutStream));
- outStreamSpec->CopyToBuffer(props);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICompressSetCoderPropertiesOpt,
+ optProps, coder)
+ if (optProps)
+ {
+ const PROPID propID = NCoderPropID::kExpectedDataSize;
+ NWindows::NCOM::CPropVariant prop = (UInt64)expectedDataSize;
+ RINOK(optProps->SetCoderPropertiesOpt(&propID, &prop, 1))
+ }
}
- else
- props.Free();
+ // we must write properties from coder after ResetInitVector()
+ RINOK(FillProps_from_Coder(coder, folderItem.Coders[numMethods - 1 - i].Props))
}
_mixer->SelectMainCoder(false);
- UInt32 mainCoder = _mixer->MainCoderIndex;
+ const UInt32 mainCoder = _mixer->MainCoderIndex;
bool useMtProgress = false;
if (!_mixer->Is_PackSize_Correct_for_Coder(mainCoder))
{
- #ifdef _7ZIP_ST
+ #ifdef Z7_ST
if (!_mixer->IsThere_ExternalCoder_in_PackTree(mainCoder))
#endif
useMtProgress = true;
@@ -433,11 +461,11 @@ HRESULT CEncoder::Encode(
mtOutStreamNotifySpec = new CSequentialOutMtNotify;
mtOutStreamNotify = mtOutStreamNotifySpec;
mtOutStreamNotifySpec->_stream = outStream;
- mtOutStreamNotifySpec->_mtProgresSpec = mtProgressSpec;
+ mtOutStreamNotifySpec->_mtProgressSpec = mtProgressSpec;
- FOR_VECTOR(t, tempBufferSpecs)
+ FOR_VECTOR (t, tempBufferSpecs)
{
- tempBufferSpecs[t]->_mtProgresSpec = mtProgressSpec;
+ tempBufferSpecs[t]->_mtProgressSpec = mtProgressSpec;
}
}
@@ -459,35 +487,49 @@ HRESULT CEncoder::Encode(
RINOK(_mixer->Code(
&inStreamPointer,
&outStreamPointers.Front(),
- mtProgress ? (ICompressProgressInfo *)mtProgress : compressProgress, dataAfterEnd_Error));
+ mtProgress ? (ICompressProgressInfo *)mtProgress : compressProgress, dataAfterEnd_Error))
if (_bindInfo.PackStreams.Size() != 0)
packSizes.Add(outStreamSizeCountSpec->GetSize());
for (i = 1; i < _bindInfo.PackStreams.Size(); i++)
{
- CInOutTempBuffer &inOutTempBuffer = inOutTempBuffers[i - 1];
- RINOK(inOutTempBuffer.WriteToStream(outStream));
- packSizes.Add(inOutTempBuffer.GetDataSize());
+ CInOutTempBuffer &iotb = tempBufferSpecs[i - 1]->TempBuffer;
+ RINOK(iotb.WriteToStream(outStream))
+ packSizes.Add(iotb.GetDataSize());
}
- unpackSize = 0;
-
- for (i = 0; i < _bindInfo.Coders.Size(); i++)
+ /* Code() in some future codec can change properties.
+ v23: so we fill properties again after Code() */
+ for (i = 0; i < numMethods; i++)
+ {
+ IUnknown *coder = _mixer->GetCoder(i).GetUnknown();
+ RINOK(FillProps_from_Coder(coder, folderItem.Coders[numMethods - 1 - i].Props))
+ }
+
+ return S_OK;
+}
+
+
+void CEncoder::Encode_Post(
+ UInt64 unpackSize,
+ CRecordVector<UInt64> &coderUnpackSizes)
+{
+ // unpackSize = 0;
+ for (unsigned i = 0; i < _bindInfo.Coders.Size(); i++)
{
- int bond = _bindInfo.FindBond_for_UnpackStream(_DestOut_to_SrcIn[i]);
+ const int bond = _bindInfo.FindBond_for_UnpackStream(DestOut_to_SrcIn[i]);
UInt64 streamSize;
if (bond < 0)
{
- streamSize = inStreamSizeCountSpec->GetSize();
- unpackSize = streamSize;
+ // streamSize = inStreamSizeCountSpec->GetSize();
+ // unpackSize = streamSize;
+ streamSize = unpackSize;
}
else
streamSize = _mixer->GetBondStreamSize((unsigned)bond);
coderUnpackSizes.Add(streamSize);
}
-
- return S_OK;
}
@@ -610,15 +652,15 @@ HRESULT CEncoder::EncoderConstr()
if (_bindInfo.Coders[ci].NumStreams == 0)
break;
- UInt32 outIndex = _bindInfo.Coder_to_Stream[ci];
- int bond = _bindInfo.FindBond_for_PackStream(outIndex);
+ const UInt32 outIndex = _bindInfo.Coder_to_Stream[ci];
+ const int bond = _bindInfo.FindBond_for_PackStream(outIndex);
if (bond >= 0)
{
ci = _bindInfo.Bonds[(unsigned)bond].UnpackIndex;
continue;
}
- int si = _bindInfo.FindStream_in_PackStreams(outIndex);
+ const int si = _bindInfo.FindStream_in_PackStreams(outIndex);
if (si >= 0)
_bindInfo.PackStreams.MoveToFront((unsigned)si);
break;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.h
index 6ea7f276902..849ac63b9f4 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zEncode.h
@@ -1,7 +1,7 @@
// 7zEncode.h
-#ifndef __7Z_ENCODE_H
-#define __7Z_ENCODE_H
+#ifndef ZIP7_INC_7Z_ENCODE_H
+#define ZIP7_INC_7Z_ENCODE_H
#include "7zCompressionMode.h"
@@ -12,12 +12,12 @@
namespace NArchive {
namespace N7z {
-class CMtEncMultiProgress:
- public ICompressProgressInfo,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CMtEncMultiProgress,
+ ICompressProgressInfo
+)
CMyComPtr<ICompressProgressInfo> _progress;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NWindows::NSynchronization::CCriticalSection CriticalSection;
#endif
@@ -30,18 +30,15 @@ public:
void AddOutSize(UInt64 addOutSize)
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
#endif
OutSize += addOutSize;
}
-
- MY_UNKNOWN_IMP1(ICompressProgressInfo)
-
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
};
-class CEncoder MY_UNCOPYABLE
+
+class CEncoder Z7_final MY_UNCOPYABLE
{
#ifdef USE_MIXER_ST
NCoderMixer2::CMixerST *_mixerST;
@@ -57,10 +54,10 @@ class CEncoder MY_UNCOPYABLE
NCoderMixer2::CBindInfo _bindInfo;
CRecordVector<CMethodId> _decompressionMethods;
- CRecordVector<UInt32> _SrcIn_to_DestOut;
- CRecordVector<UInt32> _SrcOut_to_DestIn;
- // CRecordVector<UInt32> _DestIn_to_SrcOut;
- CRecordVector<UInt32> _DestOut_to_SrcIn;
+ CRecordVector<UInt32> SrcIn_to_DestOut;
+ CRecordVector<UInt32> SrcOut_to_DestIn;
+ // CRecordVector<UInt32> DestIn_to_SrcOut;
+ CRecordVector<UInt32> DestOut_to_SrcIn;
void InitBindConv();
void SetFolder(CFolder &folder);
@@ -74,17 +71,23 @@ public:
CEncoder(const CCompressionMethodMode &options);
~CEncoder();
HRESULT EncoderConstr();
- HRESULT Encode(
+ HRESULT Encode1(
DECL_EXTERNAL_CODECS_LOC_VARS
ISequentialInStream *inStream,
// const UInt64 *inStreamSize,
const UInt64 *inSizeForReduce,
+ UInt64 expectedDataSize,
CFolder &folderItem,
- CRecordVector<UInt64> &coderUnpackSizes,
- UInt64 &unpackSize,
+ // CRecordVector<UInt64> &coderUnpackSizes,
+ // UInt64 &unpackSize,
ISequentialOutStream *outStream,
CRecordVector<UInt64> &packSizes,
ICompressProgressInfo *compressProgress);
+
+ void Encode_Post(
+ UInt64 unpackSize,
+ CRecordVector<UInt64> &coderUnpackSizes);
+
};
}}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zExtract.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zExtract.cpp
index 8ca815d4242..5498c590cee 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zExtract.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zExtract.cpp
@@ -16,10 +16,11 @@
namespace NArchive {
namespace N7z {
-class CFolderOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CFolderOutStream
+ , ISequentialOutStream
+ /* , ICompressGetSubStreamSize */
+)
CMyComPtr<ISequentialOutStream> _stream;
public:
bool TestMode;
@@ -31,6 +32,7 @@ private:
UInt64 _rem;
const UInt32 *_indexes;
+ // unsigned _startIndex;
unsigned _numFiles;
unsigned _fileIndex;
@@ -40,8 +42,6 @@ private:
HRESULT ProcessEmptyFiles();
public:
- MY_UNKNOWN_IMP1(ISequentialOutStream)
-
const CDbEx *_db;
CMyComPtr<IArchiveExtractCallback> ExtractCallback;
@@ -52,8 +52,6 @@ public:
CheckCrc(true)
{}
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
-
HRESULT Init(unsigned startIndex, const UInt32 *indexes, unsigned numFiles);
HRESULT FlushCorrupted(Int32 callbackOperationResult);
@@ -63,6 +61,7 @@ public:
HRESULT CFolderOutStream::Init(unsigned startIndex, const UInt32 *indexes, unsigned numFiles)
{
+ // _startIndex = startIndex;
_fileIndex = startIndex;
_indexes = indexes;
_numFiles = numFiles;
@@ -76,11 +75,10 @@ HRESULT CFolderOutStream::Init(unsigned startIndex, const UInt32 *indexes, unsig
HRESULT CFolderOutStream::OpenFile(bool isCorrupted)
{
const CFileItem &fi = _db->Files[_fileIndex];
- UInt32 nextFileIndex = (_indexes ? *_indexes : _fileIndex);
- Int32 askMode = (_fileIndex == nextFileIndex) ?
- (TestMode ?
- NExtract::NAskMode::kTest :
- NExtract::NAskMode::kExtract) :
+ const UInt32 nextFileIndex = (_indexes ? *_indexes : _fileIndex);
+ Int32 askMode = (_fileIndex == nextFileIndex) ? TestMode ?
+ NExtract::NAskMode::kTest :
+ NExtract::NAskMode::kExtract :
NExtract::NAskMode::kSkip;
if (isCorrupted
@@ -90,7 +88,7 @@ HRESULT CFolderOutStream::OpenFile(bool isCorrupted)
askMode = NExtract::NAskMode::kTest;
CMyComPtr<ISequentialOutStream> realOutStream;
- RINOK(ExtractCallback->GetStream(_fileIndex, &realOutStream, askMode));
+ RINOK(ExtractCallback->GetStream(_fileIndex, &realOutStream, askMode))
_stream = realOutStream;
_crc = CRC_INIT_VAL;
@@ -136,13 +134,13 @@ HRESULT CFolderOutStream::ProcessEmptyFiles()
{
while (_numFiles != 0 && _db->Files[_fileIndex].Size == 0)
{
- RINOK(OpenFile());
- RINOK(CloseFile());
+ RINOK(OpenFile())
+ RINOK(CloseFile())
}
return S_OK;
}
-STDMETHODIMP CFolderOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CFolderOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -170,16 +168,16 @@ STDMETHODIMP CFolderOutStream::Write(const void *data, UInt32 size, UInt32 *proc
_rem -= cur;
if (_rem == 0)
{
- RINOK(CloseFile());
- RINOK(ProcessEmptyFiles());
+ RINOK(CloseFile())
+ RINOK(ProcessEmptyFiles())
}
- RINOK(result);
+ RINOK(result)
if (cur == 0)
break;
continue;
}
- RINOK(ProcessEmptyFiles());
+ RINOK(ProcessEmptyFiles())
if (_numFiles == 0)
{
// we support partial extracting
@@ -192,7 +190,7 @@ STDMETHODIMP CFolderOutStream::Write(const void *data, UInt32 size, UInt32 *proc
// return S_FALSE;
return k_My_HRESULT_WritingWasCut;
}
- RINOK(OpenFile());
+ RINOK(OpenFile())
}
return S_OK;
@@ -204,18 +202,32 @@ HRESULT CFolderOutStream::FlushCorrupted(Int32 callbackOperationResult)
{
if (_fileIsOpen)
{
- RINOK(CloseFile_and_SetResult(callbackOperationResult));
+ RINOK(CloseFile_and_SetResult(callbackOperationResult))
}
else
{
- RINOK(OpenFile(true));
+ RINOK(OpenFile(true))
}
}
return S_OK;
}
-STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
- Int32 testModeSpec, IArchiveExtractCallback *extractCallbackSpec)
+/*
+Z7_COM7F_IMF(CFolderOutStream::GetSubStreamSize(UInt64 subStream, UInt64 *value))
+{
+ *value = 0;
+ // const unsigned numFiles_Original = _numFiles + _fileIndex - _startIndex;
+ const unsigned numFiles_Original = _numFiles;
+ if (subStream >= numFiles_Original)
+ return S_FALSE; // E_FAIL;
+ *value = _db->Files[_startIndex + (unsigned)subStream].Size;
+ return S_OK;
+}
+*/
+
+
+Z7_COM7F_IMF(CHandler::Extract(const UInt32 *indices, UInt32 numItems,
+ Int32 testModeSpec, IArchiveExtractCallback *extractCallbackSpec))
{
// for GCC
// CFolderOutStream *folderOutStream = new CFolderOutStream;
@@ -229,7 +241,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
// numItems = (UInt32)(Int32)-1;
- bool allFilesMode = (numItems == (UInt32)(Int32)-1);
+ const bool allFilesMode = (numItems == (UInt32)(Int32)-1);
if (allFilesMode)
numItems = _db.Files.Size();
@@ -244,8 +256,8 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
for (i = 0; i < numItems; i++)
{
- UInt32 fileIndex = allFilesMode ? i : indices[i];
- CNum folderIndex = _db.FileIndexToFolderIndexMap[fileIndex];
+ const UInt32 fileIndex = allFilesMode ? i : indices[i];
+ const CNum folderIndex = _db.FileIndexToFolderIndexMap[fileIndex];
if (folderIndex == kNumNoIndex)
continue;
if (folderIndex != prevFolder || fileIndex < nextFile)
@@ -257,7 +269,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
}
}
- RINOK(extractCallback->SetTotal(importantTotalUnpacked));
+ RINOK(extractCallback->SetTotal(importantTotalUnpacked))
CLocalProgress *lps = new CLocalProgress;
CMyComPtr<ICompressProgressInfo> progress = lps;
@@ -268,8 +280,8 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
false
#elif !defined(USE_MIXER_ST)
true
- #elif !defined(__7Z_SET_PROPERTIES)
- #ifdef _7ZIP_ST
+ #elif !defined(Z7_7Z_SET_PROPERTIES)
+ #ifdef Z7_ST
false
#else
true
@@ -281,8 +293,8 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
UInt64 curPacked, curUnpacked;
- CMyComPtr<IArchiveExtractCallbackMessage> callbackMessage;
- extractCallback.QueryInterface(IID_IArchiveExtractCallbackMessage, &callbackMessage);
+ CMyComPtr<IArchiveExtractCallbackMessage2> callbackMessage;
+ extractCallback.QueryInterface(IID_IArchiveExtractCallbackMessage2, &callbackMessage);
CFolderOutStream *folderOutStream = new CFolderOutStream;
CMyComPtr<ISequentialOutStream> outStream(folderOutStream);
@@ -294,7 +306,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
for (UInt32 i = 0;; lps->OutSize += curUnpacked, lps->InSize += curPacked)
{
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
if (i >= numItems)
break;
@@ -303,7 +315,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
curPacked = 0;
UInt32 fileIndex = allFilesMode ? i : indices[i];
- CNum folderIndex = _db.FileIndexToFolderIndexMap[fileIndex];
+ const CNum folderIndex = _db.FileIndexToFolderIndexMap[fileIndex];
UInt32 numSolidFiles = 1;
@@ -316,7 +328,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
for (k = i + 1; k < numItems; k++)
{
- UInt32 fileIndex2 = allFilesMode ? k : indices[k];
+ const UInt32 fileIndex2 = allFilesMode ? k : indices[k];
if (_db.FileIndexToFolderIndexMap[fileIndex2] != folderIndex
|| fileIndex2 < nextFile)
break;
@@ -330,20 +342,26 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
}
{
- HRESULT result = folderOutStream->Init(fileIndex,
+ const HRESULT result = folderOutStream->Init(fileIndex,
allFilesMode ? NULL : indices + i,
numSolidFiles);
i += numSolidFiles;
- RINOK(result);
+ RINOK(result)
}
- // to test solid block with zero unpacked size we disable that code
if (folderOutStream->WasWritingFinished())
+ {
+ // for debug: to test zero size stream unpacking
+ // if (folderIndex == kNumNoIndex) // enable this check for debug
continue;
+ }
+
+ if (folderIndex == kNumNoIndex)
+ return E_FAIL;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
CMyComPtr<ICryptoGetTextPassword> getTextPassword;
if (extractCallback)
extractCallback.QueryInterface(IID_ICryptoGetTextPassword, &getTextPassword);
@@ -351,16 +369,15 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
try
{
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool isEncrypted = false;
bool passwordIsDefined = false;
UString_Wipe password;
#endif
-
bool dataAfterEnd_Error = false;
- HRESULT result = decoder.Decode(
+ const HRESULT result = decoder.Decode(
EXTERNAL_CODECS_VARS
_inStream,
_db.ArcInfo.DataStartPosition,
@@ -372,15 +389,15 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
NULL // *inStreamMainRes
, dataAfterEnd_Error
- _7Z_DECODER_CRYPRO_VARS
- #if !defined(_7ZIP_ST)
+ Z7_7Z_DECODER_CRYPRO_VARS
+ #if !defined(Z7_ST)
, true, _numThreads, _memUsage_Decompress
#endif
);
if (result == S_FALSE || result == E_NOTIMPL || dataAfterEnd_Error)
{
- bool wasFinished = folderOutStream->WasWritingFinished();
+ const bool wasFinished = folderOutStream->WasWritingFinished();
int resOp = NExtract::NOperationResult::kDataError;
@@ -392,14 +409,14 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
resOp = NExtract::NOperationResult::kDataAfterEnd;
}
- RINOK(folderOutStream->FlushCorrupted(resOp));
+ RINOK(folderOutStream->FlushCorrupted(resOp))
if (wasFinished)
{
// we don't show error, if it's after required files
if (/* !folderOutStream->ExtraWriteWasCut && */ callbackMessage)
{
- RINOK(callbackMessage->ReportExtractResult(NEventIndexType::kBlockIndex, folderIndex, resOp));
+ RINOK(callbackMessage->ReportExtractResult(NEventIndexType::kBlockIndex, folderIndex, resOp))
}
}
continue;
@@ -408,12 +425,12 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
if (result != S_OK)
return result;
- RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kDataError));
+ RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kDataError))
continue;
}
catch(...)
{
- RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kDataError));
+ RINOK(folderOutStream->FlushCorrupted(NExtract::NOperationResult::kDataError))
// continue;
// return E_FAIL;
throw;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp
index cf50e694811..08231893905 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp
@@ -15,32 +15,38 @@ void CFolderInStream::Init(IArchiveUpdateCallback *updateCallback,
_updateCallback = updateCallback;
_indexes = indexes;
_numFiles = numFiles;
+
+ _totalSize_for_Coder = 0;
+ ClearFileInfo();
Processed.ClearAndReserve(numFiles);
- CRCs.ClearAndReserve(numFiles);
Sizes.ClearAndReserve(numFiles);
-
- if (Need_CTime) CTimes.ClearAndReserve(numFiles);
- if (Need_ATime) ATimes.ClearAndReserve(numFiles);
- if (Need_MTime) MTimes.ClearAndReserve(numFiles);
- if (Need_Attrib) Attribs.ClearAndReserve(numFiles);
+ CRCs.ClearAndReserve(numFiles);
TimesDefined.ClearAndReserve(numFiles);
-
+ MTimes.ClearAndReserve(Need_MTime ? numFiles : (unsigned)0);
+ CTimes.ClearAndReserve(Need_CTime ? numFiles : (unsigned)0);
+ ATimes.ClearAndReserve(Need_ATime ? numFiles : (unsigned)0);
+ Attribs.ClearAndReserve(Need_Attrib ? numFiles : (unsigned)0);
+
+ // FolderCrc = CRC_INIT_VAL;
_stream.Release();
}
-HRESULT CFolderInStream::OpenStream()
+void CFolderInStream::ClearFileInfo()
{
_pos = 0;
_crc = CRC_INIT_VAL;
_size_Defined = false;
_times_Defined = false;
_size = 0;
+ FILETIME_Clear(_mTime);
FILETIME_Clear(_cTime);
FILETIME_Clear(_aTime);
- FILETIME_Clear(_mTime);
_attrib = 0;
+}
+HRESULT CFolderInStream::OpenStream()
+{
while (Processed.Size() < _numFiles)
{
CMyComPtr<ISequentialInStream> stream;
@@ -83,7 +89,7 @@ HRESULT CFolderInStream::OpenStream()
}
}
- RINOK(AddFileInfo(result == S_OK));
+ RINOK(AddFileInfo(result == S_OK))
}
return S_OK;
}
@@ -117,13 +123,13 @@ HRESULT CFolderInStream::AddFileInfo(bool isProcessed)
// const UInt32 index = _indexes[Processed.Size()];
Processed.AddInReserved(isProcessed);
Sizes.AddInReserved(_pos);
- const UInt32 crc = CRC_GET_DIGEST(_crc);
- CRCs.AddInReserved(crc);
+ CRCs.AddInReserved(CRC_GET_DIGEST(_crc));
+ if (Need_Attrib) Attribs.AddInReserved(_attrib);
TimesDefined.AddInReserved(_times_Defined);
+ if (Need_MTime) AddFt(MTimes, _mTime);
if (Need_CTime) AddFt(CTimes, _cTime);
if (Need_ATime) AddFt(ATimes, _aTime);
- if (Need_MTime) AddFt(MTimes, _mTime);
- if (Need_Attrib) Attribs.AddInReserved(_attrib);
+ ClearFileInfo();
/*
if (isProcessed && _reportArcProp)
RINOK(ReportItemProps(_reportArcProp, index, _pos, &crc))
@@ -131,7 +137,7 @@ HRESULT CFolderInStream::AddFileInfo(bool isProcessed)
return _updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK);
}
-STDMETHODIMP CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -139,38 +145,65 @@ STDMETHODIMP CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSiz
{
if (_stream)
{
+ /*
+ if (_pos == 0)
+ {
+ const UInt32 align = (UInt32)1 << AlignLog;
+ const UInt32 offset = (UInt32)_totalSize_for_Coder & (align - 1);
+ if (offset != 0)
+ {
+ UInt32 cur = align - offset;
+ if (cur > size)
+ cur = size;
+ memset(data, 0, cur);
+ data = (Byte *)data + cur;
+ size -= cur;
+ // _pos += cur; // for debug
+ _totalSize_for_Coder += cur;
+ if (processedSize)
+ *processedSize += cur;
+ continue;
+ }
+ }
+ */
UInt32 cur = size;
const UInt32 kMax = (UInt32)1 << 20;
if (cur > kMax)
cur = kMax;
- RINOK(_stream->Read(data, cur, &cur));
+ RINOK(_stream->Read(data, cur, &cur))
if (cur != 0)
{
+ // if (Need_Crc)
_crc = CrcUpdate(_crc, data, cur);
+ /*
+ if (FolderCrc)
+ FolderCrc = CrcUpdate(FolderCrc, data, cur);
+ */
_pos += cur;
+ _totalSize_for_Coder += cur;
if (processedSize)
- *processedSize = cur;
+ *processedSize = cur; // use +=cur, if continue is possible in loop
return S_OK;
}
_stream.Release();
- RINOK(AddFileInfo(true));
+ RINOK(AddFileInfo(true))
}
if (Processed.Size() >= _numFiles)
break;
- RINOK(OpenStream());
+ RINOK(OpenStream())
}
return S_OK;
}
-STDMETHODIMP CFolderInStream::GetSubStreamSize(UInt64 subStream, UInt64 *value)
+Z7_COM7F_IMF(CFolderInStream::GetSubStreamSize(UInt64 subStream, UInt64 *value))
{
*value = 0;
if (subStream > Sizes.Size())
return S_FALSE; // E_FAIL;
- unsigned index = (unsigned)subStream;
+ const unsigned index = (unsigned)subStream;
if (index < Sizes.Size())
{
*value = Sizes[index];
@@ -187,4 +220,45 @@ STDMETHODIMP CFolderInStream::GetSubStreamSize(UInt64 subStream, UInt64 *value)
return S_OK;
}
+
+/*
+HRESULT CFolderInStream::CloseCrcStream()
+{
+ if (!_crcStream)
+ return S_OK;
+ if (!_crcStream_Spec->WasFinished())
+ return E_FAIL;
+ _crc = _crcStream_Spec->GetCRC() ^ CRC_INIT_VAL; // change it
+ const UInt64 size = _crcStream_Spec->GetSize();
+ _pos = size;
+ _totalSize_for_Coder += size;
+ _crcStream.Release();
+ // _crcStream->ReleaseStream();
+ _stream.Release();
+ return AddFileInfo(true);
+}
+
+Z7_COM7F_IMF(CFolderInStream::GetNextInSubStream(UInt64 *streamIndexRes, ISequentialInStream **stream)
+{
+ RINOK(CloseCrcStream())
+ *stream = NULL;
+ *streamIndexRes = Processed.Size();
+ if (Processed.Size() >= _numFiles)
+ return S_OK;
+ RINOK(OpenStream());
+ if (!_stream)
+ return S_OK;
+ if (!_crcStream)
+ {
+ _crcStream_Spec = new CSequentialInStreamWithCRC;
+ _crcStream = _crcStream_Spec;
+ }
+ _crcStream_Spec->Init();
+ _crcStream_Spec->SetStream(_stream);
+ *stream = _crcStream;
+ _crcStream->AddRef();
+ return S_OK;
+}
+*/
+
}}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h
index f054e681854..6447b25ca74 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h
@@ -1,12 +1,13 @@
// 7zFolderInStream.h
-#ifndef __7Z_FOLDER_IN_STREAM_H
-#define __7Z_FOLDER_IN_STREAM_H
+#ifndef ZIP7_INC_7Z_FOLDER_IN_STREAM_H
+#define ZIP7_INC_7Z_FOLDER_IN_STREAM_H
#include "../../../../C/7zCrc.h"
#include "../../../Common/MyCom.h"
#include "../../../Common/MyVector.h"
+// #include "../Common/InStreamWithCRC.h"
#include "../../ICoder.h"
#include "../IArchive.h"
@@ -14,20 +15,26 @@
namespace NArchive {
namespace N7z {
-class CFolderInStream:
- public ISequentialInStream,
- public ICompressGetSubStreamSize,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_2(
+ CFolderInStream
+ , ISequentialInStream
+ , ICompressGetSubStreamSize
+)
+ /*
+ Z7_COM7F_IMP(GetNextStream(UInt64 *streamIndex))
+ Z7_IFACE_COM7_IMP(ICompressInSubStreams)
+ */
+
CMyComPtr<ISequentialInStream> _stream;
+ UInt64 _totalSize_for_Coder;
UInt64 _pos;
UInt32 _crc;
bool _size_Defined;
bool _times_Defined;
UInt64 _size;
+ FILETIME _mTime;
FILETIME _cTime;
FILETIME _aTime;
- FILETIME _mTime;
UInt32 _attrib;
unsigned _numFiles;
@@ -35,34 +42,40 @@ class CFolderInStream:
CMyComPtr<IArchiveUpdateCallback> _updateCallback;
+ void ClearFileInfo();
HRESULT OpenStream();
HRESULT AddFileInfo(bool isProcessed);
-
+ // HRESULT CloseCrcStream();
public:
+ bool Need_MTime;
+ bool Need_CTime;
+ bool Need_ATime;
+ bool Need_Attrib;
+ // bool Need_Crc;
+ // bool Need_FolderCrc;
+ // unsigned AlignLog;
+
CRecordVector<bool> Processed;
- CRecordVector<UInt32> CRCs;
CRecordVector<UInt64> Sizes;
- CRecordVector<UInt64> CTimes;
- CRecordVector<UInt64> ATimes;
- CRecordVector<UInt64> MTimes;
+ CRecordVector<UInt32> CRCs;
CRecordVector<UInt32> Attribs;
CRecordVector<bool> TimesDefined;
+ CRecordVector<UInt64> MTimes;
+ CRecordVector<UInt64> CTimes;
+ CRecordVector<UInt64> ATimes;
+ // UInt32 FolderCrc;
- bool Need_CTime;
- bool Need_ATime;
- bool Need_MTime;
- bool Need_Attrib;
-
+ // UInt32 GetFolderCrc() const { return CRC_GET_DIGEST(FolderCrc); }
+ // CSequentialInStreamWithCRC *_crcStream_Spec;
+ // CMyComPtr<ISequentialInStream> _crcStream;
// CMyComPtr<IArchiveUpdateCallbackArcProp> _reportArcProp;
- MY_UNKNOWN_IMP2(ISequentialInStream, ICompressGetSubStreamSize)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value);
-
void Init(IArchiveUpdateCallback *updateCallback, const UInt32 *indexes, unsigned numFiles);
bool WasFinished() const { return Processed.Size() == _numFiles; }
+ UInt64 Get_TotalSize_for_Coder() const { return _totalSize_for_Coder; }
+ /*
UInt64 GetFullSize() const
{
UInt64 size = 0;
@@ -70,12 +83,16 @@ public:
size += Sizes[i];
return size;
}
+ */
CFolderInStream():
+ Need_MTime(false),
Need_CTime(false),
Need_ATime(false),
- Need_MTime(false),
Need_Attrib(false)
+ // , Need_Crc(true)
+ // , Need_FolderCrc(false)
+ // , AlignLog(0)
{}
};
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.cpp
index ca22f8814d9..23d3a9d56a7 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.cpp
@@ -7,7 +7,7 @@
#include "../../../Common/ComTry.h"
#include "../../../Common/IntToString.h"
-#ifndef __7Z_SET_PROPERTIES
+#ifndef Z7_7Z_SET_PROPERTIES
#include "../../../Windows/System.h"
#endif
@@ -16,8 +16,8 @@
#include "7zHandler.h"
#include "7zProperties.h"
-#ifdef __7Z_SET_PROPERTIES
-#ifdef EXTRACT_ONLY
+#ifdef Z7_7Z_SET_PROPERTIES
+#ifdef Z7_EXTRACT_ONLY
#include "../Common/ParseProperties.h"
#endif
#endif
@@ -30,40 +30,40 @@ namespace N7z {
CHandler::CHandler()
{
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
_isEncrypted = false;
_passwordIsDefined = false;
#endif
- #ifdef EXTRACT_ONLY
+ #ifdef Z7_EXTRACT_ONLY
_crcSize = 4;
- #ifdef __7Z_SET_PROPERTIES
+ #ifdef Z7_7Z_SET_PROPERTIES
_useMultiThreadMixer = true;
#endif
#endif
}
-STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
+Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
{
*numItems = _db.Files.Size();
return S_OK;
}
-#ifdef _SFX
+#ifdef Z7_SFX
IMP_IInArchive_ArcProps_NO_Table
-STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProps)
+Z7_COM7F_IMF(CHandler::GetNumberOfProperties(UInt32 *numProps))
{
*numProps = 0;
return S_OK;
}
-STDMETHODIMP CHandler::GetPropertyInfo(UInt32 /* index */,
- BSTR * /* name */, PROPID * /* propID */, VARTYPE * /* varType */)
+Z7_COM7F_IMF(CHandler::GetPropertyInfo(UInt32 /* index */,
+ BSTR * /* name */, PROPID * /* propID */, VARTYPE * /* varType */))
{
return E_NOTIMPL;
}
@@ -110,8 +110,7 @@ static void ConvertMethodIdToString(AString &res, UInt64 id)
static char *GetStringForSizeValue(char *s, UInt32 val)
{
- unsigned i;
- for (i = 0; i <= 31; i++)
+ for (unsigned i = 0; i < 32; i++)
if (((UInt32)1 << i) == val)
{
if (i >= 10)
@@ -190,15 +189,15 @@ void CHandler::AddMethodName(AString &s, UInt64 id)
#endif
-STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value))
{
- #ifndef _SFX
+ #ifndef Z7_SFX
COM_TRY_BEGIN
#endif
NCOM::CPropVariant prop;
switch (propID)
{
- #ifndef _SFX
+ #ifndef Z7_SFX
case kpidMethod:
{
AString s;
@@ -220,6 +219,12 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
GetStringForSizeValue(temp, pm.LzmaDic);
s += temp;
}
+ /*
+ else if (id == k_ZSTD)
+ {
+ s += "ZSTD";
+ }
+ */
else
AddMethodName(s, id);
}
@@ -269,7 +274,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
}
}
return prop.Detach(value);
- #ifndef _SFX
+ #ifndef Z7_SFX
COM_TRY_END
#endif
}
@@ -285,17 +290,17 @@ bool CHandler::IsFolderEncrypted(CNum folderIndex) const
{
if (folderIndex == kNumNoIndex)
return false;
- size_t startPos = _db.FoCodersDataOffset[folderIndex];
+ const size_t startPos = _db.FoCodersDataOffset[folderIndex];
const Byte *p = _db.CodersData + startPos;
- size_t size = _db.FoCodersDataOffset[folderIndex + 1] - startPos;
+ const size_t size = _db.FoCodersDataOffset[folderIndex + 1] - startPos;
CInByte2 inByte;
inByte.Init(p, size);
CNum numCoders = inByte.ReadNum();
for (; numCoders != 0; numCoders--)
{
- Byte mainByte = inByte.ReadByte();
- unsigned idSize = (mainByte & 0xF);
+ const Byte mainByte = inByte.ReadByte();
+ const unsigned idSize = (mainByte & 0xF);
const Byte *longID = inByte.GetPtr();
UInt64 id64 = 0;
for (unsigned j = 0; j < idSize; j++)
@@ -309,20 +314,20 @@ bool CHandler::IsFolderEncrypted(CNum folderIndex) const
return false;
}
-STDMETHODIMP CHandler::GetNumRawProps(UInt32 *numProps)
+Z7_COM7F_IMF(CHandler::GetNumRawProps(UInt32 *numProps))
{
*numProps = 0;
return S_OK;
}
-STDMETHODIMP CHandler::GetRawPropInfo(UInt32 /* index */, BSTR *name, PROPID *propID)
+Z7_COM7F_IMF(CHandler::GetRawPropInfo(UInt32 /* index */, BSTR *name, PROPID *propID))
{
*name = NULL;
*propID = kpidNtSecure;
return S_OK;
}
-STDMETHODIMP CHandler::GetParent(UInt32 /* index */, UInt32 *parent, UInt32 *parentType)
+Z7_COM7F_IMF(CHandler::GetParent(UInt32 /* index */, UInt32 *parent, UInt32 *parentType))
{
/*
const CFileItem &file = _db.Files[index];
@@ -334,7 +339,7 @@ STDMETHODIMP CHandler::GetParent(UInt32 /* index */, UInt32 *parent, UInt32 *par
return S_OK;
}
-STDMETHODIMP CHandler::GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)
+Z7_COM7F_IMF(CHandler::GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType))
{
*data = NULL;
*dataSize = 0;
@@ -376,7 +381,7 @@ STDMETHODIMP CHandler::GetRawProp(UInt32 index, PROPID propID, const void **data
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
{
@@ -389,9 +394,9 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
unsigned pos = kTempSize;
temp[--pos] = 0;
- size_t startPos = _db.FoCodersDataOffset[folderIndex];
+ const size_t startPos = _db.FoCodersDataOffset[folderIndex];
const Byte *p = _db.CodersData + startPos;
- size_t size = _db.FoCodersDataOffset[folderIndex + 1] - startPos;
+ const size_t size = _db.FoCodersDataOffset[folderIndex + 1] - startPos;
CInByte2 inByte;
inByte.Init(p, size);
@@ -403,10 +408,10 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
{
if (pos < 32) // max size of property
break;
- Byte mainByte = inByte.ReadByte();
- unsigned idSize = (mainByte & 0xF);
- const Byte *longID = inByte.GetPtr();
+ const Byte mainByte = inByte.ReadByte();
UInt64 id64 = 0;
+ const unsigned idSize = (mainByte & 0xF);
+ const Byte *longID = inByte.GetPtr();
for (unsigned j = 0; j < idSize; j++)
id64 = ((id64 << 8) | longID[j]);
inByte.SkipDataNoCheck(idSize);
@@ -432,21 +437,21 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
if (id64 <= (UInt32)0xFFFFFFFF)
{
- UInt32 id = (UInt32)id64;
+ const UInt32 id = (UInt32)id64;
if (id == k_LZMA)
{
name = "LZMA";
if (propsSize == 5)
{
- UInt32 dicSize = GetUi32((const Byte *)props + 1);
+ const UInt32 dicSize = GetUi32((const Byte *)props + 1);
char *dest = GetStringForSizeValue(s, dicSize);
UInt32 d = props[0];
if (d != 0x5D)
{
- UInt32 lc = d % 9;
+ const UInt32 lc = d % 9;
d /= 9;
- UInt32 pb = d / 5;
- UInt32 lp = d % 5;
+ const UInt32 pb = d / 5;
+ const UInt32 lp = d % 5;
if (lc != 3) dest = AddProp32(dest, "lc", lc);
if (lp != 0) dest = AddProp32(dest, "lp", lp);
if (pb != 2) dest = AddProp32(dest, "pb", pb);
@@ -477,6 +482,16 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
if (propsSize == 1)
ConvertUInt32ToString((UInt32)props[0] + 1, s);
}
+ else if (id == k_ARM64)
+ {
+ name = "ARM64";
+ if (propsSize == 4)
+ ConvertUInt32ToString(GetUi32(props), s);
+ /*
+ else if (propsSize != 0)
+ MyStringCopy(s, "unsupported");
+ */
+ }
else if (id == k_BCJ2) name = "BCJ2";
else if (id == k_BCJ) name = "BCJ";
else if (id == k_AES)
@@ -484,8 +499,8 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
name = "7zAES";
if (propsSize >= 1)
{
- Byte firstByte = props[0];
- UInt32 numCyclesPower = firstByte & 0x3F;
+ const Byte firstByte = props[0];
+ const UInt32 numCyclesPower = firstByte & 0x3F;
ConvertUInt32ToString(numCyclesPower, s);
}
}
@@ -493,8 +508,8 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
if (name)
{
- unsigned nameLen = MyStringLen(name);
- unsigned propsLen = MyStringLen(s);
+ const unsigned nameLen = MyStringLen(name);
+ const unsigned propsLen = MyStringLen(s);
unsigned totalLen = nameLen + propsLen;
if (propsLen != 0)
totalLen++;
@@ -523,7 +538,7 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
pos -= ConvertMethodIdToString_Back(temp + pos, id64);
else
{
- unsigned len = methodName.Len();
+ const unsigned len = methodName.Len();
if (len + 5 > pos)
break;
pos -= len;
@@ -547,9 +562,9 @@ HRESULT CHandler::SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const
#endif
-STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value))
{
- RINOK(PropVariant_Clear(value));
+ RINOK(PropVariant_Clear(value))
// COM_TRY_BEGIN
// NCOM::CPropVariant prop;
@@ -576,7 +591,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
{
// prop = ref2.PackSize;
{
- CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
+ const CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
if (folderIndex != kNumNoIndex)
{
if (_db.FolderStartFileIndex[folderIndex] == (CNum)index2)
@@ -617,24 +632,24 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
case kpidPath: return _db.GetPath_Prop(index, value);
- #ifndef _SFX
+ #ifndef Z7_SFX
case kpidMethod: return SetMethodToProp(_db.FileIndexToFolderIndexMap[index2], value);
case kpidBlock:
{
- CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
+ const CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
if (folderIndex != kNumNoIndex)
PropVarEm_Set_UInt32(value, (UInt32)folderIndex);
}
break;
- /*
+ #ifdef Z7_7Z_SHOW_PACK_STREAMS_SIZES
case kpidPackedSize0:
case kpidPackedSize1:
case kpidPackedSize2:
case kpidPackedSize3:
case kpidPackedSize4:
{
- CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
+ const CNum folderIndex = _db.FileIndexToFolderIndexMap[index2];
if (folderIndex != kNumNoIndex)
{
if (_db.FolderStartFileIndex[folderIndex] == (CNum)index2 &&
@@ -648,7 +663,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
PropVarEm_Set_UInt64(value, 0);
}
break;
- */
+ #endif
#endif
}
@@ -657,13 +672,13 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
// COM_TRY_END
}
-STDMETHODIMP CHandler::Open(IInStream *stream,
+Z7_COM7F_IMF(CHandler::Open(IInStream *stream,
const UInt64 *maxCheckStartPosition,
- IArchiveOpenCallback *openArchiveCallback)
+ IArchiveOpenCallback *openArchiveCallback))
{
COM_TRY_BEGIN
Close();
- #ifndef _SFX
+ #ifndef Z7_SFX
_fileInfoPopIDs.Clear();
#endif
@@ -671,31 +686,31 @@ STDMETHODIMP CHandler::Open(IInStream *stream,
{
CMyComPtr<IArchiveOpenCallback> openArchiveCallbackTemp = openArchiveCallback;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
CMyComPtr<ICryptoGetTextPassword> getTextPassword;
if (openArchiveCallback)
openArchiveCallbackTemp.QueryInterface(IID_ICryptoGetTextPassword, &getTextPassword);
#endif
CInArchive archive(
- #ifdef __7Z_SET_PROPERTIES
+ #ifdef Z7_7Z_SET_PROPERTIES
_useMultiThreadMixer
#else
true
#endif
);
_db.IsArc = false;
- RINOK(archive.Open(stream, maxCheckStartPosition));
+ RINOK(archive.Open(stream, maxCheckStartPosition))
_db.IsArc = true;
HRESULT result = archive.ReadDatabase(
EXTERNAL_CODECS_VARS
_db
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
, getTextPassword, _isEncrypted, _passwordIsDefined, _password
#endif
);
- RINOK(result);
+ RINOK(result)
_inStream = stream;
}
@@ -708,19 +723,19 @@ STDMETHODIMP CHandler::Open(IInStream *stream,
return E_OUTOFMEMORY;
}
// _inStream = stream;
- #ifndef _SFX
+ #ifndef Z7_SFX
FillPopIDs();
#endif
return S_OK;
COM_TRY_END
}
-STDMETHODIMP CHandler::Close()
+Z7_COM7F_IMF(CHandler::Close())
{
COM_TRY_BEGIN
_inStream.Release();
_db.Clear();
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
_isEncrypted = false;
_passwordIsDefined = false;
_password.Wipe_and_Empty();
@@ -729,10 +744,10 @@ STDMETHODIMP CHandler::Close()
COM_TRY_END
}
-#ifdef __7Z_SET_PROPERTIES
-#ifdef EXTRACT_ONLY
+#ifdef Z7_7Z_SET_PROPERTIES
+#ifdef Z7_EXTRACT_ONLY
-STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps)
+Z7_COM7F_IMF(CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps))
{
COM_TRY_BEGIN
@@ -747,19 +762,19 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
return E_INVALIDARG;
const PROPVARIANT &value = values[i];
UInt32 number;
- unsigned index = ParseStringToUInt32(name, number);
+ const unsigned index = ParseStringToUInt32(name, number);
if (index == 0)
{
if (name.IsEqualTo("mtf"))
{
- RINOK(PROPVARIANT_to_bool(value, _useMultiThreadMixer));
+ RINOK(PROPVARIANT_to_bool(value, _useMultiThreadMixer))
continue;
}
{
HRESULT hres;
if (SetCommonProperty(name, value, hres))
{
- RINOK(hres);
+ RINOK(hres)
continue;
}
}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.h
index 08bd65407b1..b1c04669832 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandler.h
@@ -1,26 +1,26 @@
// 7z/Handler.h
-#ifndef __7Z_HANDLER_H
-#define __7Z_HANDLER_H
+#ifndef ZIP7_7Z_HANDLER_H
+#define ZIP7_7Z_HANDLER_H
#include "../../ICoder.h"
#include "../IArchive.h"
#include "../../Common/CreateCoder.h"
-#ifndef __7Z_SET_PROPERTIES
+#ifndef Z7_7Z_SET_PROPERTIES
-#ifdef EXTRACT_ONLY
- #if !defined(_7ZIP_ST) && !defined(_SFX)
- #define __7Z_SET_PROPERTIES
+#ifdef Z7_EXTRACT_ONLY
+ #if !defined(Z7_ST) && !defined(Z7_SFX)
+ #define Z7_7Z_SET_PROPERTIES
#endif
#else
- #define __7Z_SET_PROPERTIES
+ #define Z7_7Z_SET_PROPERTIES
#endif
#endif
-// #ifdef __7Z_SET_PROPERTIES
+// #ifdef Z7_7Z_SET_PROPERTIES
#include "../Common/HandlerOut.h"
// #endif
@@ -31,7 +31,7 @@ namespace NArchive {
namespace N7z {
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
class COutHandler: public CMultiMethodProps
{
@@ -79,73 +79,63 @@ public:
#endif
-class CHandler:
+class CHandler Z7_final:
public IInArchive,
public IArchiveGetRawProps,
- #ifdef __7Z_SET_PROPERTIES
+ #ifdef Z7_7Z_SET_PROPERTIES
public ISetProperties,
#endif
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
public IOutArchive,
#endif
- PUBLIC_ISetCompressCodecsInfo
+ Z7_PUBLIC_ISetCompressCodecsInfo_IFEC
public CMyUnknownImp,
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
public COutHandler
#else
public CCommonMethodProps
#endif
{
-public:
- MY_QUERYINTERFACE_BEGIN2(IInArchive)
- MY_QUERYINTERFACE_ENTRY(IArchiveGetRawProps)
- #ifdef __7Z_SET_PROPERTIES
- MY_QUERYINTERFACE_ENTRY(ISetProperties)
- #endif
- #ifndef EXTRACT_ONLY
- MY_QUERYINTERFACE_ENTRY(IOutArchive)
- #endif
- QUERY_ENTRY_ISetCompressCodecsInfo
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- INTERFACE_IInArchive(;)
- INTERFACE_IArchiveGetRawProps(;)
-
- #ifdef __7Z_SET_PROPERTIES
- STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps);
- #endif
-
- #ifndef EXTRACT_ONLY
- INTERFACE_IOutArchive(;)
- #endif
-
+ Z7_COM_QI_BEGIN2(IInArchive)
+ Z7_COM_QI_ENTRY(IArchiveGetRawProps)
+ #ifdef Z7_7Z_SET_PROPERTIES
+ Z7_COM_QI_ENTRY(ISetProperties)
+ #endif
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_COM_QI_ENTRY(IOutArchive)
+ #endif
+ Z7_COM_QI_ENTRY_ISetCompressCodecsInfo_IFEC
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(IInArchive)
+ Z7_IFACE_COM7_IMP(IArchiveGetRawProps)
+ #ifdef Z7_7Z_SET_PROPERTIES
+ Z7_IFACE_COM7_IMP(ISetProperties)
+ #endif
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_IFACE_COM7_IMP(IOutArchive)
+ #endif
DECL_ISetCompressCodecsInfo
- CHandler();
- ~CHandler()
- {
- Close();
- }
-
private:
CMyComPtr<IInStream> _inStream;
NArchive::N7z::CDbEx _db;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool _isEncrypted;
bool _passwordIsDefined;
UString _password; // _Wipe
- #endif
+ #endif
- #ifdef EXTRACT_ONLY
+ #ifdef Z7_EXTRACT_ONLY
- #ifdef __7Z_SET_PROPERTIES
+ #ifdef Z7_7Z_SET_PROPERTIES
bool _useMultiThreadMixer;
#endif
@@ -162,7 +152,7 @@ private:
#endif
bool IsFolderEncrypted(CNum folderIndex) const;
- #ifndef _SFX
+ #ifndef Z7_SFX
CRecordVector<UInt64> _fileInfoPopIDs;
void FillPopIDs();
@@ -172,6 +162,13 @@ private:
#endif
DECL_EXTERNAL_CODECS_VARS
+
+public:
+ CHandler();
+ ~CHandler()
+ {
+ Close();
+ }
};
}}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp
index bf4e7a69c27..ff8735f0f7e 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp
@@ -13,7 +13,7 @@
#include "7zOut.h"
#include "7zUpdate.h"
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
using namespace NWindows;
@@ -35,7 +35,7 @@ static const UInt32 k_Dictionary_ForHeaders =
1 << 20;
#endif
-STDMETHODIMP CHandler::GetFileTimeType(UInt32 *type)
+Z7_COM7F_IMF(CHandler::GetFileTimeType(UInt32 *type))
{
*type = NFileTimeType::kWindows;
return S_OK;
@@ -43,10 +43,11 @@ STDMETHODIMP CHandler::GetFileTimeType(UInt32 *type)
HRESULT CHandler::PropsMethod_To_FullMethod(CMethodFull &dest, const COneMethodInfo &m)
{
+ bool isFilter;
dest.CodecIndex = FindMethod_Index(
EXTERNAL_CODECS_VARS
m.MethodName, true,
- dest.Id, dest.NumStreams);
+ dest.Id, dest.NumStreams, isFilter);
if (dest.CodecIndex < 0)
return E_INVALIDARG;
(CProps &)dest = (CProps &)m;
@@ -118,7 +119,7 @@ HRESULT CHandler::SetMainMethod(CCompressionMethodMode &methodMode)
SetGlobalLevelTo(oneMethodInfo);
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
const bool numThreads_WasSpecifiedInMethod = (oneMethodInfo.Get_NumThreads() >= 0);
if (!numThreads_WasSpecifiedInMethod)
{
@@ -128,9 +129,9 @@ HRESULT CHandler::SetMainMethod(CCompressionMethodMode &methodMode)
#endif
CMethodFull &methodFull = methodMode.Methods.AddNew();
- RINOK(PropsMethod_To_FullMethod(methodFull, oneMethodInfo));
+ RINOK(PropsMethod_To_FullMethod(methodFull, oneMethodInfo))
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
methodFull.Set_NumThreads = true;
methodFull.NumThreads = methodMode.NumThreads;
#endif
@@ -147,15 +148,55 @@ HRESULT CHandler::SetMainMethod(CCompressionMethodMode &methodMode)
case k_Deflate: dicSize = (UInt32)1 << 15; break;
case k_Deflate64: dicSize = (UInt32)1 << 16; break;
case k_BZip2: dicSize = oneMethodInfo.Get_BZip2_BlockSize(); break;
+ // case k_ZSTD: dicSize = 1 << 23; break;
default: continue;
}
UInt64 numSolidBytes;
-
+
+ /*
+ if (methodFull.Id == k_ZSTD)
+ {
+ // continue;
+ NCompress::NZstd::CEncoderProps encoderProps;
+ RINOK(oneMethodInfo.Set_PropsTo_zstd(encoderProps));
+ CZstdEncProps &zstdProps = encoderProps.EncProps;
+ ZstdEncProps_NormalizeFull(&zstdProps);
+ UInt64 cs = (UInt64)(zstdProps.jobSize);
+ UInt32 winSize = (UInt32)(1 << zstdProps.windowLog);
+ if (cs < winSize)
+ cs = winSize;
+ numSolidBytes = cs << 6;
+ const UInt64 kSolidBytes_Zstd_Max = ((UInt64)1 << 34);
+ if (numSolidBytes > kSolidBytes_Zstd_Max)
+ numSolidBytes = kSolidBytes_Zstd_Max;
+
+ methodFull.Set_NumThreads = false; // we don't use ICompressSetCoderMt::SetNumberOfThreads() for LZMA2 encoder
+
+ #ifndef Z7_ST
+ if (!numThreads_WasSpecifiedInMethod
+ && !methodMode.NumThreads_WasForced
+ && methodMode.MemoryUsageLimit_WasSet
+ )
+ {
+ const UInt32 numThreads_Original = methodMode.NumThreads;
+ const UInt32 numThreads_New = ZstdEncProps_GetNumThreads_for_MemUsageLimit(
+ &zstdProps,
+ methodMode.MemoryUsageLimit,
+ numThreads_Original);
+ if (numThreads_Original != numThreads_New)
+ {
+ CMultiMethodProps::SetMethodThreadsTo_Replace(methodFull, numThreads_New);
+ }
+ }
+ #endif
+ }
+ else
+ */
if (methodFull.Id == k_LZMA2)
{
// he we calculate default chunk Size for LZMA2 as defined in LZMA2 encoder code
- /* lzma2 code use dictionary upo to fake 4 GiB to calculate ChunkSize.
+ /* lzma2 code use dictionary up to fake 4 GiB to calculate ChunkSize.
So we do same */
UInt64 cs = (UInt64)dicSize << 2;
const UInt32 kMinSize = (UInt32)1 << 20;
@@ -167,10 +208,10 @@ HRESULT CHandler::SetMainMethod(CCompressionMethodMode &methodMode)
cs &= ~(UInt64)(kMinSize - 1);
// we want to use at least 64 chunks (threads) per one solid block.
- // here we don't use chunckSize property
+ // here we don't use chunkSize property
numSolidBytes = cs << 6;
- // here we get real chunckSize
+ // here we get real chunkSize
cs = oneMethodInfo.Get_Xz_BlockSize();
if (dicSize > cs)
dicSize = cs;
@@ -181,7 +222,7 @@ HRESULT CHandler::SetMainMethod(CCompressionMethodMode &methodMode)
methodFull.Set_NumThreads = false; // we don't use ICompressSetCoderMt::SetNumberOfThreads() for LZMA2 encoder
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (!numThreads_WasSpecifiedInMethod
&& !methodMode.NumThreads_WasForced
&& methodMode.MemoryUsageLimit_WasSet
@@ -261,7 +302,7 @@ static HRESULT GetTime(IArchiveUpdateCallback *updateCallback, unsigned index, P
// ft = 0;
// ftDefined = false;
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(index, propID, &prop));
+ RINOK(updateCallback->GetProperty(index, propID, &prop))
if (prop.vt == VT_FILETIME)
{
ft = prop.filetime.dwLowDateTime | ((UInt64)prop.filetime.dwHighDateTime << 32);
@@ -344,13 +385,13 @@ static int AddFolder(CObjectVector<CTreeFolder> &treeFolders, int cur, const USt
}
*/
-STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems,
- IArchiveUpdateCallback *updateCallback)
+Z7_COM7F_IMF(CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems,
+ IArchiveUpdateCallback *updateCallback))
{
COM_TRY_BEGIN
- const CDbEx *db = 0;
- #ifdef _7Z_VOL
+ const CDbEx *db = NULL;
+ #ifdef Z7_7Z_VOL
if (_volumes.Size() > 1)
return E_FAIL;
const CVolume *volume = 0;
@@ -360,7 +401,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
db = &volume->Database;
}
#else
- if (_inStream != 0)
+ if (_inStream)
db = &_db;
#endif
@@ -368,8 +409,9 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
return E_NOTIMPL;
/*
- CMyComPtr<IArchiveGetRawProps> getRawProps;
- updateCallback->QueryInterface(IID_IArchiveGetRawProps, (void **)&getRawProps);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveGetRawProps,
+ getRawProps, updateCallback)
CUniqBlocks secureBlocks;
secureBlocks.AddUniq(NULL, 0);
@@ -406,7 +448,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
UInt32 indexInArchive;
if (!updateCallback)
return E_FAIL;
- RINOK(updateCallback->GetUpdateItemInfo(i, &newData, &newProps, &indexInArchive));
+ RINOK(updateCallback->GetUpdateItemInfo(i, &newData, &newProps, &indexInArchive))
CUpdateItem ui;
ui.NewProps = IntToBool(newProps);
ui.NewData = IntToBool(newData);
@@ -445,7 +487,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (need_Attrib)
{
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(i, kpidAttrib, &prop));
+ RINOK(updateCallback->GetProperty(i, kpidAttrib, &prop))
if (prop.vt == VT_EMPTY)
ui.AttribDefined = false;
else if (prop.vt != VT_UI4)
@@ -458,9 +500,9 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
// we need MTime to sort files.
- if (need_CTime) RINOK(GetTime(updateCallback, i, kpidCTime, ui.CTime, ui.CTimeDefined));
- if (need_ATime) RINOK(GetTime(updateCallback, i, kpidATime, ui.ATime, ui.ATimeDefined));
- if (need_MTime) RINOK(GetTime(updateCallback, i, kpidMTime, ui.MTime, ui.MTimeDefined));
+ if (need_CTime) RINOK(GetTime(updateCallback, i, kpidCTime, ui.CTime, ui.CTimeDefined))
+ if (need_ATime) RINOK(GetTime(updateCallback, i, kpidATime, ui.ATime, ui.ATimeDefined))
+ if (need_MTime) RINOK(GetTime(updateCallback, i, kpidMTime, ui.MTime, ui.MTimeDefined))
/*
if (getRawProps)
@@ -478,7 +520,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(i, kpidPath, &prop));
+ RINOK(updateCallback->GetProperty(i, kpidPath, &prop))
if (prop.vt == VT_EMPTY)
{
}
@@ -492,7 +534,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
{
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(i, kpidIsDir, &prop));
+ RINOK(updateCallback->GetProperty(i, kpidIsDir, &prop))
if (prop.vt == VT_EMPTY)
folderStatusIsDefined = false;
else if (prop.vt != VT_BOOL)
@@ -506,7 +548,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(i, kpidIsAnti, &prop));
+ RINOK(updateCallback->GetProperty(i, kpidIsAnti, &prop))
if (prop.vt == VT_EMPTY)
ui.IsAnti = false;
else if (prop.vt != VT_BOOL)
@@ -623,7 +665,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (!ui.IsDir)
{
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(i, kpidSize, &prop));
+ RINOK(updateCallback->GetProperty(i, kpidSize, &prop))
if (prop.vt != VT_UI8)
return E_INVALIDARG;
ui.Size = (UInt64)prop.uhVal.QuadPart;
@@ -650,7 +692,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
methodMode.MemoryUsageLimit = _memUsage_Compress;
methodMode.MemoryUsageLimit_WasSet = _memUsage_WasSet;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
{
UInt32 numThreads = _numThreads;
const UInt32 kNumThreads_Max = 1024;
@@ -664,13 +706,14 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
#endif
- HRESULT res = SetMainMethod(methodMode);
- RINOK(res);
+ const HRESULT res = SetMainMethod(methodMode);
+ RINOK(res)
- RINOK(SetHeaderMethod(headerMethod));
+ RINOK(SetHeaderMethod(headerMethod))
- CMyComPtr<ICryptoGetTextPassword2> getPassword2;
- updateCallback->QueryInterface(IID_ICryptoGetTextPassword2, (void **)&getPassword2);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICryptoGetTextPassword2,
+ getPassword2, updateCallback)
methodMode.PasswordIsDefined = false;
methodMode.Password.Wipe_and_Empty();
@@ -678,7 +721,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
CMyComBSTR_Wipe password;
Int32 passwordIsDefined;
- RINOK(getPassword2->CryptoGetTextPassword2(&passwordIsDefined, &password));
+ RINOK(getPassword2->CryptoGetTextPassword2(&passwordIsDefined, &password))
methodMode.PasswordIsDefined = IntToBool(passwordIsDefined);
if (methodMode.PasswordIsDefined && password)
methodMode.Password = password;
@@ -688,7 +731,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
bool encryptHeaders = false;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
if (!methodMode.PasswordIsDefined && _passwordIsDefined)
{
// if header is compressed, we use that password for updated archive
@@ -701,7 +744,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
if (_encryptHeadersSpecified)
encryptHeaders = _encryptHeaders;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
else
encryptHeaders = _passwordIsDefined;
#endif
@@ -716,13 +759,14 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (numItems < 2)
compressMainHeader = false;
- int level = GetLevel();
+ const int level = GetLevel();
CUpdateOptions options;
options.Need_CTime = need_CTime;
options.Need_ATime = need_ATime;
options.Need_MTime = need_MTime;
options.Need_Attrib = need_Attrib;
+ // options.Need_Crc = (_crcSize != 0); // for debug
options.Method = &methodMode;
options.HeaderMethod = (_compressHeaders || encryptHeaders) ? &headerMethod : NULL;
@@ -748,12 +792,6 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
options.MultiThreadMixer = _useMultiThreadMixer;
- COutArchive archive;
- CArchiveDatabaseOut newDatabase;
-
- CMyComPtr<ICryptoGetTextPassword> getPassword;
- updateCallback->QueryInterface(IID_ICryptoGetTextPassword, (void **)&getPassword);
-
/*
if (secureBlocks.Sorted.Size() > 1)
{
@@ -766,9 +804,9 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
*/
- res = Update(
+ return Update(
EXTERNAL_CODECS_VARS
- #ifdef _7Z_VOL
+ #ifdef Z7_7Z_VOL
volume ? volume->Stream: 0,
volume ? db : 0,
#else
@@ -778,18 +816,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
updateItems,
// treeFolders,
// secureBlocks,
- archive, newDatabase, outStream, updateCallback, options
- #ifndef _NO_CRYPTO
- , getPassword
- #endif
- );
-
- RINOK(res);
-
- updateItems.ClearAndFree();
-
- return archive.WriteDatabase(EXTERNAL_CODECS_VARS
- newDatabase, options.HeaderMethod, options.HeaderOptions);
+ outStream, updateCallback, options);
COM_TRY_END
}
@@ -798,7 +825,7 @@ static HRESULT ParseBond(UString &srcString, UInt32 &coder, UInt32 &stream)
{
stream = 0;
{
- unsigned index = ParseStringToUInt32(srcString, coder);
+ const unsigned index = ParseStringToUInt32(srcString, coder);
if (index == 0)
return E_INVALIDARG;
srcString.DeleteFrontal(index);
@@ -806,7 +833,7 @@ static HRESULT ParseBond(UString &srcString, UInt32 &coder, UInt32 &stream)
if (srcString[0] == 's')
{
srcString.Delete(0);
- unsigned index = ParseStringToUInt32(srcString, stream);
+ const unsigned index = ParseStringToUInt32(srcString, stream);
if (index == 0)
return E_INVALIDARG;
srcString.DeleteFrontal(index);
@@ -860,7 +887,7 @@ HRESULT COutHandler::SetSolidFromString(const UString &s)
i += (unsigned)(end - start);
if (i == s2.Len())
return E_INVALIDARG;
- wchar_t c = s2[i++];
+ const wchar_t c = s2[i++];
if (c == 'f')
{
if (v < 1)
@@ -912,7 +939,7 @@ HRESULT COutHandler::SetSolidFromPROPVARIANT(const PROPVARIANT &value)
static HRESULT PROPVARIANT_to_BoolPair(const PROPVARIANT &prop, CBoolPair &dest)
{
- RINOK(PROPVARIANT_to_bool(prop, dest.Val));
+ RINOK(PROPVARIANT_to_bool(prop, dest.Val))
dest.Def = true;
return S_OK;
}
@@ -935,7 +962,7 @@ HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &val
}
UInt32 number;
- unsigned index = ParseStringToUInt32(name, number);
+ const unsigned index = ParseStringToUInt32(name, number);
// UString realName = name.Ptr(index);
if (index == 0)
{
@@ -946,20 +973,20 @@ HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &val
if (name.IsEqualTo("hcf"))
{
bool compressHeadersFull = true;
- RINOK(PROPVARIANT_to_bool(value, compressHeadersFull));
+ RINOK(PROPVARIANT_to_bool(value, compressHeadersFull))
return compressHeadersFull ? S_OK: E_INVALIDARG;
}
if (name.IsEqualTo("he"))
{
- RINOK(PROPVARIANT_to_bool(value, _encryptHeaders));
+ RINOK(PROPVARIANT_to_bool(value, _encryptHeaders))
_encryptHeadersSpecified = true;
return S_OK;
}
{
bool processed;
- RINOK(TimeOptions.Parse(name, value, processed));
+ RINOK(TimeOptions.Parse(name, value, processed))
if (processed)
{
if ( TimeOptions.Prec != (UInt32)(Int32)-1
@@ -982,7 +1009,7 @@ HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &val
return CMultiMethodProps::SetProperty(name, value);
}
-STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps)
+Z7_COM7F_IMF(CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps))
{
COM_TRY_BEGIN
_bonds.Clear();
@@ -997,6 +1024,7 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
const PROPVARIANT &value = values[i];
+ if (name.Find(L':') >= 0) // 'b' was used as NCoderPropID::kBlockSize2 before v23
if (name[0] == 'b')
{
if (value.vt != VT_EMPTY)
@@ -1004,12 +1032,12 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
name.Delete(0);
CBond2 bond;
- RINOK(ParseBond(name, bond.OutCoder, bond.OutStream));
+ RINOK(ParseBond(name, bond.OutCoder, bond.OutStream))
if (name[0] != ':')
return E_INVALIDARG;
name.Delete(0);
UInt32 inStream = 0;
- RINOK(ParseBond(name, bond.InCoder, inStream));
+ RINOK(ParseBond(name, bond.InCoder, inStream))
if (inStream != 0)
return E_INVALIDARG;
if (!name.IsEmpty())
@@ -1018,7 +1046,7 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
continue;
}
- RINOK(SetProperty(name, value));
+ RINOK(SetProperty(name, value))
}
unsigned numEmptyMethods = GetNumEmptyMethods();
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.cpp
index acff2fdd8d9..d5f94973b14 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.cpp
@@ -8,7 +8,7 @@ namespace NArchive {
namespace N7z {
Byte kSignature[kSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};
-#ifdef _7Z_VOL
+#ifdef Z7_7Z_VOL
Byte kFinishSignature[kSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C + 1};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.h
index e1bbc0aa2b8..bd96ca3c61a 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zHeader.h
@@ -1,7 +1,7 @@
// 7z/7zHeader.h
-#ifndef __7Z_HEADER_H
-#define __7Z_HEADER_H
+#ifndef ZIP7_INC_7Z_HEADER_H
+#define ZIP7_INC_7Z_HEADER_H
#include "../../../Common/MyTypes.h"
@@ -11,13 +11,13 @@ namespace N7z {
const unsigned kSignatureSize = 6;
extern Byte kSignature[kSignatureSize];
-// #define _7Z_VOL
+// #define Z7_7Z_VOL
// 7z-MultiVolume is not finished yet.
// It can work already, but I still do not like some
// things of that new multivolume format.
// So please keep it commented.
-#ifdef _7Z_VOL
+#ifdef Z7_7Z_VOL
extern Byte kFinishSignature[kSignatureSize];
#endif
@@ -38,7 +38,7 @@ struct CStartHeader
const UInt32 kStartHeaderSize = 20;
-#ifdef _7Z_VOL
+#ifdef Z7_7Z_VOL
struct CFinishHeader: public CStartHeader
{
UInt64 ArchiveStartOffset; // data offset from end if that struct
@@ -99,6 +99,7 @@ namespace NID
const UInt32 k_Copy = 0;
const UInt32 k_Delta = 3;
+const UInt32 k_ARM64 = 0xa;
const UInt32 k_LZMA2 = 0x21;
@@ -122,14 +123,17 @@ const UInt32 k_SPARC = 0x3030805;
const UInt32 k_AES = 0x6F10701;
+// const UInt32 k_ZSTD = 0x4015D; // winzip zstd
+// 0x4F71101, 7z-zstd
static inline bool IsFilterMethod(UInt64 m)
{
- if (m > (UInt64)0xFFFFFFFF)
+ if (m > (UInt32)0xFFFFFFFF)
return false;
switch ((UInt32)m)
{
case k_Delta:
+ case k_ARM64:
case k_BCJ:
case k_BCJ2:
case k_PPC:
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.cpp
index 7134595c92d..4defd272b39 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.cpp
@@ -11,6 +11,7 @@
#include "../../../../C/7zCrc.h"
#include "../../../../C/CpuArch.h"
+#include "../../../Common/MyBuffer2.h"
// #include "../../../Common/UTFConvert.h"
#include "../../Common/StreamObjects.h"
@@ -24,7 +25,7 @@
#define Get64(p) GetUi64(p)
// define FORMAT_7Z_RECOVERY if you want to recover multivolume archives with empty StartHeader
-#ifndef _SFX
+#ifndef Z7_SFX
#define FORMAT_7Z_RECOVERY
#endif
@@ -34,6 +35,9 @@ using namespace NCOM;
namespace NArchive {
namespace N7z {
+#define k_Scan_NumCoders_MAX 64
+#define k_Scan_NumCodersStreams_in_Folder_MAX 64
+
unsigned BoolVector_CountSum(const CBoolVector &v);
unsigned BoolVector_CountSum(const CBoolVector &v)
{
@@ -62,13 +66,13 @@ static void BoolVector_Fill_False(CBoolVector &v, unsigned size)
class CInArchiveException {};
class CUnsupportedFeatureException: public CInArchiveException {};
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static void ThrowException() { throw CInArchiveException(); }
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static inline void ThrowEndOfData() { ThrowException(); }
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static inline void ThrowUnsupported() { throw CUnsupportedFeatureException(); }
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static inline void ThrowIncorrect() { ThrowException(); }
class CStreamSwitch
@@ -113,12 +117,12 @@ void CStreamSwitch::Set(CInArchive *archive, const CByteBuffer &byteBuffer)
void CStreamSwitch::Set(CInArchive *archive, const CObjectVector<CByteBuffer> *dataVector)
{
Remove();
- Byte external = archive->ReadByte();
+ const Byte external = archive->ReadByte();
if (external != 0)
{
if (!dataVector)
ThrowIncorrect();
- CNum dataIndex = archive->ReadNum();
+ const CNum dataIndex = archive->ReadNum();
if (dataIndex >= dataVector->Size())
ThrowIncorrect();
Set(archive, (*dataVector)[dataIndex]);
@@ -171,7 +175,7 @@ static UInt64 ReadNumberSpec(const Byte *p, size_t size, size_t &processed)
return 0;
}
- unsigned b = *p++;
+ const unsigned b = *p++;
size--;
if ((b & 0x80) == 0)
@@ -192,10 +196,10 @@ static UInt64 ReadNumberSpec(const Byte *p, size_t size, size_t &processed)
for (unsigned i = 1; i < 8; i++)
{
- unsigned mask = (unsigned)0x80 >> i;
+ const unsigned mask = (unsigned)0x80 >> i;
if ((b & mask) == 0)
{
- UInt64 high = b & (mask - 1);
+ const UInt64 high = b & (mask - 1);
value |= (high << (i * 8));
processed = i + 1;
return value;
@@ -219,7 +223,7 @@ static UInt64 ReadNumberSpec(const Byte *p, size_t size, size_t &processed)
UInt64 CInByte2::ReadNumber()
{
size_t processed;
- UInt64 res = ReadNumberSpec(_buffer + _pos, _size - _pos, processed);
+ const UInt64 res = ReadNumberSpec(_buffer + _pos, _size - _pos, processed);
if (processed == 0)
ThrowEndOfData();
_pos += processed;
@@ -239,7 +243,7 @@ CNum CInByte2::ReadNum()
}
}
*/
- UInt64 value = ReadNumber();
+ const UInt64 value = ReadNumber();
if (value > kNumMax)
ThrowUnsupported();
return (CNum)value;
@@ -249,7 +253,7 @@ UInt32 CInByte2::ReadUInt32()
{
if (_pos + 4 > _size)
ThrowEndOfData();
- UInt32 res = Get32(_buffer + _pos);
+ const UInt32 res = Get32(_buffer + _pos);
_pos += 4;
return res;
}
@@ -258,54 +262,101 @@ UInt64 CInByte2::ReadUInt64()
{
if (_pos + 8 > _size)
ThrowEndOfData();
- UInt64 res = Get64(_buffer + _pos);
+ const UInt64 res = Get64(_buffer + _pos);
_pos += 8;
return res;
}
-#define CHECK_SIGNATURE if (p[0] != '7' || p[1] != 'z' || p[2] != 0xBC || p[3] != 0xAF || p[4] != 0x27 || p[5] != 0x1C) return false;
+#define Y0 '7'
+#define Y1 'z'
+#define Y2 0xBC
+#define Y3 0xAF
+#define Y4 0x27
+#define Y5 0x1C
+
+#define IS_SIGNATURE(p)( \
+ (p)[2] == Y2 && \
+ (p)[3] == Y3 && \
+ (p)[5] == Y5 && \
+ (p)[4] == Y4 && \
+ (p)[1] == Y1 && \
+ (p)[0] == Y0)
+
+/* FindSignature_10() is allowed to access data up to and including &limit[9].
+ limit[10] access is not allowed.
+ return:
+ (return_ptr < limit) : signature was found at (return_ptr)
+ (return_ptr >= limit) : limit was reached or crossed. So no signature found before limit
+*/
+Z7_NO_INLINE
+static const Byte *FindSignature_10(const Byte *p, const Byte *limit)
+{
+ for (;;)
+ {
+ for (;;)
+ {
+ if (p >= limit)
+ return limit;
+ const Byte b = p[5];
+ p += 6;
+ if (b == Y0) { break; }
+ if (b == Y1) { p -= 1; break; }
+ if (b == Y2) { p -= 2; break; }
+ if (b == Y3) { p -= 3; break; }
+ if (b == Y4) { p -= 4; break; }
+ if (b == Y5) { p -= 5; break; }
+ }
+ if (IS_SIGNATURE(p - 1))
+ return p - 1;
+ }
+}
+
-static inline bool TestSignature(const Byte *p)
+static inline bool TestStartCrc(const Byte *p)
{
- CHECK_SIGNATURE
return CrcCalc(p + 12, 20) == Get32(p + 8);
}
-#ifdef FORMAT_7Z_RECOVERY
static inline bool TestSignature2(const Byte *p)
{
- CHECK_SIGNATURE;
- if (CrcCalc(p + 12, 20) == Get32(p + 8))
+ if (!IS_SIGNATURE(p))
+ return false;
+ #ifdef FORMAT_7Z_RECOVERY
+ if (TestStartCrc(p))
return true;
for (unsigned i = 8; i < kHeaderSize; i++)
if (p[i] != 0)
return false;
return (p[6] != 0 || p[7] != 0);
+ #else
+ return TestStartCrc(p);
+ #endif
}
-#else
-#define TestSignature2(p) TestSignature(p)
-#endif
+
HRESULT CInArchive::FindAndReadSignature(IInStream *stream, const UInt64 *searchHeaderSizeLimit)
{
- RINOK(ReadStream_FALSE(stream, _header, kHeaderSize));
+ RINOK(ReadStream_FALSE(stream, _header, kHeaderSize))
if (TestSignature2(_header))
return S_OK;
if (searchHeaderSizeLimit && *searchHeaderSizeLimit == 0)
return S_FALSE;
- const UInt32 kBufSize = 1 << 15;
- CByteArr buf(kBufSize);
+ const UInt32 kBufSize = (1 << 15) + kHeaderSize; // must be > (kHeaderSize * 2)
+ CAlignedBuffer1 buf(kBufSize);
memcpy(buf, _header, kHeaderSize);
UInt64 offset = 0;
for (;;)
{
- UInt32 readSize = kBufSize - kHeaderSize;
+ UInt32 readSize =
+ (offset == 0) ?
+ kBufSize - kHeaderSize - kHeaderSize :
+ kBufSize - kHeaderSize;
if (searchHeaderSizeLimit)
{
- UInt64 rem = *searchHeaderSizeLimit - offset;
+ const UInt64 rem = *searchHeaderSizeLimit - offset;
if (readSize > rem)
readSize = (UInt32)rem;
if (readSize == 0)
@@ -313,29 +364,28 @@ HRESULT CInArchive::FindAndReadSignature(IInStream *stream, const UInt64 *search
}
UInt32 processed = 0;
- RINOK(stream->Read(buf + kHeaderSize, readSize, &processed));
+ RINOK(stream->Read(buf + kHeaderSize, readSize, &processed))
if (processed == 0)
return S_FALSE;
+
+ /* &buf[0] was already tested for signature before.
+ So first search here will be for &buf[1] */
for (UInt32 pos = 0;;)
{
const Byte *p = buf + pos + 1;
- const Byte *lim = buf + processed;
- for (; p <= lim; p += 4)
- {
- if (p[0] == '7') break;
- if (p[1] == '7') { p += 1; break; }
- if (p[2] == '7') { p += 2; break; }
- if (p[3] == '7') { p += 3; break; }
- };
- if (p > lim)
+ const Byte *lim = buf + processed + 1;
+ /* we have (kHeaderSize - 1 = 31) filled bytes starting from (lim),
+ and it's safe to access just 10 bytes in that reserved area */
+ p = FindSignature_10(p, lim);
+ if (p >= lim)
break;
pos = (UInt32)(p - buf);
- if (TestSignature(p))
+ if (TestStartCrc(p))
{
memcpy(_header, p, kHeaderSize);
_arhiveBeginStreamPosition += offset + pos;
- return stream->Seek((Int64)(_arhiveBeginStreamPosition + kHeaderSize), STREAM_SEEK_SET, NULL);
+ return InStream_SeekSet(stream, _arhiveBeginStreamPosition + kHeaderSize);
}
}
@@ -349,10 +399,8 @@ HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit)
{
HeadersSize = 0;
Close();
- RINOK(stream->Seek(0, STREAM_SEEK_CUR, &_arhiveBeginStreamPosition))
- RINOK(stream->Seek(0, STREAM_SEEK_END, &_fileEndPosition))
- RINOK(stream->Seek((Int64)_arhiveBeginStreamPosition, STREAM_SEEK_SET, NULL))
- RINOK(FindAndReadSignature(stream, searchHeaderSizeLimit));
+ RINOK(InStream_GetPos_GetSize(stream, _arhiveBeginStreamPosition, _fileEndPosition))
+ RINOK(FindAndReadSignature(stream, searchHeaderSizeLimit))
_stream = stream;
return S_OK;
}
@@ -378,9 +426,9 @@ void CInArchive::ReadArchiveProperties(CInArchiveInfo & /* archiveInfo */)
void CInByte2::ParseFolder(CFolder &folder)
{
- UInt32 numCoders = ReadNum();
+ const UInt32 numCoders = ReadNum();
- if (numCoders == 0)
+ if (numCoders == 0 || numCoders > k_Scan_NumCoders_MAX)
ThrowUnsupported();
folder.Coders.SetSize(numCoders);
@@ -391,10 +439,10 @@ void CInByte2::ParseFolder(CFolder &folder)
{
CCoderInfo &coder = folder.Coders[i];
{
- Byte mainByte = ReadByte();
+ const Byte mainByte = ReadByte();
if ((mainByte & 0xC0) != 0)
ThrowUnsupported();
- unsigned idSize = (mainByte & 0xF);
+ const unsigned idSize = (mainByte & 0xF);
if (idSize > 8 || idSize > GetRem())
ThrowUnsupported();
const Byte *longID = GetPtr();
@@ -407,7 +455,9 @@ void CInByte2::ParseFolder(CFolder &folder)
if ((mainByte & 0x10) != 0)
{
coder.NumStreams = ReadNum();
+ // if (coder.NumStreams > k_Scan_NumCodersStreams_in_Folder_MAX) ThrowUnsupported();
/* numOutStreams = */ ReadNum();
+ // if (ReadNum() != 1) // numOutStreams ThrowUnsupported();
}
else
{
@@ -416,7 +466,7 @@ void CInByte2::ParseFolder(CFolder &folder)
if ((mainByte & 0x20) != 0)
{
- CNum propsSize = ReadNum();
+ const CNum propsSize = ReadNum();
coder.Props.Alloc((size_t)propsSize);
ReadBytes((Byte *)coder.Props, (size_t)propsSize);
}
@@ -426,7 +476,7 @@ void CInByte2::ParseFolder(CFolder &folder)
numInStreams += coder.NumStreams;
}
- UInt32 numBonds = numCoders - 1;
+ const UInt32 numBonds = numCoders - 1;
folder.Bonds.SetSize(numBonds);
for (i = 0; i < numBonds; i++)
{
@@ -437,7 +487,7 @@ void CInByte2::ParseFolder(CFolder &folder)
if (numInStreams < numBonds)
ThrowUnsupported();
- UInt32 numPackStreams = numInStreams - numBonds;
+ const UInt32 numPackStreams = numInStreams - numBonds;
folder.PackStreams.SetSize(numPackStreams);
if (numPackStreams == 1)
@@ -458,7 +508,7 @@ void CInByte2::ParseFolder(CFolder &folder)
void CFolders::ParseFolderInfo(unsigned folderIndex, CFolder &folder) const
{
- size_t startPos = FoCodersDataOffset[folderIndex];
+ const size_t startPos = FoCodersDataOffset[folderIndex];
CInByte2 inByte;
inByte.Init(CodersData + startPos, FoCodersDataOffset[folderIndex + 1] - startPos);
inByte.ParseFolder(folder);
@@ -473,8 +523,8 @@ void CDatabase::GetPath(unsigned index, UString &path) const
if (!NameOffsets || !NamesBuf)
return;
- size_t offset = NameOffsets[index];
- size_t size = NameOffsets[index + 1] - offset;
+ const size_t offset = NameOffsets[index];
+ const size_t size = NameOffsets[index + 1] - offset;
if (size >= (1 << 28))
return;
@@ -507,8 +557,8 @@ HRESULT CDatabase::GetPath_Prop(unsigned index, PROPVARIANT *path) const throw()
if (!NameOffsets || !NamesBuf)
return S_OK;
- size_t offset = NameOffsets[index];
- size_t size = NameOffsets[index + 1] - offset;
+ const size_t offset = NameOffsets[index];
+ const size_t size = NameOffsets[index + 1] - offset;
if (size >= (1 << 14))
return S_OK;
@@ -530,7 +580,7 @@ HRESULT CDatabase::GetPath_Prop(unsigned index, PROPVARIANT *path) const throw()
#else
*/
- RINOK(PropVarEm_Alloc_Bstr(path, (unsigned)size - 1));
+ RINOK(PropVarEm_Alloc_Bstr(path, (unsigned)size - 1))
wchar_t *s = path->bstrVal;
const Byte *p = ((const Byte *)NamesBuf + offset * 2);
// Utf16LE__To_WCHARs_Sep(p, size, s);
@@ -601,7 +651,7 @@ void CInArchive::WaitId(UInt64 id)
{
for (;;)
{
- UInt64 type = ReadID();
+ const UInt64 type = ReadID();
if (type == id)
return;
if (type == NID::kEnd)
@@ -613,7 +663,7 @@ void CInArchive::WaitId(UInt64 id)
void CInArchive::Read_UInt32_Vector(CUInt32DefVector &v)
{
- unsigned numItems = v.Defs.Size();
+ const unsigned numItems = v.Defs.Size();
v.Vals.ClearAndSetSize(numItems);
UInt32 *p = &v.Vals[0];
const bool *defs = &v.Defs[0];
@@ -634,12 +684,9 @@ void CInArchive::ReadHashDigests(unsigned numItems, CUInt32DefVector &crcs)
}
-#define k_Scan_NumCoders_MAX 64
-#define k_Scan_NumCodersStreams_in_Folder_MAX 64
-
void CInArchive::ReadPackInfo(CFolders &f)
{
- CNum numPackStreams = ReadNum();
+ const CNum numPackStreams = ReadNum();
WaitId(NID::kSize);
f.PackPositions.Alloc(numPackStreams + 1);
@@ -648,7 +695,7 @@ void CInArchive::ReadPackInfo(CFolders &f)
for (CNum i = 0; i < numPackStreams; i++)
{
f.PackPositions[i] = sum;
- UInt64 packSize = ReadNumber();
+ const UInt64 packSize = ReadNumber();
sum += packSize;
if (sum < packSize)
ThrowIncorrect();
@@ -676,7 +723,7 @@ void CInArchive::ReadUnpackInfo(
CFolders &folders)
{
WaitId(NID::kFolder);
- CNum numFolders = ReadNum();
+ const CNum numFolders = ReadNum();
CNum numCodersOutStreams = 0;
{
@@ -704,18 +751,18 @@ void CInArchive::ReadUnpackInfo(
folders.FoCodersDataOffset[fo] = (size_t)(_inByteBack->GetPtr() - startBufPtr);
CNum numInStreams = 0;
- CNum numCoders = inByte->ReadNum();
+ const CNum numCoders = inByte->ReadNum();
if (numCoders == 0 || numCoders > k_Scan_NumCoders_MAX)
ThrowUnsupported();
for (CNum ci = 0; ci < numCoders; ci++)
{
- Byte mainByte = inByte->ReadByte();
+ const Byte mainByte = inByte->ReadByte();
if ((mainByte & 0xC0) != 0)
ThrowUnsupported();
- unsigned idSize = (mainByte & 0xF);
+ const unsigned idSize = (mainByte & 0xF);
if (idSize > 8)
ThrowUnsupported();
if (idSize > inByte->GetRem())
@@ -744,18 +791,18 @@ void CInArchive::ReadUnpackInfo(
if ((mainByte & 0x20) != 0)
{
- CNum propsSize = inByte->ReadNum();
+ const CNum propsSize = inByte->ReadNum();
if (propsSize > inByte->GetRem())
ThrowEndOfData();
if (id == k_LZMA2 && propsSize == 1)
{
- Byte v = *_inByteBack->GetPtr();
+ const Byte v = *_inByteBack->GetPtr();
if (folders.ParsedMethods.Lzma2Prop < v)
folders.ParsedMethods.Lzma2Prop = v;
}
else if (id == k_LZMA && propsSize == 5)
{
- UInt32 dicSize = GetUi32(_inByteBack->GetPtr() + 1);
+ const UInt32 dicSize = GetUi32(_inByteBack->GetPtr() + 1);
if (folders.ParsedMethods.LzmaDic < dicSize)
folders.ParsedMethods.LzmaDic = dicSize;
}
@@ -771,7 +818,7 @@ void CInArchive::ReadUnpackInfo(
else
{
UInt32 i;
- CNum numBonds = numCoders - 1;
+ const CNum numBonds = numCoders - 1;
if (numInStreams < numBonds)
ThrowUnsupported();
@@ -796,7 +843,7 @@ void CInArchive::ReadUnpackInfo(
if (numPackStreams != 1)
for (i = 0; i < numPackStreams; i++)
{
- CNum index = inByte->ReadNum(); // PackStreams
+ const CNum index = inByte->ReadNum(); // PackStreams
if (index >= numInStreams || StreamUsed[index])
ThrowUnsupported();
StreamUsed[index] = true;
@@ -838,7 +885,7 @@ void CInArchive::ReadUnpackInfo(
for (;;)
{
- UInt64 type = ReadID();
+ const UInt64 type = ReadID();
if (type == NID::kEnd)
return;
if (type == NID::kCRC)
@@ -882,19 +929,19 @@ void CInArchive::ReadSubStreamsInfo(
{
// v3.13 incorrectly worked with empty folders
// v4.07: we check that folder is empty
- CNum numSubstreams = folders.NumUnpackStreamsVector[i];
+ const CNum numSubstreams = folders.NumUnpackStreamsVector[i];
if (numSubstreams == 0)
continue;
UInt64 sum = 0;
for (CNum j = 1; j < numSubstreams; j++)
{
- UInt64 size = ReadNumber();
+ const UInt64 size = ReadNumber();
unpackSizes.Add(size);
sum += size;
if (sum < size)
ThrowIncorrect();
}
- UInt64 folderUnpackSize = folders.GetFolderUnpackSize(i);
+ const UInt64 folderUnpackSize = folders.GetFolderUnpackSize(i);
if (folderUnpackSize < sum)
ThrowIncorrect();
unpackSizes.Add(folderUnpackSize - sum);
@@ -907,7 +954,7 @@ void CInArchive::ReadSubStreamsInfo(
{
/* v9.26 - v9.29 incorrectly worked:
if (folders.NumUnpackStreamsVector[i] == 0), it threw error */
- CNum val = folders.NumUnpackStreamsVector[i];
+ const CNum val = folders.NumUnpackStreamsVector[i];
if (val > 1)
ThrowIncorrect();
if (val == 1)
@@ -918,7 +965,7 @@ void CInArchive::ReadSubStreamsInfo(
unsigned numDigests = 0;
for (i = 0; i < folders.NumFolders; i++)
{
- CNum numSubstreams = folders.NumUnpackStreamsVector[i];
+ const CNum numSubstreams = folders.NumUnpackStreamsVector[i];
if (numSubstreams != 1 || !folders.FolderCRCs.ValidAndDefined(i))
numDigests += numSubstreams;
}
@@ -941,7 +988,7 @@ void CInArchive::ReadSubStreamsInfo(
for (i = 0; i < folders.NumFolders; i++)
{
- CNum numSubstreams = folders.NumUnpackStreamsVector[i];
+ const CNum numSubstreams = folders.NumUnpackStreamsVector[i];
if (numSubstreams == 1 && folders.FolderCRCs.ValidAndDefined(i))
{
digests.Defs[k] = true;
@@ -973,7 +1020,7 @@ void CInArchive::ReadSubStreamsInfo(
unsigned k = 0;
for (i = 0; i < folders.NumFolders; i++)
{
- CNum numSubstreams = folders.NumUnpackStreamsVector[i];
+ const CNum numSubstreams = folders.NumUnpackStreamsVector[i];
if (numSubstreams == 1 && folders.FolderCRCs.ValidAndDefined(i))
{
digests.Defs[k] = true;
@@ -1069,7 +1116,7 @@ void CInArchive::ReadBoolVector(unsigned numItems, CBoolVector &v)
void CInArchive::ReadBoolVector2(unsigned numItems, CBoolVector &v)
{
- Byte allAreDefined = ReadByte();
+ const Byte allAreDefined = ReadByte();
if (allAreDefined == 0)
{
ReadBoolVector(numItems, v);
@@ -1106,7 +1153,7 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
DECL_EXTERNAL_CODECS_LOC_VARS
UInt64 baseOffset,
UInt64 &dataOffset, CObjectVector<CByteBuffer> &dataVector
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
)
{
CFolders folders;
@@ -1148,15 +1195,15 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
NULL // **inStreamMainRes
, dataAfterEnd_Error
- _7Z_DECODER_CRYPRO_VARS
- #if !defined(_7ZIP_ST)
+ Z7_7Z_DECODER_CRYPRO_VARS
+ #if !defined(Z7_ST)
, false // mtMode
, 1 // numThreads
, 0 // memUsage
#endif
);
- RINOK(result);
+ RINOK(result)
if (dataAfterEnd_Error)
ThereIsHeaderError = true;
@@ -1178,7 +1225,7 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
HRESULT CInArchive::ReadHeader(
DECL_EXTERNAL_CODECS_LOC_VARS
CDbEx &db
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
)
{
UInt64 type = ReadID();
@@ -1193,14 +1240,14 @@ HRESULT CInArchive::ReadHeader(
if (type == NID::kAdditionalStreamsInfo)
{
- HRESULT result = ReadAndDecodePackedStreams(
+ const HRESULT result = ReadAndDecodePackedStreams(
EXTERNAL_CODECS_LOC_VARS
db.ArcInfo.StartPositionAfterHeader,
db.ArcInfo.DataStartPosition2,
dataVector
- _7Z_DECODER_CRYPRO_VARS
+ Z7_7Z_DECODER_CRYPRO_VARS
);
- RINOK(result);
+ RINOK(result)
db.ArcInfo.DataStartPosition2 += db.ArcInfo.StartPositionAfterHeader;
type = ReadID();
}
@@ -1240,7 +1287,7 @@ HRESULT CInArchive::ReadHeader(
const UInt64 type2 = ReadID();
if (type2 == NID::kEnd)
break;
- UInt64 size = ReadNumber();
+ const UInt64 size = ReadNumber();
if (size > _inByteBack->GetRem())
ThrowIncorrect();
CStreamSwitch switchProp;
@@ -1255,7 +1302,7 @@ HRESULT CInArchive::ReadHeader(
{
CStreamSwitch streamSwitch;
streamSwitch.Set(this, &dataVector);
- size_t rem = _inByteBack->GetRem();
+ const size_t rem = _inByteBack->GetRem();
db.NamesBuf.Alloc(rem);
ReadBytes(db.NamesBuf, rem);
db.NameOffsets.Alloc(numFiles + 1);
@@ -1471,7 +1518,7 @@ void CDbEx::FillLinks()
for (i = 0; i < Files.Size(); i++)
{
- bool emptyStream = !Files[i].HasStream;
+ const bool emptyStream = !Files[i].HasStream;
if (indexInFolder == 0)
{
if (emptyStream)
@@ -1528,7 +1575,7 @@ void CDbEx::FillLinks()
HRESULT CInArchive::ReadDatabase2(
DECL_EXTERNAL_CODECS_LOC_VARS
CDbEx &db
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
)
{
db.Clear();
@@ -1548,22 +1595,22 @@ HRESULT CInArchive::ReadDatabase2(
UInt32 nextHeaderCRC = Get32(_header + 28);
#ifdef FORMAT_7Z_RECOVERY
- UInt32 crcFromArc = Get32(_header + 8);
+ const UInt32 crcFromArc = Get32(_header + 8);
if (crcFromArc == 0 && nextHeaderOffset == 0 && nextHeaderSize == 0 && nextHeaderCRC == 0)
{
UInt64 cur, fileSize;
- RINOK(_stream->Seek(0, STREAM_SEEK_CUR, &cur));
+ RINOK(InStream_GetPos(_stream, cur))
const unsigned kCheckSize = 512;
Byte buf[kCheckSize];
- RINOK(_stream->Seek(0, STREAM_SEEK_END, &fileSize));
+ RINOK(InStream_GetSize_SeekToEnd(_stream, fileSize))
const UInt64 rem = fileSize - cur;
unsigned checkSize = kCheckSize;
if (rem < kCheckSize)
checkSize = (unsigned)(rem);
if (checkSize < 3)
return S_FALSE;
- RINOK(_stream->Seek((Int64)(fileSize - checkSize), STREAM_SEEK_SET, NULL));
- RINOK(ReadStream_FALSE(_stream, buf, (size_t)checkSize));
+ RINOK(InStream_SeekSet(_stream, fileSize - checkSize))
+ RINOK(ReadStream_FALSE(_stream, buf, (size_t)checkSize))
if (buf[checkSize - 1] != 0)
return S_FALSE;
@@ -1580,7 +1627,7 @@ HRESULT CInArchive::ReadDatabase2(
nextHeaderSize = checkSize - i;
nextHeaderOffset = rem - nextHeaderSize;
nextHeaderCRC = CrcCalc(buf + i, (size_t)nextHeaderSize);
- RINOK(_stream->Seek((Int64)cur, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekSet(_stream, cur))
db.StartHeaderWasRecovered = true;
}
else
@@ -1622,14 +1669,14 @@ HRESULT CInArchive::ReadDatabase2(
db.UnexpectedEnd = true;
return S_FALSE;
}
- RINOK(_stream->Seek((Int64)nextHeaderOffset, STREAM_SEEK_CUR, NULL));
+ RINOK(_stream->Seek((Int64)nextHeaderOffset, STREAM_SEEK_CUR, NULL))
- size_t nextHeaderSize_t = (size_t)nextHeaderSize;
+ const size_t nextHeaderSize_t = (size_t)nextHeaderSize;
if (nextHeaderSize_t != nextHeaderSize)
return E_OUTOFMEMORY;
CByteBuffer buffer2(nextHeaderSize_t);
- RINOK(ReadStream_FALSE(_stream, buffer2, nextHeaderSize_t));
+ RINOK(ReadStream_FALSE(_stream, buffer2, nextHeaderSize_t))
if (CrcCalc(buffer2, nextHeaderSize_t) != nextHeaderCRC)
ThrowIncorrect();
@@ -1642,19 +1689,19 @@ HRESULT CInArchive::ReadDatabase2(
CObjectVector<CByteBuffer> dataVector;
- UInt64 type = ReadID();
+ const UInt64 type = ReadID();
if (type != NID::kHeader)
{
if (type != NID::kEncodedHeader)
ThrowIncorrect();
- HRESULT result = ReadAndDecodePackedStreams(
+ const HRESULT result = ReadAndDecodePackedStreams(
EXTERNAL_CODECS_LOC_VARS
db.ArcInfo.StartPositionAfterHeader,
db.ArcInfo.DataStartPosition2,
dataVector
- _7Z_DECODER_CRYPRO_VARS
+ Z7_7Z_DECODER_CRYPRO_VARS
);
- RINOK(result);
+ RINOK(result)
if (dataVector.Size() == 0)
return S_OK;
if (dataVector.Size() > 1)
@@ -1672,7 +1719,7 @@ HRESULT CInArchive::ReadDatabase2(
return ReadHeader(
EXTERNAL_CODECS_LOC_VARS
db
- _7Z_DECODER_CRYPRO_VARS
+ Z7_7Z_DECODER_CRYPRO_VARS
);
}
@@ -1680,14 +1727,14 @@ HRESULT CInArchive::ReadDatabase2(
HRESULT CInArchive::ReadDatabase(
DECL_EXTERNAL_CODECS_LOC_VARS
CDbEx &db
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
)
{
try
{
- HRESULT res = ReadDatabase2(
+ const HRESULT res = ReadDatabase2(
EXTERNAL_CODECS_LOC_VARS db
- _7Z_DECODER_CRYPRO_VARS
+ Z7_7Z_DECODER_CRYPRO_VARS
);
if (ThereIsHeaderError)
db.ThereIsHeaderError = true;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.h
index ffa1e4bc7b1..a9c14fb3b88 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zIn.h
@@ -1,7 +1,7 @@
// 7zIn.h
-#ifndef __7Z_IN_H
-#define __7Z_IN_H
+#ifndef ZIP7_INC_7Z_IN_H
+#define ZIP7_INC_7Z_IN_H
#include "../../../Common/MyCom.h"
@@ -22,12 +22,12 @@ namespace N7z {
We don't need to init isEncrypted and passwordIsDefined
We must upgrade them only */
-#ifdef _NO_CRYPTO
-#define _7Z_DECODER_CRYPRO_VARS_DECL
-#define _7Z_DECODER_CRYPRO_VARS
+#ifdef Z7_NO_CRYPTO
+#define Z7_7Z_DECODER_CRYPRO_VARS_DECL
+#define Z7_7Z_DECODER_CRYPRO_VARS
#else
-#define _7Z_DECODER_CRYPRO_VARS_DECL , ICryptoGetTextPassword *getTextPassword, bool &isEncrypted, bool &passwordIsDefined, UString &password
-#define _7Z_DECODER_CRYPRO_VARS , getTextPassword, isEncrypted, passwordIsDefined, password
+#define Z7_7Z_DECODER_CRYPRO_VARS_DECL , ICryptoGetTextPassword *getTextPassword, bool &isEncrypted, bool &passwordIsDefined, UString &password
+#define Z7_7Z_DECODER_CRYPRO_VARS , getTextPassword, isEncrypted, passwordIsDefined, password
#endif
struct CParsedMethods
@@ -418,17 +418,17 @@ class CInArchive
DECL_EXTERNAL_CODECS_LOC_VARS
UInt64 baseOffset, UInt64 &dataOffset,
CObjectVector<CByteBuffer> &dataVector
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
);
HRESULT ReadHeader(
DECL_EXTERNAL_CODECS_LOC_VARS
CDbEx &db
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
);
HRESULT ReadDatabase2(
DECL_EXTERNAL_CODECS_LOC_VARS
CDbEx &db
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
);
public:
CInArchive(bool useMixerMT):
@@ -442,7 +442,7 @@ public:
HRESULT ReadDatabase(
DECL_EXTERNAL_CODECS_LOC_VARS
CDbEx &db
- _7Z_DECODER_CRYPRO_VARS_DECL
+ Z7_7Z_DECODER_CRYPRO_VARS_DECL
);
};
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zItem.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zItem.h
index 0f9fdada687..e8c68bee1e5 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zItem.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zItem.h
@@ -1,7 +1,7 @@
// 7zItem.h
-#ifndef __7Z_ITEM_H
-#define __7Z_ITEM_H
+#ifndef ZIP7_INC_7Z_ITEM_H
+#define ZIP7_INC_7Z_ITEM_H
#include "../../../Common/MyBuffer.h"
#include "../../../Common/MyString.h"
@@ -36,7 +36,7 @@ struct CBond
struct CFolder
{
- CLASS_NO_COPY(CFolder)
+ Z7_CLASS_NO_COPY(CFolder)
public:
CObjArray2<CCoderInfo> Coders;
CObjArray2<CBond> Bonds;
@@ -129,6 +129,11 @@ struct CUInt32DefVector
bool CheckSize(unsigned size) const { return Defs.Size() == size || Defs.Size() == 0; }
void SetItem(unsigned index, bool defined, UInt32 value);
+ void if_NonEmpty_FillResedue_with_false(unsigned numItems)
+ {
+ if (Defs.Size() != 0 && Defs.Size() < numItems)
+ SetItem(numItems - 1, false, 0);
+ }
};
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.cpp
index 2786bf28772..7f8fa5b5229 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.cpp
@@ -14,16 +14,14 @@
namespace NArchive {
namespace N7z {
-HRESULT COutArchive::WriteSignature()
+static void FillSignature(Byte *buf)
{
- Byte buf[8];
memcpy(buf, kSignature, kSignatureSize);
buf[kSignatureSize] = kMajorVersion;
buf[kSignatureSize + 1] = 4;
- return WriteDirect(buf, 8);
}
-#ifdef _7Z_VOL
+#ifdef Z7_7Z_VOL
HRESULT COutArchive::WriteFinishSignature()
{
RINOK(WriteDirect(kFinishSignature, kSignatureSize));
@@ -49,15 +47,16 @@ static void SetUInt64(Byte *p, UInt64 d)
HRESULT COutArchive::WriteStartHeader(const CStartHeader &h)
{
- Byte buf[24];
- SetUInt64(buf + 4, h.NextHeaderOffset);
- SetUInt64(buf + 12, h.NextHeaderSize);
- SetUInt32(buf + 20, h.NextHeaderCRC);
- SetUInt32(buf, CrcCalc(buf + 4, 20));
- return WriteDirect(buf, 24);
+ Byte buf[32];
+ FillSignature(buf);
+ SetUInt64(buf + 8 + 4, h.NextHeaderOffset);
+ SetUInt64(buf + 8 + 12, h.NextHeaderSize);
+ SetUInt32(buf + 8 + 20, h.NextHeaderCRC);
+ SetUInt32(buf + 8, CrcCalc(buf + 8 + 4, 20));
+ return WriteDirect(buf, sizeof(buf));
}
-#ifdef _7Z_VOL
+#ifdef Z7_7Z_VOL
HRESULT COutArchive::WriteFinishHeader(const CFinishHeader &h)
{
CCRC crc;
@@ -75,15 +74,15 @@ HRESULT COutArchive::WriteFinishHeader(const CFinishHeader &h)
}
#endif
-HRESULT COutArchive::Create(ISequentialOutStream *stream, bool endMarker)
+HRESULT COutArchive::Create_and_WriteStartPrefix(ISequentialOutStream *stream /* , bool endMarker */)
{
Close();
- #ifdef _7Z_VOL
+ #ifdef Z7_7Z_VOL
// endMarker = false;
_endMarker = endMarker;
#endif
SeqStream = stream;
- if (!endMarker)
+ // if (!endMarker)
{
SeqStream.QueryInterface(IID_IOutStream, &Stream);
if (!Stream)
@@ -91,8 +90,13 @@ HRESULT COutArchive::Create(ISequentialOutStream *stream, bool endMarker)
return E_NOTIMPL;
// endMarker = true;
}
+ RINOK(Stream->Seek(0, STREAM_SEEK_CUR, &_signatureHeaderPos))
+ Byte buf[32];
+ FillSignature(buf);
+ memset(&buf[8], 0, 32 - 8);
+ return WriteDirect(buf, sizeof(buf));
}
- #ifdef _7Z_VOL
+ #ifdef Z7_7Z_VOL
if (endMarker)
{
/*
@@ -101,17 +105,10 @@ HRESULT COutArchive::Create(ISequentialOutStream *stream, bool endMarker)
sh.NextHeaderSize = (UInt32)(Int32)-1;
sh.NextHeaderCRC = 0;
WriteStartHeader(sh);
+ return S_OK;
*/
}
- else
#endif
- {
- if (!Stream)
- return E_FAIL;
- RINOK(WriteSignature());
- RINOK(Stream->Seek(0, STREAM_SEEK_CUR, &_prefixHeaderPos));
- }
- return S_OK;
}
void COutArchive::Close()
@@ -120,17 +117,6 @@ void COutArchive::Close()
Stream.Release();
}
-HRESULT COutArchive::SkipPrefixArchiveHeader()
-{
- #ifdef _7Z_VOL
- if (_endMarker)
- return S_OK;
- #endif
- Byte buf[24];
- memset(buf, 0, 24);
- return WriteDirect(buf, 24);
-}
-
UInt64 COutArchive::GetPos() const
{
if (_countMode)
@@ -216,7 +202,7 @@ static unsigned GetBigNumberSize(UInt64 value)
return i;
}
-#ifdef _7Z_VOL
+#ifdef Z7_7Z_VOL
UInt32 COutArchive::GetVolHeadersSize(UInt64 dataSize, int nameLength, bool props)
{
UInt32 result = GetBigNumberSize(dataSize) * 2 + 41;
@@ -515,14 +501,20 @@ HRESULT COutArchive::EncodeStream(
outFolders.FolderUnpackCRCs.Defs.Add(true);
outFolders.FolderUnpackCRCs.Vals.Add(CrcCalc(data, data.Size()));
// outFolders.NumUnpackStreamsVector.Add(1);
- UInt64 dataSize64 = data.Size();
- UInt64 unpackSize = data.Size();
- RINOK(encoder.Encode(
+ const UInt64 dataSize64 = data.Size();
+ const UInt64 expectSize = data.Size();
+ RINOK(encoder.Encode1(
EXTERNAL_CODECS_LOC_VARS
stream,
// NULL,
- &dataSize64,
- folders.AddNew(), outFolders.CoderUnpackSizes, unpackSize, SeqStream, packSizes, NULL))
+ &dataSize64, // inSizeForReduce
+ expectSize,
+ folders.AddNew(),
+ // outFolders.CoderUnpackSizes, unpackSize,
+ SeqStream, packSizes, NULL))
+ if (!streamSpec->WasFinished())
+ return E_FAIL;
+ encoder.Encode_Post(dataSize64, outFolders.CoderUnpackSizes);
return S_OK;
}
@@ -833,15 +825,15 @@ HRESULT COutArchive::WriteDatabase(
{
headerSize = 0;
headerOffset = 0;
- headerCRC = CrcCalc(0, 0);
+ headerCRC = CrcCalc(NULL, 0);
}
else
{
bool encodeHeaders = false;
- if (options != 0)
+ if (options)
if (options->IsEmpty())
- options = 0;
- if (options != 0)
+ options = NULL;
+ if (options)
if (options->PasswordIsDefined || headerOptions.CompressMainHeader)
encodeHeaders = true;
@@ -876,7 +868,7 @@ HRESULT COutArchive::WriteDatabase(
RINOK(EncodeStream(
EXTERNAL_CODECS_LOC_VARS
encoder, buf,
- packSizes, folders, outFolders));
+ packSizes, folders, outFolders))
_writeToStream = true;
@@ -890,11 +882,11 @@ HRESULT COutArchive::WriteDatabase(
FOR_VECTOR (i, packSizes)
headerOffset += packSizes[i];
}
- RINOK(_outByte.Flush());
+ RINOK(_outByte.Flush())
headerCRC = CRC_GET_DIGEST(_crc);
headerSize = _outByte.GetProcessedSize();
}
- #ifdef _7Z_VOL
+ #ifdef Z7_7Z_VOL
if (_endMarker)
{
CFinishHeader h;
@@ -910,14 +902,16 @@ HRESULT COutArchive::WriteDatabase(
}
else
#endif
+ if (Stream)
{
CStartHeader h;
h.NextHeaderSize = headerSize;
h.NextHeaderCRC = headerCRC;
h.NextHeaderOffset = headerOffset;
- RINOK(Stream->Seek((Int64)_prefixHeaderPos, STREAM_SEEK_SET, NULL));
+ RINOK(Stream->Seek((Int64)_signatureHeaderPos, STREAM_SEEK_SET, NULL))
return WriteStartHeader(h);
}
+ return S_OK;
}
void CUInt32DefVector::SetItem(unsigned index, bool defined, UInt32 value)
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.h
index 1ebad56d271..940cafcdfb4 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zOut.h
@@ -1,7 +1,7 @@
// 7zOut.h
-#ifndef __7Z_OUT_H
-#define __7Z_OUT_H
+#ifndef ZIP7_INC_7Z_OUT_H
+#define ZIP7_INC_7Z_OUT_H
#include "7zCompressionMode.h"
#include "7zEncode.h"
@@ -14,6 +14,8 @@
namespace NArchive {
namespace N7z {
+const unsigned k_StartHeadersRewriteSize = 32;
+
class CWriteBufferLoc
{
Byte *_data;
@@ -240,8 +242,6 @@ struct CArchiveDatabaseOut: public COutFolders
class COutArchive
{
- UInt64 _prefixHeaderPos;
-
HRESULT WriteDirect(const void *data, UInt32 size) { return WriteStream(SeqStream, data, size); }
UInt64 GetPos() const;
@@ -290,44 +290,39 @@ class COutArchive
bool _countMode;
bool _writeToStream;
- size_t _countSize;
- UInt32 _crc;
- COutBuffer _outByte;
- CWriteBufferLoc _outByte2;
-
- #ifdef _7Z_VOL
+ bool _useAlign;
+ #ifdef Z7_7Z_VOL
bool _endMarker;
#endif
+ UInt32 _crc;
+ size_t _countSize;
+ CWriteBufferLoc _outByte2;
+ COutBuffer _outByte;
+ UInt64 _signatureHeaderPos;
+ CMyComPtr<IOutStream> Stream;
- bool _useAlign;
-
- HRESULT WriteSignature();
- #ifdef _7Z_VOL
+ #ifdef Z7_7Z_VOL
HRESULT WriteFinishSignature();
- #endif
- HRESULT WriteStartHeader(const CStartHeader &h);
- #ifdef _7Z_VOL
HRESULT WriteFinishHeader(const CFinishHeader &h);
#endif
- CMyComPtr<IOutStream> Stream;
+ HRESULT WriteStartHeader(const CStartHeader &h);
+
public:
+ CMyComPtr<ISequentialOutStream> SeqStream;
COutArchive() { _outByte.Create(1 << 16); }
- CMyComPtr<ISequentialOutStream> SeqStream;
- HRESULT Create(ISequentialOutStream *stream, bool endMarker);
+ HRESULT Create_and_WriteStartPrefix(ISequentialOutStream *stream /* , bool endMarker */);
void Close();
- HRESULT SkipPrefixArchiveHeader();
HRESULT WriteDatabase(
DECL_EXTERNAL_CODECS_LOC_VARS
const CArchiveDatabaseOut &db,
const CCompressionMethodMode *options,
const CHeaderOptions &headerOptions);
- #ifdef _7Z_VOL
+ #ifdef Z7_7Z_VOL
static UInt32 GetVolHeadersSize(UInt64 dataSize, int nameLength = 0, bool props = false);
static UInt64 GetVolPureSize(UInt64 volSize, int nameLength = 0, bool props = false);
#endif
-
};
}}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.cpp
index 4cb5a5e6469..d3b3cbe57dc 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.cpp
@@ -2,56 +2,63 @@
#include "StdAfx.h"
-#include "7zProperties.h"
-#include "7zHeader.h"
#include "7zHandler.h"
-
-// #define _MULTI_PACK
+#include "7zProperties.h"
namespace NArchive {
namespace N7z {
struct CPropMap
{
- UInt32 FilePropID;
- CStatProp StatProp;
+ Byte FilePropID;
+ // CStatProp StatProp;
+ VARTYPE vt;
+ UInt32 StatPropID;
};
+// #define STAT_PROP(name, id, vt) { name, id, vt }
+#define STAT_PROP(name, id, vt) vt, id
+
+#define STAT_PROP2(id, vt) STAT_PROP(NULL, id, vt)
+
+#define k_7z_id_Encrypted 97
+#define k_7z_id_Method 98
+#define k_7z_id_Block 99
+
static const CPropMap kPropMap[] =
{
- { NID::kName, { NULL, kpidPath, VT_BSTR } },
- { NID::kSize, { NULL, kpidSize, VT_UI8 } },
- { NID::kPackInfo, { NULL, kpidPackSize, VT_UI8 } },
+ { NID::kName, STAT_PROP2(kpidPath, VT_BSTR) },
+ { NID::kSize, STAT_PROP2(kpidSize, VT_UI8) },
+ { NID::kPackInfo, STAT_PROP2(kpidPackSize, VT_UI8) },
- #ifdef _MULTI_PACK
- { 100, { "Pack0", kpidPackedSize0, VT_UI8 } },
- { 101, { "Pack1", kpidPackedSize1, VT_UI8 } },
- { 102, { "Pack2", kpidPackedSize2, VT_UI8 } },
- { 103, { "Pack3", kpidPackedSize3, VT_UI8 } },
- { 104, { "Pack4", kpidPackedSize4, VT_UI8 } },
+ #ifdef Z7_7Z_SHOW_PACK_STREAMS_SIZES
+#define k_7z_id_PackedSize0 100
+ { k_7z_id_PackedSize0 + 0, STAT_PROP("Pack0", kpidPackedSize0, VT_UI8) },
+ { k_7z_id_PackedSize0 + 1, STAT_PROP("Pack1", kpidPackedSize1, VT_UI8) },
+ { k_7z_id_PackedSize0 + 2, STAT_PROP("Pack2", kpidPackedSize2, VT_UI8) },
+ { k_7z_id_PackedSize0 + 3, STAT_PROP("Pack3", kpidPackedSize3, VT_UI8) },
+ { k_7z_id_PackedSize0 + 4, STAT_PROP("Pack4", kpidPackedSize4, VT_UI8) },
#endif
- { NID::kCTime, { NULL, kpidCTime, VT_FILETIME } },
- { NID::kMTime, { NULL, kpidMTime, VT_FILETIME } },
- { NID::kATime, { NULL, kpidATime, VT_FILETIME } },
- { NID::kWinAttrib, { NULL, kpidAttrib, VT_UI4 } },
- { NID::kStartPos, { NULL, kpidPosition, VT_UI8 } },
+ { NID::kCTime, STAT_PROP2(kpidCTime, VT_FILETIME) },
+ { NID::kMTime, STAT_PROP2(kpidMTime, VT_FILETIME) },
+ { NID::kATime, STAT_PROP2(kpidATime, VT_FILETIME) },
+ { NID::kWinAttrib, STAT_PROP2(kpidAttrib, VT_UI4) },
+ { NID::kStartPos, STAT_PROP2(kpidPosition, VT_UI8) },
- { NID::kCRC, { NULL, kpidCRC, VT_UI4 } },
-
-// { NID::kIsAux, { NULL, kpidIsAux, VT_BOOL } },
- { NID::kAnti, { NULL, kpidIsAnti, VT_BOOL } }
-
- #ifndef _SFX
- ,
- { 97, { NULL, kpidEncrypted, VT_BOOL } },
- { 98, { NULL, kpidMethod, VT_BSTR } },
- { 99, { NULL, kpidBlock, VT_UI4 } }
+ { NID::kCRC, STAT_PROP2(kpidCRC, VT_UI4) },
+ // { NID::kIsAux, STAT_PROP2(kpidIsAux, VT_BOOL) },
+ { NID::kAnti, STAT_PROP2(kpidIsAnti, VT_BOOL) }
+
+ #ifndef Z7_SFX
+ , { k_7z_id_Encrypted, STAT_PROP2(kpidEncrypted, VT_BOOL) }
+ , { k_7z_id_Method, STAT_PROP2(kpidMethod, VT_BSTR) }
+ , { k_7z_id_Block, STAT_PROP2(kpidBlock, VT_UI4) }
#endif
};
static void CopyOneItem(CRecordVector<UInt64> &src,
- CRecordVector<UInt64> &dest, UInt32 item)
+ CRecordVector<UInt64> &dest, const UInt32 item)
{
FOR_VECTOR (i, src)
if (src[i] == item)
@@ -62,7 +69,7 @@ static void CopyOneItem(CRecordVector<UInt64> &src,
}
}
-static void RemoveOneItem(CRecordVector<UInt64> &src, UInt32 item)
+static void RemoveOneItem(CRecordVector<UInt64> &src, const UInt32 item)
{
FOR_VECTOR (i, src)
if (src[i] == item)
@@ -72,7 +79,7 @@ static void RemoveOneItem(CRecordVector<UInt64> &src, UInt32 item)
}
}
-static void InsertToHead(CRecordVector<UInt64> &dest, UInt32 item)
+static void InsertToHead(CRecordVector<UInt64> &dest, const UInt32 item)
{
FOR_VECTOR (i, dest)
if (dest[i] == item)
@@ -89,7 +96,7 @@ void CHandler::FillPopIDs()
{
_fileInfoPopIDs.Clear();
- #ifdef _7Z_VOL
+ #ifdef Z7_7Z_VOL
if (_volumes.Size() < 1)
return;
const CVolume &volume = _volumes.Front();
@@ -105,34 +112,31 @@ void CHandler::FillPopIDs()
RemoveOneItem(fileInfoPopIDs, NID::kNtSecure);
*/
- COPY_ONE_ITEM(kName);
- COPY_ONE_ITEM(kAnti);
- COPY_ONE_ITEM(kSize);
- COPY_ONE_ITEM(kPackInfo);
- COPY_ONE_ITEM(kCTime);
- COPY_ONE_ITEM(kMTime);
- COPY_ONE_ITEM(kATime);
- COPY_ONE_ITEM(kWinAttrib);
- COPY_ONE_ITEM(kCRC);
- COPY_ONE_ITEM(kComment);
+ COPY_ONE_ITEM(kName)
+ COPY_ONE_ITEM(kAnti)
+ COPY_ONE_ITEM(kSize)
+ COPY_ONE_ITEM(kPackInfo)
+ COPY_ONE_ITEM(kCTime)
+ COPY_ONE_ITEM(kMTime)
+ COPY_ONE_ITEM(kATime)
+ COPY_ONE_ITEM(kWinAttrib)
+ COPY_ONE_ITEM(kCRC)
+ COPY_ONE_ITEM(kComment)
_fileInfoPopIDs += fileInfoPopIDs;
- #ifndef _SFX
- _fileInfoPopIDs.Add(97);
- _fileInfoPopIDs.Add(98);
- _fileInfoPopIDs.Add(99);
+ #ifndef Z7_SFX
+ _fileInfoPopIDs.Add(k_7z_id_Encrypted);
+ _fileInfoPopIDs.Add(k_7z_id_Method);
+ _fileInfoPopIDs.Add(k_7z_id_Block);
#endif
- #ifdef _MULTI_PACK
- _fileInfoPopIDs.Add(100);
- _fileInfoPopIDs.Add(101);
- _fileInfoPopIDs.Add(102);
- _fileInfoPopIDs.Add(103);
- _fileInfoPopIDs.Add(104);
+ #ifdef Z7_7Z_SHOW_PACK_STREAMS_SIZES
+ for (unsigned i = 0; i < 5; i++)
+ _fileInfoPopIDs.Add(k_7z_id_PackedSize0 + i);
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
InsertToHead(_fileInfoPopIDs, NID::kMTime);
InsertToHead(_fileInfoPopIDs, NID::kPackInfo);
InsertToHead(_fileInfoPopIDs, NID::kSize);
@@ -140,25 +144,29 @@ void CHandler::FillPopIDs()
#endif
}
-STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProps)
+Z7_COM7F_IMF(CHandler::GetNumberOfProperties(UInt32 *numProps))
{
*numProps = _fileInfoPopIDs.Size();
return S_OK;
}
-STDMETHODIMP CHandler::GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)
+Z7_COM7F_IMF(CHandler::GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType))
{
if (index >= _fileInfoPopIDs.Size())
return E_INVALIDARG;
- UInt64 id = _fileInfoPopIDs[index];
- for (unsigned i = 0; i < ARRAY_SIZE(kPropMap); i++)
+ const UInt64 id = _fileInfoPopIDs[index];
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(kPropMap); i++)
{
const CPropMap &pr = kPropMap[i];
if (pr.FilePropID == id)
{
+ *propID = pr.StatPropID;
+ *varType = pr.vt;
+ /*
const CStatProp &st = pr.StatProp;
*propID = st.PropID;
*varType = st.vt;
+ */
/*
if (st.lpwstrName)
*name = ::SysAllocString(st.lpwstrName);
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.h
index 66181795422..091c39b4037 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zProperties.h
@@ -1,13 +1,16 @@
// 7zProperties.h
-#ifndef __7Z_PROPERTIES_H
-#define __7Z_PROPERTIES_H
+#ifndef ZIP7_INC_7Z_PROPERTIES_H
+#define ZIP7_INC_7Z_PROPERTIES_H
#include "../../PropID.h"
namespace NArchive {
namespace N7z {
+// #define Z7_7Z_SHOW_PACK_STREAMS_SIZES // for debug
+
+#ifdef Z7_7Z_SHOW_PACK_STREAMS_SIZES
enum
{
kpidPackedSize0 = kpidUserDefined,
@@ -16,6 +19,7 @@ enum
kpidPackedSize3,
kpidPackedSize4
};
+#endif
}}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zRegister.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zRegister.cpp
index eac8b4f2d3d..1f11079e626 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zRegister.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zRegister.cpp
@@ -22,6 +22,6 @@ REGISTER_ARC_IO_DECREMENT_SIG(
| NArcInfoFlags::kMTime_Default
, TIME_PREC_TO_ARC_FLAGS_MASK(NFileTimeType::kWindows)
| TIME_PREC_TO_ARC_FLAGS_TIME_DEFAULT(NFileTimeType::kWindows)
- , NULL);
+ , NULL)
}}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp
index 8e45d98756c..8b531bc7c9f 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp
@@ -4,19 +4,28 @@
#include "7zSpecStream.h"
-STDMETHODIMP CSequentialInStreamSizeCount2::Read(void *data, UInt32 size, UInt32 *processedSize)
+/*
+Z7_COM7F_IMF(CSequentialInStreamSizeCount2::Read(void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessedSize;
- HRESULT result = _stream->Read(data, size, &realProcessedSize);
+ const HRESULT result = _stream->Read(data, size, &realProcessedSize);
_size += realProcessedSize;
if (processedSize)
*processedSize = realProcessedSize;
return result;
}
-STDMETHODIMP CSequentialInStreamSizeCount2::GetSubStreamSize(UInt64 subStream, UInt64 *value)
+Z7_COM7F_IMF(CSequentialInStreamSizeCount2::GetSubStreamSize(UInt64 subStream, UInt64 *value))
{
if (!_getSubStreamSize)
return E_NOTIMPL;
return _getSubStreamSize->GetSubStreamSize(subStream, value);
}
+
+Z7_COM7F_IMF(CSequentialInStreamSizeCount2::GetNextInSubStream(UInt64 *streamIndexRes, ISequentialInStream **stream))
+{
+ if (!_compressGetSubStreamSize)
+ return E_NOTIMPL;
+ return _compressGetSubStreamSize->GetNextInSubStream(streamIndexRes, stream);
+}
+*/
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.h
index 21155069f2d..78f631e432a 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zSpecStream.h
@@ -1,35 +1,49 @@
// 7zSpecStream.h
-#ifndef __7Z_SPEC_STREAM_H
-#define __7Z_SPEC_STREAM_H
+#ifndef ZIP7_INC_7Z_SPEC_STREAM_H
+#define ZIP7_INC_7Z_SPEC_STREAM_H
#include "../../../Common/MyCom.h"
#include "../../ICoder.h"
-class CSequentialInStreamSizeCount2:
+/*
+#define Z7_COM_QI_ENTRY_AG_2(i, sub0, sub) else if (iid == IID_ ## i) \
+ { if (!sub) RINOK(sub0->QueryInterface(IID_ ## i, (void **)&sub)) \
+ { i *ti = this; *outObject = ti; } }
+
+class CSequentialInStreamSizeCount2 Z7_final:
public ISequentialInStream,
public ICompressGetSubStreamSize,
+ public ICompressInSubStreams,
public CMyUnknownImp
{
+ Z7_COM_QI_BEGIN2(ISequentialInStream)
+ Z7_COM_QI_ENTRY(ICompressGetSubStreamSize)
+ Z7_COM_QI_ENTRY_AG_2(ISequentialInStream, _stream, _compressGetSubStreamSize)
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+ Z7_IFACE_COM7_IMP(ICompressGetSubStreamSize)
+ Z7_IFACE_COM7_IMP(ICompressInSubStreams)
+
CMyComPtr<ISequentialInStream> _stream;
CMyComPtr<ICompressGetSubStreamSize> _getSubStreamSize;
+ CMyComPtr<ICompressInSubStreams> _compressGetSubStreamSize;
UInt64 _size;
public:
void Init(ISequentialInStream *stream)
{
_size = 0;
_getSubStreamSize.Release();
+ _compressGetSubStreamSize.Release();
_stream = stream;
_stream.QueryInterface(IID_ICompressGetSubStreamSize, &_getSubStreamSize);
+ _stream.QueryInterface(IID_ICompressInSubStreams, &_compressGetSubStreamSize);
}
UInt64 GetSize() const { return _size; }
-
- MY_UNKNOWN_IMP2(ISequentialInStream, ICompressGetSubStreamSize)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-
- STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value);
};
+*/
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp b/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp
index b6fd1924e67..4e9ea5d4868 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp
@@ -4,6 +4,8 @@
#include "../../../../C/CpuArch.h"
+#include "../../../Common/MyLinux.h"
+#include "../../../Common/StringToInt.h"
#include "../../../Common/Wildcard.h"
#include "../../Common/CreateCoder.h"
@@ -24,24 +26,43 @@
namespace NArchive {
namespace N7z {
-
#define k_X86 k_BCJ
struct CFilterMode
{
UInt32 Id;
- UInt32 Delta;
-
- CFilterMode(): Id(0), Delta(0) {}
+ UInt32 Delta; // required File Size alignment, if Id is not k_Delta.
+ // (Delta == 0) means unknown alignment
+ UInt32 Offset; // for k_ARM64
+ // UInt32 AlignSizeOpt; // for k_ARM64
+
+ CFilterMode():
+ Id(0),
+ Delta(0),
+ Offset(0)
+ // , AlignSizeOpt(0)
+ {}
+
+ void ClearFilterMode()
+ {
+ Id = 0;
+ Delta = 0;
+ Offset = 0;
+ // AlignSizeOpt = 0;
+ }
+ // it sets Delta as Align value, if Id is exe filter
+ // in another cases it sets Delta = 0, that
void SetDelta()
{
if (Id == k_IA64)
Delta = 16;
- else if (Id == k_ARM || Id == k_PPC || Id == k_SPARC)
+ else if (Id == k_ARM64 || Id == k_ARM || Id == k_PPC || Id == k_SPARC)
Delta = 4;
else if (Id == k_ARMT)
Delta = 2;
+ else if (Id == k_BCJ || Id == k_BCJ2)
+ Delta = 1; // do we need it?
else
Delta = 0;
}
@@ -78,6 +99,7 @@ static int Parse_EXE(const Byte *buf, size_t size, CFilterMode *filterMode)
{
case 0x014C:
case 0x8664: filterId = k_X86; break;
+ case 0xAA64: filterId = k_ARM64; break;
/*
IMAGE_FILE_MACHINE_ARM 0x01C0 // ARM LE
@@ -94,6 +116,7 @@ static int Parse_EXE(const Byte *buf, size_t size, CFilterMode *filterMode)
default: return 0;
}
+ // const UInt32 numSections = GetUi16(p + 2);
optHeaderSize = GetUi16(p + 16);
if (optHeaderSize > (1 << 10))
return 0;
@@ -109,6 +132,63 @@ static int Parse_EXE(const Byte *buf, size_t size, CFilterMode *filterMode)
return 0;
}
+ /*
+ // Windows exe file sizes are not aligned for 4 KiB.
+ // So we can't use (CFilterMode::Offset != 0) in solid archives.
+ // So we just don't set Offset here.
+#define NUM_SCAN_SECTIONS_MAX (1 << 6)
+#define EXE_SECTION_OFFSET_MAX (1 << 27)
+#define EXE_SECTION_SIZE_MIN (1 << 8)
+#define EXE_SECTION_SIZE_MAX (1 << 27)
+#define PE_SectHeaderSize 40
+#define PE_SECT_EXECUTE 0x20000000
+
+ if (numSections > NUM_SCAN_SECTIONS_MAX)
+ return 0;
+
+ p += optHeaderSize;
+ // UInt32 numExeSections = 0;
+ // bool execute_finded = false;
+ // UInt32 sect_va = 0;
+ // UInt32 sect_size = 0;
+ // UInt32 sect_offset = 0;
+
+ for (UInt32 i = 0; i < numSections
+ // && numExeSections < numSectionsMax
+ ; i++, p += PE_SectHeaderSize)
+ {
+ UInt32 characts, rawSize, offset;
+ if ((UInt32)(p - buf) + PE_SectHeaderSize > size)
+ return 0;
+ rawSize = GetUi32(p + 16);
+ offset = GetUi32(p + 20);
+ characts = GetUi32(p + 36);
+ if (rawSize >= EXE_SECTION_SIZE_MIN &&
+ rawSize <= EXE_SECTION_SIZE_MAX &&
+ offset <= EXE_SECTION_OFFSET_MAX &&
+ // offset < limit &&
+ offset > 0)
+ {
+ if ((characts & PE_SECT_EXECUTE) != 0)
+ {
+ // execute_finded = true;
+ // sect_va = GetUi32(p + 12);
+ // sect_size = rawSize;
+ // sect_offset = offset;
+ break;
+ }
+ }
+ }
+
+ filterMode->Offset = 0;
+ if (filterId == k_ARM64)
+ {
+ // filterMode->AlignSizeOpt = (1 << 12);
+ // const UInt32 offs = (sect_va - sect_offset) & 0xFFF;
+ // if (offs != 0)
+ // filterMode->Offset = offs; // change it
+ }
+ */
filterMode->Id = filterId;
return 1;
}
@@ -164,8 +244,9 @@ static int Parse_ELF(const Byte *buf, size_t size, CFilterMode *filterMode)
case 20:
case 21: if (!be) return 0; filterId = k_PPC; break;
case 40: if ( be) return 0; filterId = k_ARM; break;
-
- /* Some IA-64 ELF exacutable have size that is not aligned for 16 bytes.
+ case 183: if (be) return 0; filterId = k_ARM64; break;
+
+ /* Some IA-64 ELF executables have size that is not aligned for 16 bytes.
So we don't use IA-64 filter for IA-64 ELF */
// case 50: if ( be) return 0; filterId = k_IA64; break;
@@ -192,6 +273,7 @@ static int Parse_ELF(const Byte *buf, size_t size, CFilterMode *filterMode)
#define MACH_MACHINE_PPC 18
#define MACH_MACHINE_PPC64 (MACH_ARCH_ABI64 | MACH_MACHINE_PPC)
#define MACH_MACHINE_AMD64 (MACH_ARCH_ABI64 | MACH_MACHINE_386)
+#define MACH_MACHINE_ARM64 (MACH_ARCH_ABI64 | MACH_MACHINE_ARM)
static unsigned Parse_MACH(const Byte *buf, size_t size, CFilterMode *filterMode)
{
@@ -218,6 +300,7 @@ static unsigned Parse_MACH(const Byte *buf, size_t size, CFilterMode *filterMode
case MACH_MACHINE_SPARC: if (!be) return 0; filterId = k_SPARC; break;
case MACH_MACHINE_PPC:
case MACH_MACHINE_PPC64: if (!be) return 0; filterId = k_PPC; break;
+ case MACH_MACHINE_ARM64: if ( be) return 0; filterId = k_ARM64; break;
default: return 0;
}
@@ -284,10 +367,15 @@ static BoolInt Parse_WAV(const Byte *buf, size_t size, CFilterMode *filterMode)
return False;
}
+
+/*
+ filterMode->Delta will be set as:
+ = delta value : [1, 256] : for k_Delta
+ = 0 for another filters (branch filters)
+*/
static BoolInt ParseFile(const Byte *buf, size_t size, CFilterMode *filterMode)
{
- filterMode->Id = 0;
- filterMode->Delta = 0;
+ filterMode->ClearFilterMode();
if (Parse_EXE(buf, size, filterMode)) return True;
if (Parse_ELF(buf, size, filterMode)) return True;
@@ -315,18 +403,44 @@ struct CFilterMode2: public CFilterMode
else if (!m.Encrypted)
return 1;
- if (Id < m.Id) return -1;
- if (Id > m.Id) return 1;
+ const UInt32 id1 = Id;
+ const UInt32 id2 = m.Id;
+ /*
+ // we can change the order to place k_ARM64 files close to another exe files
+ if (id1 <= k_SPARC &&
+ id2 <= k_SPARC)
+ {
+ #define k_ARM64_FOR_SORT 0x3030901
+ if (id1 == k_ARM64) id1 = k_ARM64_FOR_SORT;
+ if (id2 == k_ARM64) id2 = k_ARM64_FOR_SORT;
+ }
+ */
+ if (id1 < id2) return -1;
+ if (id1 > id2) return 1;
if (Delta < m.Delta) return -1;
if (Delta > m.Delta) return 1;
+ if (Offset < m.Offset) return -1;
+ if (Offset > m.Offset) return 1;
+
+ /* we don't go here, because GetGroup()
+ and operator ==(const CFilterMode2 &m)
+ add only unique CFilterMode2:: { Id, Delta, Offset, Encrypted } items.
+ */
+ /*
+ if (GroupIndex < m.GroupIndex) return -1;
+ if (GroupIndex > m.GroupIndex) return 1;
+ */
return 0;
}
bool operator ==(const CFilterMode2 &m) const
{
- return Id == m.Id && Delta == m.Delta && Encrypted == m.Encrypted;
+ return Id == m.Id
+ && Delta == m.Delta
+ && Offset == m.Offset
+ && Encrypted == m.Encrypted;
}
};
@@ -367,6 +481,7 @@ static inline bool IsExeFilter(CMethodId m)
{
switch (m)
{
+ case k_ARM64:
case k_BCJ:
case k_BCJ2:
case k_ARM:
@@ -383,8 +498,9 @@ static unsigned Get_FilterGroup_for_Folder(
CRecordVector<CFilterMode2> &filters, const CFolderEx &f, bool extractFilter)
{
CFilterMode2 m;
- m.Id = 0;
- m.Delta = 0;
+ // m.Id = 0;
+ // m.Delta = 0;
+ // m.Offset = 0;
m.Encrypted = f.IsEncrypted();
if (extractFilter)
@@ -405,6 +521,9 @@ static unsigned Get_FilterGroup_for_Folder(
if (m.Id == k_BCJ2)
m.Id = k_BCJ;
m.SetDelta();
+ if (m.Id == k_ARM64)
+ if (coder.Props.Size() == 4)
+ m.Offset = GetUi32(coder.Props);
}
}
@@ -417,15 +536,15 @@ static unsigned Get_FilterGroup_for_Folder(
static HRESULT WriteRange(IInStream *inStream, ISequentialOutStream *outStream,
UInt64 position, UInt64 size, ICompressProgressInfo *progress)
{
- RINOK(inStream->Seek((Int64)position, STREAM_SEEK_SET, 0));
+ RINOK(InStream_SeekSet(inStream, position))
CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream;
- CMyComPtr<CLimitedSequentialInStream> inStreamLimited(streamSpec);
+ CMyComPtr<ISequentialInStream> inStreamLimited(streamSpec);
streamSpec->SetStream(inStream);
streamSpec->Init(size);
NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder;
CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
- RINOK(copyCoder->Code(inStreamLimited, outStream, NULL, NULL, progress));
+ RINOK(copyCoder->Code(inStreamLimited, outStream, NULL, NULL, progress))
return (copyCoderSpec->TotalSize == size ? S_OK : E_FAIL);
}
@@ -445,7 +564,7 @@ UString CUpdateItem::GetExtension() const
}
*/
-#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }
+#define RINOZ(x) { const int _t_ = (x); if (_t_ != 0) return _t_; }
#define RINOZ_COMP(a, b) RINOZ(MyCompare(a, b))
@@ -630,7 +749,7 @@ struct CRefItem
unsigned NamePos;
unsigned ExtensionIndex;
- CRefItem() {};
+ CRefItem() {}
CRefItem(UInt32 index, const CUpdateItem &ui, bool sortByType):
UpdateItem(&ui),
Index(index),
@@ -710,16 +829,16 @@ static int CompareUpdateItems(const CRefItem *p1, const CRefItem *p2, void *para
// bool sortByType = *(bool *)param;
const CSortParam *sortParam = (const CSortParam *)param;
- bool sortByType = sortParam->SortByType;
+ const bool sortByType = sortParam->SortByType;
if (sortByType)
{
- RINOZ_COMP(a1.ExtensionIndex, a2.ExtensionIndex);
- RINOZ(CompareFileNames(u1.Name.Ptr(a1.ExtensionPos), u2.Name.Ptr(a2.ExtensionPos)));
- RINOZ(CompareFileNames(u1.Name.Ptr(a1.NamePos), u2.Name.Ptr(a2.NamePos)));
+ RINOZ_COMP(a1.ExtensionIndex, a2.ExtensionIndex)
+ RINOZ(CompareFileNames(u1.Name.Ptr(a1.ExtensionPos), u2.Name.Ptr(a2.ExtensionPos)))
+ RINOZ(CompareFileNames(u1.Name.Ptr(a1.NamePos), u2.Name.Ptr(a2.NamePos)))
if (!u1.MTimeDefined && u2.MTimeDefined) return 1;
if (u1.MTimeDefined && !u2.MTimeDefined) return -1;
- if (u1.MTimeDefined && u2.MTimeDefined) RINOZ_COMP(u1.MTime, u2.MTime);
- RINOZ_COMP(u1.Size, u2.Size);
+ if (u1.MTimeDefined && u2.MTimeDefined) RINOZ_COMP(u1.MTime, u2.MTime)
+ RINOZ_COMP(u1.Size, u2.Size)
}
/*
int par1 = a1.UpdateItem->ParentFolderIndex;
@@ -765,9 +884,9 @@ static int CompareUpdateItems(const CRefItem *p1, const CRefItem *p2, void *para
}
*/
// RINOZ_COMP(a1.UpdateItem->ParentSortIndex, a2.UpdateItem->ParentSortIndex);
- RINOK(CompareFileNames(u1.Name, u2.Name));
- RINOZ_COMP(a1.UpdateItem->IndexInClient, a2.UpdateItem->IndexInClient);
- RINOZ_COMP(a1.UpdateItem->IndexInArchive, a2.UpdateItem->IndexInArchive);
+ RINOK(CompareFileNames(u1.Name, u2.Name))
+ RINOZ_COMP(a1.UpdateItem->IndexInClient, a2.UpdateItem->IndexInClient)
+ RINOZ_COMP(a1.UpdateItem->IndexInArchive, a2.UpdateItem->IndexInArchive)
return 0;
}
@@ -778,7 +897,7 @@ struct CSolidGroup
CRecordVector<CFolderRepack> folderRefs;
};
-static const char * const g_ExeExts[] =
+static const char * const g_Exe_Exts[] =
{
"dll"
, "exe"
@@ -787,14 +906,65 @@ static const char * const g_ExeExts[] =
, "sys"
};
-static bool IsExeExt(const wchar_t *ext)
+static const char * const g_ExeUnix_Exts[] =
+{
+ "so"
+ , "dylib"
+};
+
+static bool IsExt_Exe(const wchar_t *ext)
{
- for (unsigned i = 0; i < ARRAY_SIZE(g_ExeExts); i++)
- if (StringsAreEqualNoCase_Ascii(ext, g_ExeExts[i]))
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_Exe_Exts); i++)
+ if (StringsAreEqualNoCase_Ascii(ext, g_Exe_Exts[i]))
return true;
return false;
}
+/*
+static bool IsExt_ExeUnix(const wchar_t *ext)
+{
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_ExeUnix_Exts); i++)
+ if (StringsAreEqualNoCase_Ascii(ext, g_ExeUnix_Exts[i]))
+ return true;
+ return false;
+}
+*/
+
+// we try to find "so" extension in such name: libstdc++.so.6.0.29
+static bool IsExt_ExeUnix_NumericAllowed(const UString &path)
+{
+ unsigned pos = path.Len();
+ unsigned dotPos = pos;
+ for (;;)
+ {
+ if (pos == 0)
+ return false;
+ const wchar_t c = path[--pos];
+ if (IS_PATH_SEPAR(c))
+ return false;
+ if (c == '.')
+ {
+ const unsigned num = (dotPos - pos) - 1;
+ if (num < 1)
+ return false;
+ const wchar_t *cur = path.Ptr(pos + 1);
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_ExeUnix_Exts); i++)
+ {
+ const char *ext = g_ExeUnix_Exts[i];
+ if (num == MyStringLen(ext))
+ if (IsString1PrefixedByString2_NoCase_Ascii(cur, ext))
+ return true;
+ }
+ const wchar_t *end;
+ ConvertStringToUInt32(cur, &end);
+ if ((size_t)(end - cur) != num)
+ return false;
+ dotPos = pos;
+ }
+ }
+}
+
+
struct CAnalysis
{
CMyComPtr<IArchiveUpdateCallbackFile> Callback;
@@ -802,6 +972,8 @@ struct CAnalysis
bool ParseWav;
bool ParseExe;
+ bool ParseExeUnix;
+ bool ParseNoExt;
bool ParseAll;
/*
@@ -811,8 +983,10 @@ struct CAnalysis
*/
CAnalysis():
- ParseWav(true),
+ ParseWav(false),
ParseExe(false),
+ ParseExeUnix(false),
+ ParseNoExt(false),
ParseAll(false)
/*
, Need_ATime(false)
@@ -829,32 +1003,46 @@ HRESULT CAnalysis::GetFilterGroup(UInt32 index, const CUpdateItem &ui, CFilterMo
{
filterMode.Id = 0;
filterMode.Delta = 0;
+ filterMode.Offset = 0;
CFilterMode filterModeTemp = filterMode;
- int slashPos = ui.Name.ReverseFind_PathSepar();
- int dotPos = ui.Name.ReverseFind_Dot();
+ const int slashPos = ui.Name.ReverseFind_PathSepar();
+ const int dotPos = ui.Name.ReverseFind_Dot();
// if (dotPos > slashPos)
{
bool needReadFile = ParseAll;
-
+ /* if (Callback) is not supported by client,
+ we still try to use file name extension to detect executable file */
bool probablyIsSameIsa = false;
if (!needReadFile || !Callback)
{
- const wchar_t *ext;
+ const wchar_t *ext = NULL;
if (dotPos > slashPos)
ext = ui.Name.Ptr((unsigned)(dotPos + 1));
- else
- ext = ui.Name.RightPtr(0);
-
- // p7zip uses the trick to store posix attributes in high 16 bits
+ // 7-zip stores posix attributes in high 16 bits and sets (0x8000) flag
if (ui.Attrib & 0x8000)
{
- unsigned st_mode = ui.Attrib >> 16;
- // st_mode = 00111;
- if ((st_mode & 00111) && (ui.Size >= 2048))
+ const unsigned st_mode = ui.Attrib >> 16;
+ /* note: executable ".so" can be without execute permission,
+ and symbolic link to such ".so" file is possible */
+ // st_mode = 00111; // for debug
+ /* in Linux we expect such permissions:
+ 0755 : for most executables
+ 0644 : for some ".so" files
+ 0777 : in WSL for all files.
+ We can try to exclude some such 0777 cases from analysis,
+ if there is non-executable extension.
+ */
+
+ if ((st_mode & (
+ MY_LIN_S_IXUSR |
+ MY_LIN_S_IXGRP |
+ MY_LIN_S_IXOTH)) != 0
+ && MY_LIN_S_ISREG(st_mode)
+ && (ui.Size >= (1u << 11)))
{
#ifndef _WIN32
probablyIsSameIsa = true;
@@ -863,36 +1051,45 @@ HRESULT CAnalysis::GetFilterGroup(UInt32 index, const CUpdateItem &ui, CFilterMo
}
}
- if (IsExeExt(ext))
- {
- needReadFile = true;
- #ifdef _WIN32
- probablyIsSameIsa = true;
- needReadFile = ParseExe;
- #endif
- }
- else if (StringsAreEqualNoCase_Ascii(ext, "wav"))
- {
- needReadFile = ParseWav;
- }
- /*
- else if (!needReadFile && ParseUnixExt)
+ if (!needReadFile)
{
- if (StringsAreEqualNoCase_Ascii(ext, "so")
- || StringsAreEqualNoCase_Ascii(ext, ""))
-
- needReadFile = true;
+ if (!ext)
+ needReadFile = ParseNoExt;
+ else
+ {
+ bool isUnixExt = false;
+ if (ParseExeUnix)
+ isUnixExt = IsExt_ExeUnix_NumericAllowed(ui.Name);
+ if (isUnixExt)
+ {
+ needReadFile = true;
+ #ifndef _WIN32
+ probablyIsSameIsa = true;
+ #endif
+ }
+ else if (IsExt_Exe(ext))
+ {
+ needReadFile = ParseExe;
+ #ifdef _WIN32
+ probablyIsSameIsa = true;
+ #endif
+ }
+ else if (StringsAreEqualNoCase_Ascii(ext, "wav"))
+ {
+ if (!needReadFile)
+ needReadFile = ParseWav;
+ }
+ }
}
- */
}
- if (needReadFile && Callback)
+ if (needReadFile)
{
- if (Buffer.Size() != kAnalysisBufSize)
- {
- Buffer.Alloc(kAnalysisBufSize);
- }
+ BoolInt parseRes = false;
+ if (Callback)
{
+ if (Buffer.Size() != kAnalysisBufSize)
+ Buffer.Alloc(kAnalysisBufSize);
CMyComPtr<ISequentialInStream> stream;
HRESULT result = Callback->GetStream2(index, &stream, NUpdateNotifyOp::kAnalyze);
if (result == S_OK && stream)
@@ -908,40 +1105,60 @@ HRESULT CAnalysis::GetFilterGroup(UInt32 index, const CUpdateItem &ui, CFilterMo
ATime_Defined = true;
}
*/
-
size_t size = kAnalysisBufSize;
result = ReadStream(stream, Buffer, &size);
stream.Release();
// RINOK(Callback->SetOperationResult2(index, NUpdate::NOperationResult::kOK));
if (result == S_OK)
{
- BoolInt parseRes = ParseFile(Buffer, size, &filterModeTemp);
- if (parseRes && filterModeTemp.Delta == 0)
- {
- filterModeTemp.SetDelta();
- if (filterModeTemp.Delta != 0 && filterModeTemp.Id != k_Delta)
- {
- if (ui.Size % filterModeTemp.Delta != 0)
- {
- parseRes = false;
- }
- }
- }
- if (!parseRes)
+ parseRes = ParseFile(Buffer, size, &filterModeTemp);
+ }
+ }
+ } // Callback
+ else if (probablyIsSameIsa)
+ {
+ #ifdef MY_CPU_X86_OR_AMD64
+ filterModeTemp.Id = k_X86;
+ #endif
+ #ifdef MY_CPU_ARM64
+ filterModeTemp.Id = k_ARM64;
+ #endif
+ parseRes = true;
+ }
+
+ if (parseRes
+ && filterModeTemp.Id != k_Delta
+ && filterModeTemp.Delta == 0)
+ {
+ /* ParseFile() sets (filterModeTemp.Delta == 0) for all
+ methods except of k_Delta. */
+ // it's not k_Delta
+ // So we call SetDelta() to set Delta
+ filterModeTemp.SetDelta();
+ if (filterModeTemp.Delta > 1)
+ {
+ /* If file Size is not aligned, then branch filter
+ will not work for next file in solid block.
+ Maybe we should allow filter for non-aligned-size file in non-solid archives ?
+ */
+ if (ui.Size % filterModeTemp.Delta != 0)
+ parseRes = false;
+ // windows exe files are not aligned for 4 KiB.
+ /*
+ else if (filterModeTemp.Id == k_ARM64 && filterModeTemp.Offset != 0)
+ {
+ if (ui.Size % (1 << 12) != 0)
{
- filterModeTemp.Id = 0;
- filterModeTemp.Delta = 0;
+ // If Size is not aligned for 4 KiB, then Offset will not work for next file in solid block.
+ // so we place such file in group with (Offset==0).
+ filterModeTemp.Offset = 0;
}
}
+ */
}
}
- }
- else if ((needReadFile && !Callback) || probablyIsSameIsa)
- {
- #ifdef MY_CPU_X86_OR_AMD64
- if (probablyIsSameIsa)
- filterModeTemp.Id = k_X86;
- #endif
+ if (!parseRes)
+ filterModeTemp.ClearFilterMode();
}
}
@@ -1010,7 +1227,7 @@ static HRESULT AddBcj2Methods(CCompressionMethodMode &mode)
mode.Methods.Add(m);
mode.Methods.Add(m);
- RINOK(AddBondForFilter(mode));
+ RINOK(AddBondForFilter(mode))
CBond2 bond;
bond.OutCoder = 0;
bond.InCoder = methodIndex; bond.OutStream = 1; mode.Bonds.Add(bond);
@@ -1024,7 +1241,7 @@ static HRESULT MakeExeMethod(CCompressionMethodMode &mode,
if (mode.Filter_was_Inserted)
{
const CMethodFull &m = mode.Methods[0];
- CMethodId id = m.Id;
+ const CMethodId id = m.Id;
if (id == k_BCJ2)
return AddBcj2Methods(mode);
if (!m.IsSimpleCoder())
@@ -1039,7 +1256,7 @@ static HRESULT MakeExeMethod(CCompressionMethodMode &mode,
CMethodFull &m = mode.Methods.InsertNew(0);
{
- FOR_VECTOR(k, mode.Bonds)
+ FOR_VECTOR (k, mode.Bonds)
{
CBond2 &bond = mode.Bonds[k];
bond.InCoder++;
@@ -1059,23 +1276,32 @@ static HRESULT MakeExeMethod(CCompressionMethodMode &mode,
GetMethodFull(filterMode.Id, 1, m);
if (filterMode.Id == k_Delta)
m.AddProp32(NCoderPropID::kDefaultProp, filterMode.Delta);
+ else if (filterMode.Id == k_ARM64)
+ {
+ // if (filterMode.Offset != 0)
+ m.AddProp32(
+ NCoderPropID::kDefaultProp,
+ // NCoderPropID::kBranchOffset,
+ filterMode.Offset);
+ }
res = AddFilterBond(mode);
int alignBits = -1;
- if (filterMode.Id == k_Delta || filterMode.Delta != 0)
- {
- if (filterMode.Delta == 1) alignBits = 0;
- else if (filterMode.Delta == 2) alignBits = 1;
- else if (filterMode.Delta == 4) alignBits = 2;
- else if (filterMode.Delta == 8) alignBits = 3;
- else if (filterMode.Delta == 16) alignBits = 4;
- }
- else
{
- // alignBits = GetAlignForFilterMethod(filterMode.Id);
+ const UInt32 delta = filterMode.Delta;
+ if (delta == 0 || delta > 16)
+ {
+ // if (delta == 0) alignBits = GetAlignForFilterMethod(filterMode.Id);
+ }
+ else if ((delta & ((1 << 4) - 1)) == 0) alignBits = 4;
+ else if ((delta & ((1 << 3) - 1)) == 0) alignBits = 3;
+ else if ((delta & ((1 << 2) - 1)) == 0) alignBits = 2;
+ else if ((delta & ((1 << 1) - 1)) == 0) alignBits = 1;
+ // else alignBits = 0;
+ /* alignBits=0 is default mode for lzma/lzma2.
+ So we don't set alignBits=0 here. */
}
-
- if (res == S_OK && alignBits >= 0)
+ if (res == S_OK && alignBits > 0)
{
unsigned nextCoder = 1;
if (!mode.Bonds.IsEmpty())
@@ -1135,13 +1361,13 @@ static void UpdateItem_To_FileItem(const CUpdateItem &ui,
-class CRepackInStreamWithSizes:
- public ISequentialInStream,
- public ICompressGetSubStreamSize,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_2(
+ CRepackInStreamWithSizes
+ , ISequentialInStream
+ , ICompressGetSubStreamSize
+)
CMyComPtr<ISequentialInStream> _stream;
- // UInt64 _size;
+ UInt64 _size;
const CBoolVector *_extractStatuses;
UInt32 _startIndex;
public:
@@ -1151,37 +1377,28 @@ public:
{
_startIndex = startIndex;
_extractStatuses = extractStatuses;
- // _size = 0;
+ _size = 0;
_stream = stream;
}
- // UInt64 GetSize() const { return _size; }
-
- MY_UNKNOWN_IMP2(ISequentialInStream, ICompressGetSubStreamSize)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-
- STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value);
+ UInt64 GetSize() const { return _size; }
};
-STDMETHODIMP CRepackInStreamWithSizes::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CRepackInStreamWithSizes::Read(void *data, UInt32 size, UInt32 *processedSize))
{
- return _stream->Read(data, size, processedSize);
- /*
UInt32 realProcessedSize;
- HRESULT result = _stream->Read(data, size, &realProcessedSize);
+ const HRESULT result = _stream->Read(data, size, &realProcessedSize);
_size += realProcessedSize;
if (processedSize)
*processedSize = realProcessedSize;
return result;
- */
}
-STDMETHODIMP CRepackInStreamWithSizes::GetSubStreamSize(UInt64 subStream, UInt64 *value)
+Z7_COM7F_IMF(CRepackInStreamWithSizes::GetSubStreamSize(UInt64 subStream, UInt64 *value))
{
*value = 0;
if (subStream >= _extractStatuses->Size())
return S_FALSE; // E_FAIL;
- unsigned index = (unsigned)subStream;
+ const unsigned index = (unsigned)subStream;
if ((*_extractStatuses)[index])
{
const CFileItem &fi = _db->Files[_startIndex + index];
@@ -1212,7 +1429,7 @@ protected:
public:
const CDbEx *_db;
CMyComPtr<IArchiveUpdateCallbackFile> _opCallback;
- CMyComPtr<IArchiveExtractCallbackMessage> _extractCallback;
+ CMyComPtr<IArchiveExtractCallbackMessage2> _extractCallback;
HRESULT Init(UInt32 startIndex, const CBoolVector *extractStatuses);
HRESULT CheckFinishedState() const { return (_currentIndex == _extractStatuses->Size()) ? S_OK: E_FAIL; }
@@ -1241,7 +1458,7 @@ HRESULT CRepackStreamBase::OpenFile()
NEventIndexType::kInArcIndex, arcIndex,
_needWrite ?
NUpdateNotifyOp::kRepack :
- NUpdateNotifyOp::kSkip));
+ NUpdateNotifyOp::kSkip))
}
_crc = CRC_INIT_VAL;
@@ -1267,7 +1484,7 @@ HRESULT CRepackStreamBase::CloseFile()
{
RINOK(_extractCallback->ReportExtractResult(
NEventIndexType::kInArcIndex, arcIndex,
- NExtract::NOperationResult::kCRCError));
+ NExtract::NOperationResult::kCRCError))
}
// return S_FALSE;
return k_My_HRESULT_CRC_ERROR;
@@ -1277,30 +1494,28 @@ HRESULT CRepackStreamBase::ProcessEmptyFiles()
{
while (_currentIndex < _extractStatuses->Size() && _db->Files[_startIndex + _currentIndex].Size == 0)
{
- RINOK(OpenFile());
- RINOK(CloseFile());
+ RINOK(OpenFile())
+ RINOK(CloseFile())
}
return S_OK;
}
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
-class CFolderOutStream2:
+class CFolderOutStream2 Z7_final:
public CRepackStreamBase,
public ISequentialOutStream,
public CMyUnknownImp
{
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
public:
CMyComPtr<ISequentialOutStream> _stream;
-
- MY_UNKNOWN_IMP
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
-STDMETHODIMP CFolderOutStream2::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CFolderOutStream2::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -1322,22 +1537,22 @@ STDMETHODIMP CFolderOutStream2::Write(const void *data, UInt32 size, UInt32 *pro
_rem -= cur;
if (_rem == 0)
{
- RINOK(CloseFile());
- RINOK(ProcessEmptyFiles());
+ RINOK(CloseFile())
+ RINOK(ProcessEmptyFiles())
}
- RINOK(result);
+ RINOK(result)
if (cur == 0)
break;
continue;
}
- RINOK(ProcessEmptyFiles());
+ RINOK(ProcessEmptyFiles())
if (_currentIndex == _extractStatuses->Size())
{
// we don't support write cut here
return E_FAIL;
}
- RINOK(OpenFile());
+ RINOK(OpenFile())
}
return S_OK;
@@ -1349,18 +1564,19 @@ STDMETHODIMP CFolderOutStream2::Write(const void *data, UInt32 size, UInt32 *pro
static const UInt32 kTempBufSize = 1 << 16;
-class CFolderInStream2:
+class CFolderInStream2 Z7_final:
public CRepackStreamBase,
public ISequentialInStream,
public CMyUnknownImp
{
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+
Byte *_buf;
public:
CMyComPtr<ISequentialInStream> _inStream;
HRESULT Result;
- MY_UNKNOWN_IMP
-
CFolderInStream2():
Result(S_OK)
{
@@ -1373,10 +1589,9 @@ public:
}
void Init() { Result = S_OK; }
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
};
-STDMETHODIMP CFolderInStream2::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CFolderInStream2::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -1397,7 +1612,7 @@ STDMETHODIMP CFolderInStream2::Read(void *data, UInt32 size, UInt32 *processedSi
cur = kTempBufSize;
}
- HRESULT result = _inStream->Read(buf, cur, &cur);
+ const HRESULT result = _inStream->Read(buf, cur, &cur);
_crc = CrcUpdate(_crc, buf, cur);
_rem -= cur;
@@ -1414,11 +1629,11 @@ STDMETHODIMP CFolderInStream2::Read(void *data, UInt32 size, UInt32 *processedSi
if (_rem == 0)
{
- RINOK(CloseFile());
- RINOK(ProcessEmptyFiles());
+ RINOK(CloseFile())
+ RINOK(ProcessEmptyFiles())
}
- RINOK(result);
+ RINOK(result)
if (cur == 0)
return E_FAIL;
@@ -1426,20 +1641,20 @@ STDMETHODIMP CFolderInStream2::Read(void *data, UInt32 size, UInt32 *processedSi
continue;
}
- RINOK(ProcessEmptyFiles());
+ RINOK(ProcessEmptyFiles())
if (_currentIndex == _extractStatuses->Size())
{
return S_OK;
}
- RINOK(OpenFile());
+ RINOK(OpenFile())
}
return S_OK;
}
-class CThreadDecoder
- #ifndef _7ZIP_ST
+class CThreadDecoder Z7_final
+ #ifndef Z7_ST
: public CVirtThread
#endif
{
@@ -1449,7 +1664,7 @@ public:
CThreadDecoder(bool multiThreadMixer):
Decoder(multiThreadMixer)
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (multiThreadMixer)
{
MtMode = false;
@@ -1463,7 +1678,7 @@ public:
// send_UnpackSize = false;
}
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
bool dataAfterEnd_Error;
HRESULT Result;
@@ -1479,31 +1694,39 @@ public:
// bool send_UnpackSize;
// UInt64 UnpackSize;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
CMyComPtr<ICryptoGetTextPassword> getTextPassword;
#endif
- DECL_EXTERNAL_CODECS_LOC_VARS2;
+ DECL_EXTERNAL_CODECS_LOC_VARS_DECL
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
bool MtMode;
UInt32 NumThreads;
#endif
- ~CThreadDecoder() { CVirtThread::WaitThreadFinish(); }
- virtual void Execute();
+ ~CThreadDecoder() Z7_DESTRUCTOR_override
+ {
+ /* WaitThreadFinish() will be called in ~CVirtThread().
+ But we need WaitThreadFinish() call before
+ destructors of this class members.
+ */
+ CVirtThread::WaitThreadFinish();
+ }
+private:
+ virtual void Execute() Z7_override;
#endif
};
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
void CThreadDecoder::Execute()
{
try
{
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool isEncrypted = false;
bool passwordIsDefined = false;
UString password;
@@ -1526,8 +1749,8 @@ void CThreadDecoder::Execute()
NULL // *inStreamMainRes
, dataAfterEnd_Error
- _7Z_DECODER_CRYPRO_VARS
- #ifndef _7ZIP_ST
+ Z7_7Z_DECODER_CRYPRO_VARS
+ #ifndef Z7_ST
, MtMode, NumThreads,
0 // MemUsage
#endif
@@ -1548,20 +1771,17 @@ void CThreadDecoder::Execute()
#endif
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
-class CCryptoGetTextPassword:
- public ICryptoGetTextPassword,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_NOQIB_1(
+ CCryptoGetTextPassword
+ , ICryptoGetTextPassword
+)
public:
UString Password;
-
- MY_UNKNOWN_IMP
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
};
-STDMETHODIMP CCryptoGetTextPassword::CryptoGetTextPassword(BSTR *password)
+Z7_COM7F_IMF(CCryptoGetTextPassword::CryptoGetTextPassword(BSTR *password))
{
return StringToBstr(Password, password);
}
@@ -1585,58 +1805,70 @@ HRESULT Update(
DECL_EXTERNAL_CODECS_LOC_VARS
IInStream *inStream,
const CDbEx *db,
- const CObjectVector<CUpdateItem> &updateItems,
+ CObjectVector<CUpdateItem> &updateItems,
// const CObjectVector<CTreeFolder> &treeFolders,
// const CUniqBlocks &secureBlocks,
- COutArchive &archive,
- CArchiveDatabaseOut &newDatabase,
ISequentialOutStream *seqOutStream,
IArchiveUpdateCallback *updateCallback,
- const CUpdateOptions &options
- #ifndef _NO_CRYPTO
- , ICryptoGetTextPassword *getDecoderPassword
- #endif
- )
+ const CUpdateOptions &options)
{
UInt64 numSolidFiles = options.NumSolidFiles;
if (numSolidFiles == 0)
numSolidFiles = 1;
- CMyComPtr<IArchiveUpdateCallbackFile> opCallback;
- updateCallback->QueryInterface(IID_IArchiveUpdateCallbackFile, (void **)&opCallback);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveUpdateCallbackFile,
+ opCallback, updateCallback)
- CMyComPtr<IArchiveExtractCallbackMessage> extractCallback;
- updateCallback->QueryInterface(IID_IArchiveExtractCallbackMessage, (void **)&extractCallback);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveExtractCallbackMessage2,
+ extractCallback, updateCallback)
/*
- CMyComPtr<IArchiveUpdateCallbackArcProp> reportArcProp;
- updateCallback->QueryInterface(IID_IArchiveUpdateCallbackArcProp, (void **)&reportArcProp);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveUpdateCallbackArcProp,
+ reportArcProp, updateCallback)
*/
// size_t totalSecureDataSize = (size_t)secureBlocks.GetTotalSizeInBytes();
- /*
- CMyComPtr<IOutStream> outStream;
- RINOK(seqOutStream->QueryInterface(IID_IOutStream, (void **)&outStream));
- if (!outStream)
- return E_NOTIMPL;
- */
-
- UInt64 startBlockSize = db ? db->ArcInfo.StartPosition: 0;
- if (startBlockSize > 0 && !options.RemoveSfxBlock)
+ CMyComPtr<IStreamSetRestriction> v_StreamSetRestriction;
{
- RINOK(WriteRange(inStream, seqOutStream, 0, startBlockSize, NULL));
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IOutStream,
+ outStream, seqOutStream)
+ if (!outStream)
+ return E_NOTIMPL;
+ const UInt64 sfxBlockSize = (db && !options.RemoveSfxBlock) ?
+ db->ArcInfo.StartPosition: 0;
+ seqOutStream->QueryInterface(IID_IStreamSetRestriction, (void **)&v_StreamSetRestriction);
+ if (v_StreamSetRestriction)
+ {
+ UInt64 offset = 0;
+ RINOK(outStream->Seek(0, STREAM_SEEK_CUR, &offset))
+ RINOK(v_StreamSetRestriction->SetRestriction(
+ outStream ? offset + sfxBlockSize : 0,
+ outStream ? offset + sfxBlockSize + k_StartHeadersRewriteSize : 0))
+ }
+ outStream.Release();
+ if (sfxBlockSize != 0)
+ {
+ RINOK(WriteRange(inStream, seqOutStream, 0, sfxBlockSize, NULL))
+ }
}
CIntArr fileIndexToUpdateIndexMap;
UInt64 complexity = 0;
UInt64 inSizeForReduce2 = 0;
+
+ #ifndef Z7_NO_CRYPTO
bool needEncryptedRepack = false;
+ #endif
CRecordVector<CFilterMode2> filters;
CObjectVector<CSolidGroup> groups;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
bool thereAreRepacks = false;
#endif
@@ -1646,11 +1878,15 @@ HRESULT Update(
const CCompressionMethodMode &method = *options.Method;
FOR_VECTOR (i, method.Methods)
+ {
+ /* IsFilterMethod() knows only built-in codecs
+ FIXME: we should check IsFilter status for external filters too */
if (IsFilterMethod(method.Methods[i].Id))
{
useFilters = false;
break;
}
+ }
}
if (db)
@@ -1672,7 +1908,7 @@ HRESULT Update(
{
CNum indexInFolder = 0;
CNum numCopyItems = 0;
- CNum numUnpackStreams = db->NumUnpackStreamsVector[i];
+ const CNum numUnpackStreams = db->NumUnpackStreamsVector[i];
UInt64 repackSize = 0;
for (CNum fi = db->FolderStartFileIndex[i]; indexInFolder < numUnpackStreams; fi++)
@@ -1684,7 +1920,7 @@ HRESULT Update(
if (file.HasStream)
{
indexInFolder++;
- int updateIndex = fileIndexToUpdateIndexMap[fi];
+ const int updateIndex = fileIndexToUpdateIndexMap[fi];
if (updateIndex >= 0 && !updateItems[(unsigned)updateIndex].NewData)
{
numCopyItems++;
@@ -1702,11 +1938,13 @@ HRESULT Update(
CFolderEx f;
db->ParseFolderEx(i, f);
+ #ifndef Z7_NO_CRYPTO
const bool isEncrypted = f.IsEncrypted();
+ #endif
const bool needCopy = (numCopyItems == numUnpackStreams);
const bool extractFilter = (useFilters || needCopy);
- unsigned groupIndex = Get_FilterGroup_for_Folder(filters, f, extractFilter);
+ const unsigned groupIndex = Get_FilterGroup_for_Folder(filters, f, extractFilter);
while (groupIndex >= groups.Size())
groups.AddNew();
@@ -1717,14 +1955,16 @@ HRESULT Update(
complexity += db->GetFolderFullPackSize(i);
else
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
thereAreRepacks = true;
#endif
complexity += repackSize;
if (inSizeForReduce2 < repackSize)
inSizeForReduce2 = repackSize;
+ #ifndef Z7_NO_CRYPTO
if (isEncrypted)
needEncryptedRepack = true;
+ #endif
}
}
}
@@ -1749,13 +1989,13 @@ HRESULT Update(
if (inSizeForReduce < inSizeForReduce2)
inSizeForReduce = inSizeForReduce2;
- RINOK(updateCallback->SetTotal(complexity));
+ RINOK(updateCallback->SetTotal(complexity))
CLocalProgress *lps = new CLocalProgress;
CMyComPtr<ICompressProgressInfo> progress = lps;
lps->Init(updateCallback, true);
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
CStreamBinder sb;
/*
@@ -1769,13 +2009,13 @@ HRESULT Update(
CThreadDecoder threadDecoder(options.MultiThreadMixer);
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (options.MultiThreadMixer && thereAreRepacks)
{
- #ifdef EXTERNAL_CODECS
- threadDecoder.__externalCodecs = __externalCodecs;
+ #ifdef Z7_EXTERNAL_CODECS
+ threadDecoder._externalCodecs = _externalCodecs;
#endif
- WRes wres = threadDecoder.Create();
+ const WRes wres = threadDecoder.Create();
if (wres != 0)
return HRESULT_FROM_WIN32(wres);
}
@@ -1784,22 +2024,23 @@ HRESULT Update(
{
CAnalysis analysis;
// analysis.Need_ATime = options.Need_ATime;
- if (options.AnalysisLevel == 0)
- {
- analysis.ParseWav = false;
- analysis.ParseExe = false;
- analysis.ParseAll = false;
- }
- else
+ int analysisLevel = options.AnalysisLevel;
+ // (analysisLevel < 0) means default level (5)
+ if (analysisLevel < 0)
+ analysisLevel = 5;
+ if (analysisLevel != 0)
{
analysis.Callback = opCallback;
- if (options.AnalysisLevel > 0)
+ analysis.ParseWav = true;
+ if (analysisLevel >= 5)
{
- analysis.ParseWav = true;
- if (options.AnalysisLevel >= 7)
+ analysis.ParseExe = true;
+ analysis.ParseExeUnix = true;
+ // analysis.ParseNoExt = true;
+ if (analysisLevel >= 7)
{
- analysis.ParseExe = true;
- if (options.AnalysisLevel >= 9)
+ analysis.ParseNoExt = true;
+ if (analysisLevel >= 9)
analysis.ParseAll = true;
}
}
@@ -1819,7 +2060,7 @@ HRESULT Update(
if (useFilters)
{
// analysis.ATime_Defined = false;
- RINOK(analysis.GetFilterGroup(i, ui, fm));
+ RINOK(analysis.GetFilterGroup(i, ui, fm))
/*
if (analysis.ATime_Defined)
{
@@ -1830,7 +2071,7 @@ HRESULT Update(
}
fm.Encrypted = method.PasswordIsDefined;
- unsigned groupIndex = GetGroup(filters, fm);
+ const unsigned groupIndex = GetGroup(filters, fm);
while (groupIndex >= groups.Size())
groups.AddNew();
groups[groupIndex].Indices.Add(i);
@@ -1838,7 +2079,7 @@ HRESULT Update(
}
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
CCryptoGetTextPassword *getPasswordSpec = NULL;
CMyComPtr<ICryptoGetTextPassword> getTextPassword;
@@ -1847,7 +2088,7 @@ HRESULT Update(
getPasswordSpec = new CCryptoGetTextPassword;
getTextPassword = getPasswordSpec;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
threadDecoder.getTextPassword = getPasswordSpec;
#endif
@@ -1855,10 +2096,13 @@ HRESULT Update(
getPasswordSpec->Password = options.Method->Password;
else
{
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICryptoGetTextPassword,
+ getDecoderPassword, updateCallback)
if (!getDecoderPassword)
return E_NOTIMPL;
CMyComBSTR password;
- RINOK(getDecoderPassword->CryptoGetTextPassword(&password));
+ RINOK(getDecoderPassword->CryptoGetTextPassword(&password))
if (password)
getPasswordSpec->Password = password;
}
@@ -1866,11 +2110,12 @@ HRESULT Update(
#endif
-
// ---------- Compress ----------
- RINOK(archive.Create(seqOutStream, false));
- RINOK(archive.SkipPrefixArchiveHeader());
+ COutArchive archive;
+ CArchiveDatabaseOut newDatabase;
+
+ RINOK(archive.Create_and_WriteStartPrefix(seqOutStream))
/*
CIntVector treeFolderToArcIndex;
@@ -1973,7 +2218,6 @@ HRESULT Update(
{
// ---------- Sort Filters ----------
-
FOR_VECTOR (i, filters)
{
filters[i].GroupIndex = i;
@@ -1987,22 +2231,22 @@ HRESULT Update(
CCompressionMethodMode method = *options.Method;
{
- HRESULT res = MakeExeMethod(method, filterMode,
- #ifdef _7ZIP_ST
+ const HRESULT res = MakeExeMethod(method, filterMode,
+ #ifdef Z7_ST
false
#else
options.MaxFilter && options.MultiThreadMixer
#endif
);
- RINOK(res);
+ RINOK(res)
}
if (filterMode.Encrypted)
{
if (!method.PasswordIsDefined)
{
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
if (getPasswordSpec)
method.Password = getPasswordSpec->Password;
#endif
@@ -2021,13 +2265,13 @@ HRESULT Update(
const CSolidGroup &group = groups[filterMode.GroupIndex];
- FOR_VECTOR(folderRefIndex, group.folderRefs)
+ FOR_VECTOR (folderRefIndex, group.folderRefs)
{
const CFolderRepack &rep = group.folderRefs[folderRefIndex];
- unsigned folderIndex = rep.FolderIndex;
+ const unsigned folderIndex = rep.FolderIndex;
- CNum numUnpackStreams = db->NumUnpackStreamsVector[folderIndex];
+ const CNum numUnpackStreams = db->NumUnpackStreamsVector[folderIndex];
if (rep.NumCopyFiles == numUnpackStreams)
{
@@ -2035,7 +2279,7 @@ HRESULT Update(
{
RINOK(opCallback->ReportOperation(
NEventIndexType::kBlockIndex, (UInt32)folderIndex,
- NUpdateNotifyOp::kReplicate));
+ NUpdateNotifyOp::kReplicate))
// ---------- Copy old solid block ----------
{
@@ -2047,21 +2291,27 @@ HRESULT Update(
indexInFolder++;
RINOK(opCallback->ReportOperation(
NEventIndexType::kInArcIndex, (UInt32)fi,
- NUpdateNotifyOp::kReplicate));
+ NUpdateNotifyOp::kReplicate))
}
}
}
}
- UInt64 packSize = db->GetFolderFullPackSize(folderIndex);
+ const UInt64 packSize = db->GetFolderFullPackSize(folderIndex);
RINOK(WriteRange(inStream, archive.SeqStream,
- db->GetFolderStreamPos(folderIndex, 0), packSize, progress));
+ db->GetFolderStreamPos(folderIndex, 0), packSize, progress))
lps->ProgressOffset += packSize;
-
+
+ const unsigned folderIndex_New = newDatabase.Folders.Size();
CFolder &folder = newDatabase.Folders.AddNew();
+ // v23.01: we copy FolderCrc, if FolderCrc was used
+ if (db->FolderCRCs.ValidAndDefined(folderIndex))
+ newDatabase.FolderUnpackCRCs.SetItem(folderIndex_New,
+ true, db->FolderCRCs.Vals[folderIndex]);
+
db->ParseFolderInfo(folderIndex, folder);
- CNum startIndex = db->FoStartPackStreamIndex[folderIndex];
- FOR_VECTOR(j, folder.PackStreams)
+ const CNum startIndex = db->FoStartPackStreamIndex[folderIndex];
+ FOR_VECTOR (j, folder.PackStreams)
{
newDatabase.PackSizes.Add(db->GetStreamPackSize(startIndex + j));
// newDatabase.PackCRCsDefined.Add(db.PackCRCsDefined[startIndex + j]);
@@ -2069,7 +2319,7 @@ HRESULT Update(
}
size_t indexStart = db->FoToCoderUnpackSizes[folderIndex];
- size_t indexEnd = db->FoToCoderUnpackSizes[folderIndex + 1];
+ const size_t indexEnd = db->FoToCoderUnpackSizes[folderIndex + 1];
for (; indexStart < indexEnd; indexStart++)
newDatabase.CoderUnpackSizes.Add(db->CoderUnpackSizes[indexStart]);
}
@@ -2108,7 +2358,7 @@ HRESULT Update(
if (file.HasStream)
{
indexInFolder++;
- int updateIndex = fileIndexToUpdateIndexMap[fi];
+ const int updateIndex = fileIndexToUpdateIndexMap[fi];
if (updateIndex >= 0 && !updateItems[(unsigned)updateIndex].NewData)
needExtract = true;
// decodeSize += file.Size;
@@ -2130,7 +2380,6 @@ HRESULT Update(
unsigned startPackIndex = newDatabase.PackSizes.Size();
UInt64 curUnpackSize;
{
-
CMyComPtr<ISequentialInStream> sbInStream;
CRepackStreamBase *repackBase;
CFolderInStream2 *FosSpec2 = NULL;
@@ -2138,13 +2387,13 @@ HRESULT Update(
CRepackInStreamWithSizes *inStreamSizeCountSpec = new CRepackInStreamWithSizes;
CMyComPtr<ISequentialInStream> inStreamSizeCount = inStreamSizeCountSpec;
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (options.MultiThreadMixer)
{
repackBase = threadDecoder.FosSpec;
CMyComPtr<ISequentialOutStream> sbOutStream;
sb.CreateStreams2(sbInStream, sbOutStream);
- RINOK(sb.Create_ReInit());
+ RINOK(sb.Create_ReInit())
threadDecoder.FosSpec->_stream = sbOutStream;
@@ -2164,7 +2413,7 @@ HRESULT Update(
sbInStream = FosSpec2;
repackBase = FosSpec2;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool isEncrypted = false;
bool passwordIsDefined = false;
UString password;
@@ -2173,7 +2422,7 @@ HRESULT Update(
CMyComPtr<ISequentialInStream> decodedStream;
bool dataAfterEnd_Error = false;
- HRESULT res = threadDecoder.Decoder.Decode(
+ const HRESULT res = threadDecoder.Decoder.Decode(
EXTERNAL_CODECS_LOC_VARS
inStream,
db->ArcInfo.DataStartPosition, // db->GetFolderStreamPos(folderIndex, 0);,
@@ -2187,15 +2436,15 @@ HRESULT Update(
&decodedStream
, dataAfterEnd_Error
- _7Z_DECODER_CRYPRO_VARS
- #ifndef _7ZIP_ST
+ Z7_7Z_DECODER_CRYPRO_VARS
+ #ifndef Z7_ST
, false // mtMode
, 1 // numThreads
, 0 // memUsage
#endif
);
- RINOK(res);
+ RINOK(res)
if (!decodedStream)
return E_FAIL;
@@ -2207,12 +2456,12 @@ HRESULT Update(
repackBase->_extractCallback = extractCallback;
UInt32 startIndex = db->FolderStartFileIndex[folderIndex];
- RINOK(repackBase->Init(startIndex, &extractStatuses));
+ RINOK(repackBase->Init(startIndex, &extractStatuses))
inStreamSizeCountSpec->_db = db;
inStreamSizeCountSpec->Init(sbInStream, startIndex, &extractStatuses);
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (options.MultiThreadMixer)
{
WRes wres = threadDecoder.Start();
@@ -2222,20 +2471,29 @@ HRESULT Update(
#endif
}
- curUnpackSize = sizeToEncode;
+ // curUnpackSize = sizeToEncode;
- HRESULT encodeRes = encoder.Encode(
+ HRESULT encodeRes = encoder.Encode1(
EXTERNAL_CODECS_LOC_VARS
inStreamSizeCount,
// NULL,
&inSizeForReduce,
- newDatabase.Folders.AddNew(), newDatabase.CoderUnpackSizes, curUnpackSize,
+ sizeToEncode, // expectedDataSize
+ newDatabase.Folders.AddNew(),
+ // newDatabase.CoderUnpackSizes, curUnpackSize,
archive.SeqStream, newDatabase.PackSizes, progress);
if (encodeRes == k_My_HRESULT_CRC_ERROR)
return E_FAIL;
- #ifndef _7ZIP_ST
+ curUnpackSize = inStreamSizeCountSpec->GetSize();
+
+ if (encodeRes == S_OK)
+ {
+ encoder.Encode_Post(curUnpackSize, newDatabase.CoderUnpackSizes);
+ }
+
+ #ifndef Z7_ST
if (options.MultiThreadMixer)
{
// 16.00: hang was fixed : for case if decoding was not finished.
@@ -2244,12 +2502,12 @@ HRESULT Update(
sbInStream.Release();
{
- WRes wres = threadDecoder.WaitExecuteFinish();
+ const WRes wres = threadDecoder.WaitExecuteFinish();
if (wres != 0)
return HRESULT_FROM_WIN32(wres);
}
- HRESULT decodeRes = threadDecoder.Result;
+ const HRESULT decodeRes = threadDecoder.Result;
// if (res == k_My_HRESULT_CRC_ERROR)
if (decodeRes == S_FALSE || threadDecoder.dataAfterEnd_Error)
{
@@ -2260,12 +2518,12 @@ HRESULT Update(
// NEventIndexType::kBlockIndex, (UInt32)folderIndex,
(decodeRes != S_OK ?
NExtract::NOperationResult::kDataError :
- NExtract::NOperationResult::kDataAfterEnd)));
+ NExtract::NOperationResult::kDataAfterEnd)))
}
if (decodeRes != S_OK)
return E_FAIL;
}
- RINOK(decodeRes);
+ RINOK(decodeRes)
if (encodeRes == S_OK)
if (sb.ProcessedSize != sizeToEncode)
encodeRes = E_FAIL;
@@ -2279,15 +2537,15 @@ HRESULT Update(
{
RINOK(extractCallback->ReportExtractResult(
NEventIndexType::kBlockIndex, (UInt32)folderIndex,
- NExtract::NOperationResult::kDataError));
+ NExtract::NOperationResult::kDataError))
}
return E_FAIL;
}
- RINOK(FosSpec2->Result);
+ RINOK(FosSpec2->Result)
}
- RINOK(encodeRes);
- RINOK(repackBase->CheckFinishedState());
+ RINOK(encodeRes)
+ RINOK(repackBase->CheckFinishedState())
if (curUnpackSize != sizeToEncode)
return E_FAIL;
@@ -2306,7 +2564,7 @@ HRESULT Update(
if (db->Files[fi].HasStream)
{
indexInFolder++;
- int updateIndex = fileIndexToUpdateIndexMap[fi];
+ const int updateIndex = fileIndexToUpdateIndexMap[fi];
if (updateIndex >= 0)
{
const CUpdateItem &ui = updateItems[(unsigned)updateIndex];
@@ -2343,13 +2601,13 @@ HRESULT Update(
// ---------- Compress files to new solid blocks ----------
- unsigned numFiles = group.Indices.Size();
+ const unsigned numFiles = group.Indices.Size();
if (numFiles == 0)
continue;
CRecordVector<CRefItem> refItems;
refItems.ClearAndSetSize(numFiles);
// bool sortByType = (options.UseTypeSorting && isSoid); // numSolidFiles > 1
- bool sortByType = options.UseTypeSorting;
+ const bool sortByType = options.UseTypeSorting;
unsigned i;
@@ -2365,7 +2623,7 @@ HRESULT Update(
for (i = 0; i < numFiles; i++)
{
- UInt32 index = refItems[i].Index;
+ const UInt32 index = refItems[i].Index;
indices[i] = index;
/*
const CUpdateItem &ui = updateItems[index];
@@ -2395,8 +2653,8 @@ HRESULT Update(
break;
if (options.SolidExtension)
{
- int slashPos = ui.Name.ReverseFind_PathSepar();
- int dotPos = ui.Name.ReverseFind_Dot();
+ const int slashPos = ui.Name.ReverseFind_PathSepar();
+ const int dotPos = ui.Name.ReverseFind_Dot();
const wchar_t *ext = ui.Name.Ptr(dotPos <= slashPos ? ui.Name.Len() : (unsigned)(dotPos + 1));
if (numSubFiles == 0)
prevExtension = ext;
@@ -2408,7 +2666,7 @@ HRESULT Update(
if (numSubFiles < 1)
numSubFiles = 1;
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
/*
const unsigned folderIndex = newDatabase.NumUnpackStreamsVector.Size();
@@ -2431,31 +2689,45 @@ HRESULT Update(
inStreamSpec->Need_ATime = options.Need_ATime;
inStreamSpec->Need_MTime = options.Need_MTime;
inStreamSpec->Need_Attrib = options.Need_Attrib;
+ // inStreamSpec->Need_Crc = options.Need_Crc;
inStreamSpec->Init(updateCallback, &indices[i], numSubFiles);
unsigned startPackIndex = newDatabase.PackSizes.Size();
- UInt64 curFolderUnpackSize = totalSize;
+ // UInt64 curFolderUnpackSize = totalSize;
// curFolderUnpackSize = (UInt64)(Int64)-1; // for debug
+ const UInt64 expectedDataSize = totalSize;
+
+ // const unsigned folderIndex_New = newDatabase.Folders.Size();
- RINOK(encoder.Encode(
+ RINOK(encoder.Encode1(
EXTERNAL_CODECS_LOC_VARS
solidInStream,
// NULL,
&inSizeForReduce,
- newDatabase.Folders.AddNew(), newDatabase.CoderUnpackSizes, curFolderUnpackSize,
- archive.SeqStream, newDatabase.PackSizes, progress));
+ expectedDataSize, // expected size
+ newDatabase.Folders.AddNew(),
+ // newDatabase.CoderUnpackSizes, curFolderUnpackSize,
+ archive.SeqStream, newDatabase.PackSizes, progress))
if (!inStreamSpec->WasFinished())
return E_FAIL;
+ /*
+ if (inStreamSpec->Need_FolderCrc)
+ newDatabase.FolderUnpackCRCs.SetItem(folderIndex_New,
+ true, inStreamSpec->GetFolderCrc());
+ */
+
+ const UInt64 curFolderUnpackSize = inStreamSpec->Get_TotalSize_for_Coder();
+ encoder.Encode_Post(curFolderUnpackSize, newDatabase.CoderUnpackSizes);
+
UInt64 packSize = 0;
// const UInt32 numStreams = newDatabase.PackSizes.Size() - startPackIndex;
for (; startPackIndex < newDatabase.PackSizes.Size(); startPackIndex++)
packSize += newDatabase.PackSizes[startPackIndex];
lps->OutSize += packSize;
- lps->InSize += curFolderUnpackSize;
// for ()
// newDatabase.PackCRCsDefined.Add(false);
// newDatabase.PackCRCs.Add(0);
@@ -2496,14 +2768,15 @@ HRESULT Update(
// name += ".locked"; // for debug
}
+ // if (inStreamSpec->Need_Crc)
file.Crc = inStreamSpec->CRCs[subIndex];
file.Size = inStreamSpec->Sizes[subIndex];
procSize += file.Size;
- // if (file.Size >= 0) // test purposes
+ // if (file.Size >= 0) // for debug: test purposes
if (file.Size != 0)
{
- file.CrcDefined = true;
+ file.CrcDefined = true; // inStreamSpec->Need_Crc;
file.HasStream = true;
numUnpackStreams++;
}
@@ -2549,9 +2822,66 @@ HRESULT Update(
newDatabase.AddFile(file, file2, name);
}
+ /*
+ // for debug:
+ // we can write crc to folders area, if folder contains only one file
+ if (numUnpackStreams == 1 && numSubFiles == 1)
+ {
+ const CFileItem &file = newDatabase.Files.Back();
+ if (file.CrcDefined)
+ newDatabase.FolderUnpackCRCs.SetItem(folderIndex_New, true, file.Crc);
+ }
+ */
+
+ /*
// it's optional check to ensure that sizes are correct
- if (procSize != curFolderUnpackSize)
+ if (inStreamSpec->TotalSize_for_Coder != curFolderUnpackSize)
return E_FAIL;
+ */
+ // if (inStreamSpec->AlignLog == 0)
+ {
+ if (procSize != curFolderUnpackSize)
+ return E_FAIL;
+ }
+ // else
+ {
+ /*
+ {
+ const CFolder &old = newDatabase.Folders.Back();
+ CFolder &folder = newDatabase.Folders.AddNew();
+ {
+ const unsigned numBonds = old.Bonds.Size();
+ folder.Bonds.SetSize(numBonds + 1);
+ for (unsigned k = 0; k < numBonds; k++)
+ folder.Bonds[k] = old.Bonds[k];
+ CBond &bond = folder.Bonds[numBonds];
+ bond.PackIndex = 0;
+ bond.UnpackIndex = 0;
+ }
+ {
+ const unsigned numCoders = old.Coders.Size();
+ folder.Coders.SetSize(numCoders + 1);
+ for (unsigned k = 0; k < numCoders; k++)
+ folder.Coders[k] = old.Coders[k];
+ CCoderInfo &cod = folder.Coders[numCoders];
+ cod.Props.Alloc(1);
+ cod.Props[0] = (Byte)inStreamSpec->AlignLog;
+ cod.NumStreams = 1;
+ }
+ {
+ const unsigned numPackStreams = old.Coders.Size();
+ folder.Coders.SetSize(numPackStreams);
+ for (unsigned k = 0; k < numPackStreams; k++)
+ folder.PackStreams[k] = old.PackStreams[k];
+ }
+ }
+ newDatabase.Folders.Delete(newDatabase.Folders.Size() - 2);
+ */
+ }
+
+
+ lps->InSize += procSize;
+ // lps->InSize += curFolderUnpackSize;
// numUnpackStreams = 0 is very bad case for locked files
// v3.13 doesn't understand it.
@@ -2561,7 +2891,7 @@ HRESULT Update(
if (skippedSize != 0 && complexity >= skippedSize)
{
complexity -= skippedSize;
- RINOK(updateCallback->SetTotal(complexity));
+ RINOK(updateCallback->SetTotal(complexity))
}
/*
@@ -2604,7 +2934,7 @@ HRESULT Update(
}
}
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
/*
fileIndexToUpdateIndexMap.ClearAndFree();
@@ -2634,10 +2964,26 @@ HRESULT Update(
}
}
*/
+
+ {
+ const unsigned numFolders = newDatabase.Folders.Size();
+ if (newDatabase.NumUnpackStreamsVector.Size() != numFolders
+ || newDatabase.FolderUnpackCRCs.Defs.Size() > numFolders)
+ return E_FAIL;
+ newDatabase.FolderUnpackCRCs.if_NonEmpty_FillResedue_with_false(numFolders);
+ }
+
+ updateItems.ClearAndFree();
newDatabase.ReserveDown();
if (opCallback)
- RINOK(opCallback->ReportOperation(NEventIndexType::kNoIndex, (UInt32)(Int32)-1, NUpdateNotifyOp::kHeader));
+ RINOK(opCallback->ReportOperation(NEventIndexType::kNoIndex, (UInt32)(Int32)-1, NUpdateNotifyOp::kHeader))
+
+ RINOK(archive.WriteDatabase(EXTERNAL_CODECS_LOC_VARS
+ newDatabase, options.HeaderMethod, options.HeaderOptions))
+
+ if (v_StreamSetRestriction)
+ RINOK(v_StreamSetRestriction->SetRestriction(0, 0))
return S_OK;
}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.h b/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.h
index e6c48caee01..de4117af266 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/7zUpdate.h
@@ -1,7 +1,7 @@
// 7zUpdate.h
-#ifndef __7Z_UPDATE_H
-#define __7Z_UPDATE_H
+#ifndef ZIP7_INC_7Z_UPDATE_H
+#define ZIP7_INC_7Z_UPDATE_H
#include "../IArchive.h"
@@ -9,7 +9,6 @@
#include "7zCompressionMode.h"
#include "7zIn.h"
-#include "7zOut.h"
namespace NArchive {
namespace N7z {
@@ -95,8 +94,6 @@ struct CUpdateOptions
bool MaxFilter; // use BCJ2 filter instead of BCJ
int AnalysisLevel;
- CHeaderOptions HeaderOptions;
-
UInt64 NumSolidFiles;
UInt64 NumSolidBytes;
bool SolidExtension;
@@ -110,6 +107,9 @@ struct CUpdateOptions
bool Need_ATime;
bool Need_MTime;
bool Need_Attrib;
+ // bool Need_Crc;
+
+ CHeaderOptions HeaderOptions;
CUpdateOptions():
Method(NULL),
@@ -127,6 +127,7 @@ struct CUpdateOptions
Need_ATime(false),
Need_MTime(false),
Need_Attrib(false)
+ // , Need_Crc(true)
{}
};
@@ -134,18 +135,12 @@ HRESULT Update(
DECL_EXTERNAL_CODECS_LOC_VARS
IInStream *inStream,
const CDbEx *db,
- const CObjectVector<CUpdateItem> &updateItems,
+ CObjectVector<CUpdateItem> &updateItems,
// const CObjectVector<CTreeFolder> &treeFolders, // treeFolders[0] is root
// const CUniqBlocks &secureBlocks,
- COutArchive &archive,
- CArchiveDatabaseOut &newDatabase,
ISequentialOutStream *seqOutStream,
IArchiveUpdateCallback *updateCallback,
- const CUpdateOptions &options
- #ifndef _NO_CRYPTO
- , ICryptoGetTextPassword *getDecoderPassword
- #endif
- );
+ const CUpdateOptions &options);
}}
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/7z/StdAfx.h b/3rdparty/lzma/CPP/7zip/Archive/7z/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/7z/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/7z/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Archive.def b/3rdparty/lzma/CPP/7zip/Archive/Archive.def
index 145516d7970..2ed624623b8 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Archive.def
+++ b/3rdparty/lzma/CPP/7zip/Archive/Archive.def
@@ -10,3 +10,5 @@ EXPORTS
SetLargePageMode PRIVATE
SetCaseSensitive PRIVATE
+
+ GetModuleProp PRIVATE
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Archive2.def b/3rdparty/lzma/CPP/7zip/Archive/Archive2.def
index c7582742198..f891ad3b877 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Archive2.def
+++ b/3rdparty/lzma/CPP/7zip/Archive/Archive2.def
@@ -17,3 +17,5 @@ EXPORTS
SetLargePageMode PRIVATE
SetCaseSensitive PRIVATE
+
+ GetModuleProp PRIVATE
diff --git a/3rdparty/lzma/CPP/7zip/Archive/ArchiveExports.cpp b/3rdparty/lzma/CPP/7zip/Archive/ArchiveExports.cpp
index 8a441bc2801..4735fcfff04 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/ArchiveExports.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/ArchiveExports.cpp
@@ -10,7 +10,7 @@
#include "../Common/RegisterArc.h"
-static const unsigned kNumArcsMax = 64;
+static const unsigned kNumArcsMax = 72;
static unsigned g_NumArcs = 0;
static unsigned g_DefaultArcIndex = 0;
static const CArcInfo *g_Arcs[kNumArcsMax];
@@ -24,9 +24,10 @@ void RegisterArc(const CArcInfo *arcInfo) throw()
g_DefaultArcIndex = g_NumArcs;
g_Arcs[g_NumArcs++] = arcInfo;
}
+ // else throw 1;
}
-DEFINE_GUID(CLSID_CArchiveHandler,
+Z7_DEFINE_GUID(CLSID_CArchiveHandler,
k_7zip_GUID_Data1,
k_7zip_GUID_Data2,
k_7zip_GUID_Data3_Common,
@@ -36,7 +37,7 @@ DEFINE_GUID(CLSID_CArchiveHandler,
static inline HRESULT SetPropStrFromBin(const char *s, unsigned size, PROPVARIANT *value)
{
- if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != 0)
+ if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != NULL)
value->vt = VT_BSTR;
return S_OK;
}
@@ -52,7 +53,7 @@ static int FindFormatCalssId(const GUID *clsid)
CLS_ARC_ID_ITEM(cls) = 0;
if (cls != CLSID_CArchiveHandler)
return -1;
- Byte id = CLS_ARC_ID_ITEM(*clsid);
+ const Byte id = CLS_ARC_ID_ITEM(*clsid);
for (unsigned i = 0; i < g_NumArcs; i++)
if (g_Arcs[i]->Id == id)
return (int)i;
@@ -64,11 +65,11 @@ STDAPI CreateArchiver(const GUID *clsid, const GUID *iid, void **outObject)
{
COM_TRY_BEGIN
{
- int needIn = (*iid == IID_IInArchive);
- int needOut = (*iid == IID_IOutArchive);
+ const int needIn = (*iid == IID_IInArchive);
+ const int needOut = (*iid == IID_IOutArchive);
if (!needIn && !needOut)
return E_NOINTERFACE;
- int formatIndex = FindFormatCalssId(clsid);
+ const int formatIndex = FindFormatCalssId(clsid);
if (formatIndex < 0)
return CLASS_E_CLASSNOTAVAILABLE;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp b/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp
index c8b67bd4707..b6ddeb839c9 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp
@@ -6,7 +6,7 @@
#ifdef USE_MIXER_ST
-STDMETHODIMP CSequentialInStreamCalcSize::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CSequentialInStreamCalcSize::Read(void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessed = 0;
HRESULT result = S_OK;
@@ -21,7 +21,7 @@ STDMETHODIMP CSequentialInStreamCalcSize::Read(void *data, UInt32 size, UInt32 *
}
-STDMETHODIMP COutStreamCalcSize::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(COutStreamCalcSize::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
HRESULT result = S_OK;
if (_stream)
@@ -32,7 +32,7 @@ STDMETHODIMP COutStreamCalcSize::Write(const void *data, UInt32 size, UInt32 *pr
return result;
}
-STDMETHODIMP COutStreamCalcSize::OutStreamFinish()
+Z7_COM7F_IMF(COutStreamCalcSize::OutStreamFinish())
{
HRESULT result = S_OK;
if (_stream)
@@ -73,7 +73,7 @@ HRESULT CCoder::CheckDataAfterEnd(bool &dataAfterEnd_Error /* , bool &InternalPa
if (getInStreamProcessedSize)
{
UInt64 processed;
- RINOK(getInStreamProcessedSize->GetInStreamProcessedSize(&processed));
+ RINOK(getInStreamProcessedSize->GetInStreamProcessedSize(&processed))
if (processed != (UInt64)(Int64)-1)
{
const UInt64 size = PackSizes[0];
@@ -97,7 +97,7 @@ HRESULT CCoder::CheckDataAfterEnd(bool &dataAfterEnd_Error /* , bool &InternalPa
if (!PackSizePointers[i])
continue;
UInt64 processed;
- RINOK(getInStreamProcessedSize2->GetInStreamProcessedSize2(i, &processed));
+ RINOK(getInStreamProcessedSize2->GetInStreamProcessedSize2(i, &processed))
if (processed != (UInt64)(Int64)-1)
{
const UInt64 size = PackSizes[i];
@@ -343,13 +343,11 @@ void CMixerST::AddCoder(const CCreatedCoder &cod)
{
IUnknown *unk = (cod.Coder ? (IUnknown *)cod.Coder : (IUnknown *)cod.Coder2);
{
- CMyComPtr<ISequentialInStream> s;
- unk->QueryInterface(IID_ISequentialInStream, (void**)&s);
+ Z7_DECL_CMyComPtr_QI_FROM(ISequentialInStream, s, unk)
c2.CanRead = (s != NULL);
}
{
- CMyComPtr<ISequentialOutStream> s;
- unk->QueryInterface(IID_ISequentialOutStream, (void**)&s);
+ Z7_DECL_CMyComPtr_QI_FROM(ISequentialOutStream, s, unk)
c2.CanWrite = (s != NULL);
}
}
@@ -382,8 +380,8 @@ HRESULT CMixerST::GetInStream2(
if (!seqInStream)
return E_NOTIMPL;
- UInt32 numInStreams = EncodeMode ? 1 : coder.NumStreams;
- UInt32 startIndex = EncodeMode ? coderIndex : _bi.Coder_to_Stream[coderIndex];
+ const UInt32 numInStreams = EncodeMode ? 1 : coder.NumStreams;
+ const UInt32 startIndex = EncodeMode ? coderIndex : _bi.Coder_to_Stream[coderIndex];
bool isSet = false;
@@ -394,8 +392,8 @@ HRESULT CMixerST::GetInStream2(
if (setStream)
{
CMyComPtr<ISequentialInStream> seqInStream2;
- RINOK(GetInStream(inStreams, /* inSizes, */ startIndex + 0, &seqInStream2));
- RINOK(setStream->SetInStream(seqInStream2));
+ RINOK(GetInStream(inStreams, /* inSizes, */ startIndex + 0, &seqInStream2))
+ RINOK(setStream->SetInStream(seqInStream2))
isSet = true;
}
}
@@ -410,8 +408,8 @@ HRESULT CMixerST::GetInStream2(
for (UInt32 i = 0; i < numInStreams; i++)
{
CMyComPtr<ISequentialInStream> seqInStream2;
- RINOK(GetInStream(inStreams, /* inSizes, */ startIndex + i, &seqInStream2));
- RINOK(setStream2->SetInStream2(i, seqInStream2));
+ RINOK(GetInStream(inStreams, /* inSizes, */ startIndex + i, &seqInStream2))
+ RINOK(setStream2->SetInStream2(i, seqInStream2))
}
}
@@ -451,7 +449,7 @@ HRESULT CMixerST::GetInStream(
return E_INVALIDARG;
RINOK(GetInStream2(inStreams, /* inSizes, */
- _bi.Bonds[(unsigned)bond].Get_OutIndex(EncodeMode), &seqInStream));
+ _bi.Bonds[(unsigned)bond].Get_OutIndex(EncodeMode), &seqInStream))
while (_binderStreams.Size() <= (unsigned)bond)
_binderStreams.AddNew();
@@ -504,7 +502,7 @@ HRESULT CMixerST::GetOutStream(
if (bond < 0)
return E_INVALIDARG;
- UInt32 inStreamIndex = _bi.Bonds[(unsigned)bond].Get_InIndex(EncodeMode);
+ const UInt32 inStreamIndex = _bi.Bonds[(unsigned)bond].Get_InIndex(EncodeMode);
UInt32 coderIndex = inStreamIndex;
UInt32 coderStreamIndex = 0;
@@ -523,8 +521,8 @@ HRESULT CMixerST::GetOutStream(
if (!seqOutStream)
return E_NOTIMPL;
- UInt32 numOutStreams = EncodeMode ? coder.NumStreams : 1;
- UInt32 startIndex = EncodeMode ? _bi.Coder_to_Stream[coderIndex]: coderIndex;
+ const UInt32 numOutStreams = EncodeMode ? coder.NumStreams : 1;
+ const UInt32 startIndex = EncodeMode ? _bi.Coder_to_Stream[coderIndex]: coderIndex;
bool isSet = false;
@@ -535,8 +533,8 @@ HRESULT CMixerST::GetOutStream(
if (setOutStream)
{
CMyComPtr<ISequentialOutStream> seqOutStream2;
- RINOK(GetOutStream(outStreams, /* outSizes, */ startIndex + 0, &seqOutStream2));
- RINOK(setOutStream->SetOutStream(seqOutStream2));
+ RINOK(GetOutStream(outStreams, /* outSizes, */ startIndex + 0, &seqOutStream2))
+ RINOK(setOutStream->SetOutStream(seqOutStream2))
isSet = true;
}
}
@@ -552,8 +550,8 @@ HRESULT CMixerST::GetOutStream(
for (UInt32 i = 0; i < numOutStreams; i++)
{
CMyComPtr<ISequentialOutStream> seqOutStream2;
- RINOK(GetOutStream(outStreams, startIndex + i, &seqOutStream2));
- RINOK(setStream2->SetOutStream2(i, seqOutStream2));
+ RINOK(GetOutStream(outStreams, startIndex + i, &seqOutStream2))
+ RINOK(setStream2->SetOutStream2(i, seqOutStream2))
}
*/
}
@@ -616,7 +614,7 @@ HRESULT CMixerST::FinishStream(UInt32 streamIndex)
if (bond < 0)
return E_INVALIDARG;
- UInt32 inStreamIndex = _bi.Bonds[(unsigned)bond].Get_InIndex(EncodeMode);
+ const UInt32 inStreamIndex = _bi.Bonds[(unsigned)bond].Get_InIndex(EncodeMode);
UInt32 coderIndex = inStreamIndex;
UInt32 coderStreamIndex = 0;
@@ -639,8 +637,8 @@ HRESULT CMixerST::FinishCoder(UInt32 coderIndex)
{
CCoder &coder = _coders[coderIndex];
- UInt32 numOutStreams = EncodeMode ? coder.NumStreams : 1;
- UInt32 startIndex = EncodeMode ? _bi.Coder_to_Stream[coderIndex]: coderIndex;
+ const UInt32 numOutStreams = EncodeMode ? coder.NumStreams : 1;
+ const UInt32 startIndex = EncodeMode ? _bi.Coder_to_Stream[coderIndex]: coderIndex;
HRESULT res = S_OK;
for (unsigned i = 0; i < numOutStreams; i++)
@@ -671,7 +669,7 @@ void CMixerST::SelectMainCoder(bool useFirst)
if (coder.NumStreams != 1)
break;
- UInt32 st = _bi.Coder_to_Stream[ci];
+ const UInt32 st = _bi.Coder_to_Stream[ci];
if (_bi.IsStream_in_PackStreams(st))
break;
const int bond = _bi.FindBond_for_PackStream(st);
@@ -706,32 +704,32 @@ HRESULT CMixerST::Code(
dataAfterEnd_Error = false;
_binderStreams.Clear();
- unsigned ci = MainCoderIndex;
+ const unsigned ci = MainCoderIndex;
const CCoder &mainCoder = _coders[MainCoderIndex];
CObjectVector< CMyComPtr<ISequentialInStream> > seqInStreams;
CObjectVector< CMyComPtr<ISequentialOutStream> > seqOutStreams;
- UInt32 numInStreams = EncodeMode ? 1 : mainCoder.NumStreams;
- UInt32 numOutStreams = !EncodeMode ? 1 : mainCoder.NumStreams;
+ const UInt32 numInStreams = EncodeMode ? 1 : mainCoder.NumStreams;
+ const UInt32 numOutStreams = !EncodeMode ? 1 : mainCoder.NumStreams;
- UInt32 startInIndex = EncodeMode ? ci : _bi.Coder_to_Stream[ci];
- UInt32 startOutIndex = !EncodeMode ? ci : _bi.Coder_to_Stream[ci];
+ const UInt32 startInIndex = EncodeMode ? ci : _bi.Coder_to_Stream[ci];
+ const UInt32 startOutIndex = !EncodeMode ? ci : _bi.Coder_to_Stream[ci];
UInt32 i;
for (i = 0; i < numInStreams; i++)
{
CMyComPtr<ISequentialInStream> seqInStream;
- RINOK(GetInStream(inStreams, /* inSizes, */ startInIndex + i, &seqInStream));
+ RINOK(GetInStream(inStreams, /* inSizes, */ startInIndex + i, &seqInStream))
seqInStreams.Add(seqInStream);
}
for (i = 0; i < numOutStreams; i++)
{
CMyComPtr<ISequentialOutStream> seqOutStream;
- RINOK(GetOutStream(outStreams, /* outSizes, */ startOutIndex + i, &seqOutStream));
+ RINOK(GetOutStream(outStreams, /* outSizes, */ startOutIndex + i, &seqOutStream))
seqOutStreams.Add(seqOutStream);
}
@@ -755,15 +753,19 @@ HRESULT CMixerST::Code(
CMyComPtr<ICompressInitEncoder> initEncoder;
coder.QueryInterface(IID_ICompressInitEncoder, (void **)&initEncoder);
if (initEncoder)
- RINOK(initEncoder->InitEncoder());
+ {
+ RINOK(initEncoder->InitEncoder())
+ }
}
else
{
CMyComPtr<ICompressSetOutStreamSize> setOutStreamSize;
coder.QueryInterface(IID_ICompressSetOutStreamSize, (void **)&setOutStreamSize);
if (setOutStreamSize)
+ {
RINOK(setOutStreamSize->SetOutStreamSize(
- EncodeMode ? coder.PackSizePointers[0] : coder.UnpackSizePointer));
+ EncodeMode ? coder.PackSizePointers[0] : coder.UnpackSizePointer))
+ }
}
}
@@ -811,7 +813,7 @@ HRESULT CMixerST::Code(
for (i = 0; i < _coders.Size(); i++)
{
- RINOK(_coders[i].CheckDataAfterEnd(dataAfterEnd_Error /*, InternalPackSizeError */));
+ RINOK(_coders[i].CheckDataAfterEnd(dataAfterEnd_Error /*, InternalPackSizeError */))
}
return S_OK;
@@ -834,7 +836,7 @@ HRESULT CMixerST::GetMainUnpackStream(
coder.QueryInterface(IID_ICompressSetOutStreamSize, (void **)&setOutStreamSize);
if (setOutStreamSize)
{
- RINOK(setOutStreamSize->SetOutStreamSize(coder.UnpackSizePointer));
+ RINOK(setOutStreamSize->SetOutStreamSize(coder.UnpackSizePointer))
}
}
@@ -919,7 +921,7 @@ HRESULT CMixerMT::SetBindInfo(const CBindInfo &bindInfo)
_streamBinders.Clear();
FOR_VECTOR (i, _bi.Bonds)
{
- // RINOK(_streamBinders.AddNew().CreateEvents());
+ // RINOK(_streamBinders.AddNew().CreateEvents())
_streamBinders.AddNew();
}
return S_OK;
@@ -946,7 +948,7 @@ HRESULT CMixerMT::ReInit2()
{
FOR_VECTOR (i, _streamBinders)
{
- RINOK(_streamBinders[i].Create_ReInit());
+ RINOK(_streamBinders[i].Create_ReInit())
}
return S_OK;
}
@@ -986,8 +988,8 @@ HRESULT CMixerMT::Init(ISequentialInStream * const *inStreams, ISequentialOutStr
UInt32 j;
- unsigned numInStreams = EncodeMode ? 1 : csi.NumStreams;
- unsigned numOutStreams = EncodeMode ? csi.NumStreams : 1;
+ const unsigned numInStreams = EncodeMode ? 1 : csi.NumStreams;
+ const unsigned numOutStreams = EncodeMode ? csi.NumStreams : 1;
coderInfo.InStreams.Clear();
for (j = 0; j < numInStreams; j++)
@@ -1102,8 +1104,8 @@ HRESULT CMixerMT::Code(
if (wres != 0)
return HRESULT_FROM_WIN32(wres);
- RINOK(ReturnIfError(E_ABORT));
- RINOK(ReturnIfError(E_OUTOFMEMORY));
+ RINOK(ReturnIfError(E_ABORT))
+ RINOK(ReturnIfError(E_OUTOFMEMORY))
for (i = 0; i < _coders.Size(); i++)
{
@@ -1115,7 +1117,7 @@ HRESULT CMixerMT::Code(
return result;
}
- RINOK(ReturnIfError(S_FALSE));
+ RINOK(ReturnIfError(S_FALSE))
for (i = 0; i < _coders.Size(); i++)
{
@@ -1126,7 +1128,7 @@ HRESULT CMixerMT::Code(
for (i = 0; i < _coders.Size(); i++)
{
- RINOK(_coders[i].CheckDataAfterEnd(dataAfterEnd_Error /* , InternalPackSizeError */));
+ RINOK(_coders[i].CheckDataAfterEnd(dataAfterEnd_Error /* , InternalPackSizeError */))
}
return S_OK;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.h b/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.h
index f099ac3e220..484a6089ad4 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/CoderMixer2.h
@@ -1,7 +1,7 @@
// CoderMixer2.h
-#ifndef __CODER_MIXER2_H
-#define __CODER_MIXER2_H
+#ifndef ZIP7_INC_CODER_MIXER2_H
+#define ZIP7_INC_CODER_MIXER2_H
#include "../../../Common/MyCom.h"
#include "../../../Common/MyVector.h"
@@ -10,11 +10,11 @@
#include "../../Common/CreateCoder.h"
-#ifdef _7ZIP_ST
+#ifdef Z7_ST
#define USE_MIXER_ST
#else
#define USE_MIXER_MT
- #ifndef _SFX
+ #ifndef Z7_SFX
#define USE_MIXER_ST
#endif
#endif
@@ -28,18 +28,13 @@
#ifdef USE_MIXER_ST
-class CSequentialInStreamCalcSize:
- public ISequentialInStream,
- public CMyUnknownImp
-{
-public:
- MY_UNKNOWN_IMP1(ISequentialInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-private:
+Z7_CLASS_IMP_COM_1(
+ CSequentialInStreamCalcSize
+ , ISequentialInStream
+)
+ bool _wasFinished;
CMyComPtr<ISequentialInStream> _stream;
UInt64 _size;
- bool _wasFinished;
public:
void SetStream(ISequentialInStream *stream) { _stream = stream; }
void Init()
@@ -53,19 +48,14 @@ public:
};
-class COutStreamCalcSize:
- public ISequentialOutStream,
- public IOutStreamFinish,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_2(
+ COutStreamCalcSize
+ , ISequentialOutStream
+ , IOutStreamFinish
+)
CMyComPtr<ISequentialOutStream> _stream;
UInt64 _size;
public:
- MY_UNKNOWN_IMP2(ISequentialOutStream, IOutStreamFinish)
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(OutStreamFinish)();
-
void SetStream(ISequentialOutStream *stream) { _stream = stream; }
void ReleaseStream() { _stream.Release(); }
void Init() { _size = 0; }
@@ -122,7 +112,7 @@ struct CBindInfo
bool SetUnpackCoder()
{
bool isOk = false;
- FOR_VECTOR(i, Coders)
+ FOR_VECTOR (i, Coders)
{
if (FindBond_for_UnpackStream(i) < 0)
{
@@ -142,7 +132,7 @@ struct CBindInfo
int FindStream_in_PackStreams(UInt32 streamIndex) const
{
- FOR_VECTOR(i, PackStreams)
+ FOR_VECTOR (i, PackStreams)
if (PackStreams[i] == streamIndex)
return (int)i;
return -1;
@@ -189,11 +179,12 @@ struct CBindInfo
class CCoder
{
- CLASS_NO_COPY(CCoder);
+ Z7_CLASS_NO_COPY(CCoder)
public:
CMyComPtr<ICompressCoder> Coder;
CMyComPtr<ICompressCoder2> Coder2;
UInt32 NumStreams;
+ bool Finish;
UInt64 UnpackSize;
const UInt64 *UnpackSizePointer;
@@ -201,8 +192,6 @@ public:
CRecordVector<UInt64> PackSizes;
CRecordVector<const UInt64 *> PackSizePointers;
- bool Finish;
-
CCoder(): Finish(false) {}
void SetCoderInfo(const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish);
@@ -251,7 +240,7 @@ public:
// , InternalPackSizeError(false)
{}
- virtual ~CMixer() {};
+ virtual ~CMixer() {}
/*
Sequence of calling:
@@ -323,7 +312,8 @@ class CMixerST:
public CMixer,
public CMyUnknownImp
{
- CLASS_NO_COPY(CMixerST)
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_CLASS_NO_COPY(CMixerST)
HRESULT GetInStream2(ISequentialInStream * const *inStreams, /* const UInt64 * const *inSizes, */
UInt32 outStreamIndex, ISequentialInStream **inStreamRes);
@@ -340,23 +330,21 @@ public:
CObjectVector<CStBinderStream> _binderStreams;
- MY_UNKNOWN_IMP
-
CMixerST(bool encodeMode);
- ~CMixerST();
+ ~CMixerST() Z7_DESTRUCTOR_override;
- virtual void AddCoder(const CCreatedCoder &cod);
- virtual CCoder &GetCoder(unsigned index);
- virtual void SelectMainCoder(bool useFirst);
- virtual HRESULT ReInit2();
- virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish)
+ virtual void AddCoder(const CCreatedCoder &cod) Z7_override;
+ virtual CCoder &GetCoder(unsigned index) Z7_override;
+ virtual void SelectMainCoder(bool useFirst) Z7_override;
+ virtual HRESULT ReInit2() Z7_override;
+ virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish) Z7_override
{ _coders[coderIndex].SetCoderInfo(unpackSize, packSizes, finish); }
virtual HRESULT Code(
ISequentialInStream * const *inStreams,
ISequentialOutStream * const *outStreams,
ICompressProgressInfo *progress,
- bool &dataAfterEnd_Error);
- virtual UInt64 GetBondStreamSize(unsigned bondIndex) const;
+ bool &dataAfterEnd_Error) Z7_override;
+ virtual UInt64 GetBondStreamSize(unsigned bondIndex) const Z7_override;
HRESULT GetMainUnpackStream(
ISequentialInStream * const *inStreams,
@@ -372,12 +360,12 @@ public:
class CCoderMT: public CCoder, public CVirtThread
{
- CLASS_NO_COPY(CCoderMT)
+ Z7_CLASS_NO_COPY(CCoderMT)
CRecordVector<ISequentialInStream*> InStreamPointers;
CRecordVector<ISequentialOutStream*> OutStreamPointers;
private:
- void Execute();
+ virtual void Execute() Z7_override;
public:
bool EncodeMode;
HRESULT Result;
@@ -397,7 +385,7 @@ public:
class CReleaser
{
- CLASS_NO_COPY(CReleaser)
+ Z7_CLASS_NO_COPY(CReleaser)
CCoderMT &_c;
public:
CReleaser(CCoderMT &c): _c(c) {}
@@ -405,7 +393,14 @@ public:
};
CCoderMT(): EncodeMode(false) {}
- virtual ~CCoderMT() { CVirtThread::WaitThreadFinish(); }
+ ~CCoderMT() Z7_DESTRUCTOR_override
+ {
+ /* WaitThreadFinish() will be called in ~CVirtThread().
+ But we need WaitThreadFinish() call before CCoder destructor,
+ and before destructors of this class members.
+ */
+ CVirtThread::WaitThreadFinish();
+ }
void Code(ICompressProgressInfo *progress);
};
@@ -416,32 +411,31 @@ class CMixerMT:
public CMixer,
public CMyUnknownImp
{
- CLASS_NO_COPY(CMixerMT)
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_CLASS_NO_COPY(CMixerMT)
CObjectVector<CStreamBinder> _streamBinders;
HRESULT Init(ISequentialInStream * const *inStreams, ISequentialOutStream * const *outStreams);
HRESULT ReturnIfError(HRESULT code);
- // virtual ~CMixerMT() {};
+ // virtual ~CMixerMT() {}
public:
CObjectVector<CCoderMT> _coders;
- MY_UNKNOWN_IMP
-
- virtual HRESULT SetBindInfo(const CBindInfo &bindInfo);
- virtual void AddCoder(const CCreatedCoder &cod);
- virtual CCoder &GetCoder(unsigned index);
- virtual void SelectMainCoder(bool useFirst);
- virtual HRESULT ReInit2();
- virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish)
+ virtual HRESULT SetBindInfo(const CBindInfo &bindInfo) Z7_override;
+ virtual void AddCoder(const CCreatedCoder &cod) Z7_override;
+ virtual CCoder &GetCoder(unsigned index) Z7_override;
+ virtual void SelectMainCoder(bool useFirst) Z7_override;
+ virtual HRESULT ReInit2() Z7_override;
+ virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish) Z7_override
{ _coders[coderIndex].SetCoderInfo(unpackSize, packSizes, finish); }
virtual HRESULT Code(
ISequentialInStream * const *inStreams,
ISequentialOutStream * const *outStreams,
ICompressProgressInfo *progress,
- bool &dataAfterEnd_Error);
- virtual UInt64 GetBondStreamSize(unsigned bondIndex) const;
+ bool &dataAfterEnd_Error) Z7_override;
+ virtual UInt64 GetBondStreamSize(unsigned bondIndex) const Z7_override;
CMixerMT(bool encodeMode): CMixer(encodeMode) {}
};
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp b/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp
index 7c4f54879de..f48c32f2fd7 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp
@@ -4,7 +4,7 @@
#include "DummyOutStream.h"
-STDMETHODIMP CDummyOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CDummyOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessedSize = size;
HRESULT res = S_OK;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.h b/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.h
index b5a51fc0755..f884e13c872 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/DummyOutStream.h
@@ -1,24 +1,22 @@
// DummyOutStream.h
-#ifndef __DUMMY_OUT_STREAM_H
-#define __DUMMY_OUT_STREAM_H
+#ifndef ZIP7_INC_DUMMY_OUT_STREAM_H
+#define ZIP7_INC_DUMMY_OUT_STREAM_H
#include "../../../Common/MyCom.h"
#include "../../IStream.h"
-class CDummyOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_NOQIB_1(
+ CDummyOutStream
+ , ISequentialOutStream
+)
CMyComPtr<ISequentialOutStream> _stream;
UInt64 _size;
public:
void SetStream(ISequentialOutStream *outStream) { _stream = outStream; }
void ReleaseStream() { _stream.Release(); }
void Init() { _size = 0; }
- MY_UNKNOWN_IMP
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
UInt64 GetSize() const { return _size; }
};
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp b/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp
index 1b9a93ebfbb..17fed675b5d 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp
@@ -88,7 +88,7 @@ bool CCommonMethodProps::SetCommonProperty(const UString &name, const PROPVARIAN
if (name.IsPrefixedBy_Ascii_NoCase("mt"))
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
_numThreads = _numProcessors;
_numThreads_WasForced = false;
hres = ParseMtProp2(name.Ptr(2), value, _numThreads, _numThreads_WasForced);
@@ -112,7 +112,7 @@ bool CCommonMethodProps::SetCommonProperty(const UString &name, const PROPVARIAN
}
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
static void SetMethodProp32(CMethodProps &m, PROPID propID, UInt32 value)
{
@@ -127,7 +127,7 @@ void CMultiMethodProps::SetGlobalLevelTo(COneMethodInfo &oneMethodInfo) const
SetMethodProp32(oneMethodInfo, NCoderPropID::kLevel, (UInt32)level);
}
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static void SetMethodProp32_Replace(CMethodProps &m, PROPID propID, UInt32 value)
{
@@ -151,7 +151,7 @@ void CMultiMethodProps::SetMethodThreadsTo_Replace(CMethodProps &oneMethodInfo,
SetMethodProp32_Replace(oneMethodInfo, NCoderPropID::kNumThreads, numThreads);
}
-#endif // _7ZIP_ST
+#endif // Z7_ST
void CMultiMethodProps::InitMulti()
@@ -189,7 +189,7 @@ HRESULT CMultiMethodProps::SetProperty(const wchar_t *nameSpec, const PROPVARIAN
{
name.Delete(0, 2);
UInt32 v = 9;
- RINOK(ParsePropToUInt32(name, value, v));
+ RINOK(ParsePropToUInt32(name, value, v))
_analysisLevel = (int)v;
return S_OK;
}
@@ -208,13 +208,13 @@ HRESULT CMultiMethodProps::SetProperty(const wchar_t *nameSpec, const PROPVARIAN
}
UInt32 number;
- unsigned index = ParseStringToUInt32(name, number);
- UString realName = name.Ptr(index);
+ const unsigned index = ParseStringToUInt32(name, number);
+ const UString realName = name.Ptr(index);
if (index == 0)
{
if (name.IsEqualTo("f"))
{
- HRESULT res = PROPVARIANT_to_bool(value, _autoFilter);
+ const HRESULT res = PROPVARIANT_to_bool(value, _autoFilter);
if (res == S_OK)
return res;
if (value.vt != VT_BSTR)
@@ -224,7 +224,7 @@ HRESULT CMultiMethodProps::SetProperty(const wchar_t *nameSpec, const PROPVARIAN
number = 0;
}
if (number > 64)
- return E_FAIL;
+ return E_INVALIDARG;
for (unsigned j = _methods.Size(); j <= number; j++)
_methods.AddNew();
return _methods[number].ParseMethodFromPROPVARIANT(realName, value);
@@ -250,7 +250,7 @@ HRESULT CSingleMethodProps::SetProperty(const wchar_t *name2, const PROPVARIANT
if (name.IsPrefixedBy_Ascii_NoCase("x"))
{
UInt32 a = 9;
- RINOK(ParsePropToUInt32(name.Ptr(1), value, a));
+ RINOK(ParsePropToUInt32(name.Ptr(1), value, a))
_level = a;
AddProp_Level(a);
// processed = true;
@@ -264,7 +264,7 @@ HRESULT CSingleMethodProps::SetProperty(const wchar_t *name2, const PROPVARIANT
return S_OK;
}
}
- RINOK(ParseMethodFromPROPVARIANT(name, value));
+ RINOK(ParseMethodFromPROPVARIANT(name, value))
return S_OK;
}
@@ -275,7 +275,7 @@ HRESULT CSingleMethodProps::SetProperties(const wchar_t * const *names, const PR
for (UInt32 i = 0; i < numProps; i++)
{
- RINOK(SetProperty(names[i], values[i]));
+ RINOK(SetProperty(names[i], values[i]))
}
return S_OK;
@@ -286,7 +286,7 @@ HRESULT CSingleMethodProps::SetProperties(const wchar_t * const *names, const PR
static HRESULT PROPVARIANT_to_BoolPair(const PROPVARIANT &prop, CBoolPair &dest)
{
- RINOK(PROPVARIANT_to_bool(prop, dest.Val));
+ RINOK(PROPVARIANT_to_bool(prop, dest.Val))
dest.Def = true;
return S_OK;
}
@@ -300,7 +300,7 @@ HRESULT CHandlerTimeOptions::Parse(const UString &name, const PROPVARIANT &prop,
if (name.IsPrefixedBy_Ascii_NoCase("tp"))
{
UInt32 v = 0;
- RINOK(ParsePropToUInt32(name.Ptr(2), prop, v));
+ RINOK(ParsePropToUInt32(name.Ptr(2), prop, v))
Prec = v;
return S_OK;
}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.h b/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.h
index 41ee189d1f0..cfba46e245b 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/HandlerOut.h
@@ -1,7 +1,7 @@
// HandlerOut.h
-#ifndef __HANDLER_OUT_H
-#define __HANDLER_OUT_H
+#ifndef ZIP7_INC_HANDLER_OUT_H
+#define ZIP7_INC_HANDLER_OUT_H
#include "../../../Windows/System.h"
@@ -17,7 +17,7 @@ protected:
void InitCommon()
{
// _Write_MTime = true;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
_numProcessors = _numThreads = NWindows::NSystem::GetNumberOfProcessors();
_numThreads_WasForced = false;
#endif
@@ -46,7 +46,7 @@ protected:
}
public:
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
UInt32 _numThreads;
UInt32 _numProcessors;
bool _numThreads_WasForced;
@@ -63,7 +63,7 @@ public:
};
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
class CMultiMethodProps: public CCommonMethodProps
{
@@ -80,7 +80,7 @@ public:
void SetGlobalLevelTo(COneMethodInfo &oneMethodInfo) const;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
static void SetMethodThreadsTo_IfNotFinded(CMethodProps &props, UInt32 numThreads);
static void SetMethodThreadsTo_Replace(CMethodProps &props, UInt32 numThreads);
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp b/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp
index a2d68832838..735d5d1eb0e 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp
@@ -4,22 +4,33 @@
#include "InStreamWithCRC.h"
-STDMETHODIMP CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessed = 0;
HRESULT result = S_OK;
- if (_stream)
- result = _stream->Read(data, size, &realProcessed);
- _size += realProcessed;
- if (size != 0 && realProcessed == 0)
- _wasFinished = true;
- _crc = CrcUpdate(_crc, data, realProcessed);
+ if (size != 0)
+ {
+ if (_stream)
+ result = _stream->Read(data, size, &realProcessed);
+ _size += realProcessed;
+ if (realProcessed == 0)
+ _wasFinished = true;
+ else
+ _crc = CrcUpdate(_crc, data, realProcessed);
+ }
if (processedSize)
*processedSize = realProcessed;
return result;
}
-STDMETHODIMP CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CSequentialInStreamWithCRC::GetSize(UInt64 *size))
+{
+ *size = _fullSize;
+ return S_OK;
+}
+
+
+Z7_COM7F_IMF(CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessed = 0;
HRESULT result = S_OK;
@@ -36,7 +47,7 @@ STDMETHODIMP CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSi
return result;
}
-STDMETHODIMP CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
if (seekOrigin != STREAM_SEEK_SET || offset != 0)
return E_FAIL;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h b/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h
index 31b761e4566..2a91d76742a 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h
@@ -1,7 +1,7 @@
// InStreamWithCRC.h
-#ifndef __IN_STREAM_WITH_CRC_H
-#define __IN_STREAM_WITH_CRC_H
+#ifndef ZIP7_INC_IN_STREAM_WITH_CRC_H
+#define ZIP7_INC_IN_STREAM_WITH_CRC_H
#include "../../../../C/7zCrc.h"
@@ -9,26 +9,29 @@
#include "../../IStream.h"
-class CSequentialInStreamWithCRC:
- public ISequentialInStream,
- public CMyUnknownImp
-{
-public:
- MY_UNKNOWN_IMP
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-private:
+Z7_CLASS_IMP_NOQIB_2(
+ CSequentialInStreamWithCRC
+ , ISequentialInStream
+ , IStreamGetSize
+)
CMyComPtr<ISequentialInStream> _stream;
UInt64 _size;
UInt32 _crc;
bool _wasFinished;
+ UInt64 _fullSize;
public:
- void SetStream(ISequentialInStream *stream) { _stream = stream; }
+
+ CSequentialInStreamWithCRC():
+ _fullSize((UInt64)(Int64)-1)
+ {}
+
+ void SetStream(ISequentialInStream *stream) { _stream = stream; }
+ void SetFullSize(UInt64 fullSize) { _fullSize = fullSize; }
void Init()
{
_size = 0;
- _wasFinished = false;
_crc = CRC_INIT_VAL;
+ _wasFinished = false;
}
void ReleaseStream() { _stream.Release(); }
UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); }
@@ -36,22 +39,19 @@ public:
bool WasFinished() const { return _wasFinished; }
};
-class CInStreamWithCRC:
- public IInStream,
- public CMyUnknownImp
-{
-public:
- MY_UNKNOWN_IMP1(IInStream)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-private:
+Z7_CLASS_IMP_COM_1(
+ CInStreamWithCRC,
+ IInStream
+)
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+
CMyComPtr<IInStream> _stream;
UInt64 _size;
UInt32 _crc;
// bool _wasFinished;
public:
- void SetStream(IInStream *stream) { _stream = stream; }
+ void SetStream(IInStream *stream) { _stream = stream; }
void Init()
{
_size = 0;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h b/3rdparty/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h
index 3f5f4e8a4d5..8ab9b610a0f 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h
@@ -1,7 +1,7 @@
// Archive/Common/ItemNameUtils.h
-#ifndef __ARCHIVE_ITEM_NAME_UTILS_H
-#define __ARCHIVE_ITEM_NAME_UTILS_H
+#ifndef ZIP7_INC_ARCHIVE_ITEM_NAME_UTILS_H
+#define ZIP7_INC_ARCHIVE_ITEM_NAME_UTILS_H
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.cpp b/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.cpp
index 162fc928c26..5d357af7113 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.cpp
@@ -4,7 +4,7 @@
#include "MultiStream.h"
-STDMETHODIMP CMultiStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CMultiStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -23,10 +23,7 @@ STDMETHODIMP CMultiStream::Read(void *data, UInt32 size, UInt32 *processedSize)
else if (_pos >= m.GlobalOffset + m.Size)
left = mid + 1;
else
- {
- _streamIndex = mid;
break;
- }
mid = (left + right) / 2;
}
_streamIndex = mid;
@@ -36,12 +33,14 @@ STDMETHODIMP CMultiStream::Read(void *data, UInt32 size, UInt32 *processedSize)
UInt64 localPos = _pos - s.GlobalOffset;
if (localPos != s.LocalPos)
{
- RINOK(s.Stream->Seek((Int64)localPos, STREAM_SEEK_SET, &s.LocalPos));
+ RINOK(s.Stream->Seek((Int64)localPos, STREAM_SEEK_SET, &s.LocalPos))
}
- UInt64 rem = s.Size - localPos;
- if (size > rem)
- size = (UInt32)rem;
- HRESULT result = s.Stream->Read(data, size, &size);
+ {
+ const UInt64 rem = s.Size - localPos;
+ if (size > rem)
+ size = (UInt32)rem;
+ }
+ const HRESULT result = s.Stream->Read(data, size, &size);
_pos += size;
s.LocalPos += size;
if (processedSize)
@@ -49,7 +48,7 @@ STDMETHODIMP CMultiStream::Read(void *data, UInt32 size, UInt32 *processedSize)
return result;
}
-STDMETHODIMP CMultiStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CMultiStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -72,6 +71,9 @@ class COutVolumeStream:
public ISequentialOutStream,
public CMyUnknownImp
{
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
+
unsigned _volIndex;
UInt64 _volSize;
UInt64 _curPos;
@@ -80,8 +82,6 @@ class COutVolumeStream:
CCRC _crc;
public:
- MY_UNKNOWN_IMP
-
CFileItem _file;
CUpdateOptions _options;
CMyComPtr<IArchiveUpdateCallback2> VolumeCallback;
@@ -98,7 +98,6 @@ public:
}
HRESULT Flush();
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
HRESULT COutVolumeStream::Flush()
@@ -107,7 +106,7 @@ HRESULT COutVolumeStream::Flush()
{
_file.UnPackSize = _curPos;
_file.FileCRC = _crc.GetDigest();
- RINOK(WriteVolumeHeader(_archive, _file, _options));
+ RINOK(WriteVolumeHeader(_archive, _file, _options))
_archive.Close();
_volumeStream.Release();
_file.StartPos += _file.UnPackSize;
@@ -117,7 +116,10 @@ HRESULT COutVolumeStream::Flush()
*/
/*
-STDMETHODIMP COutMultiStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+
+#include "../../../Common/Defs.h"
+
+Z7_COM7F_IMF(COutMultiStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -126,8 +128,8 @@ STDMETHODIMP COutMultiStream::Write(const void *data, UInt32 size, UInt32 *proce
if (_streamIndex >= Streams.Size())
{
CSubStreamInfo subStream;
- RINOK(VolumeCallback->GetVolumeSize(Streams.Size(), &subStream.Size));
- RINOK(VolumeCallback->GetVolumeStream(Streams.Size(), &subStream.Stream));
+ RINOK(VolumeCallback->GetVolumeSize(Streams.Size(), &subStream.Size))
+ RINOK(VolumeCallback->GetVolumeStream(Streams.Size(), &subStream.Stream))
subStream.Pos = 0;
Streams.Add(subStream);
continue;
@@ -142,15 +144,15 @@ STDMETHODIMP COutMultiStream::Write(const void *data, UInt32 size, UInt32 *proce
if (_offsetPos != subStream.Pos)
{
CMyComPtr<IOutStream> outStream;
- RINOK(subStream.Stream.QueryInterface(IID_IOutStream, &outStream));
- RINOK(outStream->Seek(_offsetPos, STREAM_SEEK_SET, NULL));
+ RINOK(subStream.Stream.QueryInterface(IID_IOutStream, &outStream))
+ RINOK(outStream->Seek((Int64)_offsetPos, STREAM_SEEK_SET, NULL))
subStream.Pos = _offsetPos;
}
- UInt32 curSize = (UInt32)MyMin((UInt64)size, subStream.Size - subStream.Pos);
+ const UInt32 curSize = (UInt32)MyMin((UInt64)size, subStream.Size - subStream.Pos);
UInt32 realProcessed;
- RINOK(subStream.Stream->Write(data, curSize, &realProcessed));
- data = (void *)((Byte *)data + realProcessed);
+ RINOK(subStream.Stream->Write(data, curSize, &realProcessed))
+ data = (const void *)((const Byte *)data + realProcessed);
size -= realProcessed;
subStream.Pos += realProcessed;
_offsetPos += realProcessed;
@@ -170,7 +172,7 @@ STDMETHODIMP COutMultiStream::Write(const void *data, UInt32 size, UInt32 *proce
return S_OK;
}
-STDMETHODIMP COutMultiStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(COutMultiStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -181,11 +183,11 @@ STDMETHODIMP COutMultiStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newP
}
if (offset < 0)
return HRESULT_WIN32_ERROR_NEGATIVE_SEEK;
- _absPos = offset;
+ _absPos = (UInt64)offset;
_offsetPos = _absPos;
_streamIndex = 0;
if (newPosition)
- *newPosition = offset;
+ *newPosition = (UInt64)offset;
return S_OK;
}
*/
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.h b/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.h
index c10cd455729..e3096f58d93 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/MultiStream.h
@@ -1,20 +1,23 @@
// MultiStream.h
-#ifndef __MULTI_STREAM_H
-#define __MULTI_STREAM_H
+#ifndef ZIP7_INC_MULTI_STREAM_H
+#define ZIP7_INC_MULTI_STREAM_H
#include "../../../Common/MyCom.h"
#include "../../../Common/MyVector.h"
#include "../../IStream.h"
+#include "../../Archive/IArchive.h"
-class CMultiStream:
- public IInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CMultiStream
+ , IInStream
+)
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+
+ unsigned _streamIndex;
UInt64 _pos;
UInt64 _totalLength;
- unsigned _streamIndex;
public:
@@ -24,12 +27,12 @@ public:
UInt64 Size;
UInt64 GlobalOffset;
UInt64 LocalPos;
-
CSubStreamInfo(): Size(0), GlobalOffset(0), LocalPos(0) {}
};
-
+
+ CMyComPtr<IArchiveUpdateCallbackFile> updateCallbackFile;
CObjectVector<CSubStreamInfo> Streams;
-
+
HRESULT Init()
{
UInt64 total = 0;
@@ -37,26 +40,27 @@ public:
{
CSubStreamInfo &s = Streams[i];
s.GlobalOffset = total;
- total += Streams[i].Size;
- RINOK(s.Stream->Seek(0, STREAM_SEEK_CUR, &s.LocalPos));
+ total += s.Size;
+ s.LocalPos = 0;
+ {
+ // it was already set to start
+ // RINOK(InStream_GetPos(s.Stream, s.LocalPos));
+ }
}
_totalLength = total;
_pos = 0;
_streamIndex = 0;
return S_OK;
}
-
- MY_UNKNOWN_IMP1(IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
};
/*
-class COutMultiStream:
- public IOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ COutMultiStream,
+ IOutStream
+)
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
+
unsigned _streamIndex; // required stream
UInt64 _offsetPos; // offset from start of _streamIndex index
UInt64 _absPos;
@@ -78,11 +82,6 @@ public:
_absPos = 0;
_length = 0;
}
-
- MY_UNKNOWN_IMP1(IOutStream)
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
};
*/
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp b/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp
index f955c22547b..7dcd44ac13c 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp
@@ -4,7 +4,7 @@
#include "OutStreamWithCRC.h"
-STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
HRESULT result = S_OK;
if (_stream)
@@ -12,7 +12,7 @@ STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *pro
if (_calculate)
_crc = CrcUpdate(_crc, data, size);
_size += size;
- if (processedSize != NULL)
+ if (processedSize)
*processedSize = size;
return result;
}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h b/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h
index 09b899bbd74..845146a1b9d 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h
@@ -1,7 +1,7 @@
// OutStreamWithCRC.h
-#ifndef __OUT_STREAM_WITH_CRC_H
-#define __OUT_STREAM_WITH_CRC_H
+#ifndef ZIP7_INC_OUT_STREAM_WITH_CRC_H
+#define ZIP7_INC_OUT_STREAM_WITH_CRC_H
#include "../../../../C/7zCrc.h"
@@ -9,17 +9,15 @@
#include "../../IStream.h"
-class COutStreamWithCRC:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_NOQIB_1(
+ COutStreamWithCRC
+ , ISequentialOutStream
+)
CMyComPtr<ISequentialOutStream> _stream;
UInt64 _size;
UInt32 _crc;
bool _calculate;
public:
- MY_UNKNOWN_IMP
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
void SetStream(ISequentialOutStream *stream) { _stream = stream; }
void ReleaseStream() { _stream.Release(); }
void Init(bool calculate = true)
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/ParseProperties.h b/3rdparty/lzma/CPP/7zip/Archive/Common/ParseProperties.h
index 1038a8c020c..4ec2e48ed9d 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/ParseProperties.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/ParseProperties.h
@@ -1,6 +1,6 @@
// ParseProperties.h
-#ifndef __PARSE_PROPERTIES_H
-#define __PARSE_PROPERTIES_H
+#ifndef ZIP7_INC_PARSE_PROPERTIES_H
+#define ZIP7_INC_PARSE_PROPERTIES_H
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/Common/StdAfx.h b/3rdparty/lzma/CPP/7zip/Archive/Common/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/Common/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/Common/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/DllExports2.cpp b/3rdparty/lzma/CPP/7zip/Archive/DllExports2.cpp
index 1f71486154a..ae8d8acc19c 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/DllExports2.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/DllExports2.cpp
@@ -3,10 +3,9 @@
#include "StdAfx.h"
#include "../../Common/MyWindows.h"
-
#include "../../Common/MyInitGuid.h"
-#if defined(_7ZIP_LARGE_PAGES)
+#if defined(Z7_LARGE_PAGES)
#include "../../../C/Alloc.h"
#endif
@@ -29,6 +28,7 @@
#define NT_CHECK_FAIL_ACTION return FALSE;
#endif
+static
HINSTANCE g_hInstance;
extern "C"
@@ -53,7 +53,7 @@ BOOL WINAPI DllMain(
{
// OutputDebugStringA("7z.dll DLL_PROCESS_ATTACH");
g_hInstance = (HINSTANCE)hInstance;
- NT_CHECK;
+ NT_CHECK
}
/*
if (dwReason == DLL_PROCESS_DETACH)
@@ -80,7 +80,7 @@ static __attribute__((constructor)) void Init_ForceToUTF8()
#endif // _WIN32
-DEFINE_GUID(CLSID_CArchiveHandler,
+Z7_DEFINE_GUID(CLSID_CArchiveHandler,
k_7zip_GUID_Data1,
k_7zip_GUID_Data2,
k_7zip_GUID_Data3_Common,
@@ -94,7 +94,7 @@ STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject);
STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject)
{
// COM_TRY_BEGIN
- *outObject = 0;
+ *outObject = NULL;
if (*iid == IID_ICompressCoder ||
*iid == IID_ICompressCoder2 ||
*iid == IID_ICompressFilter)
@@ -108,7 +108,7 @@ STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject)
STDAPI SetLargePageMode();
STDAPI SetLargePageMode()
{
- #if defined(_7ZIP_LARGE_PAGES)
+ #if defined(Z7_LARGE_PAGES)
#ifdef _WIN32
SetLargePageSize();
#endif
@@ -143,7 +143,7 @@ STDAPI SetProperty(Int32 id, const PROPVARIANT *value)
}
*/
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
CExternalCodecs g_ExternalCodecs;
diff --git a/3rdparty/lzma/CPP/7zip/Archive/IArchive.h b/3rdparty/lzma/CPP/7zip/Archive/IArchive.h
index 9551dfaf784..3e68ac30099 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/IArchive.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/IArchive.h
@@ -1,14 +1,21 @@
// IArchive.h
-#ifndef __IARCHIVE_H
-#define __IARCHIVE_H
+#ifndef ZIP7_INC_IARCHIVE_H
+#define ZIP7_INC_IARCHIVE_H
#include "../IProgress.h"
#include "../IStream.h"
#include "../PropID.h"
-#define ARCHIVE_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 6, x)
-#define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x)
+Z7_PURE_INTERFACES_BEGIN
+
+
+#define Z7_IFACE_CONSTR_ARCHIVE_SUB(i, base, n) \
+ Z7_DECL_IFACE_7ZIP_SUB(i, base, 6, n) \
+ { Z7_IFACE_COM7_PURE(i) };
+
+#define Z7_IFACE_CONSTR_ARCHIVE(i, n) \
+ Z7_IFACE_CONSTR_ARCHIVE_SUB(i, IUnknown, n)
/*
How the function in 7-Zip returns object for output parameter via pointer
@@ -81,11 +88,11 @@ namespace NArcInfoTimeFlags
const unsigned kTime_Prec_Default_num_bits = 5;
}
-#define TIME_PREC_TO_ARC_FLAGS_MASK(x) \
- ((UInt32)1 << (NArcInfoTimeFlags::kTime_Prec_Mask_bit_index + (x)))
+#define TIME_PREC_TO_ARC_FLAGS_MASK(v) \
+ ((UInt32)1 << (NArcInfoTimeFlags::kTime_Prec_Mask_bit_index + (v)))
-#define TIME_PREC_TO_ARC_FLAGS_TIME_DEFAULT(x) \
- ((UInt32)(x) << NArcInfoTimeFlags::kTime_Prec_Default_bit_index)
+#define TIME_PREC_TO_ARC_FLAGS_TIME_DEFAULT(v) \
+ ((UInt32)(v) << NArcInfoTimeFlags::kTime_Prec_Default_bit_index)
namespace NArchive
{
@@ -136,6 +143,7 @@ namespace NArchive
kIsNotArc,
kHeadersError,
kWrongPassword
+ // , kMemError
};
}
}
@@ -166,14 +174,11 @@ namespace NArchive
}
}
-#define INTERFACE_IArchiveOpenCallback(x) \
- STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) x; \
- STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) x; \
+#define Z7_IFACEM_IArchiveOpenCallback(x) \
+ x(SetTotal(const UInt64 *files, const UInt64 *bytes)) \
+ x(SetCompleted(const UInt64 *files, const UInt64 *bytes)) \
-ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10)
-{
- INTERFACE_IArchiveOpenCallback(PURE);
-};
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveOpenCallback, 0x10)
/*
IArchiveExtractCallback::
@@ -224,57 +229,49 @@ SetOperationResult()
Int32 opRes (NExtract::NOperationResult)
*/
-#define INTERFACE_IArchiveExtractCallback(x) \
- INTERFACE_IProgress(x) \
- STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode) x; \
- STDMETHOD(PrepareOperation)(Int32 askExtractMode) x; \
- STDMETHOD(SetOperationResult)(Int32 opRes) x; \
+// INTERFACE_IProgress(x)
-ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20)
-{
- INTERFACE_IArchiveExtractCallback(PURE)
-};
+#define Z7_IFACEM_IArchiveExtractCallback(x) \
+ x(GetStream(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode)) \
+ x(PrepareOperation(Int32 askExtractMode)) \
+ x(SetOperationResult(Int32 opRes)) \
+
+Z7_IFACE_CONSTR_ARCHIVE_SUB(IArchiveExtractCallback, IProgress, 0x20)
/*
-IArchiveExtractCallbackMessage can be requested from IArchiveExtractCallback object
+v23:
+IArchiveExtractCallbackMessage2 can be requested from IArchiveExtractCallback object
by Extract() or UpdateItems() functions to report about extracting errors
ReportExtractResult()
UInt32 indexType (NEventIndexType)
UInt32 index
Int32 opRes (NExtract::NOperationResult)
*/
+/*
+before v23:
+#define Z7_IFACEM_IArchiveExtractCallbackMessage(x) \
+ x(ReportExtractResult(UInt32 indexType, UInt32 index, Int32 opRes))
+Z7_IFACE_CONSTR_ARCHIVE_SUB(IArchiveExtractCallbackMessage, IProgress, 0x21)
+*/
+#define Z7_IFACEM_IArchiveExtractCallbackMessage2(x) \
+ x(ReportExtractResult(UInt32 indexType, UInt32 index, Int32 opRes))
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveExtractCallbackMessage2, 0x22)
-#define INTERFACE_IArchiveExtractCallbackMessage(x) \
- STDMETHOD(ReportExtractResult)(UInt32 indexType, UInt32 index, Int32 opRes) x; \
-
-ARCHIVE_INTERFACE_SUB(IArchiveExtractCallbackMessage, IProgress, 0x21)
-{
- INTERFACE_IArchiveExtractCallbackMessage(PURE)
-};
-
+#define Z7_IFACEM_IArchiveOpenVolumeCallback(x) \
+ x(GetProperty(PROPID propID, PROPVARIANT *value)) \
+ x(GetStream(const wchar_t *name, IInStream **inStream))
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveOpenVolumeCallback, 0x30)
-#define INTERFACE_IArchiveOpenVolumeCallback(x) \
- STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) x; \
- STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) x; \
-
-ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30)
-{
- INTERFACE_IArchiveOpenVolumeCallback(PURE);
-};
+#define Z7_IFACEM_IInArchiveGetStream(x) \
+ x(GetStream(UInt32 index, ISequentialInStream **stream))
+Z7_IFACE_CONSTR_ARCHIVE(IInArchiveGetStream, 0x40)
-ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40)
-{
- STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE;
-};
-
-
-ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50)
-{
- STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE;
-};
+#define Z7_IFACEM_IArchiveOpenSetSubArchiveName(x) \
+ x(SetSubArchiveName(const wchar_t *name))
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveOpenSetSubArchiveName, 0x50)
/*
@@ -310,28 +307,25 @@ Notes:
Some IInArchive handlers will work incorrectly in that case.
*/
-#ifdef _MSC_VER
- #define MY_NO_THROW_DECL_ONLY throw()
+#if defined(_MSC_VER) && !defined(__clang__)
+ #define MY_NO_THROW_DECL_ONLY Z7_COM7F_E
#else
#define MY_NO_THROW_DECL_ONLY
#endif
-#define INTERFACE_IInArchive(x) \
- STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openCallback) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(Close)() MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(GetNumberOfItems)(UInt32 *numItems) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(GetNumberOfProperties)(UInt32 *numProps) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(GetPropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProps) MY_NO_THROW_DECL_ONLY x; \
- STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) MY_NO_THROW_DECL_ONLY x; \
-
-ARCHIVE_INTERFACE(IInArchive, 0x60)
-{
- INTERFACE_IInArchive(PURE)
-};
+#define Z7_IFACEM_IInArchive(x) \
+ x(Open(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openCallback)) \
+ x(Close()) \
+ x(GetNumberOfItems(UInt32 *numItems)) \
+ x(GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)) \
+ x(Extract(const UInt32 *indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback)) \
+ x(GetArchiveProperty(PROPID propID, PROPVARIANT *value)) \
+ x(GetNumberOfProperties(UInt32 *numProps)) \
+ x(GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \
+ x(GetNumberOfArchiveProperties(UInt32 *numProps)) \
+ x(GetArchivePropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \
+
+Z7_IFACE_CONSTR_ARCHIVE(IInArchive, 0x60)
namespace NParentType
{
@@ -340,7 +334,7 @@ namespace NParentType
kDir = 0,
kAltStream
};
-};
+}
namespace NPropDataType
{
@@ -356,41 +350,36 @@ namespace NPropDataType
const UInt32 kUtf8z = kMask_Utf8 | kMask_ZeroEnd;
const UInt32 kUtf16z = kMask_Utf16 | kMask_ZeroEnd;
-};
+}
// UTF string (pointer to wchar_t) with zero end and little-endian.
#define PROP_DATA_TYPE_wchar_t_PTR_Z_LE ((NPropDataType::kMask_Utf | NPropDataType::kMask_ZeroEnd) + (sizeof(wchar_t) >> 1))
+
/*
GetRawProp:
Result:
S_OK - even if property is not set
*/
-#define INTERFACE_IArchiveGetRawProps(x) \
- STDMETHOD(GetParent)(UInt32 index, UInt32 *parent, UInt32 *parentType) x; \
- STDMETHOD(GetRawProp)(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType) x; \
- STDMETHOD(GetNumRawProps)(UInt32 *numProps) x; \
- STDMETHOD(GetRawPropInfo)(UInt32 index, BSTR *name, PROPID *propID) x;
+#define Z7_IFACEM_IArchiveGetRawProps(x) \
+ x(GetParent(UInt32 index, UInt32 *parent, UInt32 *parentType)) \
+ x(GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)) \
+ x(GetNumRawProps(UInt32 *numProps)) \
+ x(GetRawPropInfo(UInt32 index, BSTR *name, PROPID *propID))
-ARCHIVE_INTERFACE(IArchiveGetRawProps, 0x70)
-{
- INTERFACE_IArchiveGetRawProps(PURE)
-};
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveGetRawProps, 0x70)
-#define INTERFACE_IArchiveGetRootProps(x) \
- STDMETHOD(GetRootProp)(PROPID propID, PROPVARIANT *value) x; \
- STDMETHOD(GetRootRawProp)(PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType) x; \
+#define Z7_IFACEM_IArchiveGetRootProps(x) \
+ x(GetRootProp(PROPID propID, PROPVARIANT *value)) \
+ x(GetRootRawProp(PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)) \
-ARCHIVE_INTERFACE(IArchiveGetRootProps, 0x71)
-{
- INTERFACE_IArchiveGetRootProps(PURE)
-};
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveGetRootProps, 0x71)
-ARCHIVE_INTERFACE(IArchiveOpenSeq, 0x61)
-{
- STDMETHOD(OpenSeq)(ISequentialInStream *stream) PURE;
-};
+#define Z7_IFACEM_IArchiveOpenSeq(x) \
+ x(OpenSeq(ISequentialInStream *stream)) \
+
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveOpenSeq, 0x61)
/*
OpenForSize
@@ -416,12 +405,10 @@ Flags:
the handler can return S_OK, but it doesn't check even Signature.
So next Extract can be called for that sequential stream.
*/
-
/*
-ARCHIVE_INTERFACE(IArchiveOpen2, 0x62)
-{
- STDMETHOD(ArcOpen2)(ISequentialInStream *stream, UInt32 flags, IArchiveOpenCallback *openCallback) PURE;
-};
+#define Z7_IFACEM_IArchiveOpen2(x) \
+ x(ArcOpen2(ISequentialInStream *stream, UInt32 flags, IArchiveOpenCallback *openCallback))
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveOpen2, 0x62)
*/
// ---------- UPDATE ----------
@@ -454,27 +441,21 @@ SetOperationResult()
Int32 opRes (NExtract::NOperationResult::kOK)
*/
-#define INTERFACE_IArchiveUpdateCallback(x) \
- INTERFACE_IProgress(x); \
- STDMETHOD(GetUpdateItemInfo)(UInt32 index, Int32 *newData, Int32 *newProps, UInt32 *indexInArchive) x; \
- STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \
- STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) x; \
- STDMETHOD(SetOperationResult)(Int32 operationResult) x; \
+// INTERFACE_IProgress(x)
+#define Z7_IFACEM_IArchiveUpdateCallback(x) \
+ x(GetUpdateItemInfo(UInt32 index, Int32 *newData, Int32 *newProps, UInt32 *indexInArchive)) \
+ x(GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)) \
+ x(GetStream(UInt32 index, ISequentialInStream **inStream)) \
+ x(SetOperationResult(Int32 operationResult)) \
-ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80)
-{
- INTERFACE_IArchiveUpdateCallback(PURE);
-};
+Z7_IFACE_CONSTR_ARCHIVE_SUB(IArchiveUpdateCallback, IProgress, 0x80)
-#define INTERFACE_IArchiveUpdateCallback2(x) \
- INTERFACE_IArchiveUpdateCallback(x) \
- STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) x; \
- STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) x; \
+// INTERFACE_IArchiveUpdateCallback(x)
+#define Z7_IFACEM_IArchiveUpdateCallback2(x) \
+ x(GetVolumeSize(UInt32 index, UInt64 *size)) \
+ x(GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream)) \
-ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82)
-{
- INTERFACE_IArchiveUpdateCallback2(PURE);
-};
+Z7_IFACE_CONSTR_ARCHIVE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82)
namespace NUpdateNotifyOp
{
@@ -493,7 +474,7 @@ namespace NUpdateNotifyOp
// , kOpFinished
// , kNumDefined
};
-};
+}
/*
IArchiveUpdateCallbackFile::ReportOperation
@@ -502,36 +483,26 @@ IArchiveUpdateCallbackFile::ReportOperation
UInt32 notifyOp (NUpdateNotifyOp)
*/
-#define INTERFACE_IArchiveUpdateCallbackFile(x) \
- STDMETHOD(GetStream2)(UInt32 index, ISequentialInStream **inStream, UInt32 notifyOp) x; \
- STDMETHOD(ReportOperation)(UInt32 indexType, UInt32 index, UInt32 notifyOp) x; \
+#define Z7_IFACEM_IArchiveUpdateCallbackFile(x) \
+ x(GetStream2(UInt32 index, ISequentialInStream **inStream, UInt32 notifyOp)) \
+ x(ReportOperation(UInt32 indexType, UInt32 index, UInt32 notifyOp)) \
-ARCHIVE_INTERFACE(IArchiveUpdateCallbackFile, 0x83)
-{
- INTERFACE_IArchiveUpdateCallbackFile(PURE);
-};
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveUpdateCallbackFile, 0x83)
-#define INTERFACE_IArchiveGetDiskProperty(x) \
- STDMETHOD(GetDiskProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \
+#define Z7_IFACEM_IArchiveGetDiskProperty(x) \
+ x(GetDiskProperty(UInt32 index, PROPID propID, PROPVARIANT *value)) \
-ARCHIVE_INTERFACE(IArchiveGetDiskProperty, 0x84)
-{
- INTERFACE_IArchiveGetDiskProperty(PURE);
-};
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveGetDiskProperty, 0x84)
/*
-#define INTERFACE_IArchiveUpdateCallbackArcProp(x) \
- STDMETHOD(ReportProp)(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value) x; \
- STDMETHOD(ReportRawProp)(UInt32 indexType, UInt32 index, PROPID propID, const void *data, UInt32 dataSize, UInt32 propType) x; \
- STDMETHOD(ReportFinished)(UInt32 indexType, UInt32 index, Int32 opRes) x; \
- STDMETHOD(DoNeedArcProp)(PROPID propID, Int32 *answer) x; \
+#define Z7_IFACEM_IArchiveUpdateCallbackArcProp(x) \
+ x(ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value)) \
+ x(ReportRawProp(UInt32 indexType, UInt32 index, PROPID propID, const void *data, UInt32 dataSize, UInt32 propType)) \
+ x(ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes)) \
+ x(DoNeedArcProp(PROPID propID, Int32 *answer)) \
-
-ARCHIVE_INTERFACE(IArchiveUpdateCallbackArcProp, 0x85)
-{
- INTERFACE_IArchiveUpdateCallbackArcProp(PURE);
-};
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveUpdateCallbackArcProp, 0x85)
*/
/*
@@ -556,14 +527,11 @@ UpdateItems()
*/
-#define INTERFACE_IOutArchive(x) \
- STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback) x; \
- STDMETHOD(GetFileTimeType)(UInt32 *type) x;
+#define Z7_IFACEM_IOutArchive(x) \
+ x(UpdateItems(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback)) \
+ x(GetFileTimeType(UInt32 *type))
-ARCHIVE_INTERFACE(IOutArchive, 0xA0)
-{
- INTERFACE_IOutArchive(PURE)
-};
+Z7_IFACE_CONSTR_ARCHIVE(IOutArchive, 0xA0)
/*
@@ -576,31 +544,26 @@ ISetProperties::SetProperties()
VT_BSTR
*/
-ARCHIVE_INTERFACE(ISetProperties, 0x03)
-{
- STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps) PURE;
-};
+#define Z7_IFACEM_ISetProperties(x) \
+ x(SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps))
-ARCHIVE_INTERFACE(IArchiveKeepModeForNextOpen, 0x04)
-{
- STDMETHOD(KeepModeForNextOpen)() PURE;
-};
+Z7_IFACE_CONSTR_ARCHIVE(ISetProperties, 0x03)
+
+#define Z7_IFACEM_IArchiveKeepModeForNextOpen(x) \
+ x(KeepModeForNextOpen()) \
+
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveKeepModeForNextOpen, 0x04)
/* Exe handler: the handler for executable format (PE, ELF, Mach-O).
SFX archive: executable stub + some tail data.
before 9.31: exe handler didn't parse SFX archives as executable format.
for 9.31+: exe handler parses SFX archives as executable format, only if AllowTail(1) was called */
-ARCHIVE_INTERFACE(IArchiveAllowTail, 0x05)
-{
- STDMETHOD(AllowTail)(Int32 allowTail) PURE;
-};
+#define Z7_IFACEM_IArchiveAllowTail(x) \
+ x(AllowTail(Int32 allowTail)) \
+Z7_IFACE_CONSTR_ARCHIVE(IArchiveAllowTail, 0x05)
-#define IMP_IInArchive_GetProp(k) \
- (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \
- { if (index >= ARRAY_SIZE(k)) return E_INVALIDARG; \
- *propID = k[index]; *varType = k7z_PROPID_To_VARTYPE[(unsigned)*propID]; *name = 0; return S_OK; } \
struct CStatProp
@@ -616,46 +579,69 @@ namespace NCOM {
BSTR AllocBstrFromAscii(const char *s) throw();
}}
-#define IMP_IInArchive_GetProp_WITH_NAME(k) \
- (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \
- { if (index >= ARRAY_SIZE(k)) return E_INVALIDARG; \
+
+#define IMP_IInArchive_GetProp_Base(fn, f, k) \
+ Z7_COM7F_IMF(CHandler::fn(UInt32 *numProps)) \
+ { *numProps = Z7_ARRAY_SIZE(k); return S_OK; } \
+ Z7_COM7F_IMF(CHandler::f(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \
+ { if (index >= Z7_ARRAY_SIZE(k)) return E_INVALIDARG; \
+
+#define IMP_IInArchive_GetProp_NO_NAME(fn, f, k) \
+ IMP_IInArchive_GetProp_Base(fn, f, k) \
+ *propID = k[index]; \
+ *varType = k7z_PROPID_To_VARTYPE[(unsigned)*propID]; \
+ *name = NULL; return S_OK; } \
+
+#define IMP_IInArchive_GetProp_WITH_NAME(fn, f, k) \
+ IMP_IInArchive_GetProp_Base(fn, f, k) \
const CStatProp &prop = k[index]; \
- *propID = (PROPID)prop.PropID; *varType = prop.vt; \
+ *propID = (PROPID)prop.PropID; \
+ *varType = prop.vt; \
*name = NWindows::NCOM::AllocBstrFromAscii(prop.Name); return S_OK; } \
+
#define IMP_IInArchive_Props \
- STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProps) \
- { *numProps = ARRAY_SIZE(kProps); return S_OK; } \
- STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp(kProps)
+ IMP_IInArchive_GetProp_NO_NAME(GetNumberOfProperties, GetPropertyInfo, kProps)
#define IMP_IInArchive_Props_WITH_NAME \
- STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProps) \
- { *numProps = ARRAY_SIZE(kProps); return S_OK; } \
- STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kProps)
-
+ IMP_IInArchive_GetProp_WITH_NAME(GetNumberOfProperties, GetPropertyInfo, kProps)
#define IMP_IInArchive_ArcProps \
- STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProps) \
- { *numProps = ARRAY_SIZE(kArcProps); return S_OK; } \
- STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp(kArcProps)
+ IMP_IInArchive_GetProp_NO_NAME(GetNumberOfArchiveProperties, GetArchivePropertyInfo, kArcProps)
#define IMP_IInArchive_ArcProps_WITH_NAME \
- STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProps) \
- { *numProps = ARRAY_SIZE(kArcProps); return S_OK; } \
- STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kArcProps)
+ IMP_IInArchive_GetProp_WITH_NAME(GetNumberOfArchiveProperties, GetArchivePropertyInfo, kArcProps)
#define IMP_IInArchive_ArcProps_NO_Table \
- STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProps) \
+ Z7_COM7F_IMF(CHandler::GetNumberOfArchiveProperties(UInt32 *numProps)) \
{ *numProps = 0; return S_OK; } \
- STDMETHODIMP CHandler::GetArchivePropertyInfo(UInt32, BSTR *, PROPID *, VARTYPE *) \
+ Z7_COM7F_IMF(CHandler::GetArchivePropertyInfo(UInt32, BSTR *, PROPID *, VARTYPE *)) \
{ return E_NOTIMPL; } \
#define IMP_IInArchive_ArcProps_NO \
IMP_IInArchive_ArcProps_NO_Table \
- STDMETHODIMP CHandler::GetArchiveProperty(PROPID, PROPVARIANT *value) \
+ Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID, PROPVARIANT *value)) \
{ value->vt = VT_EMPTY; return S_OK; }
+#define Z7_class_CHandler_final \
+ Z7_class_final(CHandler)
+
+
+#define Z7_CLASS_IMP_CHandler_IInArchive_0 \
+ Z7_CLASS_IMP_COM_1(CHandler, IInArchive)
+#define Z7_CLASS_IMP_CHandler_IInArchive_1(i1) \
+ Z7_CLASS_IMP_COM_2(CHandler, IInArchive, i1)
+#define Z7_CLASS_IMP_CHandler_IInArchive_2(i1, i2) \
+ Z7_CLASS_IMP_COM_3(CHandler, IInArchive, i1, i2)
+#define Z7_CLASS_IMP_CHandler_IInArchive_3(i1, i2, i3) \
+ Z7_CLASS_IMP_COM_4(CHandler, IInArchive, i1, i2, i3)
+#define Z7_CLASS_IMP_CHandler_IInArchive_4(i1, i2, i3, i4) \
+ Z7_CLASS_IMP_COM_5(CHandler, IInArchive, i1, i2, i3, i4)
+#define Z7_CLASS_IMP_CHandler_IInArchive_5(i1, i2, i3, i4, i5) \
+ Z7_CLASS_IMP_COM_6(CHandler, IInArchive, i1, i2, i3, i4, i5)
+
+
#define k_IsArc_Res_NO 0
#define k_IsArc_Res_YES 1
@@ -714,4 +700,5 @@ extern UInt32 g_ClientVersion;
NFileTimeType::kWindows))
*/
+Z7_PURE_INTERFACES_END
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/LzmaHandler.cpp b/3rdparty/lzma/CPP/7zip/Archive/LzmaHandler.cpp
index ba547c8364e..11cb76ed467 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/LzmaHandler.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/LzmaHandler.cpp
@@ -76,7 +76,7 @@ bool CHeader::Parse(const Byte *buf, bool isThereFilter)
&& CheckDicSize(LzmaProps + 1);
}
-class CDecoder
+class CDecoder Z7_final
{
CMyComPtr<ISequentialOutStream> _bcjStream;
CFilterCoder *_filterCoder;
@@ -112,7 +112,7 @@ HRESULT CDecoder::Create(bool filteredMode, ISequentialInStream *inStream)
{
_filterCoder = new CFilterCoder(false);
CMyComPtr<ICompressCoder> coder = _filterCoder;
- _filterCoder->Filter = new NCompress::NBcj::CCoder(false);
+ _filterCoder->Filter = new NCompress::NBcj::CCoder2(z7_BranchConvSt_X86_Dec);
_bcjStream = _filterCoder;
}
}
@@ -131,15 +131,15 @@ HRESULT CDecoder::Code(const CHeader &header, ISequentialOutStream *outStream,
if (header.FilterID > 1)
return E_NOTIMPL;
- RINOK(_lzmaDecoderSpec->SetDecoderProperties2(header.LzmaProps, 5));
+ RINOK(_lzmaDecoderSpec->SetDecoderProperties2(header.LzmaProps, 5))
bool filteredMode = (header.FilterID == 1);
if (filteredMode)
{
- RINOK(_filterCoder->SetOutStream(outStream));
+ RINOK(_filterCoder->SetOutStream(outStream))
outStream = _bcjStream;
- RINOK(_filterCoder->SetOutStreamSize(NULL));
+ RINOK(_filterCoder->SetOutStreamSize(NULL))
}
const UInt64 *Size = header.HasSize() ? &header.Size : NULL;
@@ -157,7 +157,7 @@ HRESULT CDecoder::Code(const CHeader &header, ISequentialOutStream *outStream,
res = res2;
}
- RINOK(res);
+ RINOK(res)
if (header.HasSize())
if (_lzmaDecoderSpec->GetOutputProcessedSize() != header.Size)
@@ -167,11 +167,9 @@ HRESULT CDecoder::Code(const CHeader &header, ISequentialOutStream *outStream,
}
-class CHandler:
- public IInArchive,
- public IArchiveOpenSeq,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_CHandler_IInArchive_1(
+ IArchiveOpenSeq
+)
CHeader _header;
bool _lzma86;
CMyComPtr<IInStream> _stream;
@@ -181,36 +179,28 @@ class CHandler:
bool _needSeekToStart;
bool _dataAfterEnd;
bool _needMoreInput;
+ bool _unsupported;
+ bool _dataError;
bool _packSize_Defined;
bool _unpackSize_Defined;
bool _numStreams_Defined;
- bool _unsupported;
- bool _dataError;
-
UInt64 _packSize;
UInt64 _unpackSize;
UInt64 _numStreams;
void GetMethod(NCOM::CPropVariant &prop);
+ unsigned GetHeaderSize() const { return 5 + 8 + (_lzma86 ? 1 : 0); }
public:
- MY_UNKNOWN_IMP2(IInArchive, IArchiveOpenSeq)
-
- INTERFACE_IInArchive(;)
- STDMETHOD(OpenSeq)(ISequentialInStream *stream);
-
CHandler(bool lzma86) { _lzma86 = lzma86; }
-
- unsigned GetHeaderSize() const { return 5 + 8 + (_lzma86 ? 1 : 0); }
-
};
IMP_IInArchive_Props
IMP_IInArchive_ArcProps
-STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value))
{
NCOM::CPropVariant prop;
switch (propID)
@@ -222,7 +212,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
case kpidErrorFlags:
{
UInt32 v = 0;
- if (!_isArc) v |= kpv_ErrorFlags_IsNotArc;;
+ if (!_isArc) v |= kpv_ErrorFlags_IsNotArc;
if (_needMoreInput) v |= kpv_ErrorFlags_UnexpectedEnd;
if (_dataAfterEnd) v |= kpv_ErrorFlags_DataAfterEnd;
if (_unsupported) v |= kpv_ErrorFlags_UnsupportedMethod;
@@ -235,7 +225,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
return S_OK;
}
-STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
+Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
{
*numItems = 1;
return S_OK;
@@ -244,7 +234,7 @@ STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
static char * DictSizeToString(UInt32 val, char *s)
{
- for (unsigned i = 0; i <= 31; i++)
+ for (unsigned i = 0; i < 32; i++)
if (((UInt32)1 << i) == val)
return ::ConvertUInt32ToString(i, s);
char c = 'b';
@@ -290,7 +280,7 @@ void CHandler::GetMethod(NCOM::CPropVariant &prop)
}
-STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value))
{
NCOM::CPropVariant prop;
switch (propID)
@@ -348,7 +338,7 @@ API_FUNC_static_IsArc IsArc_Lzma86(const Byte *p, size_t size)
-STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *)
+Z7_COM7F_IMF(CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *))
{
Close();
@@ -356,7 +346,7 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
const UInt32 kBufSize = 1 << 7;
Byte buf[kBufSize];
size_t processedSize = kBufSize;
- RINOK(ReadStream(inStream, buf, &processedSize));
+ RINOK(ReadStream(inStream, buf, &processedSize))
if (processedSize < headerSize + 2)
return S_FALSE;
if (!_header.Parse(buf, _lzma86))
@@ -365,9 +355,9 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
if (start[0] != 0 /* || (start[1] & 0x80) != 0 */ ) // empty stream with EOS is not 0x80
return S_FALSE;
- RINOK(inStream->Seek(0, STREAM_SEEK_END, &_packSize));
+ RINOK(InStream_GetSize_SeekToEnd(inStream, _packSize))
- SizeT srcLen = processedSize - headerSize;
+ SizeT srcLen = (SizeT)processedSize - headerSize;
if (srcLen > 10
&& _header.Size == 0
@@ -401,7 +391,7 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
return S_OK;
}
-STDMETHODIMP CHandler::OpenSeq(ISequentialInStream *stream)
+Z7_COM7F_IMF(CHandler::OpenSeq(ISequentialInStream *stream))
{
Close();
_isArc = true;
@@ -409,41 +399,38 @@ STDMETHODIMP CHandler::OpenSeq(ISequentialInStream *stream)
return S_OK;
}
-STDMETHODIMP CHandler::Close()
+Z7_COM7F_IMF(CHandler::Close())
{
_isArc = false;
- _packSize_Defined = false;
- _unpackSize_Defined = false;
- _numStreams_Defined = false;
-
+ _needSeekToStart = false;
_dataAfterEnd = false;
_needMoreInput = false;
_unsupported = false;
_dataError = false;
- _packSize = 0;
+ _packSize_Defined = false;
+ _unpackSize_Defined = false;
+ _numStreams_Defined = false;
- _needSeekToStart = false;
+ _packSize = 0;
_stream.Release();
_seqStream.Release();
return S_OK;
}
-class CCompressProgressInfoImp:
- public ICompressProgressInfo,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CCompressProgressInfoImp,
+ ICompressProgressInfo
+)
CMyComPtr<IArchiveOpenCallback> Callback;
public:
UInt64 Offset;
-
- MY_UNKNOWN_IMP1(ICompressProgressInfo)
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
+
void Init(IArchiveOpenCallback *callback) { Callback = callback; }
};
-STDMETHODIMP CCompressProgressInfoImp::SetRatioInfo(const UInt64 *inSize, const UInt64 * /* outSize */)
+Z7_COM7F_IMF(CCompressProgressInfoImp::SetRatioInfo(const UInt64 *inSize, const UInt64 * /* outSize */))
{
if (Callback)
{
@@ -454,8 +441,8 @@ STDMETHODIMP CCompressProgressInfoImp::SetRatioInfo(const UInt64 *inSize, const
return S_OK;
}
-STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
- Int32 testMode, IArchiveExtractCallback *extractCallback)
+Z7_COM7F_IMF(CHandler::Extract(const UInt32 *indices, UInt32 numItems,
+ Int32 testMode, IArchiveExtractCallback *extractCallback))
{
COM_TRY_BEGIN
@@ -469,10 +456,10 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
CMyComPtr<ISequentialOutStream> realOutStream;
- Int32 askMode = testMode ?
+ const Int32 askMode = testMode ?
NExtract::NAskMode::kTest :
NExtract::NAskMode::kExtract;
- RINOK(extractCallback->GetStream(0, &realOutStream, askMode));
+ RINOK(extractCallback->GetStream(0, &realOutStream, askMode))
if (!testMode && !realOutStream)
return S_OK;
@@ -492,14 +479,14 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
{
if (!_stream)
return E_FAIL;
- RINOK(_stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(_stream))
}
else
_needSeekToStart = true;
CDecoder decoder;
HRESULT result = decoder.Create(_lzma86, _seqStream);
- RINOK(result);
+ RINOK(result)
bool firstItem = true;
@@ -513,13 +500,13 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
{
lps->InSize = packSize;
lps->OutSize = unpackSize;
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
const UInt32 kBufSize = 1 + 5 + 8;
Byte buf[kBufSize];
const UInt32 headerSize = GetHeaderSize();
UInt32 processed;
- RINOK(decoder.ReadInput(buf, headerSize, &processed));
+ RINOK(decoder.ReadInput(buf, headerSize, &processed))
if (processed != headerSize)
{
if (processed != 0)
@@ -549,7 +536,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
}
if (result == S_FALSE)
break;
- RINOK(result);
+ RINOK(result)
}
if (firstItem)
@@ -602,7 +589,7 @@ namespace NLzmaAr {
REGISTER_ARC_I_CLS_NO_SIG(
CHandler(false),
- "lzma", "lzma", 0, 0xA,
+ "lzma", "lzma", NULL, 0xA,
0,
NArcInfoFlags::kStartOpen |
NArcInfoFlags::kKeepName,
@@ -614,7 +601,7 @@ namespace NLzma86Ar {
REGISTER_ARC_I_CLS_NO_SIG(
CHandler(true),
- "lzma86", "lzma86", 0, 0xB,
+ "lzma86", "lzma86", NULL, 0xB,
0,
NArcInfoFlags::kKeepName,
IsArc_Lzma86)
diff --git a/3rdparty/lzma/CPP/7zip/Archive/SplitHandler.cpp b/3rdparty/lzma/CPP/7zip/Archive/SplitHandler.cpp
index 6bddfb836d7..ae7ca0369fb 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/SplitHandler.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/SplitHandler.cpp
@@ -9,6 +9,7 @@
#include "../Common/ProgressUtils.h"
#include "../Common/RegisterArc.h"
+#include "../Common/StreamUtils.h"
#include "../Compress/CopyCoder.h"
@@ -31,27 +32,22 @@ static const Byte kArcProps[] =
kpidTotalPhySize
};
-class CHandler:
- public IInArchive,
- public IInArchiveGetStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_CHandler_IInArchive_1(
+ IInArchiveGetStream
+)
CObjectVector<CMyComPtr<IInStream> > _streams;
CRecordVector<UInt64> _sizes;
UString _subName;
UInt64 _totalSize;
HRESULT Open2(IInStream *stream, IArchiveOpenCallback *callback);
-public:
- MY_UNKNOWN_IMP2(IInArchive, IInArchiveGetStream)
- INTERFACE_IInArchive(;)
- STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
};
IMP_IInArchive_Props
IMP_IInArchive_ArcProps
-STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value))
{
NCOM::CPropVariant prop;
switch (propID)
@@ -121,27 +117,29 @@ struct CSeqName
}
};
+
HRESULT CHandler::Open2(IInStream *stream, IArchiveOpenCallback *callback)
{
Close();
if (!callback)
return S_FALSE;
- CMyComPtr<IArchiveOpenVolumeCallback> volumeCallback;
- callback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&volumeCallback);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveOpenVolumeCallback,
+ volumeCallback, callback)
if (!volumeCallback)
return S_FALSE;
UString name;
{
NCOM::CPropVariant prop;
- RINOK(volumeCallback->GetProperty(kpidName, &prop));
+ RINOK(volumeCallback->GetProperty(kpidName, &prop))
if (prop.vt != VT_BSTR)
return S_FALSE;
name = prop.bstrVal;
}
- int dotPos = name.ReverseFind_Dot();
+ const int dotPos = name.ReverseFind_Dot();
const UString prefix = name.Left((unsigned)(dotPos + 1));
const UString ext = name.Ptr((unsigned)(dotPos + 1));
UString ext2 = ext;
@@ -192,14 +190,13 @@ HRESULT CHandler::Open2(IInStream *stream, IArchiveOpenCallback *callback)
{
/*
NCOM::CPropVariant prop;
- RINOK(volumeCallback->GetProperty(kpidSize, &prop));
+ RINOK(volumeCallback->GetProperty(kpidSize, &prop))
if (prop.vt != VT_UI8)
return E_INVALIDARG;
size = prop.uhVal.QuadPart;
*/
- RINOK(stream->Seek(0, STREAM_SEEK_END, &size));
- RINOK(stream->Seek(0, STREAM_SEEK_SET, NULL));
}
+ RINOK(InStream_AtBegin_GetSize(stream, size))
_totalSize += size;
_sizes.Add(size);
@@ -207,7 +204,7 @@ HRESULT CHandler::Open2(IInStream *stream, IArchiveOpenCallback *callback)
{
const UInt64 numFiles = _streams.Size();
- RINOK(callback->SetCompleted(&numFiles, NULL));
+ RINOK(callback->SetCompleted(&numFiles, NULL))
}
for (;;)
@@ -216,30 +213,20 @@ HRESULT CHandler::Open2(IInStream *stream, IArchiveOpenCallback *callback)
if (!seqName.GetNextName(fullName))
break;
CMyComPtr<IInStream> nextStream;
- HRESULT result = volumeCallback->GetStream(fullName, &nextStream);
+ const HRESULT result = volumeCallback->GetStream(fullName, &nextStream);
if (result == S_FALSE)
break;
if (result != S_OK)
return result;
if (!nextStream)
break;
- {
- /*
- NCOM::CPropVariant prop;
- RINOK(volumeCallback->GetProperty(kpidSize, &prop));
- if (prop.vt != VT_UI8)
- return E_INVALIDARG;
- size = prop.uhVal.QuadPart;
- */
- RINOK(nextStream->Seek(0, STREAM_SEEK_END, &size));
- RINOK(nextStream->Seek(0, STREAM_SEEK_SET, NULL));
- }
+ RINOK(InStream_AtBegin_GetSize(nextStream, size))
_totalSize += size;
_sizes.Add(size);
_streams.Add(nextStream);
{
const UInt64 numFiles = _streams.Size();
- RINOK(callback->SetCompleted(&numFiles, NULL));
+ RINOK(callback->SetCompleted(&numFiles, NULL))
}
}
@@ -251,17 +238,17 @@ HRESULT CHandler::Open2(IInStream *stream, IArchiveOpenCallback *callback)
return S_OK;
}
-STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback *callback)
+Z7_COM7F_IMF(CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback *callback))
{
COM_TRY_BEGIN
- HRESULT res = Open2(stream, callback);
+ const HRESULT res = Open2(stream, callback);
if (res != S_OK)
Close();
return res;
COM_TRY_END
}
-STDMETHODIMP CHandler::Close()
+Z7_COM7F_IMF(CHandler::Close())
{
_totalSize = 0;
_subName.Empty();
@@ -270,13 +257,13 @@ STDMETHODIMP CHandler::Close()
return S_OK;
}
-STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
+Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
{
*numItems = _streams.IsEmpty() ? 0 : 1;
return S_OK;
}
-STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value))
{
NCOM::CPropVariant prop;
switch (propID)
@@ -291,8 +278,8 @@ STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIAN
return S_OK;
}
-STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
- Int32 testMode, IArchiveExtractCallback *extractCallback)
+Z7_COM7F_IMF(CHandler::Extract(const UInt32 *indices, UInt32 numItems,
+ Int32 testMode, IArchiveExtractCallback *extractCallback))
{
COM_TRY_BEGIN
if (numItems == 0)
@@ -301,15 +288,15 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
return E_INVALIDARG;
UInt64 currentTotalSize = 0;
- RINOK(extractCallback->SetTotal(_totalSize));
+ RINOK(extractCallback->SetTotal(_totalSize))
CMyComPtr<ISequentialOutStream> outStream;
- Int32 askMode = testMode ?
+ const Int32 askMode = testMode ?
NExtract::NAskMode::kTest :
NExtract::NAskMode::kExtract;
- RINOK(extractCallback->GetStream(0, &outStream, askMode));
+ RINOK(extractCallback->GetStream(0, &outStream, askMode))
if (!testMode && !outStream)
return S_OK;
- RINOK(extractCallback->PrepareOperation(askMode));
+ RINOK(extractCallback->PrepareOperation(askMode))
NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder;
CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
@@ -318,13 +305,15 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
CMyComPtr<ICompressProgressInfo> progress = lps;
lps->Init(extractCallback, false);
- FOR_VECTOR (i, _streams)
+ for (unsigned i = 0;; i++)
{
lps->InSize = lps->OutSize = currentTotalSize;
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
+ if (i == _streams.Size())
+ break;
IInStream *inStream = _streams[i];
- RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL));
- RINOK(copyCoder->Code(inStream, outStream, NULL, NULL, progress));
+ RINOK(InStream_SeekToBegin(inStream))
+ RINOK(copyCoder->Code(inStream, outStream, NULL, NULL, progress))
currentTotalSize += copyCoderSpec->TotalSize;
}
outStream.Release();
@@ -332,12 +321,12 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
COM_TRY_END
}
-STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
+Z7_COM7F_IMF(CHandler::GetStream(UInt32 index, ISequentialInStream **stream))
{
COM_TRY_BEGIN
if (index != 0)
return E_INVALIDARG;
- *stream = 0;
+ *stream = NULL;
CMultiStream *streamSpec = new CMultiStream;
CMyComPtr<ISequentialInStream> streamTemp = streamSpec;
FOR_VECTOR (i, _streams)
@@ -354,7 +343,7 @@ STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
}
REGISTER_ARC_I_NO_SIG(
- "Split", "001", 0, 0xEA,
+ "Split", "001", NULL, 0xEA,
0,
0,
NULL)
diff --git a/3rdparty/lzma/CPP/7zip/Archive/StdAfx.h b/3rdparty/lzma/CPP/7zip/Archive/StdAfx.h
index 1cbd7feaeec..80866550d1f 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Archive/XzHandler.cpp b/3rdparty/lzma/CPP/7zip/Archive/XzHandler.cpp
index d358ca5655c..976817c7437 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/XzHandler.cpp
+++ b/3rdparty/lzma/CPP/7zip/Archive/XzHandler.cpp
@@ -43,24 +43,39 @@ struct CBlockInfo
};
-class CHandler:
+Z7_class_CHandler_final:
public IInArchive,
public IArchiveOpenSeq,
public IInArchiveGetStream,
public ISetProperties,
-
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
public IOutArchive,
- #endif
-
+ #endif
public CMyUnknownImp,
-
- #ifndef EXTRACT_ONLY
- public CMultiMethodProps
- #else
- public CCommonMethodProps
- #endif
+ #ifndef Z7_EXTRACT_ONLY
+ public CMultiMethodProps
+ #else
+ public CCommonMethodProps
+ #endif
{
+ Z7_COM_QI_BEGIN2(IInArchive)
+ Z7_COM_QI_ENTRY(IArchiveOpenSeq)
+ Z7_COM_QI_ENTRY(IInArchiveGetStream)
+ Z7_COM_QI_ENTRY(ISetProperties)
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_COM_QI_ENTRY(IOutArchive)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(IInArchive)
+ Z7_IFACE_COM7_IMP(IArchiveOpenSeq)
+ Z7_IFACE_COM7_IMP(IInArchiveGetStream)
+ Z7_IFACE_COM7_IMP(ISetProperties)
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_IFACE_COM7_IMP(IOutArchive)
+ #endif
+
CXzStatInfo _stat; // it's stat from backward parsing
CXzStatInfo _stat2; // it's data from forward parsing, if the decoder was called
SRes _stat2_decode_SRes;
@@ -81,7 +96,7 @@ class CHandler:
AString _methodsString;
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
UInt32 _filterId;
UInt64 _numSolidBytes;
@@ -89,7 +104,7 @@ class CHandler:
void InitXz()
{
_filterId = 0;
- _numSolidBytes = XZ_PROPS__BLOCK_SIZE__AUTO;
+ _numSolidBytes = XZ_PROPS_BLOCK_SIZE_AUTO;
}
#endif
@@ -97,7 +112,7 @@ class CHandler:
void Init()
{
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
InitXz();
CMultiMethodProps::Init();
#else
@@ -114,7 +129,7 @@ class CHandler:
ISequentialOutStream *outStream,
ICompressProgressInfo *progress)
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
decoder._numThreads = _numThreads;
#endif
decoder._memUsage = _memUsage_Decompress;
@@ -140,25 +155,6 @@ class CHandler:
}
public:
- MY_QUERYINTERFACE_BEGIN2(IInArchive)
- MY_QUERYINTERFACE_ENTRY(IArchiveOpenSeq)
- MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream)
- MY_QUERYINTERFACE_ENTRY(ISetProperties)
- #ifndef EXTRACT_ONLY
- MY_QUERYINTERFACE_ENTRY(IOutArchive)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- INTERFACE_IInArchive(;)
- STDMETHOD(OpenSeq)(ISequentialInStream *stream);
- STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
- STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps);
-
- #ifndef EXTRACT_ONLY
- INTERFACE_IOutArchive(;)
- #endif
-
CBlockInfo *_blocks;
size_t _blocksArraySize;
UInt64 _maxBlocksSize;
@@ -172,7 +168,7 @@ public:
HRESULT SeekToPackPos(UInt64 pos)
{
- return _stream->Seek((Int64)pos, STREAM_SEEK_SET, NULL);
+ return InStream_SeekSet(_stream, pos);
}
};
@@ -181,7 +177,7 @@ CHandler::CHandler():
_blocks(NULL),
_blocksArraySize(0)
{
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
InitXz();
#endif
}
@@ -259,13 +255,14 @@ static const CMethodNamePair g_NamePairs[] =
{ XZ_ID_ARM, "ARM" },
{ XZ_ID_ARMT, "ARMT" },
{ XZ_ID_SPARC, "SPARC" },
+ { XZ_ID_ARM64, "ARM64" },
{ XZ_ID_LZMA2, "LZMA2" }
};
static void AddMethodString(AString &s, const CXzFilter &f)
{
const char *p = NULL;
- for (unsigned i = 0; i < ARRAY_SIZE(g_NamePairs); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_NamePairs); i++)
if (g_NamePairs[i].Id == f.id)
{
p = g_NamePairs[i].Name;
@@ -287,6 +284,8 @@ static void AddMethodString(AString &s, const CXzFilter &f)
Lzma2PropToString(s, f.props[0]);
else if (f.id == XZ_ID_Delta && f.propsSize == 1)
s.Add_UInt32((UInt32)f.props[0] + 1);
+ else if (f.id == XZ_ID_ARM64 && f.propsSize == 1)
+ s.Add_UInt32((UInt32)f.props[0] + 16 + 2);
else
{
s += '[';
@@ -337,7 +336,7 @@ static void AddCheckString(AString &s, const CXzs &xzs)
}
}
-STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value))
{
COM_TRY_BEGIN
NCOM::CPropVariant prop;
@@ -394,13 +393,13 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
COM_TRY_END
}
-STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
+Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
{
*numItems = 1;
return S_OK;
}
-STDMETHODIMP CHandler::GetProperty(UInt32, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetProperty(UInt32, PROPID propID, PROPVARIANT *value))
{
COM_TRY_BEGIN
const CXzStatInfo *stat = GetStat();
@@ -427,9 +426,9 @@ struct COpenCallbackWrap
void Init(IArchiveOpenCallback *progress);
};
-static SRes OpenCallbackProgress(const ICompressProgress *pp, UInt64 inSize, UInt64 /* outSize */)
+static SRes OpenCallbackProgress(ICompressProgressPtr pp, UInt64 inSize, UInt64 /* outSize */)
{
- COpenCallbackWrap *p = CONTAINER_FROM_VTBL(pp, COpenCallbackWrap, vt);
+ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(COpenCallbackWrap)
if (p->OpenCallback)
p->Res = p->OpenCallback->SetCompleted(NULL, &inSize);
return HRESULT_To_SRes(p->Res, SZ_ERROR_PROGRESS);
@@ -551,10 +550,10 @@ HRESULT CHandler::Open2(IInStream *inStream, /* UInt32 flags, */ IArchiveOpenCal
}
}
- RINOK(inStream->Seek(0, STREAM_SEEK_END, &_stat.InSize));
+ RINOK(InStream_GetSize_SeekToEnd(inStream, _stat.InSize))
if (callback)
{
- RINOK(callback->SetTotal(NULL, &_stat.InSize));
+ RINOK(callback->SetTotal(NULL, &_stat.InSize))
}
CSeekInStreamWrap inStreamImp;
@@ -569,7 +568,7 @@ HRESULT CHandler::Open2(IInStream *inStream, /* UInt32 flags, */ IArchiveOpenCal
return E_OUTOFMEMORY;
lookStream.realStream = &inStreamImp.vt;
- LookToRead2_Init(&lookStream);
+ LookToRead2_INIT(&lookStream)
COpenCallbackWrap openWrap;
openWrap.Init(callback);
@@ -660,7 +659,7 @@ HRESULT CHandler::Open2(IInStream *inStream, /* UInt32 flags, */ IArchiveOpenCal
res = SZ_OK;
}
- RINOK(SRes_to_Open_HRESULT(res));
+ RINOK(SRes_to_Open_HRESULT(res))
_stream = inStream;
_seqStream = inStream;
@@ -670,7 +669,7 @@ HRESULT CHandler::Open2(IInStream *inStream, /* UInt32 flags, */ IArchiveOpenCal
-STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *callback)
+Z7_COM7F_IMF(CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *callback))
{
COM_TRY_BEGIN
{
@@ -680,7 +679,7 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
COM_TRY_END
}
-STDMETHODIMP CHandler::OpenSeq(ISequentialInStream *stream)
+Z7_COM7F_IMF(CHandler::OpenSeq(ISequentialInStream *stream))
{
Close();
_seqStream = stream;
@@ -689,7 +688,7 @@ STDMETHODIMP CHandler::OpenSeq(ISequentialInStream *stream)
return S_OK;
}
-STDMETHODIMP CHandler::Close()
+Z7_COM7F_IMF(CHandler::Close())
{
XzStatInfo_Clear(&_stat);
XzStatInfo_Clear(&_stat2);
@@ -738,12 +737,14 @@ CXzUnpackerCPP2::~CXzUnpackerCPP2()
}
-class CInStream:
- public IInStream,
- public CMyUnknownImp
-{
-public:
+Z7_CLASS_IMP_COM_1(
+ CInStream
+ , IInStream
+)
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+
UInt64 _virtPos;
+public:
UInt64 Size;
UInt64 _cacheStartPos;
size_t _cacheSize;
@@ -762,20 +763,15 @@ public:
CHandler *_handlerSpec;
CMyComPtr<IUnknown> _handler;
- MY_UNKNOWN_IMP1(IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
- ~CInStream();
+ // ~CInStream();
};
-
+/*
CInStream::~CInStream()
{
// _cache.Free();
}
-
+*/
static size_t FindBlock(const CBlockInfo *blocks, size_t numBlocks, UInt64 pos)
{
@@ -845,7 +841,7 @@ static HRESULT DecodeBlock(CXzUnpackerCPP2 &xzu,
ECoderStatus status;
- SRes res = XzUnpacker_Code(&xzu.p,
+ const SRes res = XzUnpacker_Code(&xzu.p,
// dest + outPos,
NULL,
&outLen,
@@ -868,7 +864,7 @@ static HRESULT DecodeBlock(CXzUnpackerCPP2 &xzu,
packRem -= inLen;
- BoolInt blockFinished = XzUnpacker_IsBlockFinished(&xzu.p);
+ const BoolInt blockFinished = XzUnpacker_IsBlockFinished(&xzu.p);
if ((inLen == 0 && outLen == 0) || blockFinished)
{
@@ -882,7 +878,7 @@ static HRESULT DecodeBlock(CXzUnpackerCPP2 &xzu,
}
-STDMETHODIMP CInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
COM_TRY_BEGIN
@@ -906,7 +902,7 @@ STDMETHODIMP CInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
if (_virtPos < _cacheStartPos || _virtPos >= _cacheStartPos + _cacheSize)
{
- size_t bi = FindBlock(_handlerSpec->_blocks, _handlerSpec->_blocksArraySize, _virtPos);
+ const size_t bi = FindBlock(_handlerSpec->_blocks, _handlerSpec->_blocksArraySize, _virtPos);
const CBlockInfo &block = _handlerSpec->_blocks[bi];
const UInt64 unpackSize = _handlerSpec->_blocks[bi + 1].UnpackPos - block.UnpackPos;
if (_cache.Size() < unpackSize)
@@ -914,16 +910,16 @@ STDMETHODIMP CInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
_cacheSize = 0;
- RINOK(_handlerSpec->SeekToPackPos(block.PackPos));
+ RINOK(_handlerSpec->SeekToPackPos(block.PackPos))
RINOK(DecodeBlock(xz, _handlerSpec->_seqStream, block.StreamFlags, block.PackSize,
- (size_t)unpackSize, _cache));
+ (size_t)unpackSize, _cache))
_cacheStartPos = block.UnpackPos;
_cacheSize = (size_t)unpackSize;
}
{
- size_t offset = (size_t)(_virtPos - _cacheStartPos);
- size_t rem = _cacheSize - offset;
+ const size_t offset = (size_t)(_virtPos - _cacheStartPos);
+ const size_t rem = _cacheSize - offset;
if (size > rem)
size = (UInt32)rem;
memcpy(data, _cache + offset, size);
@@ -937,7 +933,7 @@ STDMETHODIMP CInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
}
-STDMETHODIMP CInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -958,7 +954,7 @@ STDMETHODIMP CInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPositio
static const UInt64 kMaxBlockSize_for_GetStream = (UInt64)1 << 40;
-STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
+Z7_COM7F_IMF(CHandler::GetStream(UInt32 index, ISequentialInStream **stream))
{
COM_TRY_BEGIN
@@ -1024,8 +1020,8 @@ static Int32 Get_Extract_OperationResult(const NCompress::NXz::CDecoder &decoder
-STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
- Int32 testMode, IArchiveExtractCallback *extractCallback)
+Z7_COM7F_IMF(CHandler::Extract(const UInt32 *indices, UInt32 numItems,
+ Int32 testMode, IArchiveExtractCallback *extractCallback))
{
COM_TRY_BEGIN
if (numItems == 0)
@@ -1039,13 +1035,13 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
extractCallback->SetTotal(stat->InSize);
UInt64 currentTotalPacked = 0;
- RINOK(extractCallback->SetCompleted(&currentTotalPacked));
+ RINOK(extractCallback->SetCompleted(&currentTotalPacked))
CMyComPtr<ISequentialOutStream> realOutStream;
- Int32 askMode = testMode ?
+ const Int32 askMode = testMode ?
NExtract::NAskMode::kTest :
NExtract::NAskMode::kExtract;
- RINOK(extractCallback->GetStream(0, &realOutStream, askMode));
+ RINOK(extractCallback->GetStream(0, &realOutStream, askMode))
if (!testMode && !realOutStream)
return S_OK;
@@ -1060,7 +1056,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
{
if (!_stream)
return E_FAIL;
- RINOK(_stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(_stream))
}
else
_needSeekToStart = true;
@@ -1085,9 +1081,9 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
-STDMETHODIMP CHandler::GetFileTimeType(UInt32 *timeType)
+Z7_COM7F_IMF(CHandler::GetFileTimeType(UInt32 *timeType))
{
*timeType = GET_FileTimeType_NotDefined_for_GetFileTimeType;
// *timeType = NFileTimeType::kUnix;
@@ -1095,8 +1091,8 @@ STDMETHODIMP CHandler::GetFileTimeType(UInt32 *timeType)
}
-STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems,
- IArchiveUpdateCallback *updateCallback)
+Z7_COM7F_IMF(CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems,
+ IArchiveUpdateCallback *updateCallback))
{
COM_TRY_BEGIN
@@ -1111,17 +1107,25 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (numItems != 1)
return E_INVALIDARG;
+ {
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IStreamSetRestriction,
+ setRestriction, outStream)
+ if (setRestriction)
+ RINOK(setRestriction->SetRestriction(0, 0))
+ }
+
Int32 newData, newProps;
UInt32 indexInArchive;
if (!updateCallback)
return E_FAIL;
- RINOK(updateCallback->GetUpdateItemInfo(0, &newData, &newProps, &indexInArchive));
+ RINOK(updateCallback->GetUpdateItemInfo(0, &newData, &newProps, &indexInArchive))
if (IntToBool(newProps))
{
{
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(0, kpidIsDir, &prop));
+ RINOK(updateCallback->GetProperty(0, kpidIsDir, &prop))
if (prop.vt != VT_EMPTY)
if (prop.vt != VT_BOOL || prop.boolVal != VARIANT_FALSE)
return E_INVALIDARG;
@@ -1133,7 +1137,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
UInt64 dataSize;
{
NCOM::CPropVariant prop;
- RINOK(updateCallback->GetProperty(0, kpidSize, &prop));
+ RINOK(updateCallback->GetProperty(0, kpidSize, &prop))
if (prop.vt != VT_UI8)
return E_INVALIDARG;
dataSize = prop.uhVal.QuadPart;
@@ -1151,11 +1155,11 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
/*
{
NCOM::CPropVariant prop = (UInt64)dataSize;
- RINOK(encoderSpec->SetCoderProp(NCoderPropID::kReduceSize, prop));
+ RINOK(encoderSpec->SetCoderProp(NCoderPropID::kReduceSize, prop))
}
*/
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
UInt32 numThreads = _numThreads;
@@ -1181,12 +1185,12 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
UInt64 cs = _numSolidBytes;
- if (cs != XZ_PROPS__BLOCK_SIZE__AUTO)
+ if (cs != XZ_PROPS_BLOCK_SIZE_AUTO)
oneMethodInfo.AddProp_BlockSize2(cs);
cs = oneMethodInfo.Get_Xz_BlockSize();
- if (cs != XZ_PROPS__BLOCK_SIZE__AUTO &&
- cs != XZ_PROPS__BLOCK_SIZE__SOLID)
+ if (cs != XZ_PROPS_BLOCK_SIZE_AUTO &&
+ cs != XZ_PROPS_BLOCK_SIZE_SOLID)
{
const UInt32 lzmaThreads = oneMethodInfo.Get_Lzma_NumThreads();
const UInt32 numBlockThreads_Original = numThreads / lzmaThreads;
@@ -1218,16 +1222,16 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
xzProps.numTotalThreads = (int)numThreads;
- #endif // _7ZIP_ST
+ #endif // Z7_ST
xzProps.blockSize = _numSolidBytes;
- if (_numSolidBytes == XZ_PROPS__BLOCK_SIZE__SOLID)
+ if (_numSolidBytes == XZ_PROPS_BLOCK_SIZE_SOLID)
{
- xzProps.lzma2Props.blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID;
+ xzProps.lzma2Props.blockSize = LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID;
}
- RINOK(encoderSpec->SetCheckSize(_crcSize));
+ RINOK(encoderSpec->SetCheckSize(_crcSize))
{
CXzFilterProps &filter = xzProps.filterProps;
@@ -1262,13 +1266,13 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
FOR_VECTOR (j, m.Props)
{
const CProp &prop = m.Props[j];
- RINOK(encoderSpec->SetCoderProp(prop.Id, prop.Value));
+ RINOK(encoderSpec->SetCoderProp(prop.Id, prop.Value))
}
}
{
CMyComPtr<ISequentialInStream> fileInStream;
- RINOK(updateCallback->GetStream(0, &fileInStream));
+ RINOK(updateCallback->GetStream(0, &fileInStream))
if (!fileInStream)
return S_FALSE;
{
@@ -1281,11 +1285,11 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
dataSize = size;
}
}
- RINOK(updateCallback->SetTotal(dataSize));
+ RINOK(updateCallback->SetTotal(dataSize))
CLocalProgress *lps = new CLocalProgress;
CMyComPtr<ICompressProgressInfo> progress = lps;
lps->Init(updateCallback, true);
- RINOK(encoderSpec->Code(fileInStream, outStream, NULL, NULL, progress));
+ RINOK(encoder->Code(fileInStream, outStream, NULL, NULL, progress))
}
return updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK);
@@ -1294,8 +1298,9 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (indexInArchive != 0)
return E_INVALIDARG;
- CMyComPtr<IArchiveUpdateCallbackFile> opCallback;
- updateCallback->QueryInterface(IID_IArchiveUpdateCallbackFile, (void **)&opCallback);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveUpdateCallbackFile,
+ opCallback, updateCallback)
if (opCallback)
{
RINOK(opCallback->ReportOperation(NEventIndexType::kInArcIndex, 0, NUpdateNotifyOp::kReplicate))
@@ -1305,8 +1310,10 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
const CXzStatInfo *stat = GetStat();
if (stat)
- RINOK(updateCallback->SetTotal(stat->InSize));
- RINOK(_stream->Seek(0, STREAM_SEEK_SET, NULL));
+ {
+ RINOK(updateCallback->SetTotal(stat->InSize))
+ }
+ RINOK(InStream_SeekToBegin(_stream))
}
CLocalProgress *lps = new CLocalProgress;
@@ -1328,7 +1335,7 @@ HRESULT CHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value)
if (name.IsEmpty())
return E_INVALIDARG;
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
if (name[0] == L's')
{
@@ -1349,7 +1356,7 @@ HRESULT CHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value)
}
if (!useStr)
{
- _numSolidBytes = (isSolid ? XZ_PROPS__BLOCK_SIZE__SOLID : XZ_PROPS__BLOCK_SIZE__AUTO);
+ _numSolidBytes = (isSolid ? XZ_PROPS_BLOCK_SIZE_SOLID : XZ_PROPS_BLOCK_SIZE_AUTO);
return S_OK;
}
}
@@ -1375,7 +1382,7 @@ HRESULT CHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value)
-STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps)
+Z7_COM7F_IMF(CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps))
{
COM_TRY_BEGIN
@@ -1383,15 +1390,15 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
for (UInt32 i = 0; i < numProps; i++)
{
- RINOK(SetProperty(names[i], values[i]));
+ RINOK(SetProperty(names[i], values[i]))
}
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
if (!_filterMethod.MethodName.IsEmpty())
{
unsigned k;
- for (k = 0; k < ARRAY_SIZE(g_NamePairs); k++)
+ for (k = 0; k < Z7_ARRAY_SIZE(g_NamePairs); k++)
{
const CMethodNamePair &pair = g_NamePairs[k];
if (StringsAreEqualNoCase_Ascii(_filterMethod.MethodName, pair.Name))
@@ -1400,7 +1407,7 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
break;
}
}
- if (k == ARRAY_SIZE(g_NamePairs))
+ if (k == Z7_ARRAY_SIZE(g_NamePairs))
return E_INVALIDARG;
}
diff --git a/3rdparty/lzma/CPP/7zip/Archive/XzHandler.h b/3rdparty/lzma/CPP/7zip/Archive/XzHandler.h
index 24e8eeb4a10..4d099548936 100644
--- a/3rdparty/lzma/CPP/7zip/Archive/XzHandler.h
+++ b/3rdparty/lzma/CPP/7zip/Archive/XzHandler.h
@@ -1,7 +1,7 @@
// XzHandler.h
-#ifndef __XZ_HANDLER_H
-#define __XZ_HANDLER_H
+#ifndef ZIP7_INC_XZ_HANDLER_H
+#define ZIP7_INC_XZ_HANDLER_H
namespace NArchive {
namespace NXz {
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp
index 217e6d684ac..ef4ec6055b0 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp
@@ -44,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /Gr /MT /W4 /WX /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "_7ZIP_LARGE_PAGES" /D "SUPPORT_DEVICE_FILE" /FAcs /Yu"StdAfx.h" /FD /c
+# ADD CPP /nologo /Gr /MT /W4 /WX /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "Z7_LARGE_PAGES" /D "Z7_DEVICE_FILE" /FAcs /Yu"StdAfx.h" /FD /c
# ADD BASE RSC /l 0x419 /d "NDEBUG"
# ADD RSC /l 0x419 /d "NDEBUG"
BSC32=bscmake.exe
@@ -69,7 +69,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /Gr /MDd /W4 /WX /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "_7ZIP_LARGE_PAGES" /D "SUPPORT_DEVICE_FILE" /Yu"StdAfx.h" /FD /GZ /c
+# ADD CPP /nologo /Gr /MDd /W4 /WX /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "Z7_LARGE_PAGES" /D "Z7_DEVICE_FILE" /Yu"StdAfx.h" /FD /GZ /c
# ADD BASE RSC /l 0x419 /d "_DEBUG"
# ADD RSC /l 0x419 /d "_DEBUG"
BSC32=bscmake.exe
@@ -93,8 +93,8 @@ LINK32=link.exe
# PROP Intermediate_Dir "ReleaseU"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /Yu"StdAfx.h" /FD /c
-# ADD CPP /nologo /Gr /MD /W4 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_CONSOLE" /D "_7ZIP_LARGE_PAGES" /D "SUPPORT_DEVICE_FILE" /Yu"StdAfx.h" /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /Yu"StdAfx.h" /FD /c
+# ADD CPP /nologo /Gr /MD /W4 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_CONSOLE" /D "Z7_LARGE_PAGES" /D "Z7_DEVICE_FILE" /Yu"StdAfx.h" /FD /c
# ADD BASE RSC /l 0x419 /d "NDEBUG"
# ADD RSC /l 0x419 /d "NDEBUG"
BSC32=bscmake.exe
@@ -120,8 +120,8 @@ LINK32=link.exe
# PROP Intermediate_Dir "DebugU"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "_MBCS" /Yu"StdAfx.h" /FD /GZ /c
-# ADD CPP /nologo /Gr /MDd /W4 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /D "WIN32" /D "_CONSOLE" /D "_7ZIP_LARGE_PAGES" /D "SUPPORT_DEVICE_FILE" /Yu"StdAfx.h" /FD /GZ /c
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /Yu"StdAfx.h" /FD /GZ /c
+# ADD CPP /nologo /Gr /MDd /W4 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /D "WIN32" /D "_CONSOLE" /D "Z7_LARGE_PAGES" /D "Z7_DEVICE_FILE" /Yu"StdAfx.h" /FD /GZ /c
# ADD BASE RSC /l 0x419 /d "_DEBUG"
# ADD RSC /l 0x419 /d "_DEBUG"
BSC32=bscmake.exe
@@ -144,10 +144,6 @@ LINK32=link.exe
# PROP Default_Filter ""
# Begin Source File
-SOURCE=..\..\UI\Console\ArError.h
-# End Source File
-# Begin Source File
-
SOURCE=..\..\UI\Console\BenchCon.cpp
# End Source File
# Begin Source File
@@ -270,6 +266,10 @@ SOURCE=..\..\..\Common\CommandLineParser.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\Common.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\ComTry.h
# End Source File
# Begin Source File
@@ -318,6 +318,14 @@ SOURCE=..\..\..\Common\LzFindPrepare.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyBuffer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyBuffer2.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyCom.h
# End Source File
# Begin Source File
@@ -342,6 +350,10 @@ SOURCE=..\..\..\Common\MyString.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyTypes.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyUnknown.h
# End Source File
# Begin Source File
@@ -526,6 +538,10 @@ SOURCE=..\..\..\Windows\MemoryLock.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Windows\NtCheck.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Windows\PropVariant.cpp
# End Source File
# Begin Source File
@@ -550,10 +566,6 @@ SOURCE=..\..\..\Windows\Registry.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\Windows\Synchronization.cpp
-# End Source File
-# Begin Source File
-
SOURCE=..\..\..\Windows\Synchronization.h
# End Source File
# Begin Source File
@@ -678,6 +690,14 @@ SOURCE=..\..\Common\MethodProps.h
# End Source File
# Begin Source File
+SOURCE=..\..\Common\MultiOutStream.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\Common\MultiOutStream.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Common\OffsetStream.cpp
# End Source File
# Begin Source File
@@ -798,10 +818,6 @@ SOURCE=..\..\Compress\ByteSwap.cpp
# End Source File
# Begin Source File
-SOURCE=..\..\Compress\ByteSwap.h
-# End Source File
-# Begin Source File
-
SOURCE=..\..\Compress\CopyCoder.cpp
# End Source File
# Begin Source File
@@ -1122,6 +1138,10 @@ SOURCE=..\..\UI\Common\EnumDirItems.h
# End Source File
# Begin Source File
+SOURCE=..\..\UI\Common\ExitCode.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\UI\Common\Extract.cpp
# End Source File
# Begin Source File
@@ -1246,7 +1266,7 @@ SOURCE=..\..\ICoder.h
# End Source File
# Begin Source File
-SOURCE=..\..\IMyUnknown.h
+SOURCE=..\..\IDecl.h
# End Source File
# Begin Source File
@@ -1473,6 +1493,10 @@ SOURCE=..\..\..\..\C\7zTypes.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\7zWindows.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Aes.c
!IF "$(CFG)" == "Alone - Win32 Release"
@@ -1605,6 +1629,10 @@ SOURCE=..\..\..\..\C\BraIA64.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\Compiler.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\CpuArch.c
!IF "$(CFG)" == "Alone - Win32 Release"
@@ -1902,6 +1930,10 @@ SOURCE=..\..\..\..\C\MtDec.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\RotateDefs.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Sha256.c
!IF "$(CFG)" == "Alone - Win32 Release"
@@ -1935,6 +1967,34 @@ SOURCE=..\..\..\..\C\Sha256Opt.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\SwapBytes.c
+
+!IF "$(CFG)" == "Alone - Win32 Release"
+
+# ADD CPP /O2
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ELSEIF "$(CFG)" == "Alone - Win32 Debug"
+
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU"
+
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ELSEIF "$(CFG)" == "Alone - Win32 DebugU"
+
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\SwapBytes.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Threads.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile
index f87684c717d..1f857c541ad 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile
@@ -1,8 +1,9 @@
PROG = 7zr.exe
# USE_C_AES = 1
+# USE_C_SHA = 1
-CFLAGS = $(CFLAGS) -DPROG_VARIANT_R
+CFLAGS = $(CFLAGS) -DZ7_PROG_VARIANT_R
COMMON_OBJS = \
$O\CommandLineParser.obj \
@@ -38,7 +39,6 @@ WIN_OBJS = \
$O\PropVariant.obj \
$O\PropVariantConv.obj \
$O\Registry.obj \
- $O\Synchronization.obj \
$O\System.obj \
$O\SystemInfo.obj \
$O\TimeUtils.obj \
@@ -54,6 +54,7 @@ WIN_OBJS = \
$O\LimitedStreams.obj \
$O\MethodId.obj \
$O\MethodProps.obj \
+ $O\MultiOutStream.obj \
$O\OffsetStream.obj \
$O\OutBuffer.obj \
$O\ProgressUtils.obj \
@@ -143,6 +144,7 @@ C_OBJS = \
$O\MtCoder.obj \
$O\MtDec.obj \
$O\Sort.obj \
+ $O\SwapBytes.obj \
$O\Threads.obj \
$O\Xz.obj \
$O\XzDec.obj \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile.gcc b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile.gcc
index f11fcde099b..6d92c19bfbd 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile.gcc
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Alone7z/makefile.gcc
@@ -1,6 +1,6 @@
PROG = 7zr
-CONSOLE_VARIANT_FLAGS=-DPROG_VARIANT_R
+CONSOLE_VARIANT_FLAGS=-DZ7_PROG_VARIANT_R
# IS_X64 = 1
# USE_ASM = 1
@@ -24,7 +24,7 @@ MT_OBJS =
ifdef ST_MODE
-LOCAL_FLAGS_ST = -D_7ZIP_ST
+LOCAL_FLAGS_ST = -DZ7_ST
ifdef IS_MINGW
MT_OBJS = \
@@ -38,7 +38,6 @@ MT_OBJS = \
$O/LzFindMt.o \
$O/LzFindOpt.o \
$O/StreamBinder.o \
- $O/Synchronization.o \
$O/VirtThread.o \
$O/Threads.o \
@@ -53,9 +52,9 @@ LOCAL_FLAGS_SYS =
ifdef IS_MINGW
LOCAL_FLAGS_SYS = \
- -D_7ZIP_LARGE_PAGES \
- -DWIN_LONG_PATH \
- -DSUPPORT_DEVICE_FILE \
+ -DZ7_LARGE_PAGES \
+ -DZ7_LONG_PATH \
+ -DZ7_DEVICE_FILE \
SYS_OBJS = \
$O/FileSystem.o \
@@ -76,8 +75,6 @@ LOCAL_FLAGS = \
$(LOCAL_FLAGS_ST) \
$(LOCAL_FLAGS_SYS) \
-# -D_LZMA_PROB32
-
CONSOLE_OBJS = \
$O/BenchCon.o \
@@ -160,6 +157,7 @@ WIN_OBJS = \
$O/LimitedStreams.o \
$O/MethodId.o \
$O/MethodProps.o \
+ $O/MultiOutStream.o \
$O/OffsetStream.o \
$O/OutBuffer.o \
$O/ProgressUtils.o \
@@ -246,7 +244,7 @@ C_OBJS = \
$O/MtDec.o \
$O/Sha256.o \
$O/Sha256Opt.o \
- $O/Sort.o \
+ $O/SwapBytes.o \
$O/Xz.o \
$O/XzDec.o \
$O/XzEnc.o \
@@ -260,7 +258,7 @@ C_OBJS = \
OBJS = \
- $(LZMA_DEC_OPT_OBJS) \
+ $(LZMA_DEC_OPT_OBJS) \
$(C_OBJS) \
$(MT_OBJS) \
$(SYS_OBJS) \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h b/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile b/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile
index 756c8ae6922..50b84d879a2 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile
@@ -1,8 +1,8 @@
PROG = 7zxr.dll
DEF_FILE = ../../Archive/Archive2.def
CFLAGS = $(CFLAGS) \
- -DEXTRACT_ONLY \
- -D_NO_CRYPTO
+ -DZ7_EXTRACT_ONLY \
+ -DZ7_NO_CRYPTO
COMMON_OBJS = \
$O\CRC.obj \
@@ -77,6 +77,7 @@ COMPRESS_OBJS = \
$O\LzmaRegister.obj \
C_OBJS = \
+ $O\7zStream.obj \
$O\Alloc.obj \
$O\Bcj2.obj \
$O\Bra.obj \
@@ -88,6 +89,7 @@ C_OBJS = \
$O\Lzma2DecMt.obj \
$O\LzmaDec.obj \
$O\MtDec.obj \
+ $O\SwapBytes.obj \
$O\Threads.obj \
!include "../../Crc.mak"
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h b/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/makefile b/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/makefile
index c2237152615..24497550475 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/makefile
+++ b/3rdparty/lzma/CPP/7zip/Bundles/Format7zR/makefile
@@ -1,7 +1,7 @@
PROG = 7zra.dll
DEF_FILE = ../../Archive/Archive2.def
CFLAGS = $(CFLAGS) \
- -D_NO_CRYPTO
+ -DZ7_NO_CRYPTO
COMMON_OBJS = \
$O\CRC.obj \
@@ -92,6 +92,7 @@ COMPRESS_OBJS = \
$O\LzmaRegister.obj \
C_OBJS = \
+ $O\7zStream.obj \
$O\Alloc.obj \
$O\Bcj2.obj \
$O\Bcj2Enc.obj \
@@ -109,6 +110,7 @@ C_OBJS = \
$O\LzmaEnc.obj \
$O\MtCoder.obj \
$O\MtDec.obj \
+ $O\SwapBytes.obj \
$O\Threads.obj \
!include "../../Crc.mak"
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp
index 71436f658af..ac1334f4358 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp
@@ -1,11 +1,9 @@
-// LzmaAlone.cpp
+ // LzmaAlone.cpp
#include "StdAfx.h"
// #include <stdio.h>
-#include "../../../../C/CpuArch.h"
-
#if (defined(_WIN32) || defined(OS2) || defined(MSDOS)) && !defined(UNDER_CE)
#include <fcntl.h>
#include <io.h>
@@ -14,16 +12,17 @@
#define MY_SET_BINARY_MODE(file)
#endif
-#include "../../../Common/MyWindows.h"
-#include "../../../Common/MyInitGuid.h"
-
+#include "../../../../C/CpuArch.h"
#include "../../../../C/7zVersion.h"
#include "../../../../C/Alloc.h"
#include "../../../../C/Lzma86.h"
+#include "../../../Common/MyWindows.h"
+#include "../../../Common/MyInitGuid.h"
+
#include "../../../Windows/NtCheck.h"
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
#include "../../../Windows/System.h"
#endif
@@ -41,6 +40,8 @@
#include "../../UI/Console/BenchCon.h"
#include "../../UI/Console/ConsoleClose.h"
+extern
+bool g_LargePagesMode;
bool g_LargePagesMode = false;
using namespace NCommandLineParser;
@@ -219,20 +220,17 @@ static void PrintHelp()
Print(kHelpString);
}
-class CProgressPrint:
- public ICompressProgressInfo,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_COM_1(
+ CProgressPrint,
+ ICompressProgressInfo
+)
UInt64 _size1;
UInt64 _size2;
public:
CProgressPrint(): _size1(0), _size2(0) {}
void ClosePrint();
-
- MY_UNKNOWN_IMP1(ICompressProgressInfo)
-
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
};
#define BACK_STR \
@@ -248,7 +246,7 @@ void CProgressPrint::ClosePrint()
Print(kBackSpaces);
}
-STDMETHODIMP CProgressPrint::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
+Z7_COM7F_IMF(CProgressPrint::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
{
if (NConsoleClose::TestBreakSignal())
return E_ABORT;
@@ -272,7 +270,7 @@ STDMETHODIMP CProgressPrint::SetRatioInfo(const UInt64 *inSize, const UInt64 *ou
}
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static void IncorrectCommand()
{
throw "Incorrect command";
@@ -316,7 +314,7 @@ static int Error_HRESULT(const char *s, HRESULT res)
else
{
char temp[32];
- ConvertUInt32ToHex(res, temp);
+ ConvertUInt32ToHex((UInt32)res, temp);
PrintErr("Error code = 0x");
PrintErr_LF(temp);
}
@@ -357,7 +355,7 @@ static int main2(int numArgs, const char *args[])
CParser parser;
try
{
- if (!parser.ParseStrings(kSwitchForms, ARRAY_SIZE(kSwitchForms), commandStrings))
+ if (!parser.ParseStrings(kSwitchForms, Z7_ARRAY_SIZE(kSwitchForms), commandStrings))
{
PrintError2(parser.ErrorMessage, parser.ErrorLine);
return 1;
@@ -414,7 +412,7 @@ static int main2(int numArgs, const char *args[])
UInt32 numThreads = (UInt32)(Int32)-1;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (parser[NKey::kMultiThread].ThereIs)
{
@@ -676,7 +674,7 @@ static int main2(int numArgs, const char *args[])
NCoderPropID::kMatchFinderCycles,
};
- const unsigned kNumPropsMax = ARRAY_SIZE(propIDs);
+ const unsigned kNumPropsMax = Z7_ARRAY_SIZE(propIDs);
PROPVARIANT props[kNumPropsMax];
for (int p = 0; p < 6; p++)
@@ -757,7 +755,7 @@ static int main2(int numArgs, const char *args[])
throw "SetDecoderProperties error";
UInt64 unpackSize = 0;
- for (int i = 0; i < 8; i++)
+ for (unsigned i = 0; i < 8; i++)
unpackSize |= ((UInt64)header[kPropertiesSize + i]) << (8 * i);
bool unpackSizeDefined = (unpackSize != (UInt64)(Int64)-1);
@@ -792,7 +790,7 @@ static int main2(int numArgs, const char *args[])
return 0;
}
-int MY_CDECL main(int numArgs, const char *args[])
+int Z7_CDECL main(int numArgs, const char *args[])
{
NConsoleClose::CCtrlHandlerSetter ctrlHandlerSetter;
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp
index d7326efc0dc..5a8911b25c2 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp
@@ -132,6 +132,10 @@ SOURCE=..\..\..\Windows\FileIO.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Windows\NtCheck.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Windows\PropVariant.cpp
# End Source File
# Begin Source File
@@ -148,14 +152,6 @@ SOURCE=..\..\..\Windows\Registry.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\Windows\Synchronization.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\Windows\Synchronization.h
-# End Source File
-# Begin Source File
-
SOURCE=..\..\..\Windows\System.cpp
# End Source File
# Begin Source File
@@ -188,6 +184,10 @@ SOURCE=..\..\..\Common\CommandLineParser.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\Common.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\ComTry.h
# End Source File
# Begin Source File
@@ -216,10 +216,26 @@ SOURCE=..\..\..\Common\LzFindPrepare.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyBuffer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyBuffer2.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyCom.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyInitGuid.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyLinux.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyString.cpp
# End Source File
# Begin Source File
@@ -228,6 +244,10 @@ SOURCE=..\..\..\Common\MyString.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyTypes.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyUnknown.h
# End Source File
# Begin Source File
@@ -274,6 +294,14 @@ SOURCE=..\..\..\Common\StringToInt.h
SOURCE=..\..\..\Common\Types.h
# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\Wildcard.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\Wildcard.h
+# End Source File
# End Group
# Begin Group "7zip Common"
@@ -346,14 +374,6 @@ SOURCE=..\..\UI\Common\Bench.cpp
SOURCE=..\..\UI\Common\Bench.h
# End Source File
-# Begin Source File
-
-SOURCE=..\..\UI\Common\LoadCodecs.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\UI\Common\LoadCodecs.h
-# End Source File
# End Group
# Begin Group "Console"
@@ -398,21 +418,16 @@ SOURCE=..\..\..\..\C\7zTypes.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\..\C\Alloc.c
-# SUBTRACT CPP /YX /Yc /Yu
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\C\Alloc.h
+SOURCE=..\..\..\..\C\7zWindows.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\..\C\Bra.c
+SOURCE=..\..\..\..\C\Alloc.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
-SOURCE=..\..\..\..\C\Bra.h
+SOURCE=..\..\..\..\C\Alloc.h
# End Source File
# Begin Source File
@@ -421,8 +436,7 @@ SOURCE=..\..\..\..\C\Bra86.c
# End Source File
# Begin Source File
-SOURCE=..\..\..\..\C\BraIA64.c
-# SUBTRACT CPP /YX /Yc /Yu
+SOURCE=..\..\..\..\C\Compiler.h
# End Source File
# Begin Source File
@@ -502,6 +516,22 @@ SOURCE=..\..\..\..\C\Threads.c
SOURCE=..\..\..\..\C\Threads.h
# End Source File
# End Group
+# Begin Group "7zip"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\ICoder.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IDecl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IProgress.h
+# End Source File
+# End Group
# Begin Source File
SOURCE=.\LzmaAlone.cpp
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile
index 5e53327a0b0..f303c31fd10 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile
+++ b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile
@@ -1,6 +1,9 @@
PROG = lzma.exe
MY_CONSOLE = 1
+# CFLAGS = $(CFLAGS) -DZ7_ST
+
+
CURRENT_OBJS = \
$O\LzmaAlone.obj \
@@ -20,6 +23,7 @@ COMMON_OBJS = \
$O\NewHandler.obj \
$O\StringConvert.obj \
$O\StringToInt.obj \
+ $O\Wildcard.obj \
WIN_OBJS = \
$O\FileIO.obj \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc
index e45ebb68abf..dd19a0e6a56 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc
+++ b/3rdparty/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc
@@ -21,7 +21,7 @@ endif
ifdef ST_MODE
-LOCAL_FLAGS_ST = -D_7ZIP_ST
+LOCAL_FLAGS_ST = -DZ7_ST
else
@@ -72,6 +72,7 @@ COMMON_OBJS = \
$O/StringConvert.o \
$O/StringToInt.o \
$O/UTFConvert.o \
+ $O/Wildcard.o \
WIN_OBJS = \
$O/FileIO.o \
@@ -110,7 +111,7 @@ C_OBJS = \
$O/Lzma86Enc.o \
OBJS = \
- $(LZMA_DEC_OPT_OBJS) \
+ $(LZMA_DEC_OPT_OBJS) \
$(C_OBJS) \
$(MT_OBJS) \
$(SYS_OBJS) \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp
index 87e27c4f140..1bb063dbc04 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp
@@ -42,7 +42,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /Gz /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "EXTRACT_ONLY" /D "_SFX" /D "NO_READ_FROM_CODER" /Yu"StdAfx.h" /FD /c
+# ADD CPP /nologo /Gr /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_SFX" /D "Z7_NO_READ_FROM_CODER" /FAcs /Yu"StdAfx.h" /FD /c
# ADD BASE RSC /l 0x419 /d "NDEBUG"
# ADD RSC /l 0x419 /d "NDEBUG"
BSC32=bscmake.exe
@@ -67,7 +67,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /Gz /MTd /W4 /WX /Gm /GX /ZI /Od /I "..\..\..\..\\" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "EXTRACT_ONLY" /D "_SFX" /D "NO_READ_FROM_CODER" /Yu"StdAfx.h" /FD /GZ /c
+# ADD CPP /nologo /Gz /MTd /W4 /WX /Gm /GX /ZI /Od /I "..\..\..\..\\" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_SFX" /D "Z7_NO_READ_FROM_CODER" /Yu"StdAfx.h" /FD /GZ /c
# ADD BASE RSC /l 0x419 /d "_DEBUG"
# ADD RSC /l 0x419 /d "_DEBUG"
BSC32=bscmake.exe
@@ -257,6 +257,10 @@ SOURCE=..\..\Compress\Bcj2Coder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\Bcj2Coder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\Bcj2Register.cpp
# End Source File
# Begin Source File
@@ -265,6 +269,10 @@ SOURCE=..\..\Compress\BcjCoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\BcjCoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\BcjRegister.cpp
# End Source File
# Begin Source File
@@ -285,6 +293,10 @@ SOURCE=..\..\Compress\CopyCoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\CopyCoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\CopyRegister.cpp
# End Source File
# Begin Source File
@@ -309,6 +321,10 @@ SOURCE=..\..\Compress\LzmaDecoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\LzmaDecoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\LzmaRegister.cpp
# End Source File
# Begin Source File
@@ -317,6 +333,10 @@ SOURCE=..\..\Compress\PpmdDecoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\PpmdDecoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\PpmdRegister.cpp
# End Source File
# End Group
@@ -441,6 +461,10 @@ SOURCE=..\..\..\Common\CommandLineParser.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\Common.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\CRC.cpp
# End Source File
# Begin Source File
@@ -457,6 +481,18 @@ SOURCE=..\..\..\Common\IntToString.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyBuffer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyBuffer2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyCom.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyString.cpp
# End Source File
# Begin Source File
@@ -759,6 +795,19 @@ SOURCE=..\..\..\..\C\7zCrcOpt.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\7zStream.c
+# SUBTRACT CPP /YX /Yc /Yu
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zTypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zWindows.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Aes.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
@@ -810,11 +859,19 @@ SOURCE=..\..\..\..\C\BraIA64.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\Compiler.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\CpuArch.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\CpuArch.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Delta.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
@@ -825,7 +882,18 @@ SOURCE=..\..\..\..\C\Delta.h
# Begin Source File
SOURCE=..\..\..\..\C\DllSecur.c
+
+!IF "$(CFG)" == "SFXCon - Win32 Release"
+
+# ADD CPP /O2
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ELSEIF "$(CFG)" == "SFXCon - Win32 Debug"
+
# SUBTRACT CPP /YX /Yc /Yu
+
+!ENDIF
+
# End Source File
# Begin Source File
@@ -905,13 +973,33 @@ SOURCE=..\..\..\..\C\Threads.c
SOURCE=..\..\..\..\C\Threads.h
# End Source File
# End Group
+# Begin Group "7zip"
+
+# PROP Default_Filter ""
# Begin Source File
-SOURCE=.\7z.ico
+SOURCE=..\..\Archive\IArchive.h
# End Source File
# Begin Source File
-SOURCE=..\..\Archive\IArchive.h
+SOURCE=..\..\ICoder.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IDecl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IPassword.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IProgress.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\7z.ico
# End Source File
# Begin Source File
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp
index cfa1ee7c6aa..cfce24d95f9 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp
@@ -3,9 +3,9 @@
#include "StdAfx.h"
#include "../../../../C/CpuArch.h"
+#include "../../../../C/DllSecur.h"
#include "../../../Common/MyWindows.h"
-
#include "../../../Common/MyInitGuid.h"
#include "../../../Common/CommandLineParser.h"
@@ -28,7 +28,6 @@
#include "../../MyVersion.h"
-#include "../../../../C/DllSecur.h"
using namespace NWindows;
using namespace NFile;
@@ -36,8 +35,12 @@ using namespace NDir;
using namespace NCommandLineParser;
#ifdef _WIN32
-HINSTANCE g_hInstance = 0;
+extern
+HINSTANCE g_hInstance;
+HINSTANCE g_hInstance = NULL;
#endif
+extern
+int g_CodePage;
int g_CodePage = -1;
extern CStdOutStream *g_StdStream;
@@ -184,14 +187,14 @@ static void PrintHelp(void)
g_StdOut << kHelpString;
}
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static void ShowMessageAndThrowException(const char *message, NExitCode::EEnum code)
{
g_StdOut << message << endl;
throw code;
}
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static void PrintHelpAndExit() // yyy
{
PrintHelp();
@@ -370,12 +373,12 @@ int Main2(
}
}
- bool yesToAll = parser[NKey::kYes].ThereIs;
+ const bool yesToAll = parser[NKey::kYes].ThereIs;
// NExtractMode::EEnum extractMode;
// bool isExtractGroupCommand = command.IsFromExtractGroup(extractMode);
- bool passwordEnabled = parser[NKey::kPassword].ThereIs;
+ const bool passwordEnabled = parser[NKey::kPassword].ThereIs;
UString password;
if (passwordEnabled)
@@ -403,7 +406,7 @@ int Main2(
CCodecs *codecs = new CCodecs;
CMyComPtr<
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
ICompressCodecsInfo
#else
IUnknown
@@ -421,7 +424,7 @@ int Main2(
CMyComPtr<IFolderArchiveExtractCallback> extractCallback = ecs;
ecs->Init(g_StdStream, &g_StdErr, g_StdStream);
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
ecs->PasswordIsDefined = passwordEnabled;
ecs->Password = password;
#endif
@@ -430,7 +433,7 @@ int Main2(
COpenCallbackConsole openCallback;
openCallback.Init(g_StdStream, g_StdStream);
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
openCallback.PasswordIsDefined = passwordEnabled;
openCallback.Password = password;
#endif
@@ -452,22 +455,33 @@ int Main2(
codecs, CObjectVector<COpenType>(), CIntVector(),
v1, v2,
wildcardCensorHead,
- eo, ecs, ecs,
+ eo,
+ ecs, ecs, ecs,
// NULL, // hash
errorMessage, stat);
+
+ ecs->ClosePercents();
+
if (!errorMessage.IsEmpty())
{
- (*g_StdStream) << endl << "Error: " << errorMessage;;
+ (*g_StdStream) << endl << "Error: " << errorMessage;
if (result == S_OK)
result = E_FAIL;
}
- if (ecs->NumArcsWithError != 0 || ecs->NumFileErrors != 0)
+ if ( 0 != ecs->NumCantOpenArcs
+ || 0 != ecs->NumArcsWithError
+ || 0 != ecs->NumFileErrors
+ || 0 != ecs->NumOpenArcErrors)
{
+ if (ecs->NumCantOpenArcs != 0)
+ (*g_StdStream) << endl << "Can't open as archive" << endl;
if (ecs->NumArcsWithError != 0)
(*g_StdStream) << endl << "Archive Errors" << endl;
if (ecs->NumFileErrors != 0)
(*g_StdStream) << endl << "Sub items Errors: " << ecs->NumFileErrors << endl;
+ if (ecs->NumOpenArcErrors != 0)
+ (*g_StdStream) << endl << "Open Errors: " << ecs->NumOpenArcErrors << endl;
return NExitCode::kFatalError;
}
if (result != S_OK)
@@ -489,7 +503,7 @@ int Main2(
wildcardCensorHead,
true, // enableHeaders
false, // techMode
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
passwordEnabled, password,
#endif
numErrors, numWarnings);
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile
index 633bd775f6b..51aaf51658d 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile
@@ -3,9 +3,9 @@ MY_CONSOLE = 1
MY_FIXED = 1
CFLAGS = $(CFLAGS) \
- -DEXTRACT_ONLY \
- -DNO_READ_FROM_CODER \
- -D_SFX \
+ -DZ7_EXTRACT_ONLY \
+ -DZ7_NO_READ_FROM_CODER \
+ -DZ7_SFX \
CURRENT_OBJS = \
$O\SfxCon.obj \
@@ -109,6 +109,7 @@ CRYPTO_OBJS = \
$O\MyAes.obj \
C_OBJS = \
+ $O\7zStream.obj \
$O\Alloc.obj \
$O\Bcj2.obj \
$O\Bra.obj \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile.gcc b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile.gcc
index 551b3e17dc3..9278502d9c3 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile.gcc
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/makefile.gcc
@@ -22,7 +22,7 @@ endif
ifdef ST_MODE
-LOCAL_FLAGS_ST = -D_7ZIP_ST
+LOCAL_FLAGS_ST = -DZ7_ST
ifdef IS_MINGW
MT_OBJS = \
@@ -63,9 +63,9 @@ endif
LOCAL_FLAGS = \
$(LOCAL_FLAGS_ST) \
$(LOCAL_FLAGS_SYS) \
- -DEXTRACT_ONLY \
- -DNO_READ_FROM_CODER \
- -D_SFX \
+ -DZ7_EXTRACT_ONLY \
+ -DZ7_NO_READ_FROM_CODER \
+ -DZ7_SFX \
CURRENT_OBJS = \
@@ -172,6 +172,7 @@ CRYPTO_OBJS = \
$O/MyAes.o \
C_OBJS = \
+ $O/7zStream.o \
$O/Alloc.o \
$O/Bcj2.o \
$O/Bra.o \
@@ -179,7 +180,6 @@ C_OBJS = \
$O/BraIA64.o \
$O/CpuArch.o \
$O/Delta.o \
- \
$O/Lzma2Dec.o \
$O/Lzma2DecMt.o \
$O/LzmaDec.o \
@@ -194,7 +194,7 @@ C_OBJS = \
$O/AesOpt.o \
OBJS = \
- $(LZMA_DEC_OPT_OBJS) \
+ $(LZMA_DEC_OPT_OBJS) \
$(C_OBJS) \
$(MT_OBJS) \
$(SYS_OBJS) \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/resource.rc b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/resource.rc
index 58331b81f8f..65762125a25 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/resource.rc
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXCon/resource.rc
@@ -2,4 +2,8 @@
MY_VERSION_INFO_APP("7z Console SFX", "7z.sfx")
-101 ICON "7z.ico" \ No newline at end of file
+101 ICON "7z.ico"
+
+#ifndef UNDER_CE
+1 24 MOVEABLE PURE "../../UI/Console/Console.manifest"
+#endif
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp
index 8eaeabe7c3a..9d632ee04f3 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp
@@ -63,7 +63,7 @@ HRESULT CExtractCallbackImp::Open_Finished()
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::SetTotal(UInt64 size)
+Z7_COM7F_IMF(CExtractCallbackImp::SetTotal(UInt64 size))
{
#ifndef _NO_PROGRESS
ProgressDialog.Sync.SetProgress(size, 0);
@@ -71,10 +71,10 @@ STDMETHODIMP CExtractCallbackImp::SetTotal(UInt64 size)
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::SetCompleted(const UInt64 *completeValue)
+Z7_COM7F_IMF(CExtractCallbackImp::SetCompleted(const UInt64 *completeValue))
{
#ifndef _NO_PROGRESS
- RINOK(ProgressDialog.Sync.ProcessStopAndPause());
+ RINOK(ProgressDialog.Sync.ProcessStopAndPause())
if (completeValue != NULL)
ProgressDialog.Sync.SetPos(*completeValue);
#endif
@@ -92,8 +92,8 @@ void CExtractCallbackImp::CreateComplexDirectory(const UStringVector &dirPathPar
}
}
-STDMETHODIMP CExtractCallbackImp::GetStream(UInt32 index,
- ISequentialOutStream **outStream, Int32 askExtractMode)
+Z7_COM7F_IMF(CExtractCallbackImp::GetStream(UInt32 index,
+ ISequentialOutStream **outStream, Int32 askExtractMode))
{
#ifndef _NO_PROGRESS
if (ProgressDialog.Sync.GetStopped())
@@ -104,7 +104,7 @@ STDMETHODIMP CExtractCallbackImp::GetStream(UInt32 index,
UString fullPath;
{
NCOM::CPropVariant prop;
- RINOK(_archiveHandler->GetProperty(index, kpidPath, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidPath, &prop))
if (prop.vt == VT_EMPTY)
fullPath = _itemDefaultName;
else
@@ -119,7 +119,7 @@ STDMETHODIMP CExtractCallbackImp::GetStream(UInt32 index,
if (askExtractMode == NArchive::NExtract::NAskMode::kExtract)
{
NCOM::CPropVariant prop;
- RINOK(_archiveHandler->GetProperty(index, kpidAttrib, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidAttrib, &prop))
if (prop.vt == VT_EMPTY)
_processedFileInfo.Attributes = _defaultAttributes;
else
@@ -129,18 +129,18 @@ STDMETHODIMP CExtractCallbackImp::GetStream(UInt32 index,
_processedFileInfo.Attributes = prop.ulVal;
}
- RINOK(_archiveHandler->GetProperty(index, kpidIsDir, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidIsDir, &prop))
_processedFileInfo.IsDir = VARIANT_BOOLToBool(prop.boolVal);
bool isAnti = false;
{
NCOM::CPropVariant propTemp;
- RINOK(_archiveHandler->GetProperty(index, kpidIsAnti, &propTemp));
+ RINOK(_archiveHandler->GetProperty(index, kpidIsAnti, &propTemp))
if (propTemp.vt == VT_BOOL)
isAnti = VARIANT_BOOLToBool(propTemp.boolVal);
}
- RINOK(_archiveHandler->GetProperty(index, kpidMTime, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidMTime, &prop))
switch (prop.vt)
{
case VT_EMPTY: _processedFileInfo.MTime = _defaultMTime; break;
@@ -207,13 +207,13 @@ STDMETHODIMP CExtractCallbackImp::GetStream(UInt32 index,
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::PrepareOperation(Int32 askExtractMode)
+Z7_COM7F_IMF(CExtractCallbackImp::PrepareOperation(Int32 askExtractMode))
{
_extractMode = (askExtractMode == NArchive::NExtract::NAskMode::kExtract);
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::SetOperationResult(Int32 resultEOperationResult)
+Z7_COM7F_IMF(CExtractCallbackImp::SetOperationResult(Int32 resultEOperationResult))
{
switch (resultEOperationResult)
{
@@ -237,7 +237,7 @@ STDMETHODIMP CExtractCallbackImp::SetOperationResult(Int32 resultEOperationResul
if (_outFileStream != NULL)
{
_outFileStreamSpec->SetMTime(&_processedFileInfo.MTime);
- RINOK(_outFileStreamSpec->Close());
+ RINOK(_outFileStreamSpec->Close())
}
_outFileStream.Release();
if (_extractMode)
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h
index cfbc5c07aa0..b9377ae6551 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h
@@ -1,7 +1,7 @@
// ExtractCallbackSfx.h
-#ifndef __EXTRACT_CALLBACK_SFX_H
-#define __EXTRACT_CALLBACK_SFX_H
+#ifndef ZIP7_INC_EXTRACT_CALLBACK_SFX_H
+#define ZIP7_INC_EXTRACT_CALLBACK_SFX_H
#include "resource.h"
@@ -19,19 +19,16 @@
#endif
#include "../../UI/Common/ArchiveOpenCallback.h"
-class CExtractCallbackImp:
+class CExtractCallbackImp Z7_final:
public IArchiveExtractCallback,
public IOpenCallbackUI,
public CMyUnknownImp
{
-public:
-
- MY_UNKNOWN_IMP
-
- INTERFACE_IArchiveExtractCallback(;)
- INTERFACE_IOpenCallbackUI(;)
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_IFACE_COM7_IMP(IProgress)
+ Z7_IFACE_COM7_IMP(IArchiveExtractCallback)
+ Z7_IFACE_IMP(IOpenCallbackUI)
-private:
CMyComPtr<IInArchive> _archiveHandler;
FString _directoryPath;
UString _filePath;
@@ -70,7 +67,7 @@ public:
#ifndef _NO_PROGRESS
HRESULT StartProgressDialog(const UString &title, NWindows::CThread &thread)
{
- ProgressDialog.Create(title, thread, 0);
+ ProgressDialog.Create(title, thread, NULL);
{
ProgressDialog.SetText(LangString(IDS_PROGRESS_EXTRACTING));
}
@@ -78,7 +75,7 @@ public:
ProgressDialog.Show(SW_SHOWNORMAL);
return S_OK;
}
- virtual ~CExtractCallbackImp() { ProgressDialog.Destroy(); }
+ ~CExtractCallbackImp() { ProgressDialog.Destroy(); }
#endif
};
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp
index 71b65c62001..73ccff1b7d4 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp
@@ -64,18 +64,14 @@ struct CThreadExtracting
if (!CreateComplexDir(dirPath))
{
- ErrorMessage = MyFormatNew(IDS_CANNOT_CREATE_FOLDER,
- #ifdef LANG
- 0x02000603,
- #endif
- fs2us(dirPath));
+ ErrorMessage = MyFormatNew(IDS_CANNOT_CREATE_FOLDER, fs2us(dirPath));
Result = E_FAIL;
return;
}
ExtractCallbackSpec->Init(ArchiveLink.GetArchive(), dirPath, (UString)"Default", fi.MTime, 0);
- Result = ArchiveLink.GetArchive()->Extract(0, (UInt32)(Int32)-1 , BoolToInt(false), ExtractCallback);
+ Result = ArchiveLink.GetArchive()->Extract(NULL, (UInt32)(Int32)-1 , BoolToInt(false), ExtractCallback);
}
void Process()
@@ -116,7 +112,9 @@ HRESULT ExtractArchive(CCodecs *codecs, const FString &fileName, const FString &
{
t.ExtractCallbackSpec->ProgressDialog.IconID = IDI_ICON;
NWindows::CThread thread;
- RINOK(thread.Create(CThreadExtracting::MyThreadFunction, &t));
+ const WRes wres = thread.Create(CThreadExtracting::MyThreadFunction, &t);
+ if (wres != 0)
+ return HRESULT_FROM_WIN32(wres);
UString title;
LangString(IDS_PROGRESS_EXTRACTING, title);
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h
index 295d77b9957..b7f79657903 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h
@@ -1,7 +1,7 @@
// ExtractEngine.h
-#ifndef __EXTRACT_ENGINE_H
-#define __EXTRACT_ENGINE_H
+#ifndef ZIP7_INC_EXTRACT_ENGINE_H
+#define ZIP7_INC_EXTRACT_ENGINE_H
#include "../../UI/Common/LoadCodecs.h"
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp
index 754cc0e0ca3..cf96460fcc5 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp
@@ -44,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /Gz /MT /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "NO_REGISTRY" /D "_SFX" /D "_NO_CRYPTO" /Yu"StdAfx.h" /FD /c
+# ADD CPP /nologo /Gz /MT /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_SFX" /D "Z7_NO_CRYPTO" /Yu"StdAfx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x419 /d "NDEBUG"
@@ -71,7 +71,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /Gz /MTd /W4 /WX /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "NO_REGISTRY" /D "_SFX" /D "_NO_CRYPTO" /Yu"StdAfx.h" /FD /GZ /c
+# ADD CPP /nologo /Gz /MTd /W4 /WX /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_SFX" /D "Z7_NO_CRYPTO" /Yu"StdAfx.h" /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x419 /d "_DEBUG"
@@ -97,8 +97,8 @@ LINK32=link.exe
# PROP Intermediate_Dir "ReleaseD"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "_SFX" /Yu"StdAfx.h" /FD /c
-# ADD CPP /nologo /Gz /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "NO_REGISTRY" /D "_SFX" /D "_NO_CRYPTO" /Yu"StdAfx.h" /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_SFX" /Yu"StdAfx.h" /FD /c
+# ADD CPP /nologo /Gz /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_SFX" /D "Z7_NO_CRYPTO" /Yu"StdAfx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x419 /d "NDEBUG"
@@ -221,6 +221,10 @@ SOURCE=..\..\Compress\Bcj2Coder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\Bcj2Coder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\Bcj2Register.cpp
# End Source File
# Begin Source File
@@ -229,6 +233,10 @@ SOURCE=..\..\Compress\BcjCoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\BcjCoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\BcjRegister.cpp
# End Source File
# Begin Source File
@@ -249,6 +257,10 @@ SOURCE=..\..\Compress\CopyCoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\CopyCoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\CopyRegister.cpp
# End Source File
# Begin Source File
@@ -289,6 +301,10 @@ SOURCE=..\..\..\Common\CommandLineParser.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\Common.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\CRC.cpp
# End Source File
# Begin Source File
@@ -305,6 +321,10 @@ SOURCE=..\..\..\Common\IntToString.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyCom.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyString.cpp
# End Source File
# Begin Source File
@@ -464,7 +484,7 @@ SOURCE=..\..\..\Windows\Window.cpp
SOURCE=..\..\..\Windows\Window.h
# End Source File
# End Group
-# Begin Group "7z Common"
+# Begin Group "7zip Common"
# PROP Default_Filter ""
# Begin Source File
@@ -667,6 +687,19 @@ SOURCE=..\..\..\..\C\7zCrcOpt.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\7zStream.c
+# SUBTRACT CPP /YX /Yc /Yu
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zTypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zWindows.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Alloc.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
@@ -704,6 +737,10 @@ SOURCE=..\..\..\..\C\BraIA64.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\Compiler.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\CpuArch.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
@@ -775,6 +812,30 @@ SOURCE=..\..\..\..\C\Threads.c
SOURCE=..\..\..\..\C\Threads.h
# End Source File
# End Group
+# Begin Group "7zip"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\Archive\IArchive.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ICoder.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IDecl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IPassword.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IProgress.h
+# End Source File
+# End Group
# Begin Source File
SOURCE=.\ExtractCallbackSfx.cpp
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp
index 86b4f0fbb2c..47d7966d771 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp
@@ -2,8 +2,9 @@
#include "StdAfx.h"
-#include "../../../Common/MyWindows.h"
+#include "../../../../C/DllSecur.h"
+#include "../../../Common/MyWindows.h"
#include "../../../Common/MyInitGuid.h"
#include "../../../Common/CommandLineParser.h"
@@ -23,19 +24,19 @@
#include "ExtractEngine.h"
-#include "../../../../C/DllSecur.h"
-
#include "resource.h"
using namespace NWindows;
using namespace NFile;
using namespace NDir;
+extern
+HINSTANCE g_hInstance;
HINSTANCE g_hInstance;
static CFSTR const kTempDirPrefix = FTEXT("7zS");
-#define _SHELL_EXECUTE
+#define MY_SHELL_EXECUTE
static bool ReadDataString(CFSTR fileName, LPCSTR startID,
LPCSTR endID, AString &stringResult)
@@ -73,10 +74,10 @@ static bool ReadDataString(CFSTR fileName, LPCSTR startID,
break;
if (memcmp(buffer + pos, endID, signatureEndSize) == 0)
return true;
- char b = buffer[pos];
+ const Byte b = buffer[pos];
if (b == 0)
return false;
- stringResult += b;
+ stringResult += (char)b;
pos++;
}
else
@@ -101,13 +102,13 @@ static bool ReadDataString(CFSTR fileName, LPCSTR startID,
static char kStartID[] = { ',','!','@','I','n','s','t','a','l','l','@','!','U','T','F','-','8','!', 0 };
static char kEndID[] = { ',','!','@','I','n','s','t','a','l','l','E','n','d','@','!', 0 };
-struct CInstallIDInit
+static struct CInstallIDInit
{
CInstallIDInit()
{
kStartID[0] = ';';
kEndID[0] = ';';
- };
+ }
} g_CInstallIDInit;
@@ -118,11 +119,11 @@ struct CInstallIDInit
static void ShowErrorMessageSpec(const UString &name)
{
UString message = NError::MyFormatMessage(::GetLastError());
- int pos = message.Find(L"%1");
+ const int pos = message.Find(L"%1");
if (pos >= 0)
{
- message.Delete(pos, 2);
- message.Insert(pos, name);
+ message.Delete((unsigned)pos, 2);
+ message.Insert((unsigned)pos, name);
}
ShowErrorMessage(NULL, message);
}
@@ -146,7 +147,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
// InitCommonControls();
UString archiveName, switches;
- #ifdef _SHELL_EXECUTE
+ #ifdef MY_SHELL_EXECUTE
UString executeFile, executeParameters;
#endif
NCommandLineParser::SplitCommandLine(GetCommandLineW(), archiveName, switches);
@@ -183,23 +184,23 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
ShowErrorMessage(L"Config failed");
return 1;
}
- UString friendlyName = GetTextConfigValue(pairs, "Title");
- UString installPrompt = GetTextConfigValue(pairs, "BeginPrompt");
- UString progress = GetTextConfigValue(pairs, "Progress");
+ const UString friendlyName = GetTextConfigValue(pairs, "Title");
+ const UString installPrompt = GetTextConfigValue(pairs, "BeginPrompt");
+ const UString progress = GetTextConfigValue(pairs, "Progress");
if (progress.IsEqualTo_Ascii_NoCase("no"))
showProgress = false;
- int index = FindTextConfigItem(pairs, "Directory");
+ const int index = FindTextConfigItem(pairs, "Directory");
if (index >= 0)
dirPrefix = pairs[index].String;
if (!installPrompt.IsEmpty() && !assumeYes)
{
- if (MessageBoxW(0, installPrompt, friendlyName, MB_YESNO |
+ if (MessageBoxW(NULL, installPrompt, friendlyName, MB_YESNO |
MB_ICONQUESTION) != IDYES)
return 0;
}
appLaunched = GetTextConfigValue(pairs, "RunProgram");
- #ifdef _SHELL_EXECUTE
+ #ifdef MY_SHELL_EXECUTE
executeFile = GetTextConfigValue(pairs, "ExecuteFile");
executeParameters = GetTextConfigValue(pairs, "ExecuteParameters");
#endif
@@ -216,7 +217,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
CCodecs *codecs = new CCodecs;
CMyComPtr<IUnknown> compressCodecsInfo = codecs;
{
- HRESULT result = codecs->Load();
+ const HRESULT result = codecs->Load();
if (result != S_OK)
{
ShowErrorMessage(L"Cannot load codecs");
@@ -245,7 +246,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
{
if (errorMessage.IsEmpty())
errorMessage = NError::MyFormatMessage(result);
- ::MessageBoxW(0, errorMessage, NWindows::MyLoadString(IDS_EXTRACTION_ERROR_TITLE), MB_ICONERROR);
+ ::MessageBoxW(NULL, errorMessage, NWindows::MyLoadString(IDS_EXTRACTION_ERROR_TITLE), MB_ICONERROR);
}
}
return 1;
@@ -258,8 +259,8 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
return 1;
#endif
- HANDLE hProcess = 0;
-#ifdef _SHELL_EXECUTE
+ HANDLE hProcess = NULL;
+#ifdef MY_SHELL_EXECUTE
if (!executeFile.IsEmpty())
{
CSysString filePath (GetSystemString(executeFile));
@@ -280,7 +281,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
executeParameters += switches;
}
- CSysString parametersSys (GetSystemString(executeParameters));
+ const CSysString parametersSys (GetSystemString(executeParameters));
if (parametersSys.IsEmpty())
execInfo.lpParameters = NULL;
else
@@ -288,7 +289,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
execInfo.lpDirectory = NULL;
execInfo.nShow = SW_SHOWNORMAL;
- execInfo.hProcess = 0;
+ execInfo.hProcess = NULL;
/* BOOL success = */ ::ShellExecuteEx(&execInfo);
UINT32 result = (UINT32)(UINT_PTR)execInfo.hInstApp;
if (result <= 32)
@@ -319,7 +320,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
appLaunched.Replace(L"%%T" WSTRING_PATH_SEPARATOR, fs2us(s2));
}
- UString appNameForError = appLaunched; // actually we need to rtemove parameters also
+ const UString appNameForError = appLaunched; // actually we need to rtemove parameters also
appLaunched.Replace(L"%%T", fs2us(tempDirPath));
@@ -330,20 +331,21 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
}
STARTUPINFO startupInfo;
startupInfo.cb = sizeof(startupInfo);
- startupInfo.lpReserved = 0;
- startupInfo.lpDesktop = 0;
- startupInfo.lpTitle = 0;
+ startupInfo.lpReserved = NULL;
+ startupInfo.lpDesktop = NULL;
+ startupInfo.lpTitle = NULL;
startupInfo.dwFlags = 0;
startupInfo.cbReserved2 = 0;
- startupInfo.lpReserved2 = 0;
+ startupInfo.lpReserved2 = NULL;
PROCESS_INFORMATION processInformation;
- CSysString appLaunchedSys (GetSystemString(dirPrefix + appLaunched));
+ const CSysString appLaunchedSys (GetSystemString(dirPrefix + appLaunched));
- BOOL createResult = CreateProcess(NULL, (LPTSTR)(LPCTSTR)appLaunchedSys,
- NULL, NULL, FALSE, 0, NULL, NULL /*tempDir.GetPath() */,
- &startupInfo, &processInformation);
+ const BOOL createResult = CreateProcess(NULL,
+ appLaunchedSys.Ptr_non_const(),
+ NULL, NULL, FALSE, 0, NULL, NULL /*tempDir.GetPath() */,
+ &startupInfo, &processInformation);
if (createResult == 0)
{
if (!assumeYes)
@@ -357,7 +359,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
::CloseHandle(processInformation.hThread);
hProcess = processInformation.hProcess;
}
- if (hProcess != 0)
+ if (hProcess)
{
WaitForSingleObject(hProcess, INFINITE);
::CloseHandle(hProcess);
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h
index 37bbd0c33b7..4f27255c6a2 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h
@@ -1,13 +1,6 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
-
-#include "../../../Common/Common.h"
-
-#include <commctrl.h>
-
-// #define printf(x) NO_PRINTF_(x)
-// #define sprintf(x) NO_SPRINTF_(x)
-
+#if _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
#endif
+#include "../../UI/FileManager/StdAfx.h"
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/makefile b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/makefile
index 9fddbc07827..ea0ece23a79 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/makefile
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXSetup/makefile
@@ -2,11 +2,11 @@ PROG = 7zS.sfx
MY_FIXED = 1
CFLAGS = $(CFLAGS) \
- -DNO_REGISTRY \
- -DEXTRACT_ONLY \
- -DNO_READ_FROM_CODER \
- -D_SFX \
- -D_NO_CRYPTO \
+ -DZ7_NO_REGISTRY \
+ -DZ7_EXTRACT_ONLY \
+ -DZ7_NO_READ_FROM_CODER \
+ -DZ7_SFX \
+ -DZ7_NO_CRYPTO \
CURRENT_OBJS = \
$O\SfxSetup.obj \
@@ -97,6 +97,7 @@ COMPRESS_OBJS = \
$O\LzmaRegister.obj \
C_OBJS = \
+ $O\7zStream.obj \
$O\Alloc.obj \
$O\Bcj2.obj \
$O\Bra.obj \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp
index 8e1a70d22e1..65cf0bf0b2a 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp
@@ -44,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /Gz /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "_SFXWIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "NO_REGISTRY" /D "NO_READ_FROM_CODER" /D "_SFX" /Yu"StdAfx.h" /FD /c
+# ADD CPP /nologo /Gz /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_NO_READ_FROM_CODER" /D "Z7_SFX" /Yu"StdAfx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x419 /d "NDEBUG"
@@ -71,7 +71,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /Gz /MTd /W4 /WX /Gm /GX /ZI /Od /D "_DEBUG" /D "_SFXWIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "NO_REGISTRY" /D "NO_READ_FROM_CODER" /D "_SFX" /Yu"StdAfx.h" /FD /GZ /c
+# ADD CPP /nologo /Gz /MTd /W4 /WX /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_NO_READ_FROM_CODER" /D "Z7_SFX" /Yu"StdAfx.h" /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x419 /d "_DEBUG"
@@ -97,8 +97,8 @@ LINK32=link.exe
# PROP Intermediate_Dir "SFXWin___Win32_ReleaseD"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /Gz /MT /W3 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "_SFX" /Yu"StdAfx.h" /FD /c
-# ADD CPP /nologo /Gz /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "_SFXWIN32" /D "_WINDOWS" /D "_MBCS" /D "EXTRACT_ONLY" /D "NO_REGISTRY" /D "NO_READ_FROM_CODER" /D "_SFX" /Yu"StdAfx.h" /FD /c
+# ADD BASE CPP /nologo /Gz /MT /W3 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_SFX" /Yu"StdAfx.h" /FD /c
+# ADD CPP /nologo /Gz /MD /W4 /WX /GX /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "Z7_EXTRACT_ONLY" /D "Z7_NO_REGISTRY" /D "Z7_NO_READ_FROM_CODER" /D "Z7_SFX" /Yu"StdAfx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x419 /d "NDEBUG"
@@ -221,6 +221,10 @@ SOURCE=..\..\Compress\Bcj2Coder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\Bcj2Coder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\Bcj2Register.cpp
# End Source File
# Begin Source File
@@ -229,6 +233,10 @@ SOURCE=..\..\Compress\BcjCoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\BcjCoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\BcjRegister.cpp
# End Source File
# Begin Source File
@@ -249,6 +257,10 @@ SOURCE=..\..\Compress\CopyCoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\CopyCoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\CopyRegister.cpp
# End Source File
# Begin Source File
@@ -277,6 +289,10 @@ SOURCE=..\..\Compress\PpmdDecoder.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\Compress\PpmdDecoder.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Compress\PpmdRegister.cpp
# End Source File
# End Group
@@ -677,6 +693,10 @@ SOURCE=..\..\..\Common\CommandLineParser.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\Common.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\CRC.cpp
# End Source File
# Begin Source File
@@ -851,6 +871,15 @@ SOURCE=..\..\..\..\C\7zCrcOpt.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\7zStream.c
+# SUBTRACT CPP /YX /Yc /Yu
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zWindows.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Aes.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
@@ -902,6 +931,10 @@ SOURCE=..\..\..\..\C\BraIA64.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\Compiler.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\CpuArch.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
@@ -993,13 +1026,33 @@ SOURCE=..\..\..\..\C\Threads.c
SOURCE=..\..\..\..\C\Threads.h
# End Source File
# End Group
+# Begin Group "7zip"
+
+# PROP Default_Filter ""
# Begin Source File
-SOURCE=.\7z.ico
+SOURCE=..\..\Archive\IArchive.h
# End Source File
# Begin Source File
-SOURCE=.\7z1.ico
+SOURCE=..\..\ICoder.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IDecl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IPassword.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IProgress.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\7z.ico
# End Source File
# Begin Source File
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp
index 23beade25ef..3e1880edffa 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp
@@ -4,7 +4,13 @@
#include "../../../Common/MyWindows.h"
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <shlwapi.h>
+#else
#include <Shlwapi.h>
+#endif
+
+#include "../../../../C/DllSecur.h"
#include "../../../Common/MyInitGuid.h"
@@ -28,33 +34,36 @@
#include "../../UI/GUI/ExtractGUI.h"
#include "../../UI/GUI/ExtractRes.h"
-#include "../../../../C/DllSecur.h"
-
using namespace NWindows;
using namespace NFile;
using namespace NDir;
+extern
+HINSTANCE g_hInstance;
HINSTANCE g_hInstance;
#ifndef UNDER_CE
+static
DWORD g_ComCtl32Version;
static DWORD GetDllVersion(LPCTSTR dllName)
{
DWORD dwVersion = 0;
- HINSTANCE hinstDll = LoadLibrary(dllName);
+ const HINSTANCE hinstDll = LoadLibrary(dllName);
if (hinstDll)
{
- DLLGETVERSIONPROC pDllGetVersion = (DLLGETVERSIONPROC)GetProcAddress(hinstDll, "DllGetVersion");
- if (pDllGetVersion)
+ const
+ DLLGETVERSIONPROC func_DllGetVersion = Z7_GET_PROC_ADDRESS(
+ DLLGETVERSIONPROC, hinstDll, "DllGetVersion");
+ if (func_DllGetVersion)
{
DLLVERSIONINFO dvi;
ZeroMemory(&dvi, sizeof(dvi));
dvi.cbSize = sizeof(dvi);
- HRESULT hr = (*pDllGetVersion)(&dvi);
+ const HRESULT hr = func_DllGetVersion(&dvi);
if (SUCCEEDED(hr))
- dwVersion = MAKELONG(dvi.dwMinorVersion, dvi.dwMajorVersion);
+ dwVersion = (DWORD)MAKELONG(dvi.dwMinorVersion, dvi.dwMajorVersion);
}
FreeLibrary(hinstDll);
}
@@ -63,6 +72,8 @@ static DWORD GetDllVersion(LPCTSTR dllName)
#endif
+extern
+bool g_LVN_ITEMACTIVATE_Support;
bool g_LVN_ITEMACTIVATE_Support = true;
static const wchar_t * const kUnknownExceptionMessage = L"ERROR: Unknown Error!";
@@ -101,7 +112,7 @@ static int APIENTRY WinMain2()
const UString &s = commandStrings[i];
if (s.Len() > 1 && s[0] == '-')
{
- wchar_t c = MyCharLower_Ascii(s[1]);
+ const wchar_t c = MyCharLower_Ascii(s[1]);
if (c == 'y')
{
assumeYes = true;
@@ -152,7 +163,7 @@ static int APIENTRY WinMain2()
CMyComPtr<IFolderArchiveExtractCallback> extractCallback = ecs;
ecs->Init();
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
ecs->PasswordIsDefined = !password.IsEmpty();
ecs->Password = password;
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h
index 975a17e8bf7..4f27255c6a2 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h
@@ -1,14 +1,6 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
-
-#include "../../../Common/Common.h"
-
-#include <commctrl.h>
-#include <ShlObj.h>
-
-// #define printf(x) NO_PRINTF_(x)
-// #define sprintf(x) NO_SPRINTF_(x)
-
+#if _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
#endif
+#include "../../UI/FileManager/StdAfx.h"
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/makefile b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/makefile
index 0ed36f8a857..69a8553cf61 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/makefile
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/makefile
@@ -2,10 +2,10 @@ PROG = 7z.sfx
MY_FIXED = 1
CFLAGS = $(CFLAGS) \
- -DNO_REGISTRY \
- -DEXTRACT_ONLY \
- -DNO_READ_FROM_CODER \
- -D_SFX \
+ -DZ7_NO_REGISTRY \
+ -DZ7_EXTRACT_ONLY \
+ -DZ7_NO_READ_FROM_CODER \
+ -DZ7_SFX \
!IFDEF UNDER_CE
LIBS = $(LIBS) ceshell.lib Commctrl.lib
@@ -131,6 +131,7 @@ CRYPTO_OBJS = \
$O\MyAes.obj \
C_OBJS = \
+ $O\7zStream.obj \
$O\Alloc.obj \
$O\Bcj2.obj \
$O\Bra.obj \
diff --git a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/resource.rc b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/resource.rc
index 91292b2f11a..3b2217a58b6 100644
--- a/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/resource.rc
+++ b/3rdparty/lzma/CPP/7zip/Bundles/SFXWin/resource.rc
@@ -48,3 +48,8 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_PROP_MTIME "Modified"
END
+
+
+#ifndef UNDER_CE
+1 24 MOVEABLE PURE "../../UI/GUI/7zG.exe.manifest"
+#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/CWrappers.cpp b/3rdparty/lzma/CPP/7zip/Common/CWrappers.cpp
index ee4c36a2487..346774e5d04 100644
--- a/3rdparty/lzma/CPP/7zip/Common/CWrappers.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/CWrappers.cpp
@@ -57,9 +57,9 @@ HRESULT SResToHRESULT(SRes res) throw()
#define CONVERT_PR_VAL(x) (x == PROGRESS_UNKNOWN_VALUE ? NULL : &x)
-static SRes CompressProgress(const ICompressProgress *pp, UInt64 inSize, UInt64 outSize) throw()
+static SRes CompressProgress(ICompressProgressPtr pp, UInt64 inSize, UInt64 outSize) throw()
{
- CCompressProgressWrap *p = CONTAINER_FROM_VTBL(pp, CCompressProgressWrap, vt);
+ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CCompressProgressWrap)
p->Res = p->Progress->SetRatioInfo(CONVERT_PR_VAL(inSize), CONVERT_PR_VAL(outSize));
return HRESULT_To_SRes(p->Res, SZ_ERROR_PROGRESS);
}
@@ -73,9 +73,9 @@ void CCompressProgressWrap::Init(ICompressProgressInfo *progress) throw()
static const UInt32 kStreamStepSize = (UInt32)1 << 31;
-static SRes MyRead(const ISeqInStream *pp, void *data, size_t *size) throw()
+static SRes MyRead(ISeqInStreamPtr pp, void *data, size_t *size) throw()
{
- CSeqInStreamWrap *p = CONTAINER_FROM_VTBL(pp, CSeqInStreamWrap, vt);
+ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqInStreamWrap)
UInt32 curSize = ((*size < kStreamStepSize) ? (UInt32)*size : kStreamStepSize);
p->Res = (p->Stream->Read(data, curSize, &curSize));
*size = curSize;
@@ -85,9 +85,9 @@ static SRes MyRead(const ISeqInStream *pp, void *data, size_t *size) throw()
return HRESULT_To_SRes(p->Res, SZ_ERROR_READ);
}
-static size_t MyWrite(const ISeqOutStream *pp, const void *data, size_t size) throw()
+static size_t MyWrite(ISeqOutStreamPtr pp, const void *data, size_t size) throw()
{
- CSeqOutStreamWrap *p = CONTAINER_FROM_VTBL(pp, CSeqOutStreamWrap, vt);
+ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqOutStreamWrap)
if (p->Stream)
{
p->Res = WriteStream(p->Stream, data, size);
@@ -118,20 +118,23 @@ void CSeqOutStreamWrap::Init(ISequentialOutStream *stream) throw()
}
-static SRes InStreamWrap_Read(const ISeekInStream *pp, void *data, size_t *size) throw()
+static SRes InStreamWrap_Read(ISeekInStreamPtr pp, void *data, size_t *size) throw()
{
- CSeekInStreamWrap *p = CONTAINER_FROM_VTBL(pp, CSeekInStreamWrap, vt);
+ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeekInStreamWrap)
UInt32 curSize = ((*size < kStreamStepSize) ? (UInt32)*size : kStreamStepSize);
p->Res = p->Stream->Read(data, curSize, &curSize);
*size = curSize;
return (p->Res == S_OK) ? SZ_OK : SZ_ERROR_READ;
}
-static SRes InStreamWrap_Seek(const ISeekInStream *pp, Int64 *offset, ESzSeek origin) throw()
+static SRes InStreamWrap_Seek(ISeekInStreamPtr pp, Int64 *offset, ESzSeek origin) throw()
{
- CSeekInStreamWrap *p = CONTAINER_FROM_VTBL(pp, CSeekInStreamWrap, vt);
+ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeekInStreamWrap)
UInt32 moveMethod;
- switch (origin)
+ /* we need (int)origin to eliminate the clang warning:
+ default label in switch which covers all enumeration values
+ [-Wcovered-switch-default */
+ switch ((int)origin)
{
case SZ_SEEK_SET: moveMethod = STREAM_SEEK_SET; break;
case SZ_SEEK_CUR: moveMethod = STREAM_SEEK_CUR; break;
@@ -188,15 +191,18 @@ Byte CByteInBufWrap::ReadByteFromNewBlock() throw()
return 0;
}
-static Byte Wrap_ReadByte(const IByteIn *pp) throw()
+// #pragma GCC diagnostic ignored "-Winvalid-offsetof"
+
+static Byte Wrap_ReadByte(IByteInPtr pp) throw()
{
- CByteInBufWrap *p = CONTAINER_FROM_VTBL_CLS(pp, CByteInBufWrap, vt);
+ CByteInBufWrap *p = Z7_CONTAINER_FROM_VTBL_CLS(pp, CByteInBufWrap, vt);
+ // Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CByteInBufWrap)
if (p->Cur != p->Lim)
return *p->Cur++;
return p->ReadByteFromNewBlock();
}
-CByteInBufWrap::CByteInBufWrap(): Buf(NULL)
+CByteInBufWrap::CByteInBufWrap() throw(): Buf(NULL)
{
vt.Read = Wrap_ReadByte;
}
@@ -227,7 +233,7 @@ bool CLookToSequentialWrap::Alloc(UInt32 size) throw()
/*
EXTERN_C_BEGIN
-void CLookToSequentialWrap_Look(ILookInSeqStream *pp)
+void CLookToSequentialWrap_Look(ILookInSeqStreamPtr pp)
{
CLookToSequentialWrap *p = (CLookToSequentialWrap *)pp->Obj;
@@ -281,9 +287,10 @@ HRESULT CByteOutBufWrap::Flush() throw()
return Res;
}
-static void Wrap_WriteByte(const IByteOut *pp, Byte b) throw()
+static void Wrap_WriteByte(IByteOutPtr pp, Byte b) throw()
{
- CByteOutBufWrap *p = CONTAINER_FROM_VTBL_CLS(pp, CByteOutBufWrap, vt);
+ CByteOutBufWrap *p = Z7_CONTAINER_FROM_VTBL_CLS(pp, CByteOutBufWrap, vt);
+ // Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CByteOutBufWrap)
Byte *dest = p->Cur;
*dest = b;
p->Cur = ++dest;
@@ -317,16 +324,16 @@ bool CLookOutWrap::Alloc(size_t size) throw()
return (Buf != NULL);
}
-static size_t LookOutWrap_GetOutBuf(const ILookOutStream *pp, void **buf) throw()
+static size_t LookOutWrap_GetOutBuf(ILookOutStreamPtr pp, void **buf) throw()
{
- CLookOutWrap *p = CONTAINER_FROM_VTBL_CLS(pp, CLookOutWrap, vt);
+ CLookOutWrap *p = Z7_CONTAINER_FROM_VTBL_CLS(pp, CLookOutWrap, vt);
*buf = p->Buf;
return p->Size;
}
-static size_t LookOutWrap_Write(const ILookOutStream *pp, size_t size) throw()
+static size_t LookOutWrap_Write(ILookOutStreamPtr pp, size_t size) throw()
{
- CLookOutWrap *p = CONTAINER_FROM_VTBL_CLS(pp, CLookOutWrap, vt);
+ CLookOutWrap *p = Z7_CONTAINER_FROM_VTBL_CLS(pp, CLookOutWrap, vt);
if (p->Res == S_OK && size != 0)
{
p->Res = WriteStream(p->Stream, p->Buf, size);
diff --git a/3rdparty/lzma/CPP/7zip/Common/CWrappers.h b/3rdparty/lzma/CPP/7zip/Common/CWrappers.h
index e7196a5c38d..6c10a5c2562 100644
--- a/3rdparty/lzma/CPP/7zip/Common/CWrappers.h
+++ b/3rdparty/lzma/CPP/7zip/Common/CWrappers.h
@@ -1,7 +1,7 @@
// CWrappers.h
-#ifndef __C_WRAPPERS_H
-#define __C_WRAPPERS_H
+#ifndef ZIP7_INC_C_WRAPPERS_H
+#define ZIP7_INC_C_WRAPPERS_H
#include "../ICoder.h"
#include "../../Common/MyCom.h"
@@ -63,7 +63,7 @@ struct CByteInBufWrap
bool Extra;
HRESULT Res;
- CByteInBufWrap();
+ CByteInBufWrap() throw();
~CByteInBufWrap() { Free(); }
void Free() throw();
bool Alloc(UInt32 size) throw();
diff --git a/3rdparty/lzma/CPP/7zip/Common/CreateCoder.cpp b/3rdparty/lzma/CPP/7zip/Common/CreateCoder.cpp
index 872f17fca31..bf7b04e441c 100644
--- a/3rdparty/lzma/CPP/7zip/Common/CreateCoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/CreateCoder.cpp
@@ -19,11 +19,11 @@ const CCodecInfo *g_Codecs[];
const CCodecInfo *g_Codecs[kNumCodecsMax];
// We use g_ExternalCodecs in other stages.
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
/*
extern CExternalCodecs g_ExternalCodecs;
#define CHECK_GLOBAL_CODECS \
- if (!__externalCodecs || !__externalCodecs->IsSet()) __externalCodecs = &g_ExternalCodecs;
+ if (!_externalCodecs || !_externalCodecs->IsSet()) _externalCodecs = &g_ExternalCodecs;
*/
#define CHECK_GLOBAL_CODECS
#endif
@@ -50,12 +50,12 @@ void RegisterHasher(const CHasherInfo *hashInfo) throw()
}
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
static HRESULT ReadNumberOfStreams(ICompressCodecsInfo *codecsInfo, UInt32 index, PROPID propID, UInt32 &res)
{
NWindows::NCOM::CPropVariant prop;
- RINOK(codecsInfo->GetProperty(index, propID, &prop));
+ RINOK(codecsInfo->GetProperty(index, propID, &prop))
if (prop.vt == VT_EMPTY)
res = 1;
else if (prop.vt == VT_UI4)
@@ -68,7 +68,7 @@ static HRESULT ReadNumberOfStreams(ICompressCodecsInfo *codecsInfo, UInt32 index
static HRESULT ReadIsAssignedProp(ICompressCodecsInfo *codecsInfo, UInt32 index, PROPID propID, bool &res)
{
NWindows::NCOM::CPropVariant prop;
- RINOK(codecsInfo->GetProperty(index, propID, &prop));
+ RINOK(codecsInfo->GetProperty(index, propID, &prop))
if (prop.vt == VT_EMPTY)
res = true;
else if (prop.vt == VT_BOOL)
@@ -89,13 +89,13 @@ HRESULT CExternalCodecs::Load()
UString s;
UInt32 num;
- RINOK(GetCodecs->GetNumMethods(&num));
+ RINOK(GetCodecs->GetNumMethods(&num))
for (UInt32 i = 0; i < num; i++)
{
NWindows::NCOM::CPropVariant prop;
- RINOK(GetCodecs->GetProperty(i, NMethodPropID::kID, &prop));
+ RINOK(GetCodecs->GetProperty(i, NMethodPropID::kID, &prop))
if (prop.vt != VT_UI8)
continue; // old Interface
info.Id = prop.uhVal.QuadPart;
@@ -103,22 +103,22 @@ HRESULT CExternalCodecs::Load()
prop.Clear();
info.Name.Empty();
- RINOK(GetCodecs->GetProperty(i, NMethodPropID::kName, &prop));
+ RINOK(GetCodecs->GetProperty(i, NMethodPropID::kName, &prop))
if (prop.vt == VT_BSTR)
info.Name.SetFromWStr_if_Ascii(prop.bstrVal);
else if (prop.vt != VT_EMPTY)
continue;
- RINOK(ReadNumberOfStreams(GetCodecs, i, NMethodPropID::kPackStreams, info.NumStreams));
+ RINOK(ReadNumberOfStreams(GetCodecs, i, NMethodPropID::kPackStreams, info.NumStreams))
{
UInt32 numUnpackStreams = 1;
- RINOK(ReadNumberOfStreams(GetCodecs, i, NMethodPropID::kUnpackStreams, numUnpackStreams));
+ RINOK(ReadNumberOfStreams(GetCodecs, i, NMethodPropID::kUnpackStreams, numUnpackStreams))
if (numUnpackStreams != 1)
continue;
}
- RINOK(ReadIsAssignedProp(GetCodecs, i, NMethodPropID::kEncoderIsAssigned, info.EncoderIsAssigned));
- RINOK(ReadIsAssignedProp(GetCodecs, i, NMethodPropID::kDecoderIsAssigned, info.DecoderIsAssigned));
- RINOK(ReadIsAssignedProp(GetCodecs, i, NMethodPropID::kIsFilter, info.IsFilter));
+ RINOK(ReadIsAssignedProp(GetCodecs, i, NMethodPropID::kEncoderIsAssigned, info.EncoderIsAssigned))
+ RINOK(ReadIsAssignedProp(GetCodecs, i, NMethodPropID::kDecoderIsAssigned, info.DecoderIsAssigned))
+ RINOK(ReadIsAssignedProp(GetCodecs, i, NMethodPropID::kIsFilter, info.IsFilter))
Codecs.Add(info);
}
@@ -133,7 +133,7 @@ HRESULT CExternalCodecs::Load()
{
NWindows::NCOM::CPropVariant prop;
- RINOK(GetHashers->GetHasherProp(i, NMethodPropID::kID, &prop));
+ RINOK(GetHashers->GetHasherProp(i, NMethodPropID::kID, &prop))
if (prop.vt != VT_UI8)
continue;
info.Id = prop.uhVal.QuadPart;
@@ -141,7 +141,7 @@ HRESULT CExternalCodecs::Load()
prop.Clear();
info.Name.Empty();
- RINOK(GetHashers->GetHasherProp(i, NMethodPropID::kName, &prop));
+ RINOK(GetHashers->GetHasherProp(i, NMethodPropID::kName, &prop))
if (prop.vt == VT_BSTR)
info.Name.SetFromWStr_if_Ascii(prop.bstrVal);
else if (prop.vt != VT_EMPTY)
@@ -162,7 +162,8 @@ int FindMethod_Index(
const AString &name,
bool encode,
CMethodId &methodId,
- UInt32 &numStreams)
+ UInt32 &numStreams,
+ bool &isFilter)
{
unsigned i;
for (i = 0; i < g_NumCodecs; i++)
@@ -173,23 +174,25 @@ int FindMethod_Index(
{
methodId = codec.Id;
numStreams = codec.NumStreams;
+ isFilter = codec.IsFilter;
return (int)i;
}
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CHECK_GLOBAL_CODECS
- if (__externalCodecs)
- for (i = 0; i < __externalCodecs->Codecs.Size(); i++)
+ if (_externalCodecs)
+ for (i = 0; i < _externalCodecs->Codecs.Size(); i++)
{
- const CCodecInfoEx &codec = __externalCodecs->Codecs[i];
+ const CCodecInfoEx &codec = _externalCodecs->Codecs[i];
if ((encode ? codec.EncoderIsAssigned : codec.DecoderIsAssigned)
&& StringsAreEqualNoCase_Ascii(name, codec.Name))
{
methodId = codec.Id;
numStreams = codec.NumStreams;
+ isFilter = codec.IsFilter;
return (int)(g_NumCodecs + i);
}
}
@@ -212,14 +215,14 @@ static int FindMethod_Index(
return (int)i;
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CHECK_GLOBAL_CODECS
- if (__externalCodecs)
- for (i = 0; i < __externalCodecs->Codecs.Size(); i++)
+ if (_externalCodecs)
+ for (i = 0; i < _externalCodecs->Codecs.Size(); i++)
{
- const CCodecInfoEx &codec = __externalCodecs->Codecs[i];
+ const CCodecInfoEx &codec = _externalCodecs->Codecs[i];
if (codec.Id == methodId && (encode ? codec.EncoderIsAssigned : codec.DecoderIsAssigned))
return (int)(g_NumCodecs + i);
}
@@ -248,14 +251,14 @@ bool FindMethod(
}
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CHECK_GLOBAL_CODECS
- if (__externalCodecs)
- for (i = 0; i < __externalCodecs->Codecs.Size(); i++)
+ if (_externalCodecs)
+ for (i = 0; i < _externalCodecs->Codecs.Size(); i++)
{
- const CCodecInfoEx &codec = __externalCodecs->Codecs[i];
+ const CCodecInfoEx &codec = _externalCodecs->Codecs[i];
if (methodId == codec.Id)
{
name = codec.Name;
@@ -284,14 +287,14 @@ bool FindHashMethod(
}
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CHECK_GLOBAL_CODECS
- if (__externalCodecs)
- for (i = 0; i < __externalCodecs->Hashers.Size(); i++)
+ if (_externalCodecs)
+ for (i = 0; i < _externalCodecs->Hashers.Size(); i++)
{
- const CHasherInfoEx &codec = __externalCodecs->Hashers[i];
+ const CHasherInfoEx &codec = _externalCodecs->Hashers[i];
if (StringsAreEqualNoCase_Ascii(name, codec.Name))
{
methodId = codec.Id;
@@ -313,13 +316,13 @@ void GetHashMethods(
for (i = 0; i < g_NumHashers; i++)
methods[i] = (*g_Hashers[i]).Id;
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CHECK_GLOBAL_CODECS
- if (__externalCodecs)
- for (i = 0; i < __externalCodecs->Hashers.Size(); i++)
- methods.Add(__externalCodecs->Hashers[i].Id);
+ if (_externalCodecs)
+ for (i = 0; i < _externalCodecs->Hashers.Size(); i++)
+ methods.Add(_externalCodecs->Hashers[i].Id);
#endif
}
@@ -364,17 +367,17 @@ HRESULT CreateCoder_Index(
}
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CHECK_GLOBAL_CODECS
- if (__externalCodecs)
+ if (_externalCodecs)
{
i -= g_NumCodecs;
cod.IsExternal = true;
- if (i < __externalCodecs->Codecs.Size())
+ if (i < _externalCodecs->Codecs.Size())
{
- const CCodecInfoEx &codec = __externalCodecs->Codecs[i];
+ const CCodecInfoEx &codec = _externalCodecs->Codecs[i];
// if (codec.Id == methodId)
{
if (encode)
@@ -383,15 +386,15 @@ HRESULT CreateCoder_Index(
{
if (codec.NumStreams == 1)
{
- HRESULT res = __externalCodecs->GetCodecs->CreateEncoder(i, &IID_ICompressCoder, (void **)&cod.Coder);
+ const HRESULT res = _externalCodecs->GetCodecs->CreateEncoder(i, &IID_ICompressCoder, (void **)&cod.Coder);
if (res != S_OK && res != E_NOINTERFACE && res != CLASS_E_CLASSNOTAVAILABLE)
return res;
if (cod.Coder)
return res;
- return __externalCodecs->GetCodecs->CreateEncoder(i, &IID_ICompressFilter, (void **)&filter);
+ return _externalCodecs->GetCodecs->CreateEncoder(i, &IID_ICompressFilter, (void **)&filter);
}
cod.NumStreams = codec.NumStreams;
- return __externalCodecs->GetCodecs->CreateEncoder(i, &IID_ICompressCoder2, (void **)&cod.Coder2);
+ return _externalCodecs->GetCodecs->CreateEncoder(i, &IID_ICompressCoder2, (void **)&cod.Coder2);
}
}
else
@@ -399,15 +402,15 @@ HRESULT CreateCoder_Index(
{
if (codec.NumStreams == 1)
{
- HRESULT res = __externalCodecs->GetCodecs->CreateDecoder(i, &IID_ICompressCoder, (void **)&cod.Coder);
+ const HRESULT res = _externalCodecs->GetCodecs->CreateDecoder(i, &IID_ICompressCoder, (void **)&cod.Coder);
if (res != S_OK && res != E_NOINTERFACE && res != CLASS_E_CLASSNOTAVAILABLE)
return res;
if (cod.Coder)
return res;
- return __externalCodecs->GetCodecs->CreateDecoder(i, &IID_ICompressFilter, (void **)&filter);
+ return _externalCodecs->GetCodecs->CreateDecoder(i, &IID_ICompressFilter, (void **)&filter);
}
cod.NumStreams = codec.NumStreams;
- return __externalCodecs->GetCodecs->CreateDecoder(i, &IID_ICompressCoder2, (void **)&cod.Coder2);
+ return _externalCodecs->GetCodecs->CreateDecoder(i, &IID_ICompressCoder2, (void **)&cod.Coder2);
}
}
}
@@ -424,7 +427,7 @@ HRESULT CreateCoder_Index(
CCreatedCoder &cod)
{
CMyComPtr<ICompressFilter> filter;
- HRESULT res = CreateCoder_Index(
+ const HRESULT res = CreateCoder_Index(
EXTERNAL_CODECS_LOC_VARS
index, encode,
filter, cod);
@@ -447,7 +450,7 @@ HRESULT CreateCoder_Id(
CMyComPtr<ICompressFilter> &filter,
CCreatedCoder &cod)
{
- int index = FindMethod_Index(EXTERNAL_CODECS_LOC_VARS methodId, encode);
+ const int index = FindMethod_Index(EXTERNAL_CODECS_LOC_VARS methodId, encode);
if (index < 0)
return S_OK;
return CreateCoder_Index(EXTERNAL_CODECS_LOC_VARS (unsigned)index, encode, filter, cod);
@@ -460,7 +463,7 @@ HRESULT CreateCoder_Id(
CCreatedCoder &cod)
{
CMyComPtr<ICompressFilter> filter;
- HRESULT res = CreateCoder_Id(
+ const HRESULT res = CreateCoder_Id(
EXTERNAL_CODECS_LOC_VARS
methodId, encode,
filter, cod);
@@ -483,7 +486,7 @@ HRESULT CreateCoder_Id(
CMyComPtr<ICompressCoder> &coder)
{
CCreatedCoder cod;
- HRESULT res = CreateCoder_Id(
+ const HRESULT res = CreateCoder_Id(
EXTERNAL_CODECS_LOC_VARS
methodId, encode,
cod);
@@ -524,18 +527,18 @@ HRESULT CreateHasher(
}
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CHECK_GLOBAL_CODECS
- if (!hasher && __externalCodecs)
- for (i = 0; i < __externalCodecs->Hashers.Size(); i++)
+ if (!hasher && _externalCodecs)
+ for (i = 0; i < _externalCodecs->Hashers.Size(); i++)
{
- const CHasherInfoEx &codec = __externalCodecs->Hashers[i];
+ const CHasherInfoEx &codec = _externalCodecs->Hashers[i];
if (codec.Id == methodId)
{
name = codec.Name;
- return __externalCodecs->GetHashers->CreateHasher((UInt32)i, &hasher);
+ return _externalCodecs->GetHashers->CreateHasher((UInt32)i, &hasher);
}
}
diff --git a/3rdparty/lzma/CPP/7zip/Common/CreateCoder.h b/3rdparty/lzma/CPP/7zip/Common/CreateCoder.h
index 24e6b66368f..709fe83c1d7 100644
--- a/3rdparty/lzma/CPP/7zip/Common/CreateCoder.h
+++ b/3rdparty/lzma/CPP/7zip/Common/CreateCoder.h
@@ -1,7 +1,7 @@
// CreateCoder.h
-#ifndef __CREATE_CODER_H
-#define __CREATE_CODER_H
+#ifndef ZIP7_INC_CREATE_CODER_H
+#define ZIP7_INC_CREATE_CODER_H
#include "../../Common/MyCom.h"
#include "../../Common/MyString.h"
@@ -11,10 +11,10 @@
#include "MethodId.h"
/*
- if EXTERNAL_CODECS is not defined, the code supports only codecs that
+ if Z7_EXTERNAL_CODECS is not defined, the code supports only codecs that
are statically linked at compile-time and link-time.
- if EXTERNAL_CODECS is defined, the code supports also codecs from another
+ if Z7_EXTERNAL_CODECS is defined, the code supports also codecs from another
executable modules, that can be linked dynamically at run-time:
- EXE module can use codecs from external DLL files.
- DLL module can use codecs from external EXE and DLL files.
@@ -26,7 +26,7 @@
2) External codecs
*/
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
struct CCodecInfoEx
{
@@ -46,13 +46,17 @@ struct CHasherInfoEx
AString Name;
};
-#define PUBLIC_ISetCompressCodecsInfo public ISetCompressCodecsInfo,
-#define QUERY_ENTRY_ISetCompressCodecsInfo MY_QUERYINTERFACE_ENTRY(ISetCompressCodecsInfo)
-#define DECL_ISetCompressCodecsInfo STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo);
-#define IMPL_ISetCompressCodecsInfo2(x) \
-STDMETHODIMP x::SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo) { \
- COM_TRY_BEGIN __externalCodecs.GetCodecs = compressCodecsInfo; return __externalCodecs.Load(); COM_TRY_END }
-#define IMPL_ISetCompressCodecsInfo IMPL_ISetCompressCodecsInfo2(CHandler)
+#define Z7_PUBLIC_ISetCompressCodecsInfo_IFEC \
+ public ISetCompressCodecsInfo,
+#define Z7_COM_QI_ENTRY_ISetCompressCodecsInfo_IFEC \
+ Z7_COM_QI_ENTRY(ISetCompressCodecsInfo)
+#define DECL_ISetCompressCodecsInfo \
+ Z7_COM7F_IMP(SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo))
+#define IMPL_ISetCompressCodecsInfo2(cls) \
+ Z7_COM7F_IMF(cls::SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo)) \
+ { COM_TRY_BEGIN _externalCodecs.GetCodecs = compressCodecsInfo; \
+ return _externalCodecs.Load(); COM_TRY_END }
+#define IMPL_ISetCompressCodecsInfo IMPL_ISetCompressCodecsInfo2(CHandler)
struct CExternalCodecs
{
@@ -83,26 +87,27 @@ struct CExternalCodecs
extern CExternalCodecs g_ExternalCodecs;
-#define EXTERNAL_CODECS_VARS2 (__externalCodecs.IsSet() ? &__externalCodecs : &g_ExternalCodecs)
-#define EXTERNAL_CODECS_VARS2_L (&__externalCodecs)
+#define EXTERNAL_CODECS_VARS2 (_externalCodecs.IsSet() ? &_externalCodecs : &g_ExternalCodecs)
+#define EXTERNAL_CODECS_VARS2_L (&_externalCodecs)
#define EXTERNAL_CODECS_VARS2_G (&g_ExternalCodecs)
-#define DECL_EXTERNAL_CODECS_VARS CExternalCodecs __externalCodecs;
+#define DECL_EXTERNAL_CODECS_VARS CExternalCodecs _externalCodecs;
#define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2,
#define EXTERNAL_CODECS_VARS_L EXTERNAL_CODECS_VARS2_L,
#define EXTERNAL_CODECS_VARS_G EXTERNAL_CODECS_VARS2_G,
-#define DECL_EXTERNAL_CODECS_LOC_VARS2 const CExternalCodecs *__externalCodecs
-#define EXTERNAL_CODECS_LOC_VARS2 __externalCodecs
+#define DECL_EXTERNAL_CODECS_LOC_VARS2 const CExternalCodecs *_externalCodecs
+#define DECL_EXTERNAL_CODECS_LOC_VARS DECL_EXTERNAL_CODECS_LOC_VARS2,
+#define DECL_EXTERNAL_CODECS_LOC_VARS_DECL DECL_EXTERNAL_CODECS_LOC_VARS2;
-#define DECL_EXTERNAL_CODECS_LOC_VARS DECL_EXTERNAL_CODECS_LOC_VARS2,
-#define EXTERNAL_CODECS_LOC_VARS EXTERNAL_CODECS_LOC_VARS2,
+#define EXTERNAL_CODECS_LOC_VARS2 _externalCodecs
+#define EXTERNAL_CODECS_LOC_VARS EXTERNAL_CODECS_LOC_VARS2,
#else
-#define PUBLIC_ISetCompressCodecsInfo
-#define QUERY_ENTRY_ISetCompressCodecsInfo
+#define Z7_PUBLIC_ISetCompressCodecsInfo_IFEC
+#define Z7_COM_QI_ENTRY_ISetCompressCodecsInfo_IFEC
#define DECL_ISetCompressCodecsInfo
#define IMPL_ISetCompressCodecsInfo
#define EXTERNAL_CODECS_VARS2
@@ -111,8 +116,9 @@ extern CExternalCodecs g_ExternalCodecs;
#define EXTERNAL_CODECS_VARS_L
#define EXTERNAL_CODECS_VARS_G
#define DECL_EXTERNAL_CODECS_LOC_VARS2
-#define EXTERNAL_CODECS_LOC_VARS2
#define DECL_EXTERNAL_CODECS_LOC_VARS
+#define DECL_EXTERNAL_CODECS_LOC_VARS_DECL
+#define EXTERNAL_CODECS_LOC_VARS2
#define EXTERNAL_CODECS_LOC_VARS
#endif
@@ -122,7 +128,8 @@ int FindMethod_Index(
const AString &name,
bool encode,
CMethodId &methodId,
- UInt32 &numStreams);
+ UInt32 &numStreams,
+ bool &isFilter);
bool FindMethod(
DECL_EXTERNAL_CODECS_LOC_VARS
diff --git a/3rdparty/lzma/CPP/7zip/Common/FilePathAutoRename.h b/3rdparty/lzma/CPP/7zip/Common/FilePathAutoRename.h
index 7b576591c9a..ac36882312d 100644
--- a/3rdparty/lzma/CPP/7zip/Common/FilePathAutoRename.h
+++ b/3rdparty/lzma/CPP/7zip/Common/FilePathAutoRename.h
@@ -1,7 +1,7 @@
// FilePathAutoRename.h
-#ifndef __FILE_PATH_AUTO_RENAME_H
-#define __FILE_PATH_AUTO_RENAME_H
+#ifndef ZIP7_INC_FILE_PATH_AUTO_RENAME_H
+#define ZIP7_INC_FILE_PATH_AUTO_RENAME_H
#include "../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/Common/FileStreams.cpp b/3rdparty/lzma/CPP/7zip/Common/FileStreams.cpp
index 0349e907461..429863630ed 100644
--- a/3rdparty/lzma/CPP/7zip/Common/FileStreams.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/FileStreams.cpp
@@ -12,17 +12,19 @@
#include <pwd.h>
// for major()/minor():
-#if defined(__FreeBSD__) || defined(BSD)
#include <sys/types.h>
+#if defined(__FreeBSD__) || defined(BSD) || defined(__APPLE__)
#else
+#ifndef major
#include <sys/sysmacros.h>
#endif
-
#endif
+#endif // _WIN32
+
#include "../../Windows/FileFind.h"
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
#include "../../../C/Alloc.h"
#include "../../Common/Defs.h"
#endif
@@ -47,15 +49,15 @@ static inline HRESULT ConvertBoolToHRESULT(bool result)
}
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
static const UInt32 kClusterSize = 1 << 18;
#endif
CInFileStream::CInFileStream():
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
VirtPos(0),
PhyPos(0),
- Buf(0),
+ Buf(NULL),
BufSize(0),
#endif
#ifndef _WIN32
@@ -73,7 +75,7 @@ CInFileStream::CInFileStream():
CInFileStream::~CInFileStream()
{
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
MidFree(Buf);
#endif
@@ -81,11 +83,11 @@ CInFileStream::~CInFileStream()
Callback->InFileStream_On_Destroy(this, CallbackRef);
}
-STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
- #ifdef USE_WIN_FILE
+ #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
if (processedSize)
*processedSize = 0;
if (size == 0)
@@ -96,7 +98,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
{
if (VirtPos >= File.Size)
return VirtPos == File.Size ? S_OK : E_FAIL;
- UInt64 rem = File.Size - VirtPos;
+ const UInt64 rem = File.Size - VirtPos;
if (size > rem)
size = (UInt32)rem;
}
@@ -104,13 +106,13 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
{
const UInt32 mask = kClusterSize - 1;
const UInt64 mask2 = ~(UInt64)mask;
- UInt64 alignedPos = VirtPos & mask2;
+ const UInt64 alignedPos = VirtPos & mask2;
if (BufSize > 0 && BufStartPos == alignedPos)
{
- UInt32 pos = (UInt32)VirtPos & mask;
+ const UInt32 pos = (UInt32)VirtPos & mask;
if (pos >= BufSize)
return S_OK;
- UInt32 rem = MyMin(BufSize - pos, size);
+ const UInt32 rem = MyMin(BufSize - pos, size);
memcpy(data, Buf + pos, rem);
VirtPos += rem;
if (processedSize)
@@ -119,7 +121,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
}
bool useBuf = false;
- if ((VirtPos & mask) != 0 || ((ptrdiff_t)data & mask) != 0 )
+ if ((VirtPos & mask) != 0 || ((size_t)(ptrdiff_t)data & mask) != 0 )
useBuf = true;
else
{
@@ -138,7 +140,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
if (alignedPos != PhyPos)
{
UInt64 realNewPosition;
- bool result = File.Seek((Int64)alignedPos, FILE_BEGIN, realNewPosition);
+ const bool result = File.Seek((Int64)alignedPos, FILE_BEGIN, realNewPosition);
if (!result)
return ConvertBoolToHRESULT(result);
PhyPos = realNewPosition;
@@ -155,7 +157,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
if (!Buf)
return E_OUTOFMEMORY;
}
- bool result = File.Read1(Buf, readSize, BufSize);
+ const bool result = File.Read1(Buf, readSize, BufSize);
if (!result)
return ConvertBoolToHRESULT(result);
@@ -180,7 +182,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
if (processedSize)
*processedSize = realProcessedSize;
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
VirtPos += realProcessedSize;
PhyPos += realProcessedSize;
#endif
@@ -188,7 +190,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
if (result)
return S_OK;
- #else // USE_WIN_FILE
+ #else // Z7_FILE_STREAMS_USE_WIN_FILE
if (processedSize)
*processedSize = 0;
@@ -199,7 +201,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
*processedSize = (UInt32)res;
return S_OK;
}
- #endif // USE_WIN_FILE
+ #endif // Z7_FILE_STREAMS_USE_WIN_FILE
{
const DWORD error = ::GetLastError();
@@ -212,7 +214,7 @@ STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
}
#ifdef UNDER_CE
-STDMETHODIMP CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
size_t s2 = fread(data, 1, size, stdin);
int error = ferror(stdin);
@@ -223,7 +225,7 @@ STDMETHODIMP CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSi
return E_FAIL;
}
#else
-STDMETHODIMP CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
#ifdef _WIN32
@@ -259,14 +261,14 @@ STDMETHODIMP CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSi
#endif
-STDMETHODIMP CInFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CInFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
if (seekOrigin >= 3)
return STG_E_INVALIDFUNCTION;
- #ifdef USE_WIN_FILE
+ #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
if (File.IsDeviceFile && (File.SizeDefined || seekOrigin != STREAM_SEEK_END))
{
switch (seekOrigin)
@@ -293,7 +295,7 @@ STDMETHODIMP CInFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPos
in case of error. So we don't need additional code below */
// if (!result) { realNewPosition = 0; File.GetPosition(realNewPosition); }
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
PhyPos = VirtPos = realNewPosition;
#endif
@@ -319,17 +321,19 @@ STDMETHODIMP CInFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPos
#endif
}
-STDMETHODIMP CInFileStream::GetSize(UInt64 *size)
+Z7_COM7F_IMF(CInFileStream::GetSize(UInt64 *size))
{
return ConvertBoolToHRESULT(File.GetLength(*size));
}
-#ifdef USE_WIN_FILE
+#ifdef Z7_FILE_STREAMS_USE_WIN_FILE
-STDMETHODIMP CInFileStream::GetProps(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib)
+Z7_COM7F_IMF(CInFileStream::GetProps(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib))
{
if (!_info_WasLoaded)
- RINOK(ReloadProps());
+ {
+ RINOK(ReloadProps())
+ }
const BY_HANDLE_FILE_INFORMATION &info = _info;
/*
BY_HANDLE_FILE_INFORMATION info;
@@ -346,10 +350,12 @@ STDMETHODIMP CInFileStream::GetProps(UInt64 *size, FILETIME *cTime, FILETIME *aT
}
}
-STDMETHODIMP CInFileStream::GetProps2(CStreamFileProps *props)
+Z7_COM7F_IMF(CInFileStream::GetProps2(CStreamFileProps *props))
{
if (!_info_WasLoaded)
- RINOK(ReloadProps());
+ {
+ RINOK(ReloadProps())
+ }
const BY_HANDLE_FILE_INFORMATION &info = _info;
/*
BY_HANDLE_FILE_INFORMATION info;
@@ -370,17 +376,19 @@ STDMETHODIMP CInFileStream::GetProps2(CStreamFileProps *props)
}
}
-STDMETHODIMP CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value))
{
if (!_info_WasLoaded)
- RINOK(ReloadProps());
+ {
+ RINOK(ReloadProps())
+ }
if (!_info_WasLoaded)
return S_OK;
NWindows::NCOM::CPropVariant prop;
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
if (File.IsDeviceFile)
{
switch (propID)
@@ -436,9 +444,9 @@ STDMETHODIMP CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value)
}
-STDMETHODIMP CInFileStream::ReloadProps()
+Z7_COM7F_IMF(CInFileStream::ReloadProps())
{
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
if (File.IsDeviceFile)
{
memset(&_info, 0, sizeof(_info));
@@ -461,10 +469,12 @@ STDMETHODIMP CInFileStream::ReloadProps()
#elif !defined(_WIN32)
-STDMETHODIMP CInFileStream::GetProps(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib)
+Z7_COM7F_IMF(CInFileStream::GetProps(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib))
{
if (!_info_WasLoaded)
- RINOK(ReloadProps());
+ {
+ RINOK(ReloadProps())
+ }
const struct stat &st = _info;
/*
struct stat st;
@@ -483,10 +493,12 @@ STDMETHODIMP CInFileStream::GetProps(UInt64 *size, FILETIME *cTime, FILETIME *aT
// #include <stdio.h>
-STDMETHODIMP CInFileStream::GetProps2(CStreamFileProps *props)
+Z7_COM7F_IMF(CInFileStream::GetProps2(CStreamFileProps *props))
{
if (!_info_WasLoaded)
- RINOK(ReloadProps());
+ {
+ RINOK(ReloadProps())
+ }
const struct stat &st = _info;
/*
struct stat st;
@@ -521,10 +533,12 @@ STDMETHODIMP CInFileStream::GetProps2(CStreamFileProps *props)
return S_OK;
}
-STDMETHODIMP CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value))
{
if (!_info_WasLoaded)
- RINOK(ReloadProps());
+ {
+ RINOK(ReloadProps())
+ }
if (!_info_WasLoaded)
return S_OK;
@@ -544,6 +558,11 @@ STDMETHODIMP CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value)
case kpidMTime: PropVariant_SetFrom_FiTime(prop, ST_MTIME(st)); break;
case kpidPosixAttrib: prop = (UInt32)st.st_mode; break;
+ #if defined(__APPLE__)
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wsign-conversion"
+ #endif
+
case kpidDeviceMajor:
{
// printf("\nst.st_rdev = %d\n", st.st_rdev);
@@ -563,6 +582,10 @@ STDMETHODIMP CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value)
// prop = (UInt32)123456789; // for debug
break;
+ #if defined(__APPLE__)
+ #pragma GCC diagnostic pop
+ #endif
+
/*
case kpidDevice:
if (S_ISCHR(st.st_mode) ||
@@ -632,7 +655,7 @@ STDMETHODIMP CInFileStream::GetProperty(PROPID propID, PROPVARIANT *value)
}
-STDMETHODIMP CInFileStream::ReloadProps()
+Z7_COM7F_IMF(CInFileStream::ReloadProps())
{
_info_WasLoaded = (File.my_fstat(&_info) == 0);
if (!_info_WasLoaded)
@@ -653,9 +676,9 @@ HRESULT COutFileStream::Close()
return ConvertBoolToHRESULT(File.Close());
}
-STDMETHODIMP COutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(COutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
- #ifdef USE_WIN_FILE
+ #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
UInt32 realProcessedSize;
const bool result = File.Write(data, size, realProcessedSize);
@@ -680,12 +703,12 @@ STDMETHODIMP COutFileStream::Write(const void *data, UInt32 size, UInt32 *proces
#endif
}
-STDMETHODIMP COutFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(COutFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
if (seekOrigin >= 3)
return STG_E_INVALIDFUNCTION;
- #ifdef USE_WIN_FILE
+ #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
UInt64 realNewPosition = 0;
const bool result = File.Seek(offset, seekOrigin, realNewPosition);
@@ -705,7 +728,7 @@ STDMETHODIMP COutFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPo
#endif
}
-STDMETHODIMP COutFileStream::SetSize(UInt64 newSize)
+Z7_COM7F_IMF(COutFileStream::SetSize(UInt64 newSize))
{
return ConvertBoolToHRESULT(File.SetLength_KeepPosition(newSize));
}
@@ -717,7 +740,7 @@ HRESULT COutFileStream::GetSize(UInt64 *size)
#ifdef UNDER_CE
-STDMETHODIMP CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
size_t s2 = fwrite(data, 1, size, stdout);
if (processedSize)
@@ -727,7 +750,7 @@ STDMETHODIMP CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *pro
#else
-STDMETHODIMP CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
diff --git a/3rdparty/lzma/CPP/7zip/Common/FileStreams.h b/3rdparty/lzma/CPP/7zip/Common/FileStreams.h
index f2c19eea10a..7e1b086b139 100644
--- a/3rdparty/lzma/CPP/7zip/Common/FileStreams.h
+++ b/3rdparty/lzma/CPP/7zip/Common/FileStreams.h
@@ -1,10 +1,10 @@
// FileStreams.h
-#ifndef __FILE_STREAMS_H
-#define __FILE_STREAMS_H
+#ifndef ZIP7_INC_FILE_STREAMS_H
+#define ZIP7_INC_FILE_STREAMS_H
#ifdef _WIN32
-#define USE_WIN_FILE
+#define Z7_FILE_STREAMS_USE_WIN_FILE
#endif
#include "../../Common/MyCom.h"
@@ -18,13 +18,27 @@
class CInFileStream;
-struct IInFileStream_Callback
+
+Z7_PURE_INTERFACES_BEGIN
+DECLARE_INTERFACE(IInFileStream_Callback)
{
virtual HRESULT InFileStream_On_Error(UINT_PTR val, DWORD error) = 0;
virtual void InFileStream_On_Destroy(CInFileStream *stream, UINT_PTR val) = 0;
};
-
-class CInFileStream:
+Z7_PURE_INTERFACES_END
+
+
+/*
+Z7_CLASS_IMP_COM_5(
+ CInFileStream
+ , IInStream
+ , IStreamGetSize
+ , IStreamGetProps
+ , IStreamGetProps2
+ , IStreamGetProp
+)
+*/
+Z7_class_final(CInFileStream) :
public IInStream,
public IStreamGetSize,
public IStreamGetProps,
@@ -32,12 +46,30 @@ class CInFileStream:
public IStreamGetProp,
public CMyUnknownImp
{
+ Z7_COM_UNKNOWN_IMP_5(
+ IInStream,
+ IStreamGetSize,
+ IStreamGetProps,
+ IStreamGetProps2,
+ IStreamGetProp)
+
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+ Z7_IFACE_COM7_IMP(IInStream)
+public:
+ Z7_IFACE_COM7_IMP(IStreamGetSize)
+private:
+ Z7_IFACE_COM7_IMP(IStreamGetProps)
+public:
+ Z7_IFACE_COM7_IMP(IStreamGetProps2)
+ Z7_IFACE_COM7_IMP(IStreamGetProp)
+
+private:
NWindows::NFile::NIO::CInFile File;
public:
- #ifdef USE_WIN_FILE
+ #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
UInt64 VirtPos;
UInt64 PhyPos;
UInt64 BufStartPos;
@@ -64,9 +96,8 @@ public:
IInFileStream_Callback *Callback;
UINT_PTR CallbackRef;
- virtual ~CInFileStream();
-
CInFileStream();
+ ~CInFileStream();
void Set_PreserveATime(bool v)
{
@@ -89,44 +120,25 @@ public:
_info_WasLoaded = false;
return File.OpenShared(fileName, shareForWrite);
}
-
- MY_QUERYINTERFACE_BEGIN2(IInStream)
- MY_QUERYINTERFACE_ENTRY(IStreamGetSize)
- MY_QUERYINTERFACE_ENTRY(IStreamGetProps)
- MY_QUERYINTERFACE_ENTRY(IStreamGetProps2)
- MY_QUERYINTERFACE_ENTRY(IStreamGetProp)
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
- STDMETHOD(GetSize)(UInt64 *size);
- STDMETHOD(GetProps)(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib);
- STDMETHOD(GetProps2)(CStreamFileProps *props);
- STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value);
- STDMETHOD(ReloadProps)();
};
-class CStdInFileStream:
- public ISequentialInStream,
- public CMyUnknownImp
-{
-public:
- MY_UNKNOWN_IMP
- virtual ~CStdInFileStream() {}
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
+Z7_CLASS_IMP_NOQIB_1(
+ CStdInFileStream
+ , ISequentialInStream
+)
};
-class COutFileStream:
- public IOutStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_COM_1(
+ COutFileStream
+ , IOutStream
+)
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
public:
+
NWindows::NFile::NIO::COutFile File;
- virtual ~COutFileStream() {}
bool Create(CFSTR fileName, bool createAlways)
{
ProcessedSize = 0;
@@ -148,15 +160,9 @@ public:
}
bool SetMTime(const CFiTime *mTime) { return File.SetMTime(mTime); }
- MY_UNKNOWN_IMP1(IOutStream)
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
- STDMETHOD(SetSize)(UInt64 newSize);
-
bool SeekToBegin_bool()
{
- #ifdef USE_WIN_FILE
+ #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
return File.SeekToBegin();
#else
return File.seekToBegin() == 0;
@@ -166,18 +172,15 @@ public:
HRESULT GetSize(UInt64 *size);
};
-class CStdOutFileStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_NOQIB_1(
+ CStdOutFileStream
+ , ISequentialOutStream
+)
UInt64 _size;
public:
- MY_UNKNOWN_IMP
-
UInt64 GetSize() const { return _size; }
CStdOutFileStream(): _size(0) {}
- virtual ~CStdOutFileStream() {}
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/FilterCoder.cpp b/3rdparty/lzma/CPP/7zip/Common/FilterCoder.cpp
index fb99f610e23..8d7e0dccfe5 100644
--- a/3rdparty/lzma/CPP/7zip/Common/FilterCoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/FilterCoder.cpp
@@ -2,6 +2,8 @@
#include "StdAfx.h"
+// #include <stdio.h>
+
#include "../../Common/Defs.h"
#include "FilterCoder.h"
@@ -33,13 +35,17 @@ void CAlignedMidBuffer::AllocAligned(size_t size)
Some filters (BCJ and others) don't process data at the end of stream in some cases.
So the encoder and decoder write such last bytes without change.
+
+ Most filters process all data, if we send aligned size to filter.
+ But BCJ filter can process up 4 bytes less than sent size.
+ And ARMT filter can process 2 bytes less than sent size.
*/
-static const UInt32 kBufSize = 1 << 20;
+static const UInt32 kBufSize = 1 << 21;
-STDMETHODIMP CFilterCoder::SetInBufSize(UInt32 , UInt32 size) { _inBufSize = size; return S_OK; }
-STDMETHODIMP CFilterCoder::SetOutBufSize(UInt32 , UInt32 size) { _outBufSize = size; return S_OK; }
+Z7_COM7F_IMF(CFilterCoder::SetInBufSize(UInt32 , UInt32 size)) { _inBufSize = size; return S_OK; }
+Z7_COM7F_IMF(CFilterCoder::SetOutBufSize(UInt32 , UInt32 size)) { _outBufSize = size; return S_OK; }
HRESULT CFilterCoder::Alloc()
{
@@ -51,6 +57,7 @@ HRESULT CFilterCoder::Alloc()
size &= ~(UInt32)(kMinSize - 1);
if (size < kMinSize)
size = kMinSize;
+ // size = (1 << 12); // + 117; // for debug
if (!_buf || _bufSize != size)
{
AllocAligned(size);
@@ -63,7 +70,7 @@ HRESULT CFilterCoder::Alloc()
HRESULT CFilterCoder::Init_and_Alloc()
{
- RINOK(Filter->Init());
+ RINOK(Filter->Init())
return Alloc();
}
@@ -72,78 +79,197 @@ CFilterCoder::CFilterCoder(bool encodeMode):
_inBufSize(kBufSize),
_outBufSize(kBufSize),
_encodeMode(encodeMode),
- _outSizeIsDefined(false),
+ _outSize_Defined(false),
_outSize(0),
_nowPos64(0)
{}
-CFilterCoder::~CFilterCoder()
-{
-}
-STDMETHODIMP CFilterCoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 * /* inSize */, const UInt64 *outSize, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CFilterCoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 * /* inSize */, const UInt64 *outSize, ICompressProgressInfo *progress))
{
- RINOK(Init_and_Alloc());
-
+ RINOK(Init_and_Alloc())
+
+ /*
+ It's expected that BCJ/ARMT filter can process up to 4 bytes less
+ than sent data size. For such BCJ/ARMT cases with non-filtered data we:
+ - write some filtered data to output stream
+ - move non-written data (filtered and non-filtered data) to start of buffer
+ - read more new data from input stream to position after end of non-filtered data
+ - call Filter() for concatenated data in buffer.
+
+ For all cases, even for cases with partial filtering (BCJ/ARMT),
+ we try to keep real/virtual alignment for all operations
+ (memmove, Read(), Filter(), Write()).
+ We use (kAlignSize=64) alignmnent that is larger than (16-bytes)
+ required for AES filter alignment.
+
+ AES-CBC uses 16-bytes blocks, that is simple case for processing here,
+ if we call Filter() for aligned size for all calls except of last call (last block).
+ And now there are no filters that use blocks with non-power2 size,
+ but we try to support such non-power2 filters too here at Code().
+ */
+
UInt64 prev = 0;
UInt64 nowPos64 = 0;
bool inputFinished = false;
- UInt32 pos = 0;
+ UInt32 readPos = 0;
+ UInt32 filterPos = 0;
while (!outSize || nowPos64 < *outSize)
{
+ HRESULT hres = S_OK;
if (!inputFinished)
{
- size_t processedSize = _bufSize - pos;
- RINOK(ReadStream(inStream, _buf + pos, &processedSize));
- pos += (UInt32)processedSize;
- inputFinished = (pos != _bufSize);
+ size_t processedSize = _bufSize - readPos;
+ /* for AES filters we need at least max(16, kAlignSize) bytes in buffer.
+ But we try to read full buffer to reduce the number of Filter() and Write() calls.
+ */
+ hres = ReadStream(inStream, _buf + readPos, &processedSize);
+ readPos += (UInt32)processedSize;
+ inputFinished = (readPos != _bufSize);
+ if (hres != S_OK)
+ {
+ // do we need to stop encoding after reading error?
+ // if (_encodeMode) return hres;
+ inputFinished = true;
+ }
+ }
+
+ if (readPos == 0)
+ return hres;
+
+ /* we set (needMoreInput = true), if it's block-filter (like AES-CBC)
+ that needs more data for current block filtering:
+ We read full input buffer with Read(), and _bufSize is aligned,
+ So the possible cases when we set (needMoreInput = true) are:
+ 1) decode : filter needs more data after the end of input stream.
+ another cases are possible for non-power2-block-filter,
+ because buffer size is not aligned for filter_non_power2_block_size:
+ 2) decode/encode : filter needs more data from non-finished input stream
+ 3) encode : filter needs more space for zeros after the end of input stream
+ */
+ bool needMoreInput = false;
+
+ while (readPos != filterPos)
+ {
+ /* Filter() is allowed to process part of data.
+ Here we use the loop to filter as max as possible.
+ when we call Filter(data, size):
+ if (size < 16), AES-CTR filter uses internal 16-byte buffer.
+ new (since v23.00) AES-CTR filter allows (size < 16) for non-last block,
+ but it will work less efficiently than calls with aligned (size).
+ We still support old (before v23.00) AES-CTR filters here.
+ We have aligned (size) for AES-CTR, if it's not last block.
+ We have aligned (readPos) for any filter, if (!inputFinished).
+ We also meet the requirements for (data) pointer in Filter() call:
+ {
+ (virtual_stream_offset % aligment_size) == (data_ptr % aligment_size)
+ (aligment_size == 2^N)
+ (aligment_size >= 16)
+ }
+ */
+ const UInt32 cur = Filter->Filter(_buf + filterPos, readPos - filterPos);
+ if (cur == 0)
+ break;
+ const UInt32 f = filterPos + cur;
+ if (cur > readPos - filterPos)
+ {
+ // AES-CBC
+ if (hres != S_OK)
+ break;
+
+ if (!_encodeMode
+ || cur > _bufSize - filterPos
+ || !inputFinished)
+ {
+ /* (cur > _bufSize - filterPos) is unexpected for AES filter, if _bufSize is multiply of 16.
+ But we support this case, if some future filter will use block with non-power2-size.
+ */
+ needMoreInput = true;
+ break;
+ }
+
+ /* (_encodeMode && inputFinished).
+ We add zero bytes as pad in current block after the end of read data. */
+ Byte *buf = _buf;
+ do
+ buf[readPos] = 0;
+ while (++readPos != f);
+ // (readPos) now is (size_of_real_input_data + size_of_zero_pad)
+ if (cur != Filter->Filter(buf + filterPos, cur))
+ return E_FAIL;
+ }
+ filterPos = f;
}
- if (pos == 0)
- return S_OK;
+ UInt32 size = filterPos;
+ if (hres == S_OK)
+ {
+ /* If we need more Read() or Filter() calls, then we need to Write()
+ some data and move unwritten data to get additional space in buffer.
+ We try to keep alignment for data moves, Read(), Filter() and Write() calls.
+ */
+ const UInt32 kAlignSize = 1 << 6;
+ const UInt32 alignedFiltered = filterPos & ~(kAlignSize - 1);
+ if (inputFinished)
+ {
+ if (!needMoreInput)
+ size = readPos; // for risc/bcj filters in last block we write data after filterPos.
+ else if (_encodeMode)
+ size = alignedFiltered; // for non-power2-block-encode-filter
+ }
+ else
+ size = alignedFiltered;
+ }
- UInt32 filtered = Filter->Filter(_buf, pos);
-
- if (filtered > pos)
{
- // AES
- if (!inputFinished || filtered > _bufSize)
- return E_FAIL;
+ UInt32 writeSize = size;
+ if (outSize)
+ {
+ const UInt64 rem = *outSize - nowPos64;
+ if (writeSize > rem)
+ writeSize = (UInt32)rem;
+ }
+ RINOK(WriteStream(outStream, _buf, writeSize))
+ nowPos64 += writeSize;
+ }
+
+ if (hres != S_OK)
+ return hres;
+
+ if (inputFinished)
+ {
+ if (readPos == size)
+ return hres;
if (!_encodeMode)
+ {
+ // block-decode-filter (AES-CBS) has non-full last block
+ // we don't want unaligned data move for more iterations with this error case.
return S_FALSE;
-
- Byte *buf = _buf;
- do
- buf[pos] = 0;
- while (++pos != filtered);
-
- if (filtered != Filter->Filter(buf, filtered))
- return E_FAIL;
+ }
}
- UInt32 size = (filtered != 0 ? filtered : pos);
- if (outSize)
+ if (size == 0)
{
- const UInt64 remSize = *outSize - nowPos64;
- if (size > remSize)
- size = (UInt32)remSize;
+ // it's unexpected that we have no any move in this iteration.
+ return E_FAIL;
}
-
- RINOK(WriteStream(outStream, _buf, size));
- nowPos64 += size;
-
- if (filtered == 0)
- return S_OK;
- pos -= filtered;
- for (UInt32 i = 0; i < pos; i++)
- _buf[i] = _buf[filtered++];
+ // if (size != 0)
+ {
+ if (filterPos < size)
+ return E_FAIL; // filterPos = 0; else
+ filterPos -= size;
+ readPos -= size;
+ if (readPos != 0)
+ memmove(_buf, _buf + size, readPos);
+ }
+ // printf("\nnowPos64=%x, readPos=%x, filterPos=%x\n", (unsigned)nowPos64, (unsigned)readPos, (unsigned)filterPos);
if (progress && (nowPos64 - prev) >= (1 << 22))
{
prev = nowPos64;
- RINOK(progress->SetRatioInfo(&nowPos64, &nowPos64));
+ RINOK(progress->SetRatioInfo(&nowPos64, &nowPos64))
}
}
@@ -154,13 +280,13 @@ STDMETHODIMP CFilterCoder::Code(ISequentialInStream *inStream, ISequentialOutStr
// ---------- Write to Filter ----------
-STDMETHODIMP CFilterCoder::SetOutStream(ISequentialOutStream *outStream)
+Z7_COM7F_IMF(CFilterCoder::SetOutStream(ISequentialOutStream *outStream))
{
_outStream = outStream;
return S_OK;
}
-STDMETHODIMP CFilterCoder::ReleaseOutStream()
+Z7_COM7F_IMF(CFilterCoder::ReleaseOutStream())
{
_outStream.Release();
return S_OK;
@@ -171,9 +297,9 @@ HRESULT CFilterCoder::Flush2()
while (_convSize != 0)
{
UInt32 num = _convSize;
- if (_outSizeIsDefined)
+ if (_outSize_Defined)
{
- UInt64 rem = _outSize - _nowPos64;
+ const UInt64 rem = _outSize - _nowPos64;
if (num > rem)
num = (UInt32)rem;
if (num == 0)
@@ -181,21 +307,23 @@ HRESULT CFilterCoder::Flush2()
}
UInt32 processed = 0;
- HRESULT res = _outStream->Write(_buf + _convPos, num, &processed);
+ const HRESULT res = _outStream->Write(_buf + _convPos, num, &processed);
if (processed == 0)
return res != S_OK ? res : E_FAIL;
_convPos += processed;
_convSize -= processed;
_nowPos64 += processed;
- RINOK(res);
+ RINOK(res)
}
- if (_convPos != 0)
+ const UInt32 convPos = _convPos;
+ if (convPos != 0)
{
- UInt32 num = _bufPos - _convPos;
+ const UInt32 num = _bufPos - convPos;
+ Byte *buf = _buf;
for (UInt32 i = 0; i < num; i++)
- _buf[i] = _buf[_convPos + i];
+ buf[i] = buf[convPos + i];
_bufPos = num;
_convPos = 0;
}
@@ -203,14 +331,14 @@ HRESULT CFilterCoder::Flush2()
return S_OK;
}
-STDMETHODIMP CFilterCoder::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CFilterCoder::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
while (size != 0)
{
- RINOK(Flush2());
+ RINOK(Flush2())
// _convSize is 0
// _convPos is 0
@@ -245,20 +373,22 @@ STDMETHODIMP CFilterCoder::Write(const void *data, UInt32 size, UInt32 *processe
return S_OK;
}
-STDMETHODIMP CFilterCoder::OutStreamFinish()
+Z7_COM7F_IMF(CFilterCoder::OutStreamFinish())
{
for (;;)
{
- RINOK(Flush2());
+ RINOK(Flush2())
if (_bufPos == 0)
break;
- _convSize = Filter->Filter(_buf, _bufPos);
- if (_convSize == 0)
- _convSize = _bufPos;
- else if (_convSize > _bufPos)
+ const UInt32 convSize = Filter->Filter(_buf, _bufPos);
+ _convSize = convSize;
+ UInt32 bufPos = _bufPos;
+ if (convSize == 0)
+ _convSize = bufPos;
+ else if (convSize > bufPos)
{
// AES
- if (_convSize > _bufSize)
+ if (convSize > _bufSize)
{
_convSize = 0;
return E_FAIL;
@@ -268,9 +398,11 @@ STDMETHODIMP CFilterCoder::OutStreamFinish()
_convSize = 0;
return S_FALSE;
}
- for (; _bufPos < _convSize; _bufPos++)
- _buf[_bufPos] = 0;
- _convSize = Filter->Filter(_buf, _bufPos);
+ Byte *buf = _buf;
+ for (; bufPos < convSize; bufPos++)
+ buf[bufPos] = 0;
+ _bufPos = bufPos;
+ _convSize = Filter->Filter(_buf, bufPos);
if (_convSize != _bufPos)
return E_FAIL;
}
@@ -285,7 +417,7 @@ STDMETHODIMP CFilterCoder::OutStreamFinish()
// ---------- Init functions ----------
-STDMETHODIMP CFilterCoder::InitEncoder()
+Z7_COM7F_IMF(CFilterCoder::InitEncoder())
{
InitSpecVars();
return Init_and_Alloc();
@@ -297,33 +429,33 @@ HRESULT CFilterCoder::Init_NoSubFilterInit()
return Alloc();
}
-STDMETHODIMP CFilterCoder::SetOutStreamSize(const UInt64 *outSize)
+Z7_COM7F_IMF(CFilterCoder::SetOutStreamSize(const UInt64 *outSize))
{
InitSpecVars();
if (outSize)
{
_outSize = *outSize;
- _outSizeIsDefined = true;
+ _outSize_Defined = true;
}
return Init_and_Alloc();
}
// ---------- Read from Filter ----------
-STDMETHODIMP CFilterCoder::SetInStream(ISequentialInStream *inStream)
+Z7_COM7F_IMF(CFilterCoder::SetInStream(ISequentialInStream *inStream))
{
_inStream = inStream;
return S_OK;
}
-STDMETHODIMP CFilterCoder::ReleaseInStream()
+Z7_COM7F_IMF(CFilterCoder::ReleaseInStream())
{
_inStream.Release();
return S_OK;
}
-STDMETHODIMP CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -334,9 +466,9 @@ STDMETHODIMP CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize)
{
if (size > _convSize)
size = _convSize;
- if (_outSizeIsDefined)
+ if (_outSize_Defined)
{
- UInt64 rem = _outSize - _nowPos64;
+ const UInt64 rem = _outSize - _nowPos64;
if (size > rem)
size = (UInt32)rem;
}
@@ -349,46 +481,51 @@ STDMETHODIMP CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize)
break;
}
- if (_convPos != 0)
+ const UInt32 convPos = _convPos;
+ if (convPos != 0)
{
- UInt32 num = _bufPos - _convPos;
+ const UInt32 num = _bufPos - convPos;
+ Byte *buf = _buf;
for (UInt32 i = 0; i < num; i++)
- _buf[i] = _buf[_convPos + i];
+ buf[i] = buf[convPos + i];
_bufPos = num;
_convPos = 0;
}
{
size_t readSize = _bufSize - _bufPos;
- HRESULT res = ReadStream(_inStream, _buf + _bufPos, &readSize);
+ const HRESULT res = ReadStream(_inStream, _buf + _bufPos, &readSize);
_bufPos += (UInt32)readSize;
- RINOK(res);
+ RINOK(res)
}
- _convSize = Filter->Filter(_buf, _bufPos);
+ const UInt32 convSize = Filter->Filter(_buf, _bufPos);
+ _convSize = convSize;
- if (_convSize == 0)
+ UInt32 bufPos = _bufPos;
+
+ if (convSize == 0)
{
- if (_bufPos == 0)
+ if (bufPos == 0)
break;
// BCJ
- _convSize = _bufPos;
+ _convSize = bufPos;
continue;
}
- if (_convSize > _bufPos)
+ if (convSize > bufPos)
{
// AES
- if (_convSize > _bufSize)
+ if (convSize > _bufSize)
return E_FAIL;
if (!_encodeMode)
return S_FALSE;
-
+ Byte *buf = _buf;
do
- _buf[_bufPos] = 0;
- while (++_bufPos != _convSize);
-
- _convSize = Filter->Filter(_buf, _convSize);
+ buf[bufPos] = 0;
+ while (++bufPos != convSize);
+ _bufPos = bufPos;
+ _convSize = Filter->Filter(_buf, convSize);
if (_convSize != _bufPos)
return E_FAIL;
}
@@ -398,39 +535,43 @@ STDMETHODIMP CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize)
}
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
-STDMETHODIMP CFilterCoder::CryptoSetPassword(const Byte *data, UInt32 size)
- { return _SetPassword->CryptoSetPassword(data, size); }
+Z7_COM7F_IMF(CFilterCoder::CryptoSetPassword(const Byte *data, UInt32 size))
+ { return _setPassword->CryptoSetPassword(data, size); }
-STDMETHODIMP CFilterCoder::SetKey(const Byte *data, UInt32 size)
- { return _CryptoProperties->SetKey(data, size); }
+Z7_COM7F_IMF(CFilterCoder::SetKey(const Byte *data, UInt32 size))
+ { return _cryptoProperties->SetKey(data, size); }
-STDMETHODIMP CFilterCoder::SetInitVector(const Byte *data, UInt32 size)
- { return _CryptoProperties->SetInitVector(data, size); }
+Z7_COM7F_IMF(CFilterCoder::SetInitVector(const Byte *data, UInt32 size))
+ { return _cryptoProperties->SetInitVector(data, size); }
#endif
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
+
+Z7_COM7F_IMF(CFilterCoder::SetCoderProperties(const PROPID *propIDs,
+ const PROPVARIANT *properties, UInt32 numProperties))
+ { return _setCoderProperties->SetCoderProperties(propIDs, properties, numProperties); }
-STDMETHODIMP CFilterCoder::SetCoderProperties(const PROPID *propIDs,
- const PROPVARIANT *properties, UInt32 numProperties)
- { return _SetCoderProperties->SetCoderProperties(propIDs, properties, numProperties); }
+Z7_COM7F_IMF(CFilterCoder::WriteCoderProperties(ISequentialOutStream *outStream))
+ { return _writeCoderProperties->WriteCoderProperties(outStream); }
-STDMETHODIMP CFilterCoder::WriteCoderProperties(ISequentialOutStream *outStream)
- { return _WriteCoderProperties->WriteCoderProperties(outStream); }
+Z7_COM7F_IMF(CFilterCoder::SetCoderPropertiesOpt(const PROPID *propIDs,
+ const PROPVARIANT *properties, UInt32 numProperties))
+ { return _setCoderPropertiesOpt->SetCoderPropertiesOpt(propIDs, properties, numProperties); }
/*
-STDMETHODIMP CFilterCoder::ResetSalt()
- { return _CryptoResetSalt->ResetSalt(); }
+Z7_COM7F_IMF(CFilterCoder::ResetSalt()
+ { return _cryptoResetSalt->ResetSalt(); }
*/
-STDMETHODIMP CFilterCoder::ResetInitVector()
- { return _CryptoResetInitVector->ResetInitVector(); }
+Z7_COM7F_IMF(CFilterCoder::ResetInitVector())
+ { return _cryptoResetInitVector->ResetInitVector(); }
#endif
-STDMETHODIMP CFilterCoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- { return _SetDecoderProperties2->SetDecoderProperties2(data, size); }
+Z7_COM7F_IMF(CFilterCoder::SetDecoderProperties2(const Byte *data, UInt32 size))
+ { return _setDecoderProperties2->SetDecoderProperties2(data, size); }
diff --git a/3rdparty/lzma/CPP/7zip/Common/FilterCoder.h b/3rdparty/lzma/CPP/7zip/Common/FilterCoder.h
index 6668fdb31f8..3a588fd5228 100644
--- a/3rdparty/lzma/CPP/7zip/Common/FilterCoder.h
+++ b/3rdparty/lzma/CPP/7zip/Common/FilterCoder.h
@@ -1,18 +1,18 @@
// FilterCoder.h
-#ifndef __FILTER_CODER_H
-#define __FILTER_CODER_H
+#ifndef ZIP7_INC_FILTER_CODER_H
+#define ZIP7_INC_FILTER_CODER_H
#include "../../../C/Alloc.h"
#include "../../Common/MyCom.h"
#include "../ICoder.h"
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
#include "../IPassword.h"
#endif
-#define MY_QUERYINTERFACE_ENTRY_AG(i, sub0, sub) else if (iid == IID_ ## i) \
+#define Z7_COM_QI_ENTRY_AG(i, sub0, sub) else if (iid == IID_ ## i) \
{ if (!sub) RINOK(sub0->QueryInterface(IID_ ## i, (void **)&sub)) \
*outObject = (void *)(i *)this; }
@@ -26,7 +26,8 @@ struct CAlignedMidBuffer
void AllocAligned(size_t size);
};
-class CFilterCoder:
+
+class CFilterCoder Z7_final :
public ICompressCoder,
public ICompressSetOutStreamSize,
@@ -41,14 +42,15 @@ class CFilterCoder:
public ICompressSetBufSize,
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
public ICryptoSetPassword,
public ICryptoProperties,
#endif
- #ifndef EXTRACT_ONLY
+ #ifndef Z7_EXTRACT_ONLY
public ICompressSetCoderProperties,
public ICompressWriteCoderProperties,
+ public ICompressSetCoderPropertiesOpt,
// public ICryptoResetSalt,
public ICryptoResetInitVector,
#endif
@@ -62,7 +64,7 @@ class CFilterCoder:
UInt32 _outBufSize;
bool _encodeMode;
- bool _outSizeIsDefined;
+ bool _outSize_Defined;
UInt64 _outSize;
UInt64 _nowPos64;
@@ -78,7 +80,7 @@ class CFilterCoder:
_convPos = 0;
_convSize = 0;
- _outSizeIsDefined = false;
+ _outSize_Defined = false;
_outSize = 0;
_nowPos64 = 0;
}
@@ -87,117 +89,111 @@ class CFilterCoder:
HRESULT Init_and_Alloc();
HRESULT Flush2();
- #ifndef _NO_CRYPTO
- CMyComPtr<ICryptoSetPassword> _SetPassword;
- CMyComPtr<ICryptoProperties> _CryptoProperties;
+ #ifndef Z7_NO_CRYPTO
+ CMyComPtr<ICryptoSetPassword> _setPassword;
+ CMyComPtr<ICryptoProperties> _cryptoProperties;
#endif
- #ifndef EXTRACT_ONLY
- CMyComPtr<ICompressSetCoderProperties> _SetCoderProperties;
- CMyComPtr<ICompressWriteCoderProperties> _WriteCoderProperties;
- // CMyComPtr<ICryptoResetSalt> _CryptoResetSalt;
- CMyComPtr<ICryptoResetInitVector> _CryptoResetInitVector;
+ #ifndef Z7_EXTRACT_ONLY
+ CMyComPtr<ICompressSetCoderProperties> _setCoderProperties;
+ CMyComPtr<ICompressWriteCoderProperties> _writeCoderProperties;
+ CMyComPtr<ICompressSetCoderPropertiesOpt> _setCoderPropertiesOpt;
+ // CMyComPtr<ICryptoResetSalt> _cryptoResetSalt;
+ CMyComPtr<ICryptoResetInitVector> _cryptoResetInitVector;
#endif
- CMyComPtr<ICompressSetDecoderProperties2> _SetDecoderProperties2;
+ CMyComPtr<ICompressSetDecoderProperties2> _setDecoderProperties2;
public:
CMyComPtr<ICompressFilter> Filter;
CFilterCoder(bool encodeMode);
- ~CFilterCoder();
- class C_InStream_Releaser
+ struct C_InStream_Releaser
{
- public:
CFilterCoder *FilterCoder;
C_InStream_Releaser(): FilterCoder(NULL) {}
~C_InStream_Releaser() { if (FilterCoder) FilterCoder->ReleaseInStream(); }
};
- class C_OutStream_Releaser
+ struct C_OutStream_Releaser
{
- public:
CFilterCoder *FilterCoder;
C_OutStream_Releaser(): FilterCoder(NULL) {}
~C_OutStream_Releaser() { if (FilterCoder) FilterCoder->ReleaseOutStream(); }
};
- class C_Filter_Releaser
+ struct C_Filter_Releaser
{
- public:
CFilterCoder *FilterCoder;
C_Filter_Releaser(): FilterCoder(NULL) {}
~C_Filter_Releaser() { if (FilterCoder) FilterCoder->Filter.Release(); }
};
+private:
+ Z7_COM_QI_BEGIN2(ICompressCoder)
- MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
-
- MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize)
- MY_QUERYINTERFACE_ENTRY(ICompressInitEncoder)
+ Z7_COM_QI_ENTRY(ICompressSetOutStreamSize)
+ Z7_COM_QI_ENTRY(ICompressInitEncoder)
- MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)
- MY_QUERYINTERFACE_ENTRY(ISequentialInStream)
+ Z7_COM_QI_ENTRY(ICompressSetInStream)
+ Z7_COM_QI_ENTRY(ISequentialInStream)
- MY_QUERYINTERFACE_ENTRY(ICompressSetOutStream)
- MY_QUERYINTERFACE_ENTRY(ISequentialOutStream)
- MY_QUERYINTERFACE_ENTRY(IOutStreamFinish)
+ Z7_COM_QI_ENTRY(ICompressSetOutStream)
+ Z7_COM_QI_ENTRY(ISequentialOutStream)
+ Z7_COM_QI_ENTRY(IOutStreamFinish)
- MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize)
+ Z7_COM_QI_ENTRY(ICompressSetBufSize)
- #ifndef _NO_CRYPTO
- MY_QUERYINTERFACE_ENTRY_AG(ICryptoSetPassword, Filter, _SetPassword)
- MY_QUERYINTERFACE_ENTRY_AG(ICryptoProperties, Filter, _CryptoProperties)
+ #ifndef Z7_NO_CRYPTO
+ Z7_COM_QI_ENTRY_AG(ICryptoSetPassword, Filter, _setPassword)
+ Z7_COM_QI_ENTRY_AG(ICryptoProperties, Filter, _cryptoProperties)
#endif
- #ifndef EXTRACT_ONLY
- MY_QUERYINTERFACE_ENTRY_AG(ICompressSetCoderProperties, Filter, _SetCoderProperties)
- MY_QUERYINTERFACE_ENTRY_AG(ICompressWriteCoderProperties, Filter, _WriteCoderProperties)
- // MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetSalt, Filter, _CryptoResetSalt)
- MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetInitVector, Filter, _CryptoResetInitVector)
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_COM_QI_ENTRY_AG(ICompressSetCoderProperties, Filter, _setCoderProperties)
+ Z7_COM_QI_ENTRY_AG(ICompressWriteCoderProperties, Filter, _writeCoderProperties)
+ Z7_COM_QI_ENTRY_AG(ICompressSetCoderPropertiesOpt, Filter, _setCoderPropertiesOpt)
+ // Z7_COM_QI_ENTRY_AG(ICryptoResetSalt, Filter, _cryptoResetSalt)
+ Z7_COM_QI_ENTRY_AG(ICryptoResetInitVector, Filter, _cryptoResetInitVector)
#endif
- MY_QUERYINTERFACE_ENTRY_AG(ICompressSetDecoderProperties2, Filter, _SetDecoderProperties2)
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
+ Z7_COM_QI_ENTRY_AG(ICompressSetDecoderProperties2, Filter, _setDecoderProperties2)
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
-
- STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
- STDMETHOD(InitEncoder)();
-
- STDMETHOD(SetInStream)(ISequentialInStream *inStream);
- STDMETHOD(ReleaseInStream)();
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-
- STDMETHOD(SetOutStream)(ISequentialOutStream *outStream);
- STDMETHOD(ReleaseOutStream)();
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(OutStreamFinish)();
+public:
+ Z7_IFACE_COM7_IMP(ICompressCoder)
+ Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+ Z7_IFACE_COM7_IMP(ICompressInitEncoder)
+ Z7_IFACE_COM7_IMP(ICompressSetInStream)
+private:
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+public:
+ Z7_IFACE_COM7_IMP(ICompressSetOutStream)
+private:
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
+public:
+ Z7_IFACE_COM7_IMP(IOutStreamFinish)
+private:
- STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
- STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
+ Z7_IFACE_COM7_IMP(ICompressSetBufSize)
- #ifndef _NO_CRYPTO
- STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size);
-
- STDMETHOD(SetKey)(const Byte *data, UInt32 size);
- STDMETHOD(SetInitVector)(const Byte *data, UInt32 size);
+ #ifndef Z7_NO_CRYPTO
+ Z7_IFACE_COM7_IMP(ICryptoSetPassword)
+ Z7_IFACE_COM7_IMP(ICryptoProperties)
#endif
- #ifndef EXTRACT_ONLY
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs,
- const PROPVARIANT *properties, UInt32 numProperties);
- STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
- // STDMETHOD(ResetSalt)();
- STDMETHOD(ResetInitVector)();
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_IFACE_COM7_IMP(ICompressSetCoderProperties)
+ Z7_IFACE_COM7_IMP(ICompressWriteCoderProperties)
+ Z7_IFACE_COM7_IMP(ICompressSetCoderPropertiesOpt)
+ // Z7_IFACE_COM7_IMP(ICryptoResetSalt)
+ Z7_IFACE_COM7_IMP(ICryptoResetInitVector)
#endif
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
-
+public:
+ Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2)
HRESULT Init_NoSubFilterInit();
};
diff --git a/3rdparty/lzma/CPP/7zip/Common/InBuffer.cpp b/3rdparty/lzma/CPP/7zip/Common/InBuffer.cpp
index fe6d1490257..b0f222c2621 100644
--- a/3rdparty/lzma/CPP/7zip/Common/InBuffer.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/InBuffer.cpp
@@ -7,10 +7,10 @@
#include "InBuffer.h"
CInBufferBase::CInBufferBase() throw():
- _buf(0),
- _bufLim(0),
- _bufBase(0),
- _stream(0),
+ _buf(NULL),
+ _bufLim(NULL),
+ _bufBase(NULL),
+ _stream(NULL),
_processedSize(0),
_bufSize(0),
_wasFinished(false),
@@ -22,18 +22,18 @@ bool CInBuffer::Create(size_t bufSize) throw()
const unsigned kMinBlockSize = 1;
if (bufSize < kMinBlockSize)
bufSize = kMinBlockSize;
- if (_bufBase != 0 && _bufSize == bufSize)
+ if (_bufBase != NULL && _bufSize == bufSize)
return true;
Free();
_bufSize = bufSize;
_bufBase = (Byte *)::MidAlloc(bufSize);
- return (_bufBase != 0);
+ return (_bufBase != NULL);
}
void CInBuffer::Free() throw()
{
::MidFree(_bufBase);
- _bufBase = 0;
+ _bufBase = NULL;
}
void CInBufferBase::Init() throw()
@@ -42,7 +42,7 @@ void CInBufferBase::Init() throw()
_buf = _bufBase;
_bufLim = _buf;
_wasFinished = false;
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
ErrorCode = S_OK;
#endif
NumExtraBytes = 0;
@@ -50,7 +50,7 @@ void CInBufferBase::Init() throw()
bool CInBufferBase::ReadBlock()
{
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
if (ErrorCode != S_OK)
return false;
#endif
@@ -61,8 +61,8 @@ bool CInBufferBase::ReadBlock()
_bufLim = _bufBase;
UInt32 processed;
// FIX_ME: we can improve it to support (_bufSize >= (1 << 32))
- HRESULT result = _stream->Read(_bufBase, (UInt32)_bufSize, &processed);
- #ifdef _NO_EXCEPTIONS
+ const HRESULT result = _stream->Read(_bufBase, (UInt32)_bufSize, &processed);
+ #ifdef Z7_NO_EXCEPTIONS
ErrorCode = result;
#else
if (result != S_OK)
diff --git a/3rdparty/lzma/CPP/7zip/Common/InBuffer.h b/3rdparty/lzma/CPP/7zip/Common/InBuffer.h
index fa063949f5a..3aaf797a589 100644
--- a/3rdparty/lzma/CPP/7zip/Common/InBuffer.h
+++ b/3rdparty/lzma/CPP/7zip/Common/InBuffer.h
@@ -1,12 +1,12 @@
// InBuffer.h
-#ifndef __IN_BUFFER_H
-#define __IN_BUFFER_H
+#ifndef ZIP7_INC_IN_BUFFER_H
+#define ZIP7_INC_IN_BUFFER_H
#include "../../Common/MyException.h"
#include "../IStream.h"
-#ifndef _NO_EXCEPTIONS
+#ifndef Z7_NO_EXCEPTIONS
struct CInBufferException: public CSystemException
{
CInBufferException(HRESULT errorCode): CSystemException(errorCode) {}
@@ -31,7 +31,7 @@ protected:
Byte ReadByte_FromNewBlock();
public:
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
HRESULT ErrorCode;
#endif
UInt32 NumExtraBytes;
@@ -60,7 +60,7 @@ public:
_buf = buf + pos;
_bufLim = buf + end;
_wasFinished = false;
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
ErrorCode = S_OK;
#endif
NumExtraBytes = 0;
@@ -68,7 +68,7 @@ public:
void Init() throw();
- MY_FORCE_INLINE
+ Z7_FORCE_INLINE
bool ReadByte(Byte &b)
{
if (_buf >= _bufLim)
@@ -77,7 +77,7 @@ public:
return true;
}
- MY_FORCE_INLINE
+ Z7_FORCE_INLINE
bool ReadByte_FromBuf(Byte &b)
{
if (_buf >= _bufLim)
@@ -86,7 +86,7 @@ public:
return true;
}
- MY_FORCE_INLINE
+ Z7_FORCE_INLINE
Byte ReadByte()
{
if (_buf >= _bufLim)
diff --git a/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.cpp b/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.cpp
index cae6b8037a7..3f7272ef820 100644
--- a/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.cpp
@@ -2,170 +2,236 @@
#include "StdAfx.h"
+#include "../../../C/Alloc.h"
+
#include "InOutTempBuffer.h"
+
#include "StreamUtils.h"
#ifdef USE_InOutTempBuffer_FILE
#include "../../../C/7zCrc.h"
-using namespace NWindows;
-using namespace NFile;
-using namespace NDir;
-
-static const size_t kTempBufSize = (1 << 20);
-
#define kTempFilePrefixString FTEXT("7zt")
-CInOutTempBuffer::~CInOutTempBuffer()
-{
- delete []_buf;
-}
+/*
+ Total buffer size limit, if we use temp file scheme:
+ 32-bit: 16 MiB = 1 MiB * 16 buffers
+ 64-bit: 4 GiB = 1 MiB * 4096 buffers
+*/
+static const size_t kNumBufsMax = (size_t)1 << (sizeof(size_t) * 2 - 4);
+
#endif
-CInOutTempBuffer::CInOutTempBuffer()
- #ifdef USE_InOutTempBuffer_FILE
- : _buf(NULL)
- #endif
-{ }
+static const size_t kBufSize = (size_t)1 << 20;
-void CInOutTempBuffer::Create()
-{
- #ifdef USE_InOutTempBuffer_FILE
- if (!_buf)
- _buf = new Byte[kTempBufSize];
- #endif
-}
-void CInOutTempBuffer::InitWriting()
+CInOutTempBuffer::CInOutTempBuffer():
+ _size(0),
+ _bufs(NULL),
+ _numBufs(0),
+ _numFilled(0)
{
- #ifdef USE_InOutTempBuffer_FILE
- _bufPos = 0;
+ #ifdef USE_InOutTempBuffer_FILE
+ _tempFile_Created = false;
+ _useMemOnly = false;
_crc = CRC_INIT_VAL;
- _tempFileCreated = false;
- #endif
- _size = 0;
+ #endif
}
+CInOutTempBuffer::~CInOutTempBuffer()
+{
+ for (size_t i = 0; i < _numBufs; i++)
+ MyFree(_bufs[i]);
+ MyFree(_bufs);
+}
-#ifdef USE_InOutTempBuffer_FILE
-static inline HRESULT Get_HRESULT_LastError()
+void *CInOutTempBuffer::GetBuf(size_t index)
{
- #ifdef _WIN32
- DWORD lastError = ::GetLastError();
- if (lastError != 0)
- return HRESULT_FROM_WIN32(lastError);
- #endif
- return E_FAIL;
+ if (index >= _numBufs)
+ {
+ const size_t num = (_numBufs == 0 ? 16 : _numBufs * 2);
+ void **p = (void **)MyRealloc(_bufs, num * sizeof(void *));
+ if (!p)
+ return NULL;
+ _bufs = p;
+ memset(p + _numBufs, 0, (num - _numBufs) * sizeof(void *));
+ _numBufs = num;
+ }
+
+ void *buf = _bufs[index];
+ if (!buf)
+ {
+ buf = MyAlloc(kBufSize);
+ if (buf)
+ _bufs[index] = buf;
+ }
+ return buf;
}
-#endif
-
HRESULT CInOutTempBuffer::Write_HRESULT(const void *data, UInt32 size)
{
- #ifdef USE_InOutTempBuffer_FILE
-
if (size == 0)
return S_OK;
- size_t cur = kTempBufSize - _bufPos;
- if (cur != 0)
+
+ #ifdef USE_InOutTempBuffer_FILE
+ if (!_tempFile_Created)
+ #endif
+ for (;;) // loop for additional attemp to allocate memory after file creation error
{
- if (cur > size)
- cur = size;
- memcpy(_buf + _bufPos, data, cur);
- _crc = CrcUpdate(_crc, data, cur);
- _bufPos += cur;
- _size += cur;
- size -= (UInt32)cur;
- data = ((const Byte *)data) + cur;
- }
-
- if (size == 0)
- return S_OK;
+ #ifdef USE_InOutTempBuffer_FILE
+ bool allocError = false;
+ #endif
+
+ for (;;) // loop for writing to buffers
+ {
+ const size_t index = (size_t)(_size / kBufSize);
+
+ #ifdef USE_InOutTempBuffer_FILE
+ if (index >= kNumBufsMax && !_useMemOnly)
+ break;
+ #endif
+
+ void *buf = GetBuf(index);
+ if (!buf)
+ {
+ #ifdef USE_InOutTempBuffer_FILE
+ if (!_useMemOnly)
+ {
+ allocError = true;
+ break;
+ }
+ #endif
+ return E_OUTOFMEMORY;
+ }
+
+ const size_t offset = (size_t)(_size) & (kBufSize - 1);
+ size_t cur = kBufSize - offset;
+ if (cur > size)
+ cur = size;
+ memcpy((Byte *)buf + offset, data, cur);
+ _size += cur;
+ if (index >= _numFilled)
+ _numFilled = index + 1;
+ data = (const void *)((const Byte *)data + cur);
+ size -= (UInt32)cur;
+ if (size == 0)
+ return S_OK;
+ }
- if (!_tempFileCreated)
- {
- if (!_tempFile.CreateRandomInTempFolder(kTempFilePrefixString, &_outFile))
- return Get_HRESULT_LastError();
- _tempFileCreated = true;
+ #ifdef USE_InOutTempBuffer_FILE
+ #ifndef _WIN32
+ _outFile.mode_for_Create = 0600; // only owner will have the rights to access this file
+ #endif
+ if (_tempFile.CreateRandomInTempFolder(kTempFilePrefixString, &_outFile))
+ {
+ _tempFile_Created = true;
+ break;
+ }
+ _useMemOnly = true;
+ if (allocError)
+ return GetLastError_noZero_HRESULT();
+ #endif
}
- UInt32 processed;
- if (!_outFile.Write(data, size, processed))
- return Get_HRESULT_LastError();
- _crc = CrcUpdate(_crc, data, processed);
- _size += processed;
- return (processed == size) ? S_OK : E_FAIL;
-
- #else
-
- const size_t newSize = _size + size;
- if (newSize < _size)
- return E_OUTOFMEMORY;
- if (!_dynBuffer.EnsureCapacity(newSize))
- return E_OUTOFMEMORY;
- memcpy(((Byte *)_dynBuffer) + _size, data, size);
- _size = newSize;
- return S_OK;
- #endif
+ #ifdef USE_InOutTempBuffer_FILE
+ if (!_outFile.WriteFull(data, size))
+ return GetLastError_noZero_HRESULT();
+ _crc = CrcUpdate(_crc, data, size);
+ _size += size;
+ return S_OK;
+ #endif
}
HRESULT CInOutTempBuffer::WriteToStream(ISequentialOutStream *stream)
{
- #ifdef USE_InOutTempBuffer_FILE
-
- if (!_outFile.Close())
- return E_FAIL;
+ UInt64 rem = _size;
+ // if (rem == 0) return S_OK;
- UInt64 size = 0;
- UInt32 crc = CRC_INIT_VAL;
+ const size_t numFilled = _numFilled;
+ _numFilled = 0;
- if (_bufPos != 0)
- {
- RINOK(WriteStream(stream, _buf, _bufPos));
- crc = CrcUpdate(crc, _buf, _bufPos);
- size += _bufPos;
- }
-
- if (_tempFileCreated)
+ for (size_t i = 0; i < numFilled; i++)
{
- NIO::CInFile inFile;
- if (!inFile.Open(_tempFile.GetPath()))
+ if (rem == 0)
return E_FAIL;
- while (size < _size)
+ size_t cur = kBufSize;
+ if (cur > rem)
+ cur = (size_t)rem;
+ RINOK(WriteStream(stream, _bufs[i], cur))
+ rem -= cur;
+ #ifdef USE_InOutTempBuffer_FILE
+ // we will use _bufs[0] later for writing from temp file
+ if (i != 0 || !_tempFile_Created)
+ #endif
{
- UInt32 processed;
- if (!inFile.ReadPart(_buf, kTempBufSize, processed))
- return E_FAIL;
- if (processed == 0)
- break;
- RINOK(WriteStream(stream, _buf, processed));
- crc = CrcUpdate(crc, _buf, processed);
- size += processed;
+ MyFree(_bufs[i]);
+ _bufs[i] = NULL;
}
}
- return (_crc == crc && size == _size) ? S_OK : E_FAIL;
- #else
- return WriteStream(stream, (const Byte *)_dynBuffer, _size);
+ #ifdef USE_InOutTempBuffer_FILE
- #endif
-}
+ if (rem == 0)
+ return _tempFile_Created ? E_FAIL : S_OK;
-/*
-STDMETHODIMP CSequentialOutTempBufferImp::Write(const void *data, UInt32 size, UInt32 *processed)
-{
- if (!_buf->Write(data, size))
- {
- if (processed)
- *processed = 0;
+ if (!_tempFile_Created)
return E_FAIL;
+
+ if (!_outFile.Close())
+ return GetLastError_noZero_HRESULT();
+
+ HRESULT hres;
+ void *buf = GetBuf(0); // index
+ if (!buf)
+ hres = E_OUTOFMEMORY;
+ else
+ {
+ NWindows::NFile::NIO::CInFile inFile;
+ if (!inFile.Open(_tempFile.GetPath()))
+ hres = GetLastError_noZero_HRESULT();
+ else
+ {
+ UInt32 crc = CRC_INIT_VAL;
+ for (;;)
+ {
+ size_t processed;
+ if (!inFile.ReadFull(buf, kBufSize, processed))
+ {
+ hres = GetLastError_noZero_HRESULT();
+ break;
+ }
+ if (processed == 0)
+ {
+ // we compare crc without CRC_GET_DIGEST
+ hres = (_crc == crc ? S_OK : E_FAIL);
+ break;
+ }
+ size_t n = processed;
+ if (n > rem)
+ n = (size_t)rem;
+ hres = WriteStream(stream, buf, n);
+ if (hres != S_OK)
+ break;
+ crc = CrcUpdate(crc, buf, n);
+ rem -= n;
+ if (n != processed)
+ {
+ hres = E_FAIL;
+ break;
+ }
+ }
+ }
}
- if (processed)
- *processed = size;
- return S_OK;
+
+ // _tempFile.DisableDeleting(); // for debug
+ _tempFile.Remove();
+ RINOK(hres)
+
+ #endif
+
+ return rem == 0 ? S_OK : E_FAIL;
}
-*/
diff --git a/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.h b/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.h
index 755935eadb0..345c3863c40 100644
--- a/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.h
+++ b/3rdparty/lzma/CPP/7zip/Common/InOutTempBuffer.h
@@ -1,66 +1,45 @@
// InOutTempBuffer.h
-#ifndef __IN_OUT_TEMP_BUFFER_H
-#define __IN_OUT_TEMP_BUFFER_H
+#ifndef ZIP7_INC_IN_OUT_TEMP_BUFFER_H
+#define ZIP7_INC_IN_OUT_TEMP_BUFFER_H
-#ifdef _WIN32
-// #define USE_InOutTempBuffer_FILE
-#endif
+// #ifdef _WIN32
+#define USE_InOutTempBuffer_FILE
+// #endif
#ifdef USE_InOutTempBuffer_FILE
#include "../../Windows/FileDir.h"
-#else
-#include "StreamObjects.h"
#endif
#include "../IStream.h"
class CInOutTempBuffer
{
- #ifdef USE_InOutTempBuffer_FILE
+ UInt64 _size;
+ void **_bufs;
+ size_t _numBufs;
+ size_t _numFilled;
+
+ #ifdef USE_InOutTempBuffer_FILE
+ bool _tempFile_Created;
+ bool _useMemOnly;
+ UInt32 _crc;
+ // COutFile object must be declared after CTempFile object for correct destructor order
NWindows::NFile::NDir::CTempFile _tempFile;
NWindows::NFile::NIO::COutFile _outFile;
- bool _tempFileCreated;
- Byte *_buf;
- size_t _bufPos;
- UInt64 _size;
- UInt32 _crc;
- #else
-
- CByteDynBuffer _dynBuffer;
- size_t _size;
-
- #endif
+ #endif
- CLASS_NO_COPY(CInOutTempBuffer);
+ void *GetBuf(size_t index);
+
+ Z7_CLASS_NO_COPY(CInOutTempBuffer)
public:
CInOutTempBuffer();
- void Create();
-
- #ifdef USE_InOutTempBuffer_FILE
~CInOutTempBuffer();
- #endif
-
- void InitWriting();
HRESULT Write_HRESULT(const void *data, UInt32 size);
HRESULT WriteToStream(ISequentialOutStream *stream);
UInt64 GetDataSize() const { return _size; }
};
-/*
-class CSequentialOutTempBufferImp:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
- CInOutTempBuffer *_buf;
-public:
- void Init(CInOutTempBuffer *buffer) { _buf = buffer; }
- MY_UNKNOWN_IMP
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
-};
-*/
-
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.cpp b/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.cpp
index 980c795d20f..664cd0c4b5c 100644
--- a/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.cpp
@@ -6,7 +6,7 @@
#include "LimitedStreams.h"
-STDMETHODIMP CLimitedSequentialInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CLimitedSequentialInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessedSize = 0;
{
@@ -27,7 +27,7 @@ STDMETHODIMP CLimitedSequentialInStream::Read(void *data, UInt32 size, UInt32 *p
return result;
}
-STDMETHODIMP CLimitedInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CLimitedInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -46,7 +46,7 @@ STDMETHODIMP CLimitedInStream::Read(void *data, UInt32 size, UInt32 *processedSi
if (newPos != _physPos)
{
_physPos = newPos;
- RINOK(SeekToPhys());
+ RINOK(SeekToPhys())
}
HRESULT res = _stream->Read(data, size, &size);
if (processedSize)
@@ -56,7 +56,7 @@ STDMETHODIMP CLimitedInStream::Read(void *data, UInt32 size, UInt32 *processedSi
return res;
}
-STDMETHODIMP CLimitedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CLimitedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -75,17 +75,17 @@ STDMETHODIMP CLimitedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *new
HRESULT CreateLimitedInStream(IInStream *inStream, UInt64 pos, UInt64 size, ISequentialInStream **resStream)
{
- *resStream = 0;
+ *resStream = NULL;
CLimitedInStream *streamSpec = new CLimitedInStream;
CMyComPtr<ISequentialInStream> streamTemp = streamSpec;
streamSpec->SetStream(inStream);
- RINOK(streamSpec->InitAndSeek(pos, size));
+ RINOK(streamSpec->InitAndSeek(pos, size))
streamSpec->SeekToStart();
*resStream = streamTemp.Detach();
return S_OK;
}
-STDMETHODIMP CClusterInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CClusterInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -110,7 +110,7 @@ STDMETHODIMP CClusterInStream::Read(void *data, UInt32 size, UInt32 *processedSi
if (newPos != _physPos)
{
_physPos = newPos;
- RINOK(SeekToPhys());
+ RINOK(SeekToPhys())
}
_curRem = blockSize - offsetInBlock;
@@ -130,7 +130,7 @@ STDMETHODIMP CClusterInStream::Read(void *data, UInt32 size, UInt32 *processedSi
return res;
}
-STDMETHODIMP CClusterInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CClusterInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -150,7 +150,7 @@ STDMETHODIMP CClusterInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *new
}
-STDMETHODIMP CExtentsStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CExtentsStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -201,7 +201,7 @@ STDMETHODIMP CExtentsStream::Read(void *data, UInt32 size, UInt32 *processedSize
if (_phyPos != phy)
{
_phyPos = (UInt64)0 - 1; // we don't trust seek_pos in case of error
- RINOK(Stream->Seek((Int64)phy, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekSet(Stream, phy))
_phyPos = phy;
}
}
@@ -218,7 +218,7 @@ STDMETHODIMP CExtentsStream::Read(void *data, UInt32 size, UInt32 *processedSize
}
-STDMETHODIMP CExtentsStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CExtentsStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -236,7 +236,7 @@ STDMETHODIMP CExtentsStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPo
}
-STDMETHODIMP CLimitedSequentialOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CLimitedSequentialOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
HRESULT result = S_OK;
if (processedSize)
@@ -263,7 +263,7 @@ STDMETHODIMP CLimitedSequentialOutStream::Write(const void *data, UInt32 size, U
}
-STDMETHODIMP CTailInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CTailInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 cur;
HRESULT res = Stream->Read(data, size, &cur);
@@ -273,7 +273,7 @@ STDMETHODIMP CTailInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
return res;
}
-STDMETHODIMP CTailInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CTailInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -282,7 +282,7 @@ STDMETHODIMP CTailInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPos
case STREAM_SEEK_END:
{
UInt64 pos = 0;
- RINOK(Stream->Seek(offset, STREAM_SEEK_END, &pos));
+ RINOK(Stream->Seek(offset, STREAM_SEEK_END, &pos))
if (pos < Offset)
return HRESULT_WIN32_ERROR_NEGATIVE_SEEK;
_virtPos = pos - Offset;
@@ -297,10 +297,10 @@ STDMETHODIMP CTailInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPos
_virtPos = (UInt64)offset;
if (newPosition)
*newPosition = _virtPos;
- return Stream->Seek((Int64)(Offset + _virtPos), STREAM_SEEK_SET, NULL);
+ return InStream_SeekSet(Stream, Offset + _virtPos);
}
-STDMETHODIMP CLimitedCachedInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CLimitedCachedInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -329,7 +329,7 @@ STDMETHODIMP CLimitedCachedInStream::Read(void *data, UInt32 size, UInt32 *proce
if (newPos != _physPos)
{
_physPos = newPos;
- RINOK(SeekToPhys());
+ RINOK(SeekToPhys())
}
res = _stream->Read(data, size, &size);
_physPos += size;
@@ -340,7 +340,7 @@ STDMETHODIMP CLimitedCachedInStream::Read(void *data, UInt32 size, UInt32 *proce
return res;
}
-STDMETHODIMP CLimitedCachedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CLimitedCachedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -357,7 +357,7 @@ STDMETHODIMP CLimitedCachedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt6
return S_OK;
}
-STDMETHODIMP CTailOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CTailOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 cur;
HRESULT res = Stream->Write(data, size, &cur);
@@ -369,7 +369,7 @@ STDMETHODIMP CTailOutStream::Write(const void *data, UInt32 size, UInt32 *proces
return res;
}
-STDMETHODIMP CTailOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CTailOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -386,7 +386,7 @@ STDMETHODIMP CTailOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPo
return Stream->Seek((Int64)(Offset + _virtPos), STREAM_SEEK_SET, NULL);
}
-STDMETHODIMP CTailOutStream::SetSize(UInt64 newSize)
+Z7_COM7F_IMF(CTailOutStream::SetSize(UInt64 newSize))
{
_virtSize = newSize;
return Stream->SetSize(Offset + newSize);
diff --git a/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h b/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h
index 50c7cd853b5..69fcdcdb0e5 100644
--- a/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h
+++ b/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h
@@ -1,17 +1,19 @@
// LimitedStreams.h
-#ifndef __LIMITED_STREAMS_H
-#define __LIMITED_STREAMS_H
+#ifndef ZIP7_INC_LIMITED_STREAMS_H
+#define ZIP7_INC_LIMITED_STREAMS_H
#include "../../Common/MyBuffer.h"
#include "../../Common/MyCom.h"
#include "../../Common/MyVector.h"
#include "../IStream.h"
-class CLimitedSequentialInStream:
- public ISequentialInStream,
- public CMyUnknownImp
-{
+#include "StreamUtils.h"
+
+Z7_CLASS_IMP_COM_1(
+ CLimitedSequentialInStream
+ , ISequentialInStream
+)
CMyComPtr<ISequentialInStream> _stream;
UInt64 _size;
UInt64 _pos;
@@ -25,26 +27,22 @@ public:
_pos = 0;
_wasFinished = false;
}
-
- MY_UNKNOWN_IMP1(ISequentialInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
UInt64 GetSize() const { return _pos; }
UInt64 GetRem() const { return _size - _pos; }
bool WasFinished() const { return _wasFinished; }
};
-class CLimitedInStream:
- public IInStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_IInStream(
+ CLimitedInStream
+)
CMyComPtr<IInStream> _stream;
UInt64 _virtPos;
UInt64 _physPos;
UInt64 _size;
UInt64 _startOffset;
- HRESULT SeekToPhys() { return _stream->Seek((Int64)_physPos, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToPhys() { return InStream_SeekSet(_stream, _physPos); }
public:
void SetStream(IInStream *stream) { _stream = stream; }
HRESULT InitAndSeek(UInt64 startOffset, UInt64 size)
@@ -55,21 +53,15 @@ public:
_size = size;
return SeekToPhys();
}
-
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
HRESULT SeekToStart() { return Seek(0, STREAM_SEEK_SET, NULL); }
};
HRESULT CreateLimitedInStream(IInStream *inStream, UInt64 pos, UInt64 size, ISequentialInStream **resStream);
-class CClusterInStream:
- public IInStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_IInStream(
+ CClusterInStream
+)
UInt64 _virtPos;
UInt64 _physPos;
UInt32 _curRem;
@@ -80,7 +72,7 @@ public:
CRecordVector<UInt32> Vector;
UInt64 StartOffset;
- HRESULT SeekToPhys() { return Stream->Seek((Int64)_physPos, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToPhys() { return InStream_SeekSet(Stream, _physPos); }
HRESULT InitAndSeek()
{
@@ -94,11 +86,6 @@ public:
}
return S_OK;
}
-
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
};
@@ -114,23 +101,18 @@ struct CSeekExtent
bool Is_ZeroFill() const { return Phy == k_SeekExtent_Phy_Type_ZeroFill; }
};
-class CExtentsStream:
- public IInStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_IInStream(
+ CExtentsStream
+)
UInt64 _virtPos;
UInt64 _phyPos;
unsigned _prevExtentIndex;
-
public:
CMyComPtr<IInStream> Stream;
CRecordVector<CSeekExtent> Extents;
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
void ReleaseStream() { Stream.Release(); }
-
void Init()
{
_virtPos = 0;
@@ -141,17 +123,15 @@ public:
-class CLimitedSequentialOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CLimitedSequentialOutStream
+ , ISequentialOutStream
+)
CMyComPtr<ISequentialOutStream> _stream;
UInt64 _size;
bool _overflow;
bool _overflowIsAllowed;
public:
- MY_UNKNOWN_IMP1(ISequentialOutStream)
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
void SetStream(ISequentialOutStream *stream) { _stream = stream; }
void ReleaseStream() { _stream.Release(); }
void Init(UInt64 size, bool overflowIsAllowed = false)
@@ -165,10 +145,9 @@ public:
};
-class CTailInStream:
- public IInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_IInStream(
+ CTailInStream
+)
UInt64 _virtPos;
public:
CMyComPtr<IInStream> Stream;
@@ -178,19 +157,13 @@ public:
{
_virtPos = 0;
}
-
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
- HRESULT SeekToStart() { return Stream->Seek((Int64)Offset, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToStart() { return InStream_SeekSet(Stream, Offset); }
};
-class CLimitedCachedInStream:
- public IInStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_IInStream(
+ CLimitedCachedInStream
+)
CMyComPtr<IInStream> _stream;
UInt64 _virtPos;
UInt64 _physPos;
@@ -201,8 +174,7 @@ class CLimitedCachedInStream:
size_t _cacheSize;
size_t _cachePhyPos;
-
- HRESULT SeekToPhys() { return _stream->Seek((Int64)_physPos, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToPhys() { return InStream_SeekSet(_stream, _physPos); }
public:
CByteBuffer Buffer;
@@ -223,37 +195,27 @@ public:
return SeekToPhys();
}
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
HRESULT SeekToStart() { return Seek(0, STREAM_SEEK_SET, NULL); }
};
-class CTailOutStream:
+
+class CTailOutStream Z7_final :
public IOutStream,
public CMyUnknownImp
{
+ Z7_IFACES_IMP_UNK_2(ISequentialOutStream, IOutStream)
+
UInt64 _virtPos;
UInt64 _virtSize;
public:
CMyComPtr<IOutStream> Stream;
UInt64 Offset;
- virtual ~CTailOutStream() {}
-
- MY_UNKNOWN_IMP2(ISequentialOutStream, IOutStream)
-
void Init()
{
_virtPos = 0;
_virtSize = 0;
}
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
- STDMETHOD(SetSize)(UInt64 newSize);
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/LockedStream.h b/3rdparty/lzma/CPP/7zip/Common/LockedStream.h
index efebf197553..99ee8055c6e 100644
--- a/3rdparty/lzma/CPP/7zip/Common/LockedStream.h
+++ b/3rdparty/lzma/CPP/7zip/Common/LockedStream.h
@@ -1,6 +1,6 @@
// LockedStream.h
-#ifndef __LOCKED_STREAM_H
-#define __LOCKED_STREAM_H
+#ifndef ZIP7_INC_LOCKED_STREAM_H
+#define ZIP7_INC_LOCKED_STREAM_H
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/MethodId.h b/3rdparty/lzma/CPP/7zip/Common/MethodId.h
index 28b615fcd3e..19b1f10d5fa 100644
--- a/3rdparty/lzma/CPP/7zip/Common/MethodId.h
+++ b/3rdparty/lzma/CPP/7zip/Common/MethodId.h
@@ -1,7 +1,7 @@
// MethodId.h
-#ifndef __7Z_METHOD_ID_H
-#define __7Z_METHOD_ID_H
+#ifndef ZIP7_INC_7Z_METHOD_ID_H
+#define ZIP7_INC_7Z_METHOD_ID_H
#include "../../Common/MyTypes.h"
diff --git a/3rdparty/lzma/CPP/7zip/Common/MethodProps.cpp b/3rdparty/lzma/CPP/7zip/Common/MethodProps.cpp
index 0e8ff1c61ca..fe60f610064 100644
--- a/3rdparty/lzma/CPP/7zip/Common/MethodProps.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/MethodProps.cpp
@@ -379,14 +379,14 @@ struct CNameToPropID
// the following are related to NCoderPropID::EEnum values
-
+// NCoderPropID::k_NUM_DEFINED
static const CNameToPropID g_NameToPropID[] =
{
{ VT_UI4, "" },
{ VT_UI4, "d" },
{ VT_UI4, "mem" },
{ VT_UI4, "o" },
- { VT_UI4, "c" },
+ { VT_UI8, "c" },
{ VT_UI4, "pb" },
{ VT_UI4, "lc" },
{ VT_UI4, "lp" },
@@ -400,15 +400,57 @@ static const CNameToPropID g_NameToPropID[] =
{ VT_UI4, "x" },
{ VT_UI8, "reduce" },
{ VT_UI8, "expect" },
- { VT_UI4, "b" },
+ { VT_UI8, "cc" }, // "cc" in v23, "b" in v22.01
{ VT_UI4, "check" },
{ VT_BSTR, "filter" },
- { VT_UI8, "memuse" }
+ { VT_UI8, "memuse" },
+ { VT_UI8, "aff" },
+ { VT_UI4, "offset" },
+ { VT_UI4, "zhb" }
+ /*
+ ,
+ // { VT_UI4, "zhc" },
+ // { VT_UI4, "zhd" },
+ // { VT_UI4, "zcb" },
+ { VT_UI4, "dc" },
+ { VT_UI4, "zx" },
+ { VT_UI4, "zf" },
+ { VT_UI4, "zmml" },
+ { VT_UI4, "zov" },
+ { VT_BOOL, "zmfr" },
+ { VT_BOOL, "zle" }, // long enable
+ // { VT_UI4, "zldb" },
+ { VT_UI4, "zld" },
+ { VT_UI4, "zlhb" },
+ { VT_UI4, "zlmml" },
+ { VT_UI4, "zlbb" },
+ { VT_UI4, "zlhrb" },
+ { VT_BOOL, "zwus" },
+ { VT_BOOL, "zshp" },
+ { VT_BOOL, "zshs" },
+ { VT_BOOL, "zshe" },
+ { VT_BOOL, "zshg" },
+ { VT_UI4, "zpsm" }
+ */
+ // { VT_UI4, "mcb" }, // mc log version
+ // { VT_UI4, "ztlen" }, // fb ?
};
+/*
+#if defined(static_assert) || (defined(__cplusplus) && __cplusplus >= 200410L) || (defined(_MSC_VER) && _MSC_VER >= 1600)
+
+#if (defined(__cplusplus) && __cplusplus < 201103L) \
+ && defined(__clang__) && __clang_major__ >= 4
+#pragma GCC diagnostic ignored "-Wc11-extensions"
+#endif
+ static_assert(Z7_ARRAY_SIZE(g_NameToPropID) == NCoderPropID::k_NUM_DEFINED,
+ "g_NameToPropID doesn't match NCoderPropID enum");
+#endif
+*/
+
static int FindPropIdExact(const UString &name)
{
- for (unsigned i = 0; i < ARRAY_SIZE(g_NameToPropID); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_NameToPropID); i++)
if (StringsAreEqualNoCase_Ascii(name, g_NameToPropID[i].Name))
return (int)i;
return -1;
@@ -493,6 +535,10 @@ static bool IsLogSizeProp(PROPID propid)
case NCoderPropID::kUsedMemorySize:
case NCoderPropID::kBlockSize:
case NCoderPropID::kBlockSize2:
+ /*
+ case NCoderPropID::kChainSize:
+ case NCoderPropID::kLdmWindowSize:
+ */
// case NCoderPropID::kReduceSize:
return true;
}
@@ -503,14 +549,19 @@ HRESULT CMethodProps::SetParam(const UString &name, const UString &value)
{
int index = FindPropIdExact(name);
if (index < 0)
- return E_INVALIDARG;
+ {
+ // 'b' was used as NCoderPropID::kBlockSize2 before v23
+ if (!name.IsEqualTo_Ascii_NoCase("b") || value.Find(L':') >= 0)
+ return E_INVALIDARG;
+ index = NCoderPropID::kBlockSize2;
+ }
const CNameToPropID &nameToPropID = g_NameToPropID[(unsigned)index];
CProp prop;
prop.Id = (unsigned)index;
if (IsLogSizeProp(prop.Id))
{
- RINOK(StringToDictSize(value, prop.Value));
+ RINOK(StringToDictSize(value, prop.Value))
}
else
{
@@ -561,7 +612,7 @@ HRESULT CMethodProps::ParseParamsFromString(const UString &srcString)
const UString &param = params[i];
UString name, value;
SplitParam(param, name, value);
- RINOK(SetParam(name, value));
+ RINOK(SetParam(name, value))
}
return S_OK;
}
@@ -582,7 +633,7 @@ HRESULT CMethodProps::ParseParamsFromPROPVARIANT(const UString &realName, const
}
// {realName}=value
- int index = FindPropIdExact(realName);
+ const int index = FindPropIdExact(realName);
if (index < 0)
return E_INVALIDARG;
const CNameToPropID &nameToPropID = g_NameToPropID[(unsigned)index];
@@ -591,7 +642,7 @@ HRESULT CMethodProps::ParseParamsFromPROPVARIANT(const UString &realName, const
if (IsLogSizeProp(prop.Id))
{
- RINOK(PROPVARIANT_to_DictSize(value, prop.Value));
+ RINOK(PROPVARIANT_to_DictSize(value, prop.Value))
}
else
{
diff --git a/3rdparty/lzma/CPP/7zip/Common/MethodProps.h b/3rdparty/lzma/CPP/7zip/Common/MethodProps.h
index 5b5c96a457f..3c332d6af48 100644
--- a/3rdparty/lzma/CPP/7zip/Common/MethodProps.h
+++ b/3rdparty/lzma/CPP/7zip/Common/MethodProps.h
@@ -1,7 +1,7 @@
// MethodProps.h
-#ifndef __7Z_METHOD_PROPS_H
-#define __7Z_METHOD_PROPS_H
+#ifndef ZIP7_INC_7Z_METHOD_PROPS_H
+#define ZIP7_INC_7Z_METHOD_PROPS_H
#include "../../Common/MyString.h"
#include "../../Common/Defs.h"
diff --git a/3rdparty/lzma/CPP/7zip/Common/MultiOutStream.cpp b/3rdparty/lzma/CPP/7zip/Common/MultiOutStream.cpp
new file mode 100644
index 00000000000..8efb977fdba
--- /dev/null
+++ b/3rdparty/lzma/CPP/7zip/Common/MultiOutStream.cpp
@@ -0,0 +1,849 @@
+// MultiOutStream.cpp
+
+#include "StdAfx.h"
+
+// #define DEBUG_VOLUMES
+
+#ifdef DEBUG_VOLUMES
+#include <stdio.h>
+ #define PRF(x) x;
+#else
+ #define PRF(x)
+#endif
+
+#include "../../Common/ComTry.h"
+
+#include "../../Windows/FileDir.h"
+#include "../../Windows/FileFind.h"
+#include "../../Windows/System.h"
+
+#include "MultiOutStream.h"
+
+using namespace NWindows;
+using namespace NFile;
+using namespace NDir;
+
+static const unsigned k_NumVols_MAX = k_VectorSizeMax - 1;
+ // 2; // for debug
+
+/*
+#define UPDATE_HRES(hres, x) \
+ { const HRESULT res2 = (x); if (hres == SZ_OK) hres = res2; }
+*/
+
+HRESULT CMultiOutStream::Destruct()
+{
+ COM_TRY_BEGIN
+ HRESULT hres = S_OK;
+ HRESULT hres3 = S_OK;
+
+ while (!Streams.IsEmpty())
+ {
+ try
+ {
+ HRESULT hres2;
+ if (NeedDelete)
+ {
+ /* we could call OptReOpen_and_SetSize() to test that we try to delete correct file,
+ but we cannot guarantee that (RealSize) will be correct after Write() or another failures.
+ And we still want to delete files even for such cases.
+ So we don't check for OptReOpen_and_SetSize() here: */
+ // if (OptReOpen_and_SetSize(Streams.Size() - 1, 0) == S_OK)
+ hres2 = CloseStream_and_DeleteFile(Streams.Size() - 1);
+ }
+ else
+ {
+ hres2 = CloseStream(Streams.Size() - 1);
+ }
+ if (hres == S_OK)
+ hres = hres2;
+ }
+ catch(...)
+ {
+ hres3 = E_OUTOFMEMORY;
+ }
+
+ {
+ /* Stream was released in CloseStream_*() above already, and it was removed from linked list
+ it's some unexpected case, if Stream is still attached here.
+ So the following code is optional: */
+ CVolStream &s = Streams.Back();
+ if (s.Stream)
+ {
+ if (hres3 == S_OK)
+ hres3 = E_FAIL;
+ s.Stream.Detach();
+ /* it will be not failure, even if we call RemoveFromLinkedList()
+ twice for same CVolStream in this Destruct() function */
+ RemoveFromLinkedList(Streams.Size() - 1);
+ }
+ }
+ Streams.DeleteBack();
+ // Delete_LastStream_Records();
+ }
+
+ if (hres == S_OK)
+ hres = hres3;
+ if (hres == S_OK && NumListItems != 0)
+ hres = E_FAIL;
+ return hres;
+ COM_TRY_END
+}
+
+
+CMultiOutStream::~CMultiOutStream()
+{
+ // we try to avoid exception in destructors
+ Destruct();
+}
+
+
+void CMultiOutStream::Init(const CRecordVector<UInt64> &sizes)
+{
+ Streams.Clear();
+ InitLinkedList();
+ Sizes = sizes;
+ NeedDelete = true;
+ MTime_Defined = false;
+ FinalVol_WasReopen = false;
+ NumOpenFiles_AllowedMax = NSystem::Get_File_OPEN_MAX_Reduced_for_3_tasks();
+
+ _streamIndex = 0;
+ _offsetPos = 0;
+ _absPos = 0;
+ _length = 0;
+ _absLimit = (UInt64)(Int64)-1;
+
+ _restrict_Begin = 0;
+ _restrict_End = (UInt64)(Int64)-1;
+ _restrict_Global = 0;
+
+ UInt64 sum = 0;
+ unsigned i = 0;
+ for (i = 0; i < Sizes.Size(); i++)
+ {
+ if (i >= k_NumVols_MAX)
+ {
+ _absLimit = sum;
+ break;
+ }
+ const UInt64 size = Sizes[i];
+ const UInt64 next = sum + size;
+ if (next < sum)
+ break;
+ sum = next;
+ }
+
+ // if (Sizes.IsEmpty()) throw "no volume sizes";
+ const UInt64 size = Sizes.Back();
+ if (size == 0)
+ throw "zero size last volume";
+
+ if (i == Sizes.Size())
+ if ((_absLimit - sum) / size >= (k_NumVols_MAX - i))
+ _absLimit = sum + (k_NumVols_MAX - i) * size;
+}
+
+
+/* IsRestricted():
+ we must call only if volume is full (s.RealSize==VolSize) or finished.
+ the function doesn't use VolSize and it uses s.RealSize instead.
+ it returns true : if stream is restricted, and we can't close that stream
+ it returns false : if there is no restriction, and we can close that stream
+ Note: (RealSize == 0) (empty volume) on restriction bounds are supposed as non-restricted
+*/
+bool CMultiOutStream::IsRestricted(const CVolStream &s) const
+{
+ if (s.Start < _restrict_Global)
+ return true;
+ if (_restrict_Begin == _restrict_End)
+ return false;
+ if (_restrict_Begin <= s.Start)
+ return _restrict_End > s.Start;
+ return _restrict_Begin < s.Start + s.RealSize;
+}
+
+/*
+// this function check also _length and volSize
+bool CMultiOutStream::IsRestricted_for_Close(unsigned index) const
+{
+ const CVolStream &s = Streams[index];
+ if (_length <= s.Start) // we don't close streams after the end, because we still can write them later
+ return true;
+ // (_length > s.Start)
+ const UInt64 volSize = GetVolSize_for_Stream(index);
+ if (volSize == 0)
+ return IsRestricted_Empty(s);
+ if (_length - s.Start < volSize)
+ return true;
+ return IsRestricted(s);
+}
+*/
+
+FString CMultiOutStream::GetFilePath(unsigned index)
+{
+ FString name;
+ name.Add_UInt32(index + 1);
+ while (name.Len() < 3)
+ name.InsertAtFront(FTEXT('0'));
+ name.Insert(0, Prefix);
+ return name;
+}
+
+
+// we close stream, but we still keep item in Streams[] vector
+HRESULT CMultiOutStream::CloseStream(unsigned index)
+{
+ CVolStream &s = Streams[index];
+ if (s.Stream)
+ {
+ RINOK(s.StreamSpec->Close())
+ // the following two commands must be called together:
+ s.Stream.Release();
+ RemoveFromLinkedList(index);
+ }
+ return S_OK;
+}
+
+
+// we close stream and delete file, but we still keep item in Streams[] vector
+HRESULT CMultiOutStream::CloseStream_and_DeleteFile(unsigned index)
+{
+ PRF(printf("\n====== %u, CloseStream_AndDelete \n", index));
+ RINOK(CloseStream(index))
+ FString path = GetFilePath(index);
+ path += Streams[index].Postfix;
+ // we can checki that file exist
+ // if (NFind::DoesFileExist_Raw(path))
+ if (!DeleteFileAlways(path))
+ return GetLastError_noZero_HRESULT();
+ return S_OK;
+}
+
+
+HRESULT CMultiOutStream::CloseStream_and_FinalRename(unsigned index)
+{
+ PRF(printf("\n====== %u, CloseStream_and_FinalRename \n", index));
+ CVolStream &s = Streams[index];
+ // HRESULT res = S_OK;
+ bool mtime_WasSet = false;
+ if (MTime_Defined && s.Stream)
+ {
+ if (s.StreamSpec->SetMTime(&MTime))
+ mtime_WasSet = true;
+ // else res = GetLastError_noZero_HRESULT();
+ }
+
+ RINOK(CloseStream(index))
+ if (s.Postfix.IsEmpty()) // if Postfix is empty, the path is already final
+ return S_OK;
+ const FString path = GetFilePath(index);
+ FString tempPath = path;
+ tempPath += s.Postfix;
+
+ if (MTime_Defined && !mtime_WasSet)
+ {
+ if (!SetDirTime(tempPath, NULL, NULL, &MTime))
+ {
+ // res = GetLastError_noZero_HRESULT();
+ }
+ }
+ if (!MyMoveFile(tempPath, path))
+ return GetLastError_noZero_HRESULT();
+ /* we clear CVolStream::Postfix. So we will not use Temp path
+ anymore for this stream, and we will work only with final path */
+ s.Postfix.Empty();
+ // we can ignore set_mtime error or we can return it
+ return S_OK;
+ // return res;
+}
+
+
+HRESULT CMultiOutStream::PrepareToOpenNew()
+{
+ if (NumListItems < NumOpenFiles_AllowedMax)
+ return S_OK;
+ /* when we create zip archive: in most cases we need only starting
+ data of restricted region for rewriting zip's local header.
+ So here we close latest created volume (from Head), and we try to
+ keep oldest volumes that will be used for header rewriting later. */
+ const int index = Head;
+ if (index == -1)
+ return E_FAIL;
+ PRF(printf("\n== %u, PrepareToOpenNew::CloseStream, NumListItems =%u \n", index, NumListItems));
+ /* we don't expect non-restricted stream here in normal cases (if _restrict_Global was not changed).
+ if there was non-restricted stream, it should be closed before */
+ // if (!IsRestricted_for_Close(index)) return CloseStream_and_FinalRename(index);
+ return CloseStream((unsigned)index);
+}
+
+
+HRESULT CMultiOutStream::CreateNewStream(UInt64 newSize)
+{
+ PRF(printf("\n== %u, CreateNewStream, size =%u \n", Streams.Size(), (unsigned)newSize));
+
+ if (Streams.Size() >= k_NumVols_MAX)
+ return E_INVALIDARG; // E_OUTOFMEMORY
+
+ RINOK(PrepareToOpenNew())
+ CVolStream s;
+ s.StreamSpec = new COutFileStream;
+ s.Stream = s.StreamSpec;
+ const FString path = GetFilePath(Streams.Size());
+
+ if (NFind::DoesFileExist_Raw(path))
+ return HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS);
+ if (!CreateTempFile2(path, false, s.Postfix, &s.StreamSpec->File))
+ return GetLastError_noZero_HRESULT();
+
+ s.Start = GetGlobalOffset_for_NewStream();
+ s.Pos = 0;
+ s.RealSize = 0;
+
+ const unsigned index = Streams.Add(s);
+ InsertToLinkedList(index);
+
+ if (newSize != 0)
+ return s.SetSize2(newSize);
+ return S_OK;
+}
+
+
+HRESULT CMultiOutStream::CreateStreams_If_Required(unsigned streamIndex)
+{
+ // UInt64 lastStreamSize = 0;
+ for (;;)
+ {
+ const unsigned numStreamsBefore = Streams.Size();
+ if (streamIndex < numStreamsBefore)
+ return S_OK;
+ UInt64 newSize;
+ if (streamIndex == numStreamsBefore)
+ {
+ // it's final volume that will be used for real writing.
+ /* SetSize(_offsetPos) is not required,
+ because the file Size will be set later by calling Seek() with Write() */
+ newSize = 0; // lastStreamSize;
+ }
+ else
+ {
+ // it's intermediate volume. So we need full volume size
+ newSize = GetVolSize_for_Stream(numStreamsBefore);
+ }
+
+ RINOK(CreateNewStream(newSize))
+
+ // optional check
+ if (numStreamsBefore + 1 != Streams.Size()) return E_FAIL;
+
+ if (streamIndex != numStreamsBefore)
+ {
+ // it's intermediate volume. So we can close it, if it's non-restricted
+ bool isRestricted;
+ {
+ const CVolStream &s = Streams[numStreamsBefore];
+ if (newSize == 0)
+ isRestricted = IsRestricted_Empty(s);
+ else
+ isRestricted = IsRestricted(s);
+ }
+ if (!isRestricted)
+ {
+ RINOK(CloseStream_and_FinalRename(numStreamsBefore))
+ }
+ }
+ }
+}
+
+
+HRESULT CMultiOutStream::ReOpenStream(unsigned streamIndex)
+{
+ PRF(printf("\n====== %u, ReOpenStream \n", streamIndex));
+ RINOK(PrepareToOpenNew())
+ CVolStream &s = Streams[streamIndex];
+
+ FString path = GetFilePath(streamIndex);
+ path += s.Postfix;
+
+ s.StreamSpec = new COutFileStream;
+ s.Stream = s.StreamSpec;
+ s.Pos = 0;
+
+ HRESULT hres;
+ if (s.StreamSpec->Open(path, OPEN_EXISTING))
+ {
+ if (s.Postfix.IsEmpty())
+ {
+ /* it's unexpected case that we open finished volume.
+ It can mean that the code for restriction is incorrect */
+ FinalVol_WasReopen = true;
+ }
+ UInt64 realSize = 0;
+ hres = s.StreamSpec->GetSize(&realSize);
+ if (hres == S_OK)
+ {
+ if (realSize == s.RealSize)
+ {
+ InsertToLinkedList(streamIndex);
+ return S_OK;
+ }
+ // file size was changed between Close() and ReOpen()
+ // we must release Stream to be consistent with linked list
+ hres = E_FAIL;
+ }
+ }
+ else
+ hres = GetLastError_noZero_HRESULT();
+ s.Stream.Release();
+ s.StreamSpec = NULL;
+ return hres;
+}
+
+
+/* Sets size of stream, if new size is not equal to old size (RealSize).
+ If stream was closed and size change is required, it reopens the stream. */
+
+HRESULT CMultiOutStream::OptReOpen_and_SetSize(unsigned index, UInt64 size)
+{
+ CVolStream &s = Streams[index];
+ if (size == s.RealSize)
+ return S_OK;
+ if (!s.Stream)
+ {
+ RINOK(ReOpenStream(index))
+ }
+ PRF(printf("\n== %u, OptReOpen_and_SetSize, size =%u RealSize = %u\n", index, (unsigned)size, (unsigned)s.RealSize));
+ // comment it to debug tail after data
+ return s.SetSize2(size);
+}
+
+
+/*
+call Normalize_finalMode(false), if _length was changed.
+ for all streams starting after _length:
+ - it sets zero size
+ - it still keeps file open
+ Note: after _length reducing with CMultiOutStream::SetSize() we can
+ have very big number of empty streams at the end of Streams[] list.
+ And Normalize_finalMode() will runs all these empty streams of Streams[] vector.
+ So it can be ineffective, if we call Normalize_finalMode() many
+ times after big reducing of (_length).
+
+call Normalize_finalMode(true) to set final presentations of all streams
+ for all streams starting after _length:
+ - it sets zero size
+ - it removes file
+ - it removes CVolStream object from Streams[] vector
+
+Note: we don't remove zero sized first volume, if (_length == 0)
+*/
+
+HRESULT CMultiOutStream::Normalize_finalMode(bool finalMode)
+{
+ PRF(printf("\n== Normalize_finalMode: _length =%d \n", (unsigned)_length));
+
+ unsigned i = Streams.Size();
+
+ UInt64 offset = 0;
+
+ /* At first we normalize (reduce or increase) the sizes of all existing
+ streams in Streams[] that can be affected by changed _length.
+ And we remove tailing zero-size streams, if (finalMode == true) */
+ while (i != 0)
+ {
+ offset = Streams[--i].Start; // it's last item in Streams[]
+ // we don't want to remove first volume
+ if (offset < _length || i == 0)
+ {
+ const UInt64 volSize = GetVolSize_for_Stream(i);
+ UInt64 size = _length - offset; // (size != 0) here
+ if (size > volSize)
+ size = volSize;
+ RINOK(OptReOpen_and_SetSize(i, size))
+ if (_length - offset <= volSize)
+ return S_OK;
+ // _length - offset > volSize
+ offset += volSize;
+ // _length > offset
+ break;
+ // UPDATE_HRES(res, OptReOpen_and_SetSize(i, size));
+ }
+
+ /* we Set Size of stream to zero even for (finalMode==true), although
+ that stream will be deleted in next commands */
+ // UPDATE_HRES(res, OptReOpen_and_SetSize(i, 0));
+ RINOK(OptReOpen_and_SetSize(i, 0))
+ if (finalMode)
+ {
+ RINOK(CloseStream_and_DeleteFile(i))
+ /* CVolStream::Stream was released above already, and it was
+ removed from linked list. So we don't need to update linked list
+ structure, when we delete last item in Streams[] */
+ Streams.DeleteBack();
+ // Delete_LastStream_Records();
+ }
+ }
+
+ /* now we create new zero-filled streams to cover all data up to _length */
+
+ if (_length == 0)
+ return S_OK;
+
+ // (offset) is start offset of next stream after existing Streams[]
+
+ for (;;)
+ {
+ // _length > offset
+ const UInt64 volSize = GetVolSize_for_Stream(Streams.Size());
+ UInt64 size = _length - offset; // (size != 0) here
+ if (size > volSize)
+ size = volSize;
+ RINOK(CreateNewStream(size))
+ if (_length - offset <= volSize)
+ return S_OK;
+ // _length - offset > volSize)
+ offset += volSize;
+ // _length > offset
+ }
+}
+
+
+HRESULT CMultiOutStream::FinalFlush_and_CloseFiles(unsigned &numTotalVolumesRes)
+{
+ // at first we remove unused zero-sized streams after _length
+ HRESULT res = Normalize_finalMode(true);
+ numTotalVolumesRes = Streams.Size();
+ FOR_VECTOR (i, Streams)
+ {
+ const HRESULT res2 = CloseStream_and_FinalRename(i);
+ if (res == S_OK)
+ res = res2;
+ }
+ if (NumListItems != 0 && res == S_OK)
+ res = E_FAIL;
+ return res;
+}
+
+
+bool CMultiOutStream::SetMTime_Final(const CFiTime &mTime)
+{
+ // we will set mtime only if new value differs from previous
+ if (!FinalVol_WasReopen && MTime_Defined && Compare_FiTime(&MTime, &mTime) == 0)
+ return true;
+ bool res = true;
+ FOR_VECTOR (i, Streams)
+ {
+ CVolStream &s = Streams[i];
+ if (s.Stream)
+ {
+ if (!s.StreamSpec->SetMTime(&mTime))
+ res = false;
+ }
+ else
+ {
+ if (!SetDirTime(GetFilePath(i), NULL, NULL, &mTime))
+ res = false;
+ }
+ }
+ return res;
+}
+
+
+Z7_COM7F_IMF(CMultiOutStream::SetSize(UInt64 newSize))
+{
+ COM_TRY_BEGIN
+ if ((Int64)newSize < 0)
+ return HRESULT_WIN32_ERROR_NEGATIVE_SEEK;
+ if (newSize > _absLimit)
+ {
+ /* big seek value was sent to SetSize() or to Seek()+Write().
+ It can mean one of two situations:
+ 1) some incorrect code called it with big seek value.
+ 2) volume size was small, and we have too big number of volumes
+ */
+ /* in Windows SetEndOfFile() can return:
+ ERROR_NEGATIVE_SEEK: for >= (1 << 63)
+ ERROR_INVALID_PARAMETER: for > (16 TiB - 64 KiB)
+ ERROR_DISK_FULL: for <= (16 TiB - 64 KiB)
+ */
+ // return E_FAIL;
+ // return E_OUTOFMEMORY;
+ return E_INVALIDARG;
+ }
+
+ if (newSize > _length)
+ {
+ // we don't expect such case. So we just define global restriction */
+ _restrict_Global = newSize;
+ }
+ else if (newSize < _restrict_Global)
+ _restrict_Global = newSize;
+
+ PRF(printf("\n== SetSize, size =%u \n", (unsigned)newSize));
+
+ _length = newSize;
+ return Normalize_finalMode(false);
+
+ COM_TRY_END
+}
+
+
+Z7_COM7F_IMF(CMultiOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
+{
+ COM_TRY_BEGIN
+ if (processedSize)
+ *processedSize = 0;
+ if (size == 0)
+ return S_OK;
+
+ if (_absPos > _length)
+ {
+ // it create data only up to _absPos.
+ // but we still can need additional new streams, if _absPos at range of volume
+ RINOK(SetSize(_absPos))
+ }
+
+ while (size != 0)
+ {
+ UInt64 volSize;
+ {
+ if (_streamIndex < Sizes.Size() - 1)
+ {
+ volSize = Sizes[_streamIndex];
+ if (_offsetPos >= volSize)
+ {
+ _offsetPos -= volSize;
+ _streamIndex++;
+ continue;
+ }
+ }
+ else
+ {
+ volSize = Sizes[Sizes.Size() - 1];
+ if (_offsetPos >= volSize)
+ {
+ const UInt64 v = _offsetPos / volSize;
+ if (v >= ((UInt32)(Int32)-1) - _streamIndex)
+ return E_INVALIDARG;
+ // throw 202208;
+ _streamIndex += (unsigned)v;
+ _offsetPos -= (unsigned)v * volSize;
+ }
+ if (_streamIndex >= k_NumVols_MAX)
+ return E_INVALIDARG;
+ }
+ }
+
+ // (_offsetPos < volSize) here
+
+ /* we can need to create one or more streams here,
+ vol_size for some streams is allowed to be 0.
+ Also we close some new created streams, if they are non-restricted */
+ // file Size will be set later by calling Seek() with Write()
+
+ /* the case (_absPos > _length) was processed above with SetSize(_absPos),
+ so here it's expected. that we can create optional zero-size streams and then _streamIndex */
+ RINOK(CreateStreams_If_Required(_streamIndex))
+
+ CVolStream &s = Streams[_streamIndex];
+
+ PRF(printf("\n%d, == Write : Pos = %u, RealSize = %u size =%u \n",
+ _streamIndex, (unsigned)s.Pos, (unsigned)s.RealSize, size));
+
+ if (!s.Stream)
+ {
+ RINOK(ReOpenStream(_streamIndex))
+ }
+ if (_offsetPos != s.Pos)
+ {
+ RINOK(s.Stream->Seek((Int64)_offsetPos, STREAM_SEEK_SET, NULL))
+ s.Pos = _offsetPos;
+ }
+
+ UInt32 curSize = size;
+ {
+ const UInt64 rem = volSize - _offsetPos;
+ if (curSize > rem)
+ curSize = (UInt32)rem;
+ }
+ // curSize != 0
+ UInt32 realProcessed = 0;
+
+ HRESULT hres = s.Stream->Write(data, curSize, &realProcessed);
+
+ data = (const void *)((const Byte *)data + realProcessed);
+ size -= realProcessed;
+ s.Pos += realProcessed;
+ _offsetPos += realProcessed;
+ _absPos += realProcessed;
+ if (_length < _absPos)
+ _length = _absPos;
+ if (s.RealSize < _offsetPos)
+ s.RealSize = _offsetPos;
+ if (processedSize)
+ *processedSize += realProcessed;
+
+ if (s.Pos == volSize)
+ {
+ bool isRestricted;
+ if (volSize == 0)
+ isRestricted = IsRestricted_Empty(s);
+ else
+ isRestricted = IsRestricted(s);
+ if (!isRestricted)
+ {
+ const HRESULT res2 = CloseStream_and_FinalRename(_streamIndex);
+ if (hres == S_OK)
+ hres = res2;
+ }
+ _streamIndex++;
+ _offsetPos = 0;
+ }
+
+ RINOK(hres)
+ if (realProcessed == 0 && curSize != 0)
+ return E_FAIL;
+ // break;
+ }
+ return S_OK;
+ COM_TRY_END
+}
+
+
+Z7_COM7F_IMF(CMultiOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
+{
+ PRF(printf("\n-- Seek seekOrigin=%u Seek =%u\n", seekOrigin, (unsigned)offset));
+
+ switch (seekOrigin)
+ {
+ case STREAM_SEEK_SET: break;
+ case STREAM_SEEK_CUR: offset += _absPos; break;
+ case STREAM_SEEK_END: offset += _length; break;
+ default: return STG_E_INVALIDFUNCTION;
+ }
+ if (offset < 0)
+ return HRESULT_WIN32_ERROR_NEGATIVE_SEEK;
+ if ((UInt64)offset != _absPos)
+ {
+ _absPos = (UInt64)offset;
+ _offsetPos = (UInt64)offset;
+ _streamIndex = 0;
+ }
+ if (newPosition)
+ *newPosition = (UInt64)offset;
+ return S_OK;
+}
+
+
+// result value will be saturated to (UInt32)(Int32)-1
+
+unsigned CMultiOutStream::GetStreamIndex_for_Offset(UInt64 offset, UInt64 &relOffset) const
+{
+ const unsigned last = Sizes.Size() - 1;
+ for (unsigned i = 0; i < last; i++)
+ {
+ const UInt64 size = Sizes[i];
+ if (offset < size)
+ {
+ relOffset = offset;
+ return i;
+ }
+ offset -= size;
+ }
+ const UInt64 size = Sizes[last];
+ const UInt64 v = offset / size;
+ if (v >= ((UInt32)(Int32)-1) - last)
+ return (UInt32)(Int32)-1; // saturation
+ relOffset = offset - (unsigned)v * size;
+ return last + (unsigned)(v);
+}
+
+
+Z7_COM7F_IMF(CMultiOutStream::SetRestriction(UInt64 begin, UInt64 end))
+{
+ COM_TRY_BEGIN
+
+ // begin = end = 0; // for debug
+
+ PRF(printf("\n==================== CMultiOutStream::SetRestriction %u, %u\n", (unsigned)begin, (unsigned)end));
+ if (begin > end)
+ {
+ // these value are FAILED values.
+ return E_FAIL;
+ // return E_INVALIDARG;
+ /*
+ // or we can ignore error with 3 ways: no change, non-restricted, saturation:
+ end = begin; // non-restricted
+ end = (UInt64)(Int64)-1; // saturation:
+ return S_OK;
+ */
+ }
+ UInt64 b = _restrict_Begin;
+ UInt64 e = _restrict_End;
+ _restrict_Begin = begin;
+ _restrict_End = end;
+
+ if (b == e) // if there were no restriction before
+ return S_OK; // no work to derestrict now.
+
+ /* [b, e) is previous restricted region. So all volumes that
+ intersect that [b, e) region are candidats for derestriction */
+
+ if (begin != end) // if there is new non-empty restricted region
+ {
+ /* Now we will try to reduce or change (b) and (e) bounds
+ to reduce main loop that checks volumes for derestriction.
+ We still use one big derestriction region in main loop, although
+ in some cases we could have two smaller derestriction regions.
+ Also usually restriction region cannot move back from previous start position,
+ so (b <= begin) is expected here for normal cases */
+ if (b == begin) // if same low bounds
+ b = end; // we need to derestrict only after the end of new restricted region
+ if (e == end) // if same high bounds
+ e = begin; // we need to derestrict only before the begin of new restricted region
+ }
+
+ if (b > e) // || b == (UInt64)(Int64)-1
+ return S_OK;
+
+ /* Here we close finished volumes that are not restricted anymore.
+ We close (low number) volumes at first. */
+
+ UInt64 offset;
+ unsigned index = GetStreamIndex_for_Offset(b, offset);
+
+ for (; index < Streams.Size(); index++)
+ {
+ {
+ const CVolStream &s = Streams[index];
+ if (_length <= s.Start)
+ break; // we don't close streams after _length
+ // (_length > s.Start)
+ const UInt64 volSize = GetVolSize_for_Stream(index);
+ if (volSize == 0)
+ {
+ if (e < s.Start)
+ break;
+ // we don't close empty stream, if next byte [s.Start, s.Start] is restricted
+ if (IsRestricted_Empty(s))
+ continue;
+ }
+ else
+ {
+ if (e <= s.Start)
+ break;
+ // we don't close non full streams
+ if (_length - s.Start < volSize)
+ break;
+ // (volSize == s.RealSize) is expected here. So no need to check it
+ // if (volSize != s.RealSize) break;
+ if (IsRestricted(s))
+ continue;
+ }
+ }
+ RINOK(CloseStream_and_FinalRename(index))
+ }
+
+ return S_OK;
+ COM_TRY_END
+}
diff --git a/3rdparty/lzma/CPP/7zip/Common/MultiOutStream.h b/3rdparty/lzma/CPP/7zip/Common/MultiOutStream.h
new file mode 100644
index 00000000000..2fb78112ec3
--- /dev/null
+++ b/3rdparty/lzma/CPP/7zip/Common/MultiOutStream.h
@@ -0,0 +1,160 @@
+// MultiOutStream.h
+
+#ifndef ZIP7_INC_MULTI_OUT_STREAM_H
+#define ZIP7_INC_MULTI_OUT_STREAM_H
+
+#include "FileStreams.h"
+
+Z7_CLASS_IMP_COM_2(
+ CMultiOutStream
+ , IOutStream
+ , IStreamSetRestriction
+)
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
+
+ Z7_CLASS_NO_COPY(CMultiOutStream)
+
+ struct CVolStream
+ {
+ COutFileStream *StreamSpec;
+ CMyComPtr<IOutStream> Stream;
+ UInt64 Start; // start pos of current Stream in global stream
+ UInt64 Pos; // pos in current Stream
+ UInt64 RealSize;
+ int Next; // next older
+ int Prev; // prev newer
+ AString Postfix;
+
+ HRESULT SetSize2(UInt64 size)
+ {
+ const HRESULT res = Stream->SetSize(size);
+ if (res == SZ_OK)
+ RealSize = size;
+ return res;
+ }
+ };
+
+ unsigned _streamIndex; // (_streamIndex >= Stream.Size()) is allowed in some internal code
+ UInt64 _offsetPos; // offset relative to Streams[_streamIndex] volume. (_offsetPos >= volSize is allowed)
+ UInt64 _absPos;
+ UInt64 _length; // virtual Length
+ UInt64 _absLimit;
+
+ CObjectVector<CVolStream> Streams;
+ CRecordVector<UInt64> Sizes;
+
+ UInt64 _restrict_Begin;
+ UInt64 _restrict_End;
+ UInt64 _restrict_Global;
+
+ unsigned NumOpenFiles_AllowedMax;
+
+ // ----- Double Linked List -----
+
+ unsigned NumListItems;
+ int Head; // newest
+ int Tail; // oldest
+
+ void InitLinkedList()
+ {
+ Head = -1;
+ Tail = -1;
+ NumListItems = 0;
+ }
+
+ void InsertToLinkedList(unsigned index)
+ {
+ {
+ CVolStream &node = Streams[index];
+ node.Next = Head;
+ node.Prev = -1;
+ }
+ if (Head != -1)
+ Streams[(unsigned)Head].Prev = (int)index;
+ else
+ {
+ // if (Tail != -1) throw 1;
+ Tail = (int)index;
+ }
+ Head = (int)index;
+ NumListItems++;
+ }
+
+ void RemoveFromLinkedList(unsigned index)
+ {
+ CVolStream &s = Streams[index];
+ if (s.Next != -1) Streams[(unsigned)s.Next].Prev = s.Prev; else Tail = s.Prev;
+ if (s.Prev != -1) Streams[(unsigned)s.Prev].Next = s.Next; else Head = s.Next;
+ s.Next = -1; // optional
+ s.Prev = -1; // optional
+ NumListItems--;
+ }
+
+ /*
+ void Delete_LastStream_Records()
+ {
+ if (Streams.Back().Stream)
+ RemoveFromLinkedList(Streams.Size() - 1);
+ Streams.DeleteBack();
+ }
+ */
+
+ UInt64 GetVolSize_for_Stream(unsigned i) const
+ {
+ const unsigned last = Sizes.Size() - 1;
+ return Sizes[i < last ? i : last];
+ }
+ UInt64 GetGlobalOffset_for_NewStream() const
+ {
+ return Streams.Size() == 0 ? 0:
+ Streams.Back().Start +
+ GetVolSize_for_Stream(Streams.Size() - 1);
+ }
+ unsigned GetStreamIndex_for_Offset(UInt64 offset, UInt64 &relOffset) const;
+ bool IsRestricted(const CVolStream &s) const;
+ bool IsRestricted_Empty(const CVolStream &s) const
+ {
+ // (s) must be stream that has (VolSize == 0).
+ // we treat empty stream as restricted, if next byte is restricted.
+ if (s.Start < _restrict_Global)
+ return true;
+ return
+ (_restrict_Begin != _restrict_End)
+ && (_restrict_Begin <= s.Start)
+ && (_restrict_Begin == s.Start || _restrict_End > s.Start);
+ }
+ // bool IsRestricted_for_Close(unsigned index) const;
+ FString GetFilePath(unsigned index);
+
+ HRESULT CloseStream(unsigned index);
+ HRESULT CloseStream_and_DeleteFile(unsigned index);
+ HRESULT CloseStream_and_FinalRename(unsigned index);
+
+ HRESULT PrepareToOpenNew();
+ HRESULT CreateNewStream(UInt64 newSize);
+ HRESULT CreateStreams_If_Required(unsigned streamIndex);
+ HRESULT ReOpenStream(unsigned streamIndex);
+ HRESULT OptReOpen_and_SetSize(unsigned index, UInt64 size);
+
+ HRESULT Normalize_finalMode(bool finalMode);
+public:
+ FString Prefix;
+ CFiTime MTime;
+ bool MTime_Defined;
+ bool FinalVol_WasReopen;
+ bool NeedDelete;
+
+ CMultiOutStream() {}
+ ~CMultiOutStream();
+ void Init(const CRecordVector<UInt64> &sizes);
+ bool SetMTime_Final(const CFiTime &mTime);
+ UInt64 GetSize() const { return _length; }
+ /* it makes final flushing, closes open files and renames to final name if required
+ but it still keeps Streams array of all closed files.
+ So we still can delete all files later, if required */
+ HRESULT FinalFlush_and_CloseFiles(unsigned &numTotalVolumesRes);
+ // Destruct object without exceptions
+ HRESULT Destruct();
+};
+
+#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/OffsetStream.cpp b/3rdparty/lzma/CPP/7zip/Common/OffsetStream.cpp
index b16124c2c71..a6b005e4ff6 100644
--- a/3rdparty/lzma/CPP/7zip/Common/OffsetStream.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/OffsetStream.cpp
@@ -2,8 +2,6 @@
#include "StdAfx.h"
-#include "../../Common/Defs.h"
-
#include "OffsetStream.h"
HRESULT COffsetOutStream::Init(IOutStream *stream, UInt64 offset)
@@ -13,12 +11,12 @@ HRESULT COffsetOutStream::Init(IOutStream *stream, UInt64 offset)
return _stream->Seek((Int64)offset, STREAM_SEEK_SET, NULL);
}
-STDMETHODIMP COffsetOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(COffsetOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
return _stream->Write(data, size, processedSize);
}
-STDMETHODIMP COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
if (seekOrigin == STREAM_SEEK_SET)
{
@@ -27,13 +25,13 @@ STDMETHODIMP COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *new
offset += _offset;
}
UInt64 absoluteNewPosition = 0; // =0 for gcc-10
- HRESULT result = _stream->Seek(offset, seekOrigin, &absoluteNewPosition);
+ const HRESULT result = _stream->Seek(offset, seekOrigin, &absoluteNewPosition);
if (newPosition)
*newPosition = absoluteNewPosition - _offset;
return result;
}
-STDMETHODIMP COffsetOutStream::SetSize(UInt64 newSize)
+Z7_COM7F_IMF(COffsetOutStream::SetSize(UInt64 newSize))
{
return _stream->SetSize(_offset + newSize);
}
diff --git a/3rdparty/lzma/CPP/7zip/Common/OffsetStream.h b/3rdparty/lzma/CPP/7zip/Common/OffsetStream.h
index 9074a24e031..9bd554cc8b6 100644
--- a/3rdparty/lzma/CPP/7zip/Common/OffsetStream.h
+++ b/3rdparty/lzma/CPP/7zip/Common/OffsetStream.h
@@ -1,26 +1,22 @@
// OffsetStream.h
-#ifndef __OFFSET_STREAM_H
-#define __OFFSET_STREAM_H
+#ifndef ZIP7_INC_OFFSET_STREAM_H
+#define ZIP7_INC_OFFSET_STREAM_H
#include "../../Common/MyCom.h"
#include "../IStream.h"
-class COffsetOutStream:
- public IOutStream,
- public CMyUnknownImp
-{
- UInt64 _offset;
+Z7_CLASS_IMP_NOQIB_1(
+ COffsetOutStream
+ , IOutStream
+)
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
+
CMyComPtr<IOutStream> _stream;
+ UInt64 _offset;
public:
HRESULT Init(IOutStream *stream, UInt64 offset);
-
- MY_UNKNOWN_IMP
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
- STDMETHOD(SetSize)(UInt64 newSize);
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/OutBuffer.cpp b/3rdparty/lzma/CPP/7zip/Common/OutBuffer.cpp
index 4ba34a053b1..197b3767efb 100644
--- a/3rdparty/lzma/CPP/7zip/Common/OutBuffer.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/OutBuffer.cpp
@@ -11,18 +11,18 @@ bool COutBuffer::Create(UInt32 bufSize) throw()
const UInt32 kMinBlockSize = 1;
if (bufSize < kMinBlockSize)
bufSize = kMinBlockSize;
- if (_buf != 0 && _bufSize == bufSize)
+ if (_buf && _bufSize == bufSize)
return true;
Free();
_bufSize = bufSize;
_buf = (Byte *)::MidAlloc(bufSize);
- return (_buf != 0);
+ return (_buf != NULL);
}
void COutBuffer::Free() throw()
{
::MidFree(_buf);
- _buf = 0;
+ _buf = NULL;
}
void COutBuffer::Init() throw()
@@ -32,7 +32,7 @@ void COutBuffer::Init() throw()
_pos = 0;
_processedSize = 0;
_overDict = false;
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
ErrorCode = S_OK;
#endif
}
@@ -51,17 +51,17 @@ HRESULT COutBuffer::FlushPart() throw()
// _streamPos < _bufSize
UInt32 size = (_streamPos >= _pos) ? (_bufSize - _streamPos) : (_pos - _streamPos);
HRESULT result = S_OK;
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
result = ErrorCode;
#endif
- if (_buf2 != 0)
+ if (_buf2)
{
memcpy(_buf2, _buf + _streamPos, size);
_buf2 += size;
}
- if (_stream != 0
- #ifdef _NO_EXCEPTIONS
+ if (_stream
+ #ifdef Z7_NO_EXCEPTIONS
&& (ErrorCode == S_OK)
#endif
)
@@ -85,14 +85,14 @@ HRESULT COutBuffer::FlushPart() throw()
HRESULT COutBuffer::Flush() throw()
{
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
if (ErrorCode != S_OK)
return ErrorCode;
#endif
while (_streamPos != _pos)
{
- HRESULT result = FlushPart();
+ const HRESULT result = FlushPart();
if (result != S_OK)
return result;
}
@@ -101,8 +101,8 @@ HRESULT COutBuffer::Flush() throw()
void COutBuffer::FlushWithCheck()
{
- HRESULT result = Flush();
- #ifdef _NO_EXCEPTIONS
+ const HRESULT result = Flush();
+ #ifdef Z7_NO_EXCEPTIONS
ErrorCode = result;
#else
if (result != S_OK)
diff --git a/3rdparty/lzma/CPP/7zip/Common/OutBuffer.h b/3rdparty/lzma/CPP/7zip/Common/OutBuffer.h
index d7ca9f6a229..cef7d502dfe 100644
--- a/3rdparty/lzma/CPP/7zip/Common/OutBuffer.h
+++ b/3rdparty/lzma/CPP/7zip/Common/OutBuffer.h
@@ -1,13 +1,13 @@
// OutBuffer.h
-#ifndef __OUT_BUFFER_H
-#define __OUT_BUFFER_H
+#ifndef ZIP7_INC_OUT_BUFFER_H
+#define ZIP7_INC_OUT_BUFFER_H
#include "../IStream.h"
#include "../../Common/MyCom.h"
#include "../../Common/MyException.h"
-#ifndef _NO_EXCEPTIONS
+#ifndef Z7_NO_EXCEPTIONS
struct COutBufferException: public CSystemException
{
COutBufferException(HRESULT errorCode): CSystemException(errorCode) {}
@@ -29,11 +29,11 @@ protected:
HRESULT FlushPart() throw();
public:
- #ifdef _NO_EXCEPTIONS
+ #ifdef Z7_NO_EXCEPTIONS
HRESULT ErrorCode;
#endif
- COutBuffer(): _buf(0), _pos(0), _stream(0), _buf2(0) {}
+ COutBuffer(): _buf(NULL), _pos(0), _stream(NULL), _buf2(NULL) {}
~COutBuffer() { Free(); }
bool Create(UInt32 bufSize) throw();
diff --git a/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.cpp b/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.cpp
index 41385ccb1cc..fb81f29b568 100644
--- a/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.cpp
@@ -5,11 +5,11 @@
#include "ProgressUtils.h"
CLocalProgress::CLocalProgress():
+ SendRatio(true),
+ SendProgress(true),
ProgressOffset(0),
InSize(0),
- OutSize(0),
- SendRatio(true),
- SendProgress(true)
+ OutSize(0)
{}
void CLocalProgress::Init(IProgress *progress, bool inSizeIsMain)
@@ -20,7 +20,7 @@ void CLocalProgress::Init(IProgress *progress, bool inSizeIsMain)
_inSizeIsMain = inSizeIsMain;
}
-STDMETHODIMP CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
+Z7_COM7F_IMF(CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
{
UInt64 inSize2 = InSize;
UInt64 outSize2 = OutSize;
@@ -32,7 +32,7 @@ STDMETHODIMP CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *ou
if (SendRatio && _ratioProgress)
{
- RINOK(_ratioProgress->SetRatioInfo(&inSize2, &outSize2));
+ RINOK(_ratioProgress->SetRatioInfo(&inSize2, &outSize2))
}
if (SendProgress)
diff --git a/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.h b/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.h
index e94265ba715..dad5fccfa2c 100644
--- a/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.h
+++ b/3rdparty/lzma/CPP/7zip/Common/ProgressUtils.h
@@ -1,35 +1,33 @@
// ProgressUtils.h
-#ifndef __PROGRESS_UTILS_H
-#define __PROGRESS_UTILS_H
+#ifndef ZIP7_INC_PROGRESS_UTILS_H
+#define ZIP7_INC_PROGRESS_UTILS_H
#include "../../Common/MyCom.h"
#include "../ICoder.h"
#include "../IProgress.h"
-class CLocalProgress:
- public ICompressProgressInfo,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CLocalProgress
+ , ICompressProgressInfo
+)
+public:
+ bool SendRatio;
+ bool SendProgress;
+private:
+ bool _inSizeIsMain;
CMyComPtr<IProgress> _progress;
CMyComPtr<ICompressProgressInfo> _ratioProgress;
- bool _inSizeIsMain;
public:
UInt64 ProgressOffset;
UInt64 InSize;
UInt64 OutSize;
- bool SendRatio;
- bool SendProgress;
CLocalProgress();
void Init(IProgress *progress, bool inSizeIsMain);
HRESULT SetCur();
-
- MY_UNKNOWN_IMP1(ICompressProgressInfo)
-
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/PropId.cpp b/3rdparty/lzma/CPP/7zip/Common/PropId.cpp
index 0e643e85365..6117b0e21b6 100644
--- a/3rdparty/lzma/CPP/7zip/Common/PropId.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/PropId.cpp
@@ -111,5 +111,7 @@ const Byte k7z_PROPID_To_VARTYPE[kpid_NUM_DEFINED] =
VT_UI4,
VT_UI4,
VT_UI4,
- VT_UI4 // kpidDeviceMinor
+ VT_UI4,
+ VT_UI4,
+ VT_UI4 // kpidDevMinor
};
diff --git a/3rdparty/lzma/CPP/7zip/Common/RegisterArc.h b/3rdparty/lzma/CPP/7zip/Common/RegisterArc.h
index a0384fad6ea..55c1483f2e4 100644
--- a/3rdparty/lzma/CPP/7zip/Common/RegisterArc.h
+++ b/3rdparty/lzma/CPP/7zip/Common/RegisterArc.h
@@ -1,7 +1,7 @@
// RegisterArc.h
-#ifndef __REGISTER_ARC_H
-#define __REGISTER_ARC_H
+#ifndef ZIP7_INC_REGISTER_ARC_H
+#define ZIP7_INC_REGISTER_ARC_H
#include "../Archive/IArchive.h"
@@ -34,7 +34,7 @@ void RegisterArc(const CArcInfo *arcInfo) throw();
#define IMP_CreateArcIn IMP_CreateArcIn_2(CHandler())
-#ifdef EXTRACT_ONLY
+#ifdef Z7_EXTRACT_ONLY
#define IMP_CreateArcOut
#define CreateArcOut NULL
#else
@@ -52,7 +52,7 @@ void RegisterArc(const CArcInfo *arcInfo) throw();
#define REGISTER_ARC_I_CLS(cls, n, e, ae, id, sig, offs, flags, isArc) \
IMP_CreateArcIn_2(cls) \
- REGISTER_ARC_R(n, e, ae, id, ARRAY_SIZE(sig), sig, offs, flags, 0, CreateArc, NULL, isArc)
+ REGISTER_ARC_R(n, e, ae, id, Z7_ARRAY_SIZE(sig), sig, offs, flags, 0, CreateArc, NULL, isArc)
#define REGISTER_ARC_I_CLS_NO_SIG(cls, n, e, ae, id, offs, flags, isArc) \
IMP_CreateArcIn_2(cls) \
@@ -68,12 +68,12 @@ void RegisterArc(const CArcInfo *arcInfo) throw();
#define REGISTER_ARC_IO(n, e, ae, id, sig, offs, flags, tf, isArc) \
IMP_CreateArcIn \
IMP_CreateArcOut \
- REGISTER_ARC_R(n, e, ae, id, ARRAY_SIZE(sig), sig, offs, flags, tf, CreateArc, CreateArcOut, isArc)
+ REGISTER_ARC_R(n, e, ae, id, Z7_ARRAY_SIZE(sig), sig, offs, flags, tf, CreateArc, CreateArcOut, isArc)
#define REGISTER_ARC_IO_DECREMENT_SIG(n, e, ae, id, sig, offs, flags, tf, isArc) \
IMP_CreateArcIn \
IMP_CreateArcOut \
- REGISTER_ARC_V(n, e, ae, id, ARRAY_SIZE(sig), sig, offs, flags, tf, CreateArc, CreateArcOut, isArc) \
+ REGISTER_ARC_V(n, e, ae, id, Z7_ARRAY_SIZE(sig), sig, offs, flags, tf, CreateArc, CreateArcOut, isArc) \
struct CRegisterArcDecSig { CRegisterArcDecSig() { sig[0]--; RegisterArc(&g_ArcInfo); }}; \
static CRegisterArcDecSig g_RegisterArc;
diff --git a/3rdparty/lzma/CPP/7zip/Common/RegisterCodec.h b/3rdparty/lzma/CPP/7zip/Common/RegisterCodec.h
index a942da7a129..cf94998ac7d 100644
--- a/3rdparty/lzma/CPP/7zip/Common/RegisterCodec.h
+++ b/3rdparty/lzma/CPP/7zip/Common/RegisterCodec.h
@@ -1,7 +1,7 @@
// RegisterCodec.h
-#ifndef __REGISTER_CODEC_H
-#define __REGISTER_CODEC_H
+#ifndef ZIP7_INC_REGISTER_CODEC_H
+#define ZIP7_INC_REGISTER_CODEC_H
#include "../Common/MethodId.h"
@@ -37,7 +37,7 @@ void RegisterCodec(const CCodecInfo *codecInfo) throw();
#define REGISTER_CODECS_VAR static const CCodecInfo g_CodecsInfo[] =
#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \
- REGISTER_CODECS_NAME(x)() { for (unsigned i = 0; i < ARRAY_SIZE(g_CodecsInfo); i++) \
+ REGISTER_CODECS_NAME(x)() { for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_CodecsInfo); i++) \
RegisterCodec(&g_CodecsInfo[i]); }}; \
static REGISTER_CODECS_NAME(x) g_RegisterCodecs;
@@ -48,7 +48,7 @@ void RegisterCodec(const CCodecInfo *codecInfo) throw();
REGISTER_CODEC(x)
-#ifdef EXTRACT_ONLY
+#ifdef Z7_EXTRACT_ONLY
#define REGISTER_CODEC_E(x, clsDec, clsEnc, id, name) \
REGISTER_CODEC_CREATE(CreateDec, clsDec) \
REGISTER_CODEC_2(x, CreateDec, NULL, id, name)
@@ -71,7 +71,7 @@ void RegisterCodec(const CCodecInfo *codecInfo) throw();
REGISTER_FILTER_ITEM(crDec, crEnc, id, name); \
REGISTER_CODEC(x)
-#ifdef EXTRACT_ONLY
+#ifdef Z7_EXTRACT_ONLY
#define REGISTER_FILTER_E(x, clsDec, clsEnc, id, name) \
REGISTER_FILTER_CREATE(x ## _CreateDec, clsDec) \
REGISTER_FILTER(x, x ## _CreateDec, NULL, id, name)
@@ -97,7 +97,7 @@ void RegisterHasher(const CHasherInfo *hasher) throw();
#define REGISTER_HASHER_NAME(x) CRegHasher_ ## x
#define REGISTER_HASHER(cls, id, name, size) \
- STDMETHODIMP_(UInt32) cls::GetDigestSize() throw() { return size; } \
+ Z7_COM7F_IMF2(UInt32, cls::GetDigestSize()) { return size; } \
static IHasher *CreateHasherSpec() { return new cls(); } \
static const CHasherInfo g_HasherInfo = { CreateHasherSpec, id, name, size }; \
struct REGISTER_HASHER_NAME(cls) { REGISTER_HASHER_NAME(cls)() { RegisterHasher(&g_HasherInfo); }}; \
diff --git a/3rdparty/lzma/CPP/7zip/Common/StdAfx.h b/3rdparty/lzma/CPP/7zip/Common/StdAfx.h
index 1cbd7feaeec..80866550d1f 100644
--- a/3rdparty/lzma/CPP/7zip/Common/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Common/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/StreamBinder.cpp b/3rdparty/lzma/CPP/7zip/Common/StreamBinder.cpp
index 6b6e0e5844e..38334af9638 100644
--- a/3rdparty/lzma/CPP/7zip/Common/StreamBinder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/StreamBinder.cpp
@@ -6,51 +6,44 @@
#include "StreamBinder.h"
-class CBinderInStream:
- public ISequentialInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CBinderInStream
+ , ISequentialInStream
+)
CStreamBinder *_binder;
public:
- MY_UNKNOWN_IMP1(ISequentialInStream)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
~CBinderInStream() { _binder->CloseRead_CallOnce(); }
CBinderInStream(CStreamBinder *binder): _binder(binder) {}
};
-STDMETHODIMP CBinderInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CBinderInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{ return _binder->Read(data, size, processedSize); }
-class CBinderOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_COM_1(
+ CBinderOutStream
+ , ISequentialOutStream
+)
CStreamBinder *_binder;
public:
- MY_UNKNOWN_IMP1(ISequentialOutStream)
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
~CBinderOutStream() { _binder->CloseWrite(); }
CBinderOutStream(CStreamBinder *binder): _binder(binder) {}
};
-STDMETHODIMP CBinderOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CBinderOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{ return _binder->Write(data, size, processedSize); }
-static HRESULT Event__Create_or_Reset(NWindows::NSynchronization::CAutoResetEvent &event)
+static HRESULT Event_Create_or_Reset(NWindows::NSynchronization::CAutoResetEvent &event)
{
- WRes wres;
- if (event.IsCreated())
- wres = event.Reset();
- else
- wres = event.Create();
+ const WRes wres = event.CreateIfNotCreated_Reset();
return HRESULT_FROM_WIN32(wres);
}
HRESULT CStreamBinder::Create_ReInit()
{
- RINOK(Event__Create_or_Reset(_canRead_Event));
- // RINOK(Event__Create_or_Reset(_canWrite_Event));
+ RINOK(Event_Create_or_Reset(_canRead_Event))
+ // RINOK(Event_Create_or_Reset(_canWrite_Event))
// _canWrite_Semaphore.Close();
// we need at least 3 items of maxCount: 1 for normal unlock in Read(), 2 items for unlock in CloseRead_CallOnce()
diff --git a/3rdparty/lzma/CPP/7zip/Common/StreamBinder.h b/3rdparty/lzma/CPP/7zip/Common/StreamBinder.h
index 16c872fb57c..c0a70793c4b 100644
--- a/3rdparty/lzma/CPP/7zip/Common/StreamBinder.h
+++ b/3rdparty/lzma/CPP/7zip/Common/StreamBinder.h
@@ -1,7 +1,7 @@
// StreamBinder.h
-#ifndef __STREAM_BINDER_H
-#define __STREAM_BINDER_H
+#ifndef ZIP7_INC_STREAM_BINDER_H
+#define ZIP7_INC_STREAM_BINDER_H
#include "../../Windows/Synchronization.h"
diff --git a/3rdparty/lzma/CPP/7zip/Common/StreamObjects.cpp b/3rdparty/lzma/CPP/7zip/Common/StreamObjects.cpp
index 2d941df6d52..b54f4237359 100644
--- a/3rdparty/lzma/CPP/7zip/Common/StreamObjects.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/StreamObjects.cpp
@@ -2,13 +2,11 @@
#include "StdAfx.h"
-#include <stdlib.h>
-
#include "../../../C/Alloc.h"
#include "StreamObjects.h"
-STDMETHODIMP CBufferInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CBufferInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -26,7 +24,7 @@ STDMETHODIMP CBufferInStream::Read(void *data, UInt32 size, UInt32 *processedSiz
return S_OK;
}
-STDMETHODIMP CBufferInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CBufferInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -43,7 +41,7 @@ STDMETHODIMP CBufferInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newP
return S_OK;
}
-STDMETHODIMP CBufInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CBufInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -61,7 +59,7 @@ STDMETHODIMP CBufInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
return S_OK;
}
-STDMETHODIMP CBufInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CBufInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
@@ -99,8 +97,8 @@ void Create_BufInStream_WithNewBuffer(const void *data, size_t size, ISequential
void CByteDynBuffer::Free() throw()
{
- free(_buf);
- _buf = 0;
+ MyFree(_buf);
+ _buf = NULL;
_capacity = 0;
}
@@ -108,11 +106,10 @@ bool CByteDynBuffer::EnsureCapacity(size_t cap) throw()
{
if (cap <= _capacity)
return true;
- size_t delta = _capacity / 4;
- size_t cap2 = _capacity + delta;
+ const size_t cap2 = _capacity + _capacity / 4;
if (cap < cap2)
cap = cap2;
- Byte *buf = (Byte *)realloc(_buf, cap);
+ Byte *buf = (Byte *)MyRealloc(_buf, cap);
if (!buf)
return false;
_buf = buf;
@@ -135,7 +132,7 @@ void CDynBufSeqOutStream::CopyToBuffer(CByteBuffer &dest) const
dest.CopyFrom((const Byte *)_buffer, _size);
}
-STDMETHODIMP CDynBufSeqOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CDynBufSeqOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -151,7 +148,7 @@ STDMETHODIMP CDynBufSeqOutStream::Write(const void *data, UInt32 size, UInt32 *p
return S_OK;
}
-STDMETHODIMP CBufPtrSeqOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CBufPtrSeqOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
size_t rem = _size - _pos;
if (rem > size)
@@ -166,7 +163,7 @@ STDMETHODIMP CBufPtrSeqOutStream::Write(const void *data, UInt32 size, UInt32 *p
return (rem != 0 || size == 0) ? S_OK : E_FAIL;
}
-STDMETHODIMP CSequentialOutStreamSizeCount::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CSequentialOutStreamSizeCount::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessedSize;
HRESULT result = _stream->Write(data, size, &realProcessedSize);
@@ -216,12 +213,12 @@ void CCachedInStream::Init(UInt64 size) throw()
{
_size = size;
_pos = 0;
- size_t numBlocks = (size_t)1 << _numBlocksLog;
+ const size_t numBlocks = (size_t)1 << _numBlocksLog;
for (size_t i = 0; i < numBlocks; i++)
_tags[i] = kEmptyTag;
}
-STDMETHODIMP CCachedInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CCachedInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -231,7 +228,7 @@ STDMETHODIMP CCachedInStream::Read(void *data, UInt32 size, UInt32 *processedSiz
return S_OK;
{
- UInt64 rem = _size - _pos;
+ const UInt64 rem = _size - _pos;
if (size > rem)
size = (UInt32)rem;
}
@@ -245,12 +242,12 @@ STDMETHODIMP CCachedInStream::Read(void *data, UInt32 size, UInt32 *processedSiz
if (_tags[cacheIndex] != cacheTag)
{
_tags[cacheIndex] = kEmptyTag;
- UInt64 remInBlock = _size - (cacheTag << _blockSizeLog);
+ const UInt64 remInBlock = _size - (cacheTag << _blockSizeLog);
size_t blockSize = (size_t)1 << _blockSizeLog;
if (blockSize > remInBlock)
blockSize = (size_t)remInBlock;
- RINOK(ReadBlock(cacheTag, p, blockSize));
+ RINOK(ReadBlock(cacheTag, p, blockSize))
_tags[cacheIndex] = cacheTag;
}
@@ -275,7 +272,7 @@ STDMETHODIMP CCachedInStream::Read(void *data, UInt32 size, UInt32 *processedSiz
}
-STDMETHODIMP CCachedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
+Z7_COM7F_IMF(CCachedInStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
{
switch (seekOrigin)
{
diff --git a/3rdparty/lzma/CPP/7zip/Common/StreamObjects.h b/3rdparty/lzma/CPP/7zip/Common/StreamObjects.h
index a8fb229c8fd..2c0ebea9d62 100644
--- a/3rdparty/lzma/CPP/7zip/Common/StreamObjects.h
+++ b/3rdparty/lzma/CPP/7zip/Common/StreamObjects.h
@@ -1,7 +1,7 @@
// StreamObjects.h
-#ifndef __STREAM_OBJECTS_H
-#define __STREAM_OBJECTS_H
+#ifndef ZIP7_INC_STREAM_OBJECTS_H
+#define ZIP7_INC_STREAM_OBJECTS_H
#include "../../Common/MyBuffer.h"
#include "../../Common/MyCom.h"
@@ -9,35 +9,27 @@
#include "../IStream.h"
-class CBufferInStream:
- public IInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_IInStream(
+ CBufferInStream
+)
UInt64 _pos;
public:
CByteBuffer Buf;
void Init() { _pos = 0; }
-
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
};
-struct CReferenceBuf:
- public IUnknown,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_0(
+ CReferenceBuf
+)
+public:
CByteBuffer Buf;
- MY_UNKNOWN_IMP
};
-class CBufInStream:
- public IInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_IInStream(
+ CBufInStream
+)
const Byte *_data;
UInt64 _pos;
size_t _size;
@@ -52,9 +44,8 @@ public:
}
void Init(CReferenceBuf *ref) { Init(ref->Buf, ref->Buf.Size(), ref); }
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
+ // Seek() is allowed here. So reading order could be changed
+ bool WasFinished() const { return _pos == _size; }
};
@@ -64,13 +55,13 @@ inline void Create_BufInStream_WithNewBuffer(const CByteBuffer &buf, ISequential
{ Create_BufInStream_WithNewBuffer(buf, buf.Size(), stream); }
-class CByteDynBuffer
+class CByteDynBuffer Z7_final
{
size_t _capacity;
Byte *_buf;
- CLASS_NO_COPY(CByteDynBuffer);
+ Z7_CLASS_NO_COPY(CByteDynBuffer)
public:
- CByteDynBuffer(): _capacity(0), _buf(NULL) {};
+ CByteDynBuffer(): _capacity(0), _buf(NULL) {}
// there is no copy constructor. So don't copy this object.
~CByteDynBuffer() { Free(); }
void Free() throw();
@@ -81,10 +72,10 @@ public:
};
-class CDynBufSeqOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CDynBufSeqOutStream
+ , ISequentialOutStream
+)
CByteDynBuffer _buffer;
size_t _size;
public:
@@ -95,16 +86,13 @@ public:
void CopyToBuffer(CByteBuffer &dest) const;
Byte *GetBufPtrForWriting(size_t addSize);
void UpdateSize(size_t addSize) { _size += addSize; }
-
- MY_UNKNOWN_IMP1(ISequentialOutStream)
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
-class CBufPtrSeqOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CBufPtrSeqOutStream
+ , ISequentialOutStream
+)
Byte *_buffer;
size_t _size;
size_t _pos;
@@ -116,25 +104,19 @@ public:
_size = size;
}
size_t GetPos() const { return _pos; }
-
- MY_UNKNOWN_IMP1(ISequentialOutStream)
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
-class CSequentialOutStreamSizeCount:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CSequentialOutStreamSizeCount
+ , ISequentialOutStream
+)
CMyComPtr<ISequentialOutStream> _stream;
UInt64 _size;
public:
void SetStream(ISequentialOutStream *stream) { _stream = stream; }
void Init() { _size = 0; }
UInt64 GetSize() const { return _size; }
-
- MY_UNKNOWN_IMP1(ISequentialOutStream)
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
@@ -142,6 +124,8 @@ class CCachedInStream:
public IInStream,
public CMyUnknownImp
{
+ Z7_IFACES_IMP_UNK_2(ISequentialInStream, IInStream)
+
UInt64 *_tags;
Byte *_data;
size_t _dataSize;
@@ -153,14 +137,10 @@ protected:
virtual HRESULT ReadBlock(UInt64 blockIndex, Byte *dest, size_t blockSize) = 0;
public:
CCachedInStream(): _tags(NULL), _data(NULL) {}
- virtual ~CCachedInStream() { Free(); } // the destructor must be virtual (release calls it) !!!
+ virtual ~CCachedInStream() { Free(); } // the destructor must be virtual (Release() calls it) !!!
void Free() throw();
bool Alloc(unsigned blockSizeLog, unsigned numBlocksLog) throw();
void Init(UInt64 size) throw();
-
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Common/StreamUtils.cpp b/3rdparty/lzma/CPP/7zip/Common/StreamUtils.cpp
index 1402f420599..24eed36c5bf 100644
--- a/3rdparty/lzma/CPP/7zip/Common/StreamUtils.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/StreamUtils.cpp
@@ -2,10 +2,55 @@
#include "StdAfx.h"
+#include "../../Common/MyCom.h"
+
#include "StreamUtils.h"
static const UInt32 kBlockSize = ((UInt32)1 << 31);
+
+HRESULT InStream_SeekToBegin(IInStream *stream) throw()
+{
+ return InStream_SeekSet(stream, 0);
+}
+
+
+HRESULT InStream_AtBegin_GetSize(IInStream *stream, UInt64 &sizeRes) throw()
+{
+#ifdef _WIN32
+ {
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IStreamGetSize,
+ streamGetSize, stream)
+ if (streamGetSize && streamGetSize->GetSize(&sizeRes) == S_OK)
+ return S_OK;
+ }
+#endif
+ const HRESULT hres = InStream_GetSize_SeekToEnd(stream, sizeRes);
+ const HRESULT hres2 = InStream_SeekToBegin(stream);
+ return hres != S_OK ? hres : hres2;
+}
+
+
+HRESULT InStream_GetPos_GetSize(IInStream *stream, UInt64 &curPosRes, UInt64 &sizeRes) throw()
+{
+ RINOK(InStream_GetPos(stream, curPosRes))
+#ifdef _WIN32
+ {
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IStreamGetSize,
+ streamGetSize, stream)
+ if (streamGetSize && streamGetSize->GetSize(&sizeRes) == S_OK)
+ return S_OK;
+ }
+#endif
+ const HRESULT hres = InStream_GetSize_SeekToEnd(stream, sizeRes);
+ const HRESULT hres2 = InStream_SeekSet(stream, curPosRes);
+ return hres != S_OK ? hres : hres2;
+}
+
+
+
HRESULT ReadStream(ISequentialInStream *stream, void *data, size_t *processedSize) throw()
{
size_t size = *processedSize;
@@ -18,7 +63,7 @@ HRESULT ReadStream(ISequentialInStream *stream, void *data, size_t *processedSiz
*processedSize += processedSizeLoc;
data = (void *)((Byte *)data + processedSizeLoc);
size -= processedSizeLoc;
- RINOK(res);
+ RINOK(res)
if (processedSizeLoc == 0)
return S_OK;
}
@@ -28,14 +73,14 @@ HRESULT ReadStream(ISequentialInStream *stream, void *data, size_t *processedSiz
HRESULT ReadStream_FALSE(ISequentialInStream *stream, void *data, size_t size) throw()
{
size_t processedSize = size;
- RINOK(ReadStream(stream, data, &processedSize));
+ RINOK(ReadStream(stream, data, &processedSize))
return (size == processedSize) ? S_OK : S_FALSE;
}
HRESULT ReadStream_FAIL(ISequentialInStream *stream, void *data, size_t size) throw()
{
size_t processedSize = size;
- RINOK(ReadStream(stream, data, &processedSize));
+ RINOK(ReadStream(stream, data, &processedSize))
return (size == processedSize) ? S_OK : E_FAIL;
}
@@ -48,7 +93,7 @@ HRESULT WriteStream(ISequentialOutStream *stream, const void *data, size_t size)
HRESULT res = stream->Write(data, curSize, &processedSizeLoc);
data = (const void *)((const Byte *)data + processedSizeLoc);
size -= processedSizeLoc;
- RINOK(res);
+ RINOK(res)
if (processedSizeLoc == 0)
return E_FAIL;
}
diff --git a/3rdparty/lzma/CPP/7zip/Common/StreamUtils.h b/3rdparty/lzma/CPP/7zip/Common/StreamUtils.h
index ae914c004b0..35a62ed3e95 100644
--- a/3rdparty/lzma/CPP/7zip/Common/StreamUtils.h
+++ b/3rdparty/lzma/CPP/7zip/Common/StreamUtils.h
@@ -1,10 +1,28 @@
// StreamUtils.h
-#ifndef __STREAM_UTILS_H
-#define __STREAM_UTILS_H
+#ifndef ZIP7_INC_STREAM_UTILS_H
+#define ZIP7_INC_STREAM_UTILS_H
#include "../IStream.h"
+inline HRESULT InStream_SeekSet(IInStream *stream, UInt64 offset) throw()
+ { return stream->Seek((Int64)offset, STREAM_SEEK_SET, NULL); }
+inline HRESULT InStream_GetPos(IInStream *stream, UInt64 &curPosRes) throw()
+ { return stream->Seek(0, STREAM_SEEK_CUR, &curPosRes); }
+inline HRESULT InStream_GetSize_SeekToEnd(IInStream *stream, UInt64 &sizeRes) throw()
+ { return stream->Seek(0, STREAM_SEEK_END, &sizeRes); }
+
+HRESULT InStream_SeekToBegin(IInStream *stream) throw();
+HRESULT InStream_AtBegin_GetSize(IInStream *stream, UInt64 &size) throw();
+HRESULT InStream_GetPos_GetSize(IInStream *stream, UInt64 &curPosRes, UInt64 &sizeRes) throw();
+
+inline HRESULT InStream_GetSize_SeekToBegin(IInStream *stream, UInt64 &sizeRes) throw()
+{
+ RINOK(InStream_SeekToBegin(stream))
+ return InStream_AtBegin_GetSize(stream, sizeRes);
+}
+
+
HRESULT ReadStream(ISequentialInStream *stream, void *data, size_t *size) throw();
HRESULT ReadStream_FALSE(ISequentialInStream *stream, void *data, size_t size) throw();
HRESULT ReadStream_FAIL(ISequentialInStream *stream, void *data, size_t size) throw();
diff --git a/3rdparty/lzma/CPP/7zip/Common/UniqBlocks.h b/3rdparty/lzma/CPP/7zip/Common/UniqBlocks.h
index 8479d68cb48..66c7fa21b8a 100644
--- a/3rdparty/lzma/CPP/7zip/Common/UniqBlocks.h
+++ b/3rdparty/lzma/CPP/7zip/Common/UniqBlocks.h
@@ -1,7 +1,7 @@
// UniqBlocks.h
-#ifndef __UNIQ_BLOCKS_H
-#define __UNIQ_BLOCKS_H
+#ifndef ZIP7_INC_UNIQ_BLOCKS_H
+#define ZIP7_INC_UNIQ_BLOCKS_H
#include "../../Common/MyBuffer.h"
#include "../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/Common/VirtThread.cpp b/3rdparty/lzma/CPP/7zip/Common/VirtThread.cpp
index bf24bb1cc58..3cf7296c26a 100644
--- a/3rdparty/lzma/CPP/7zip/Common/VirtThread.cpp
+++ b/3rdparty/lzma/CPP/7zip/Common/VirtThread.cpp
@@ -11,7 +11,7 @@ static THREAD_FUNC_DECL CoderThread(void *p)
CVirtThread *t = (CVirtThread *)p;
t->StartEvent.Lock();
if (t->Exit)
- return 0;
+ return THREAD_FUNC_RET_ZERO;
t->Execute();
t->FinishedEvent.Set();
}
@@ -19,8 +19,8 @@ static THREAD_FUNC_DECL CoderThread(void *p)
WRes CVirtThread::Create()
{
- RINOK_WRes(StartEvent.CreateIfNotCreated_Reset());
- RINOK_WRes(FinishedEvent.CreateIfNotCreated_Reset());
+ RINOK_WRes(StartEvent.CreateIfNotCreated_Reset())
+ RINOK_WRes(FinishedEvent.CreateIfNotCreated_Reset())
// StartEvent.Reset();
// FinishedEvent.Reset();
Exit = false;
diff --git a/3rdparty/lzma/CPP/7zip/Common/VirtThread.h b/3rdparty/lzma/CPP/7zip/Common/VirtThread.h
index b4d8a5a99c7..809b3568985 100644
--- a/3rdparty/lzma/CPP/7zip/Common/VirtThread.h
+++ b/3rdparty/lzma/CPP/7zip/Common/VirtThread.h
@@ -1,7 +1,7 @@
// VirtThread.h
-#ifndef __VIRT_THREAD_H
-#define __VIRT_THREAD_H
+#ifndef ZIP7_INC_VIRT_THREAD_H
+#define ZIP7_INC_VIRT_THREAD_H
#include "../../Windows/Synchronization.h"
#include "../../Windows/Thread.h"
@@ -13,7 +13,7 @@ struct CVirtThread
NWindows::CThread Thread;
bool Exit;
- ~CVirtThread() { WaitThreadFinish(); }
+ virtual ~CVirtThread() { WaitThreadFinish(); }
void WaitThreadFinish(); // call it in destructor of child class !
WRes Create();
WRes Start();
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.cpp b/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.cpp
index 561fd08b732..27e78b00b92 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.cpp
@@ -2,6 +2,8 @@
#include "StdAfx.h"
+// #include <stdio.h>
+
#include "../../../C/Alloc.h"
#include "../Common/StreamUtils.h"
@@ -13,42 +15,47 @@ namespace NBcj2 {
CBaseCoder::CBaseCoder()
{
- for (int i = 0; i < BCJ2_NUM_STREAMS + 1; i++)
+ for (unsigned i = 0; i < BCJ2_NUM_STREAMS + 1; i++)
{
_bufs[i] = NULL;
- _bufsCurSizes[i] = 0;
- _bufsNewSizes[i] = (1 << 18);
+ _bufsSizes[i] = 0;
+ _bufsSizes_New[i] = (1 << 18);
}
}
CBaseCoder::~CBaseCoder()
{
- for (int i = 0; i < BCJ2_NUM_STREAMS + 1; i++)
+ for (unsigned i = 0; i < BCJ2_NUM_STREAMS + 1; i++)
::MidFree(_bufs[i]);
}
HRESULT CBaseCoder::Alloc(bool allocForOrig)
{
- unsigned num = allocForOrig ? BCJ2_NUM_STREAMS + 1 : BCJ2_NUM_STREAMS;
+ const unsigned num = allocForOrig ? BCJ2_NUM_STREAMS + 1 : BCJ2_NUM_STREAMS;
for (unsigned i = 0; i < num; i++)
{
- UInt32 newSize = _bufsNewSizes[i];
- const UInt32 kMinBufSize = 1;
- if (newSize < kMinBufSize)
- newSize = kMinBufSize;
- if (!_bufs[i] || newSize != _bufsCurSizes[i])
+ UInt32 size = _bufsSizes_New[i];
+ /* buffer sizes for BCJ2_STREAM_CALL and BCJ2_STREAM_JUMP streams
+ must be aligned for 4 */
+ size &= ~(UInt32)3;
+ const UInt32 kMinBufSize = 4;
+ if (size < kMinBufSize)
+ size = kMinBufSize;
+ // size = 4 * 100; // for debug
+ // if (BCJ2_IS_32BIT_STREAM(i) == 1) size = 4 * 1; // for debug
+ if (!_bufs[i] || size != _bufsSizes[i])
{
if (_bufs[i])
{
::MidFree(_bufs[i]);
- _bufs[i] = 0;
+ _bufs[i] = NULL;
}
- _bufsCurSizes[i] = 0;
- Byte *buf = (Byte *)::MidAlloc(newSize);
- _bufs[i] = buf;
+ _bufsSizes[i] = 0;
+ Byte *buf = (Byte *)::MidAlloc(size);
if (!buf)
return E_OUTOFMEMORY;
- _bufsCurSizes[i] = newSize;
+ _bufs[i] = buf;
+ _bufsSizes[i] = size;
}
}
return S_OK;
@@ -56,23 +63,30 @@ HRESULT CBaseCoder::Alloc(bool allocForOrig)
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
-CEncoder::CEncoder(): _relatLim(BCJ2_RELAT_LIMIT) {}
+CEncoder::CEncoder():
+ _relatLim(BCJ2_ENC_RELAT_LIMIT_DEFAULT)
+ // , _excludeRangeBits(BCJ2_RELAT_EXCLUDE_NUM_BITS)
+ {}
CEncoder::~CEncoder() {}
-STDMETHODIMP CEncoder::SetInBufSize(UInt32, UInt32 size) { _bufsNewSizes[BCJ2_NUM_STREAMS] = size; return S_OK; }
-STDMETHODIMP CEncoder::SetOutBufSize(UInt32 streamIndex, UInt32 size) { _bufsNewSizes[streamIndex] = size; return S_OK; }
+Z7_COM7F_IMF(CEncoder::SetInBufSize(UInt32, UInt32 size))
+ { _bufsSizes_New[BCJ2_NUM_STREAMS] = size; return S_OK; }
+Z7_COM7F_IMF(CEncoder::SetOutBufSize(UInt32 streamIndex, UInt32 size))
+ { _bufsSizes_New[streamIndex] = size; return S_OK; }
-STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps))
{
- UInt32 relatLim = BCJ2_RELAT_LIMIT;
-
+ UInt32 relatLim = BCJ2_ENC_RELAT_LIMIT_DEFAULT;
+ // UInt32 excludeRangeBits = BCJ2_RELAT_EXCLUDE_NUM_BITS;
for (UInt32 i = 0; i < numProps; i++)
{
const PROPVARIANT &prop = props[i];
- PROPID propID = propIDs[i];
- if (propID >= NCoderPropID::kReduceSize)
+ const PROPID propID = propIDs[i];
+ if (propID >= NCoderPropID::kReduceSize
+ // && propID != NCoderPropID::kHashBits
+ )
continue;
switch (propID)
{
@@ -87,225 +101,310 @@ STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIA
relatLim = (UInt32)1 << v;
break;
}
+ case NCoderPropID::kHashBits:
+ {
+ if (prop.vt != VT_UI4)
+ return E_INVALIDARG;
+ UInt32 v = prop.ulVal;
+ if (v > 31)
+ return E_INVALIDARG;
+ excludeRangeBits = v;
+ break;
+ }
*/
case NCoderPropID::kDictionarySize:
{
if (prop.vt != VT_UI4)
return E_INVALIDARG;
relatLim = prop.ulVal;
- if (relatLim > ((UInt32)1 << 31))
+ if (relatLim > BCJ2_ENC_RELAT_LIMIT_MAX)
return E_INVALIDARG;
break;
}
-
case NCoderPropID::kNumThreads:
- continue;
case NCoderPropID::kLevel:
continue;
-
default: return E_INVALIDARG;
}
}
-
_relatLim = relatLim;
-
+ // _excludeRangeBits = excludeRangeBits;
return S_OK;
}
-HRESULT CEncoder::CodeReal(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
+HRESULT CEncoder::CodeReal(
+ ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
ISequentialOutStream * const *outStreams, const UInt64 * const * /* outSizes */, UInt32 numOutStreams,
ICompressProgressInfo *progress)
{
if (numInStreams != 1 || numOutStreams != BCJ2_NUM_STREAMS)
return E_INVALIDARG;
- RINOK(Alloc());
+ RINOK(Alloc())
- UInt32 fileSize_for_Conv = 0;
+ CBcj2Enc_ip_unsigned fileSize_minus1 = BCJ2_ENC_FileSizeField_UNLIMITED;
if (inSizes && inSizes[0])
{
- UInt64 inSize = *inSizes[0];
- if (inSize <= BCJ2_FileSize_MAX)
- fileSize_for_Conv = (UInt32)inSize;
+ const UInt64 inSize = *inSizes[0];
+ #ifdef BCJ2_ENC_FileSize_MAX
+ if (inSize <= BCJ2_ENC_FileSize_MAX)
+ #endif
+ fileSize_minus1 = BCJ2_ENC_GET_FileSizeField_VAL_FROM_FileSize(inSize);
}
- CMyComPtr<ICompressGetSubStreamSize> getSubStreamSize;
- inStreams[0]->QueryInterface(IID_ICompressGetSubStreamSize, (void **)&getSubStreamSize);
+ Z7_DECL_CMyComPtr_QI_FROM(ICompressGetSubStreamSize, getSubStreamSize, inStreams[0])
CBcj2Enc enc;
-
enc.src = _bufs[BCJ2_NUM_STREAMS];
enc.srcLim = enc.src;
-
{
- for (int i = 0; i < BCJ2_NUM_STREAMS; i++)
+ for (unsigned i = 0; i < BCJ2_NUM_STREAMS; i++)
{
enc.bufs[i] = _bufs[i];
- enc.lims[i] = _bufs[i] + _bufsCurSizes[i];
+ enc.lims[i] = _bufs[i] + _bufsSizes[i];
}
}
-
- size_t numBytes_in_ReadBuf = 0;
- UInt64 prevProgress = 0;
- UInt64 totalStreamRead = 0; // size read from InputStream
- UInt64 currentInPos = 0; // data that was processed, it doesn't include data in input buffer and data in enc.temp
- UInt64 outSizeRc = 0;
-
Bcj2Enc_Init(&enc);
-
- enc.fileIp = 0;
- enc.fileSize = fileSize_for_Conv;
-
+ enc.fileIp64 = 0;
+ enc.fileSize64_minus1 = fileSize_minus1;
enc.relatLimit = _relatLim;
-
+ // enc.relatExcludeBits = _excludeRangeBits;
enc.finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
- bool needSubSize = false;
- UInt64 subStreamIndex = 0;
- UInt64 subStreamStartPos = 0;
+ // Varibales that correspond processed data in input stream:
+ UInt64 inPos_without_Temp = 0; // it doesn't include data in enc.temp[]
+ UInt64 inPos_with_Temp = 0; // it includes data in enc.temp[]
+
+ UInt64 prevProgress = 0;
+ UInt64 totalRead = 0; // size read from input stream
+ UInt64 outSizeRc = 0;
+ UInt64 subStream_Index = 0;
+ UInt64 subStream_StartPos = 0; // global start offset of subStreams[subStream_Index]
+ UInt64 subStream_Size = 0;
+ const Byte *srcLim_Read = _bufs[BCJ2_NUM_STREAMS];
bool readWasFinished = false;
+ bool isAccurate = false;
+ bool wasUnknownSize = false;
for (;;)
{
- if (needSubSize && getSubStreamSize)
- {
- enc.fileIp = 0;
- enc.fileSize = fileSize_for_Conv;
- enc.finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
-
- for (;;)
- {
- UInt64 subStreamSize = 0;
- HRESULT result = getSubStreamSize->GetSubStreamSize(subStreamIndex, &subStreamSize);
- needSubSize = false;
-
- if (result == S_OK)
- {
- UInt64 newEndPos = subStreamStartPos + subStreamSize;
-
- bool isAccurateEnd = (newEndPos < totalStreamRead ||
- (newEndPos <= totalStreamRead && readWasFinished));
-
- if (newEndPos <= currentInPos && isAccurateEnd)
- {
- subStreamStartPos = newEndPos;
- subStreamIndex++;
- continue;
- }
-
- enc.srcLim = _bufs[BCJ2_NUM_STREAMS] + numBytes_in_ReadBuf;
-
- if (isAccurateEnd)
- {
- // data in enc.temp is possible here
- size_t rem = (size_t)(totalStreamRead - newEndPos);
-
- /* Pos_of(enc.src) <= old newEndPos <= newEndPos
- in another case, it's fail in some code */
- if ((size_t)(enc.srcLim - enc.src) < rem)
- return E_FAIL;
-
- enc.srcLim -= rem;
- enc.finishMode = BCJ2_ENC_FINISH_MODE_END_BLOCK;
- }
-
- if (subStreamSize <= BCJ2_FileSize_MAX)
- {
- enc.fileIp = enc.ip + (UInt32)(subStreamStartPos - currentInPos);
- enc.fileSize = (UInt32)subStreamSize;
- }
- break;
- }
-
- if (result == S_FALSE)
- break;
- if (result == E_NOTIMPL)
- {
- getSubStreamSize.Release();
- break;
- }
- return result;
- }
- }
-
- if (readWasFinished && totalStreamRead - currentInPos == Bcj2Enc_Get_InputData_Size(&enc))
+ if (readWasFinished && enc.srcLim == srcLim_Read)
enc.finishMode = BCJ2_ENC_FINISH_MODE_END_STREAM;
+ // for debug:
+ // for (int y=0;y<100;y++) { CBcj2Enc enc2 = enc; Bcj2Enc_Encode(&enc2); }
+
Bcj2Enc_Encode(&enc);
- currentInPos = totalStreamRead - numBytes_in_ReadBuf + (size_t)(enc.src - _bufs[BCJ2_NUM_STREAMS]) - enc.tempPos;
+ inPos_with_Temp = totalRead - (size_t)(srcLim_Read - enc.src);
+ inPos_without_Temp = inPos_with_Temp - Bcj2Enc_Get_AvailInputSize_in_Temp(&enc);
+ // if (inPos_without_Temp != enc.ip64) return E_FAIL;
+
if (Bcj2Enc_IsFinished(&enc))
break;
if (enc.state < BCJ2_NUM_STREAMS)
{
+ if (enc.bufs[enc.state] != enc.lims[enc.state])
+ return E_FAIL;
const size_t curSize = (size_t)(enc.bufs[enc.state] - _bufs[enc.state]);
// printf("Write stream = %2d %6d\n", enc.state, curSize);
- RINOK(WriteStream(outStreams[enc.state], _bufs[enc.state], curSize));
+ RINOK(WriteStream(outStreams[enc.state], _bufs[enc.state], curSize))
if (enc.state == BCJ2_STREAM_RC)
outSizeRc += curSize;
-
enc.bufs[enc.state] = _bufs[enc.state];
- enc.lims[enc.state] = _bufs[enc.state] + _bufsCurSizes[enc.state];
+ enc.lims[enc.state] = _bufs[enc.state] + _bufsSizes[enc.state];
}
- else if (enc.state != BCJ2_ENC_STATE_ORIG)
- return E_FAIL;
else
{
- needSubSize = true;
-
- if (numBytes_in_ReadBuf != (size_t)(enc.src - _bufs[BCJ2_NUM_STREAMS]))
+ if (enc.state != BCJ2_ENC_STATE_ORIG)
+ return E_FAIL;
+ // (enc.state == BCJ2_ENC_STATE_ORIG)
+ if (enc.src != enc.srcLim)
+ return E_FAIL;
+ if (enc.finishMode != BCJ2_ENC_FINISH_MODE_CONTINUE
+ && Bcj2Enc_Get_AvailInputSize_in_Temp(&enc) != 0)
+ return E_FAIL;
+
+ if (enc.src == srcLim_Read)
{
- enc.srcLim = _bufs[BCJ2_NUM_STREAMS] + numBytes_in_ReadBuf;
- continue;
+ if (readWasFinished)
+ return E_FAIL;
+ UInt32 curSize = _bufsSizes[BCJ2_NUM_STREAMS];
+ RINOK(inStreams[0]->Read(_bufs[BCJ2_NUM_STREAMS], curSize, &curSize))
+ // printf("Read %6u bytes\n", curSize);
+ if (curSize == 0)
+ readWasFinished = true;
+ totalRead += curSize;
+ enc.src = _bufs[BCJ2_NUM_STREAMS];
+ srcLim_Read = _bufs[BCJ2_NUM_STREAMS] + curSize;
}
+ enc.srcLim = srcLim_Read;
- if (readWasFinished)
- continue;
-
- numBytes_in_ReadBuf = 0;
- enc.src = _bufs[BCJ2_NUM_STREAMS];
- enc.srcLim = _bufs[BCJ2_NUM_STREAMS];
-
- UInt32 curSize = _bufsCurSizes[BCJ2_NUM_STREAMS];
- RINOK(inStreams[0]->Read(_bufs[BCJ2_NUM_STREAMS], curSize, &curSize));
-
- // printf("Read %6d bytes\n", curSize);
- if (curSize == 0)
+ if (getSubStreamSize)
{
- readWasFinished = true;
- continue;
- }
+ /* we set base default conversions options that will be used,
+ if subStream related options will be not OK */
+ enc.fileIp64 = 0;
+ enc.fileSize64_minus1 = fileSize_minus1;
+ for (;;)
+ {
+ UInt64 nextPos;
+ if (isAccurate)
+ nextPos = subStream_StartPos + subStream_Size;
+ else
+ {
+ const HRESULT hres = getSubStreamSize->GetSubStreamSize(subStream_Index, &subStream_Size);
+ if (hres != S_OK)
+ {
+ enc.finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
+ /* if sub-stream size is unknown, we use default settings.
+ We still can recover to normal mode for next sub-stream,
+ if GetSubStreamSize() will return S_OK, when current
+ sub-stream will be finished.
+ */
+ if (hres == S_FALSE)
+ {
+ wasUnknownSize = true;
+ break;
+ }
+ if (hres == E_NOTIMPL)
+ {
+ getSubStreamSize.Release();
+ break;
+ }
+ return hres;
+ }
+ // printf("GetSubStreamSize %6u : %6u \n", (unsigned)subStream_Index, (unsigned)subStream_Size);
+ nextPos = subStream_StartPos + subStream_Size;
+ if ((Int64)subStream_Size == -1)
+ {
+ /* it's not expected, but (-1) can mean unknown size. */
+ enc.finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
+ wasUnknownSize = true;
+ break;
+ }
+ if (nextPos < subStream_StartPos)
+ return E_FAIL;
+ isAccurate =
+ (nextPos < totalRead
+ || (nextPos <= totalRead && readWasFinished));
+ }
+
+ /* (nextPos) is estimated end position of current sub_stream.
+ But only (totalRead) and (readWasFinished) values
+ can confirm that this estimated end position is accurate.
+ That end position is accurate, if it can't be changed in
+ further calls of GetSubStreamSize() */
+
+ /* (nextPos < inPos_with_Temp) is unexpected case here, that we
+ can get if from some incorrect ICompressGetSubStreamSize object,
+ where new GetSubStreamSize() call returns smaller size than
+ confirmed by Read() size from previous GetSubStreamSize() call.
+ */
+ if (nextPos < inPos_with_Temp)
+ {
+ if (wasUnknownSize)
+ {
+ /* that case can be complicated for recovering.
+ so we disable sub-streams requesting. */
+ enc.finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
+ getSubStreamSize.Release();
+ break;
+ }
+ return E_FAIL; // to stop after failure
+ }
+
+ if (nextPos <= inPos_with_Temp)
+ {
+ // (nextPos == inPos_with_Temp)
+ /* CBcj2Enc encoder requires to finish each [non-empty] block (sub-stream)
+ with BCJ2_ENC_FINISH_MODE_END_BLOCK
+ or with BCJ2_ENC_FINISH_MODE_END_STREAM for last block:
+ And we send data of new block to CBcj2Enc, only if previous block was finished.
+ So we switch to next sub-stream if after Bcj2Enc_Encode() call we have
+ && (enc.finishMode != BCJ2_ENC_FINISH_MODE_CONTINUE)
+ && (nextPos == inPos_with_Temp)
+ && (enc.state == BCJ2_ENC_STATE_ORIG)
+ */
+ if (enc.finishMode != BCJ2_ENC_FINISH_MODE_CONTINUE)
+ {
+ /* subStream_StartPos is increased only here.
+ (subStream_StartPos == inPos_with_Temp) : at start
+ (subStream_StartPos <= inPos_with_Temp) : will be later
+ */
+ subStream_StartPos = nextPos;
+ subStream_Size = 0;
+ wasUnknownSize = false;
+ subStream_Index++;
+ isAccurate = false;
+ // we don't change finishMode here
+ continue;
+ }
+ }
+
+ enc.finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
+ /* for (!isAccurate) case:
+ (totalRead <= real_end_of_subStream)
+ so we can use BCJ2_ENC_FINISH_MODE_CONTINUE up to (totalRead)
+ // we don't change settings at the end of substream, if settings were unknown,
+ */
+
+ /* if (wasUnknownSize) then we can't trust size of that sub-stream.
+ so we use default settings instead */
+ if (!wasUnknownSize)
+ #ifdef BCJ2_ENC_FileSize_MAX
+ if (subStream_Size <= BCJ2_ENC_FileSize_MAX)
+ #endif
+ {
+ enc.fileIp64 =
+ (CBcj2Enc_ip_unsigned)(
+ (CBcj2Enc_ip_signed)enc.ip64 +
+ (CBcj2Enc_ip_signed)(subStream_StartPos - inPos_without_Temp));
+ Bcj2Enc_SET_FileSize(&enc, subStream_Size)
+ }
+
+ if (isAccurate)
+ {
+ /* (real_end_of_subStream == nextPos <= totalRead)
+ So we can use BCJ2_ENC_FINISH_MODE_END_BLOCK up to (nextPos). */
+ const size_t rem = (size_t)(totalRead - nextPos);
+ if ((size_t)(enc.srcLim - enc.src) < rem)
+ return E_FAIL;
+ enc.srcLim -= rem;
+ enc.finishMode = BCJ2_ENC_FINISH_MODE_END_BLOCK;
+ }
- numBytes_in_ReadBuf = curSize;
- totalStreamRead += numBytes_in_ReadBuf;
- enc.srcLim = _bufs[BCJ2_NUM_STREAMS] + numBytes_in_ReadBuf;
+ break;
+ } // for() loop
+ } // getSubStreamSize
}
- if (progress && currentInPos - prevProgress >= (1 << 20))
+ if (progress && inPos_without_Temp - prevProgress >= (1 << 22))
{
- const UInt64 outSize2 = currentInPos + outSizeRc + (size_t)(enc.bufs[BCJ2_STREAM_RC] - enc.bufs[BCJ2_STREAM_RC]);
- prevProgress = currentInPos;
- // printf("progress %8d, %8d\n", (int)inSize2, (int)outSize2);
- RINOK(progress->SetRatioInfo(&currentInPos, &outSize2));
+ prevProgress = inPos_without_Temp;
+ const UInt64 outSize2 = inPos_without_Temp + outSizeRc +
+ (size_t)(enc.bufs[BCJ2_STREAM_RC] - _bufs[BCJ2_STREAM_RC]);
+ // printf("progress %8u, %8u\n", (unsigned)inSize2, (unsigned)outSize2);
+ RINOK(progress->SetRatioInfo(&inPos_without_Temp, &outSize2))
}
}
- for (int i = 0; i < BCJ2_NUM_STREAMS; i++)
+ for (unsigned i = 0; i < BCJ2_NUM_STREAMS; i++)
{
- RINOK(WriteStream(outStreams[i], _bufs[i], (size_t)(enc.bufs[i] - _bufs[i])));
+ RINOK(WriteStream(outStreams[i], _bufs[i], (size_t)(enc.bufs[i] - _bufs[i])))
}
-
- // if (currentInPos != subStreamStartPos + subStreamSize) return E_FAIL;
-
+ // if (inPos_without_Temp != subStream_StartPos + subStream_Size) return E_FAIL;
return S_OK;
}
-STDMETHODIMP CEncoder::Code(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
+
+Z7_COM7F_IMF(CEncoder::Code(
+ ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
- ICompressProgressInfo *progress)
+ ICompressProgressInfo *progress))
{
try
{
@@ -321,141 +420,170 @@ STDMETHODIMP CEncoder::Code(ISequentialInStream * const *inStreams, const UInt64
-STDMETHODIMP CDecoder::SetInBufSize(UInt32 streamIndex, UInt32 size) { _bufsNewSizes[streamIndex] = size; return S_OK; }
-STDMETHODIMP CDecoder::SetOutBufSize(UInt32 , UInt32 size) { _bufsNewSizes[BCJ2_NUM_STREAMS] = size; return S_OK; }
-
-CDecoder::CDecoder(): _finishMode(false), _outSizeDefined(false), _outSize(0)
+CDecoder::CDecoder():
+ _finishMode(false)
+#ifndef Z7_NO_READ_FROM_CODER
+ , _outSizeDefined(false)
+ , _outSize(0)
+ , _outSize_Processed(0)
+#endif
{}
-STDMETHODIMP CDecoder::SetFinishMode(UInt32 finishMode)
+Z7_COM7F_IMF(CDecoder::SetInBufSize(UInt32 streamIndex, UInt32 size))
+ { _bufsSizes_New[streamIndex] = size; return S_OK; }
+Z7_COM7F_IMF(CDecoder::SetOutBufSize(UInt32, UInt32 size))
+ { _bufsSizes_New[BCJ2_NUM_STREAMS] = size; return S_OK; }
+
+Z7_COM7F_IMF(CDecoder::SetFinishMode(UInt32 finishMode))
{
_finishMode = (finishMode != 0);
return S_OK;
}
-void CDecoder::InitCommon()
+void CBaseDecoder::InitCommon()
{
+ for (unsigned i = 0; i < BCJ2_NUM_STREAMS; i++)
{
- for (int i = 0; i < BCJ2_NUM_STREAMS; i++)
- dec.lims[i] = dec.bufs[i] = _bufs[i];
+ dec.lims[i] = dec.bufs[i] = _bufs[i];
+ _readRes[i] = S_OK;
+ _extraSizes[i] = 0;
+ _readSizes[i] = 0;
}
+ Bcj2Dec_Init(&dec);
+}
+
+/* call ReadInStream() only after Bcj2Dec_Decode().
+ input requirement:
+ (dec.state < BCJ2_NUM_STREAMS)
+*/
+void CBaseDecoder::ReadInStream(ISequentialInStream *inStream)
+{
+ const unsigned state = dec.state;
+ UInt32 total;
{
- for (int i = 0; i < BCJ2_NUM_STREAMS; i++)
+ Byte *buf = _bufs[state];
+ const Byte *cur = dec.bufs[state];
+ // if (cur != dec.lims[state]) throw 1; // unexpected case
+ dec.lims[state] =
+ dec.bufs[state] = buf;
+ total = (UInt32)_extraSizes[state];
+ for (UInt32 i = 0; i < total; i++)
+ buf[i] = cur[i];
+ }
+
+ if (_readRes[state] != S_OK)
+ return;
+
+ do
+ {
+ UInt32 curSize = _bufsSizes[state] - total;
+ // if (state == 0) curSize = 0; // for debug
+ // curSize = 7; // for debug
+ /* even if we have reached provided inSizes[state] limit,
+ we call Read() with (curSize != 0), because
+ we want the called handler of stream->Read() could
+ execute required Init/Flushing code even for empty stream.
+ In another way we could call Read() with (curSize == 0) for
+ finished streams, but some Read() handlers can ignore Read(size=0) calls.
+ */
+ const HRESULT hres = inStream->Read(_bufs[state] + total, curSize, &curSize);
+ _readRes[state] = hres;
+ if (curSize == 0)
+ break;
+ _readSizes[state] += curSize;
+ total += curSize;
+ if (hres != S_OK)
+ break;
+ }
+ while (total < 4 && BCJ2_IS_32BIT_STREAM(state));
+
+ /* we exit from decoding loop here, if we can't
+ provide new data for input stream.
+ Usually it's normal exit after full stream decoding. */
+ if (total == 0)
+ return;
+
+ if (BCJ2_IS_32BIT_STREAM(state))
+ {
+ const unsigned extra = ((unsigned)total & 3);
+ _extraSizes[state] = extra;
+ if (total < 4)
{
- _extraReadSizes[i] = 0;
- _inStreamsProcessed[i] = 0;
- _readRes[i] = S_OK;
+ if (_readRes[state] == S_OK)
+ _readRes[state] = S_FALSE; // actually it's stream error. So maybe we need another error code.
+ return;
}
+ total -= extra;
}
-
- Bcj2Dec_Init(&dec);
+
+ dec.lims[state] += total; // = _bufs[state] + total;
}
-HRESULT CDecoder::Code(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
+
+Z7_COM7F_IMF(CDecoder::Code(
+ ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
- ICompressProgressInfo *progress)
+ ICompressProgressInfo *progress))
{
if (numInStreams != BCJ2_NUM_STREAMS || numOutStreams != 1)
return E_INVALIDARG;
- RINOK(Alloc());
-
+ RINOK(Alloc())
InitCommon();
dec.destLim = dec.dest = _bufs[BCJ2_NUM_STREAMS];
- UInt64 outSizeProcessed = 0;
+ UInt64 outSizeWritten = 0;
UInt64 prevProgress = 0;
- HRESULT res = S_OK;
+ HRESULT hres_Crit = S_OK; // critical hres status (mostly from input stream reading)
+ HRESULT hres_Weak = S_OK; // first non-critical error code from input stream reading
for (;;)
{
if (Bcj2Dec_Decode(&dec) != SZ_OK)
- return S_FALSE;
-
+ {
+ /* it's possible only at start (first 5 bytes in RC stream) */
+ hres_Crit = S_FALSE;
+ break;
+ }
if (dec.state < BCJ2_NUM_STREAMS)
{
- size_t totalRead = _extraReadSizes[dec.state];
+ ReadInStream(inStreams[dec.state]);
+ const unsigned state = dec.state;
+ const HRESULT hres = _readRes[state];
+ if (dec.lims[state] == _bufs[state])
{
- Byte *buf = _bufs[dec.state];
- for (size_t i = 0; i < totalRead; i++)
- buf[i] = dec.bufs[dec.state][i];
- dec.lims[dec.state] =
- dec.bufs[dec.state] = buf;
- }
-
- if (_readRes[dec.state] != S_OK)
- {
- res = _readRes[dec.state];
+ // we break decoding, if there are no new data in input stream
+ hres_Crit = hres;
break;
}
-
- do
- {
- UInt32 curSize = _bufsCurSizes[dec.state] - (UInt32)totalRead;
- /*
- we want to call Read even even if size is 0
- if (inSizes && inSizes[dec.state])
- {
- UInt64 rem = *inSizes[dec.state] - _inStreamsProcessed[dec.state];
- if (curSize > rem)
- curSize = (UInt32)rem;
- }
- */
-
- HRESULT res2 = inStreams[dec.state]->Read(_bufs[dec.state] + totalRead, curSize, &curSize);
- _readRes[dec.state] = res2;
- if (curSize == 0)
- break;
- _inStreamsProcessed[dec.state] += curSize;
- totalRead += curSize;
- if (res2 != S_OK)
- break;
- }
- while (totalRead < 4 && BCJ2_IS_32BIT_STREAM(dec.state));
-
- if (_readRes[dec.state] != S_OK)
- res = _readRes[dec.state];
-
- if (totalRead == 0)
- break;
-
- // res == S_OK;
-
- if (BCJ2_IS_32BIT_STREAM(dec.state))
- {
- unsigned extraSize = ((unsigned)totalRead & 3);
- _extraReadSizes[dec.state] = extraSize;
- if (totalRead < 4)
- {
- res = (_readRes[dec.state] != S_OK) ? _readRes[dec.state] : S_FALSE;
- break;
- }
- totalRead -= extraSize;
- }
-
- dec.lims[dec.state] = _bufs[dec.state] + totalRead;
+ if (hres != S_OK && hres_Weak == S_OK)
+ hres_Weak = hres;
}
- else // if (dec.state <= BCJ2_STATE_ORIG)
+ else // (BCJ2_DEC_STATE_ORIG_0 <= state <= BCJ2_STATE_ORIG)
{
- const size_t curSize = (size_t)(dec.dest - _bufs[BCJ2_NUM_STREAMS]);
- if (curSize != 0)
{
- outSizeProcessed += curSize;
- RINOK(WriteStream(outStreams[0], _bufs[BCJ2_NUM_STREAMS], curSize));
+ const size_t curSize = (size_t)(dec.dest - _bufs[BCJ2_NUM_STREAMS]);
+ if (curSize != 0)
+ {
+ outSizeWritten += curSize;
+ RINOK(WriteStream(outStreams[0], _bufs[BCJ2_NUM_STREAMS], curSize))
+ }
}
- dec.dest = _bufs[BCJ2_NUM_STREAMS];
{
- size_t rem = _bufsCurSizes[BCJ2_NUM_STREAMS];
+ UInt32 rem = _bufsSizes[BCJ2_NUM_STREAMS];
if (outSizes && outSizes[0])
{
- UInt64 outSize = *outSizes[0] - outSizeProcessed;
+ const UInt64 outSize = *outSizes[0] - outSizeWritten;
if (rem > outSize)
- rem = (size_t)outSize;
+ rem = (UInt32)outSize;
}
+ dec.dest = _bufs[BCJ2_NUM_STREAMS];
dec.destLim = dec.dest + rem;
+ /* we exit from decoding loop here,
+ if (outSizes[0]) limit for output stream was reached */
if (rem == 0)
break;
}
@@ -463,47 +591,67 @@ HRESULT CDecoder::Code(ISequentialInStream * const *inStreams, const UInt64 * co
if (progress)
{
- const UInt64 outSize2 = outSizeProcessed + (size_t)(dec.dest - _bufs[BCJ2_NUM_STREAMS]);
- if (outSize2 - prevProgress >= (1 << 22))
+ // here we don't count additional data in dec.temp (up to 4 bytes for output stream)
+ const UInt64 processed = outSizeWritten + (size_t)(dec.dest - _bufs[BCJ2_NUM_STREAMS]);
+ if (processed - prevProgress >= (1 << 24))
{
- const UInt64 inSize2 = outSize2 + _inStreamsProcessed[BCJ2_STREAM_RC] - (size_t)(dec.lims[BCJ2_STREAM_RC] - dec.bufs[BCJ2_STREAM_RC]);
- RINOK(progress->SetRatioInfo(&inSize2, &outSize2));
- prevProgress = outSize2;
+ prevProgress = processed;
+ const UInt64 inSize = processed +
+ _readSizes[BCJ2_STREAM_RC] - (size_t)(
+ dec.lims[BCJ2_STREAM_RC] -
+ dec.bufs[BCJ2_STREAM_RC]);
+ RINOK(progress->SetRatioInfo(&inSize, &prevProgress))
}
}
}
- const size_t curSize = (size_t)(dec.dest - _bufs[BCJ2_NUM_STREAMS]);
- if (curSize != 0)
{
- outSizeProcessed += curSize;
- RINOK(WriteStream(outStreams[0], _bufs[BCJ2_NUM_STREAMS], curSize));
+ const size_t curSize = (size_t)(dec.dest - _bufs[BCJ2_NUM_STREAMS]);
+ if (curSize != 0)
+ {
+ outSizeWritten += curSize;
+ RINOK(WriteStream(outStreams[0], _bufs[BCJ2_NUM_STREAMS], curSize))
+ }
}
- if (res != S_OK)
- return res;
+ if (hres_Crit == S_OK) hres_Crit = hres_Weak;
+ if (hres_Crit != S_OK) return hres_Crit;
if (_finishMode)
{
- if (!Bcj2Dec_IsFinished(&dec))
+ if (!Bcj2Dec_IsMaybeFinished_code(&dec))
return S_FALSE;
- // we still allow the cases when input streams are larger than required for decoding.
- // so the case (dec.state == BCJ2_STATE_ORIG) is also allowed, if MAIN stream is larger than required.
- if (dec.state != BCJ2_STREAM_MAIN &&
- dec.state != BCJ2_DEC_STATE_ORIG)
+ /* here we support two correct ways to finish full stream decoding
+ with one of the following conditions:
+ - the end of input stream MAIN was reached
+ - the end of output stream ORIG was reached
+ Currently 7-Zip/7z code ends with (state == BCJ2_STREAM_MAIN),
+ because the sizes of MAIN and ORIG streams are known and these
+ sizes are stored in 7z archive headers.
+ And Bcj2Dec_Decode() exits with (state == BCJ2_STREAM_MAIN),
+ if both MAIN and ORIG streams have reached buffers limits.
+ But if the size of MAIN stream is not known or if the
+ size of MAIN stream includes some padding after payload data,
+ then we still can correctly finish decoding with
+ (state == BCJ2_DEC_STATE_ORIG), if we know the exact size
+ of output ORIG stream.
+ */
+ if (dec.state != BCJ2_STREAM_MAIN)
+ if (dec.state != BCJ2_DEC_STATE_ORIG)
+ return S_FALSE;
+
+ /* the caller also will know written size.
+ So the following check is optional: */
+ if (outSizes && outSizes[0] && *outSizes[0] != outSizeWritten)
return S_FALSE;
if (inSizes)
{
- for (int i = 0; i < BCJ2_NUM_STREAMS; i++)
+ for (unsigned i = 0; i < BCJ2_NUM_STREAMS; i++)
{
- const size_t rem = (size_t)(dec.lims[i] - dec.bufs[i]) + _extraReadSizes[i];
- /*
- if (rem != 0)
- return S_FALSE;
- */
- if (inSizes[i] && *inSizes[i] != _inStreamsProcessed[i] - rem)
+ /* if (inSizes[i]) is defined, we do full check for processed stream size. */
+ if (inSizes[i] && *inSizes[i] != GetProcessedSize_ForInStream(i))
return S_FALSE;
}
}
@@ -512,49 +660,65 @@ HRESULT CDecoder::Code(ISequentialInStream * const *inStreams, const UInt64 * co
return S_OK;
}
-STDMETHODIMP CDecoder::SetInStream2(UInt32 streamIndex, ISequentialInStream *inStream)
+
+Z7_COM7F_IMF(CDecoder::GetInStreamProcessedSize2(UInt32 streamIndex, UInt64 *value))
+{
+ *value = GetProcessedSize_ForInStream(streamIndex);
+ return S_OK;
+}
+
+
+#ifndef Z7_NO_READ_FROM_CODER
+
+Z7_COM7F_IMF(CDecoder::SetInStream2(UInt32 streamIndex, ISequentialInStream *inStream))
{
_inStreams[streamIndex] = inStream;
return S_OK;
}
-STDMETHODIMP CDecoder::ReleaseInStream2(UInt32 streamIndex)
+Z7_COM7F_IMF(CDecoder::ReleaseInStream2(UInt32 streamIndex))
{
_inStreams[streamIndex].Release();
return S_OK;
}
-STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
+Z7_COM7F_IMF(CDecoder::SetOutStreamSize(const UInt64 *outSize))
{
_outSizeDefined = (outSize != NULL);
_outSize = 0;
if (_outSizeDefined)
_outSize = *outSize;
-
_outSize_Processed = 0;
- HRESULT res = Alloc(false);
-
+ const HRESULT res = Alloc(false); // allocForOrig
InitCommon();
dec.destLim = dec.dest = NULL;
-
return res;
}
-STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
- if (size == 0)
- return S_OK;
+ /* Note the case:
+ The output (ORIG) stream can be empty.
+ But BCJ2_STREAM_RC stream always is not empty.
+ And we want to support full data processing for all streams.
+ We disable check (size == 0) here.
+ So if the caller calls this CDecoder::Read() with (size == 0),
+ we execute required Init/Flushing code in this CDecoder object.
+ Also this CDecoder::Read() function will call Read() for input streams.
+ So the handlers of input streams objects also can do Init/Flushing.
+ */
+ // if (size == 0) return S_OK; // disabled to allow (size == 0) processing
UInt32 totalProcessed = 0;
if (_outSizeDefined)
{
- UInt64 rem = _outSize - _outSize_Processed;
+ const UInt64 rem = _outSize - _outSize_Processed;
if (size > rem)
size = (UInt32)rem;
}
@@ -565,102 +729,125 @@ STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
for (;;)
{
- SRes sres = Bcj2Dec_Decode(&dec);
- if (sres != SZ_OK)
- return S_FALSE;
-
+ if (Bcj2Dec_Decode(&dec) != SZ_OK)
+ return S_FALSE; // this error can be only at start of stream
{
- UInt32 curSize = (UInt32)(dec.dest - (Byte *)data);
+ const UInt32 curSize = (UInt32)(size_t)(dec.dest - (Byte *)data);
if (curSize != 0)
{
- totalProcessed += curSize;
- if (processedSize)
- *processedSize = totalProcessed;
data = (void *)((Byte *)data + curSize);
size -= curSize;
_outSize_Processed += curSize;
+ totalProcessed += curSize;
+ if (processedSize)
+ *processedSize = totalProcessed;
}
}
-
if (dec.state >= BCJ2_NUM_STREAMS)
break;
-
+ ReadInStream(_inStreams[dec.state]);
+ if (dec.lims[dec.state] == _bufs[dec.state])
{
- size_t totalRead = _extraReadSizes[dec.state];
- {
- Byte *buf = _bufs[dec.state];
- for (size_t i = 0; i < totalRead; i++)
- buf[i] = dec.bufs[dec.state][i];
- dec.lims[dec.state] =
- dec.bufs[dec.state] = buf;
- }
-
- if (_readRes[dec.state] != S_OK)
- return _readRes[dec.state];
-
- do
- {
- UInt32 curSize = _bufsCurSizes[dec.state] - (UInt32)totalRead;
- HRESULT res2 = _inStreams[dec.state]->Read(_bufs[dec.state] + totalRead, curSize, &curSize);
- _readRes[dec.state] = res2;
- if (curSize == 0)
- break;
- _inStreamsProcessed[dec.state] += curSize;
- totalRead += curSize;
- if (res2 != S_OK)
- break;
- }
- while (totalRead < 4 && BCJ2_IS_32BIT_STREAM(dec.state));
-
- if (totalRead == 0)
- {
- if (totalProcessed == 0)
- res = _readRes[dec.state];
- break;
- }
-
- if (BCJ2_IS_32BIT_STREAM(dec.state))
- {
- unsigned extraSize = ((unsigned)totalRead & 3);
- _extraReadSizes[dec.state] = extraSize;
- if (totalRead < 4)
- {
- if (totalProcessed != 0)
- return S_OK;
- return (_readRes[dec.state] != S_OK) ? _readRes[dec.state] : S_FALSE;
- }
- totalRead -= extraSize;
- }
-
- dec.lims[dec.state] = _bufs[dec.state] + totalRead;
+ /* we break decoding, if there are no new data in input stream.
+ and we ignore error code, if some data were written to output buffer. */
+ if (totalProcessed == 0)
+ res = _readRes[dec.state];
+ break;
}
}
+ if (res == S_OK)
if (_finishMode && _outSizeDefined && _outSize == _outSize_Processed)
{
- if (!Bcj2Dec_IsFinished(&dec))
+ if (!Bcj2Dec_IsMaybeFinished_code(&dec))
return S_FALSE;
-
- if (dec.state != BCJ2_STREAM_MAIN &&
- dec.state != BCJ2_DEC_STATE_ORIG)
+ if (dec.state != BCJ2_STREAM_MAIN)
+ if (dec.state != BCJ2_DEC_STATE_ORIG)
return S_FALSE;
-
- /*
- for (int i = 0; i < BCJ2_NUM_STREAMS; i++)
- if (dec.bufs[i] != dec.lims[i] || _extraReadSizes[i] != 0)
- return S_FALSE;
- */
}
return res;
}
+#endif
-STDMETHODIMP CDecoder::GetInStreamProcessedSize2(UInt32 streamIndex, UInt64 *value)
+}}
+
+
+/*
+extern "C"
{
- const size_t rem = (size_t)(dec.lims[streamIndex] - dec.bufs[streamIndex]) + _extraReadSizes[streamIndex];
- *value = _inStreamsProcessed[streamIndex] - rem;
- return S_OK;
+extern UInt32 bcj2_stats[256 + 2][2];
}
-}}
+static class CBcj2Stat
+{
+public:
+ ~CBcj2Stat()
+ {
+ printf("\nBCJ2 stat:");
+ unsigned sums[2] = { 0, 0 };
+ int i;
+ for (i = 2; i < 256 + 2; i++)
+ {
+ sums[0] += bcj2_stats[i][0];
+ sums[1] += bcj2_stats[i][1];
+ }
+ const unsigned sums2 = sums[0] + sums[1];
+ for (int vi = 0; vi < 256 + 3; vi++)
+ {
+ printf("\n");
+ UInt32 n0, n1;
+ if (vi < 4)
+ printf("\n");
+
+ if (vi < 2)
+ i = vi;
+ else if (vi == 2)
+ i = -1;
+ else
+ i = vi - 1;
+
+ if (i < 0)
+ {
+ n0 = sums[0];
+ n1 = sums[1];
+ printf("calls :");
+ }
+ else
+ {
+ if (i == 0)
+ printf("jcc :");
+ else if (i == 1)
+ printf("jump :");
+ else
+ printf("call %02x :", i - 2);
+ n0 = bcj2_stats[i][0];
+ n1 = bcj2_stats[i][1];
+ }
+
+ const UInt32 sum = n0 + n1;
+ printf(" %10u", sum);
+
+ #define PRINT_PERC(val, sum) \
+ { UInt32 _sum = sum; if (_sum == 0) _sum = 1; \
+ printf(" %7.3f %%", (double)((double)val * (double)100 / (double)_sum )); }
+
+ if (i >= 2 || i < 0)
+ {
+ PRINT_PERC(sum, sums2);
+ }
+ else
+ printf("%10s", "");
+
+ printf(" :%10u", n0);
+ PRINT_PERC(n0, sum);
+
+ printf(" :%10u", n1);
+ PRINT_PERC(n1, sum);
+ }
+ printf("\n\n");
+ fflush(stdout);
+ }
+} g_CBcjStat;
+*/
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.h b/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.h
index ca6a1e4ed9b..2ab91bc871c 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/Bcj2Coder.h
@@ -1,7 +1,7 @@
// Bcj2Coder.h
-#ifndef __COMPRESS_BCJ2_CODER_H
-#define __COMPRESS_BCJ2_CODER_H
+#ifndef ZIP7_INC_COMPRESS_BCJ2_CODER_H
+#define ZIP7_INC_COMPRESS_BCJ2_CODER_H
#include "../../../C/Bcj2.h"
@@ -16,8 +16,8 @@ class CBaseCoder
{
protected:
Byte *_bufs[BCJ2_NUM_STREAMS + 1];
- UInt32 _bufsCurSizes[BCJ2_NUM_STREAMS + 1];
- UInt32 _bufsNewSizes[BCJ2_NUM_STREAMS + 1];
+ UInt32 _bufsSizes[BCJ2_NUM_STREAMS + 1];
+ UInt32 _bufsSizes_New[BCJ2_NUM_STREAMS + 1];
HRESULT Alloc(bool allocForOrig = true);
public:
@@ -26,92 +26,99 @@ public:
};
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
-class CEncoder:
+class CEncoder Z7_final:
public ICompressCoder2,
public ICompressSetCoderProperties,
public ICompressSetBufSize,
public CMyUnknownImp,
public CBaseCoder
{
+ Z7_IFACES_IMP_UNK_3(
+ ICompressCoder2,
+ ICompressSetCoderProperties,
+ ICompressSetBufSize)
+
UInt32 _relatLim;
+ // UInt32 _excludeRangeBits;
- HRESULT CodeReal(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
+ HRESULT CodeReal(
+ ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
ICompressProgressInfo *progress);
-
public:
- MY_UNKNOWN_IMP3(ICompressCoder2, ICompressSetCoderProperties, ICompressSetBufSize)
-
- STDMETHOD(Code)(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
- ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
- ICompressProgressInfo *progress);
-
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
-
- STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
- STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
-
CEncoder();
~CEncoder();
};
#endif
-class CDecoder:
+
+
+class CBaseDecoder: public CBaseCoder
+{
+protected:
+ HRESULT _readRes[BCJ2_NUM_STREAMS];
+ unsigned _extraSizes[BCJ2_NUM_STREAMS];
+ UInt64 _readSizes[BCJ2_NUM_STREAMS];
+
+ CBcj2Dec dec;
+
+ UInt64 GetProcessedSize_ForInStream(unsigned i) const
+ {
+ return _readSizes[i] - ((size_t)(dec.lims[i] - dec.bufs[i]) + _extraSizes[i]);
+ }
+ void InitCommon();
+ void ReadInStream(ISequentialInStream *inStream);
+};
+
+
+class CDecoder Z7_final:
public ICompressCoder2,
public ICompressSetFinishMode,
public ICompressGetInStreamProcessedSize2,
+ public ICompressSetBufSize,
+#ifndef Z7_NO_READ_FROM_CODER
public ICompressSetInStream2,
- public ISequentialInStream,
public ICompressSetOutStreamSize,
- public ICompressSetBufSize,
+ public ISequentialInStream,
+#endif
public CMyUnknownImp,
- public CBaseCoder
+ public CBaseDecoder
{
- unsigned _extraReadSizes[BCJ2_NUM_STREAMS];
- UInt64 _inStreamsProcessed[BCJ2_NUM_STREAMS];
- HRESULT _readRes[BCJ2_NUM_STREAMS];
- CMyComPtr<ISequentialInStream> _inStreams[BCJ2_NUM_STREAMS];
+ Z7_COM_QI_BEGIN2(ICompressCoder2)
+ Z7_COM_QI_ENTRY(ICompressSetFinishMode)
+ Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize2)
+ Z7_COM_QI_ENTRY(ICompressSetBufSize)
+ #ifndef Z7_NO_READ_FROM_CODER
+ Z7_COM_QI_ENTRY(ICompressSetInStream2)
+ Z7_COM_QI_ENTRY(ICompressSetOutStreamSize)
+ Z7_COM_QI_ENTRY(ISequentialInStream)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ICompressCoder2)
+ Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
+ Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize2)
+ Z7_IFACE_COM7_IMP(ICompressSetBufSize)
+#ifndef Z7_NO_READ_FROM_CODER
+ Z7_IFACE_COM7_IMP(ICompressSetInStream2)
+ Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+#endif
bool _finishMode;
+
+#ifndef Z7_NO_READ_FROM_CODER
bool _outSizeDefined;
UInt64 _outSize;
UInt64 _outSize_Processed;
- CBcj2Dec dec;
-
- void InitCommon();
- // HRESULT ReadSpec();
-
+ CMyComPtr<ISequentialInStream> _inStreams[BCJ2_NUM_STREAMS];
+#endif
+
public:
- MY_UNKNOWN_IMP7(
- ICompressCoder2,
- ICompressSetFinishMode,
- ICompressGetInStreamProcessedSize2,
- ICompressSetInStream2,
- ISequentialInStream,
- ICompressSetOutStreamSize,
- ICompressSetBufSize
- );
-
- STDMETHOD(Code)(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
- ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
- ICompressProgressInfo *progress);
-
- STDMETHOD(SetFinishMode)(UInt32 finishMode);
- STDMETHOD(GetInStreamProcessedSize2)(UInt32 streamIndex, UInt64 *value);
-
- STDMETHOD(SetInStream2)(UInt32 streamIndex, ISequentialInStream *inStream);
- STDMETHOD(ReleaseInStream2)(UInt32 streamIndex);
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-
- STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
-
- STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
- STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
-
CDecoder();
};
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Bcj2Register.cpp b/3rdparty/lzma/CPP/7zip/Compress/Bcj2Register.cpp
index 2868f1c9dcd..1ce4decb257 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Bcj2Register.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/Bcj2Register.cpp
@@ -10,7 +10,7 @@ namespace NCompress {
namespace NBcj2 {
REGISTER_CODEC_CREATE_2(CreateCodec, CDecoder(), ICompressCoder2)
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
REGISTER_CODEC_CREATE_2(CreateCodecOut, CEncoder(), ICompressCoder2)
#else
#define CreateCodecOut NULL
diff --git a/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.cpp
index 32aa1762cdd..00478747408 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.cpp
@@ -7,17 +7,17 @@
namespace NCompress {
namespace NBcj {
-STDMETHODIMP CCoder::Init()
+Z7_COM7F_IMF(CCoder2::Init())
{
- _bufferPos = 0;
- x86_Convert_Init(_prevMask);
+ _pc = 0;
+ _state = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL;
return S_OK;
}
-STDMETHODIMP_(UInt32) CCoder::Filter(Byte *data, UInt32 size)
+Z7_COM7F_IMF2(UInt32, CCoder2::Filter(Byte *data, UInt32 size))
{
- UInt32 processed = (UInt32)::x86_Convert(data, size, _bufferPos, &_prevMask, _encode);
- _bufferPos += processed;
+ const UInt32 processed = (UInt32)(size_t)(_convFunc(data, size, _pc, &_state) - data);
+ _pc += processed;
return processed;
}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.h b/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.h
index 7883906e4a0..734a2786694 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/BcjCoder.h
@@ -1,7 +1,7 @@
// BcjCoder.h
-#ifndef __COMPRESS_BCJ_CODER_H
-#define __COMPRESS_BCJ_CODER_H
+#ifndef ZIP7_INC_COMPRESS_BCJ_CODER_H
+#define ZIP7_INC_COMPRESS_BCJ_CODER_H
#include "../../../C/Bra.h"
@@ -12,18 +12,24 @@
namespace NCompress {
namespace NBcj {
-class CCoder:
- public ICompressFilter,
- public CMyUnknownImp
-{
- UInt32 _bufferPos;
- UInt32 _prevMask;
- int _encode;
+/* CCoder in old versions used another constructor parameter CCoder(int encode).
+ And some code called it as CCoder(0).
+ We have changed constructor parameter type.
+ So we have changed the name of class also to CCoder2. */
+
+Z7_CLASS_IMP_COM_1(
+ CCoder2
+ , ICompressFilter
+)
+ UInt32 _pc;
+ UInt32 _state;
+ z7_Func_BranchConvSt _convFunc;
public:
- MY_UNKNOWN_IMP1(ICompressFilter);
- INTERFACE_ICompressFilter(;)
-
- CCoder(int encode): _bufferPos(0), _encode(encode) { x86_Convert_Init(_prevMask); }
+ CCoder2(z7_Func_BranchConvSt convFunc):
+ _pc(0),
+ _state(Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL),
+ _convFunc(convFunc)
+ {}
};
}}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/BcjRegister.cpp b/3rdparty/lzma/CPP/7zip/Compress/BcjRegister.cpp
index f06dcfe9f6d..0348f641fd0 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/BcjRegister.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/BcjRegister.cpp
@@ -10,8 +10,8 @@ namespace NCompress {
namespace NBcj {
REGISTER_FILTER_E(BCJ,
- CCoder(false),
- CCoder(true),
+ CCoder2(z7_BranchConvSt_X86_Dec),
+ CCoder2(z7_BranchConvSt_X86_Enc),
0x3030103, "BCJ")
}}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.cpp b/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.cpp
index d0e75e83bf1..d9fec8c51a0 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.cpp
@@ -2,22 +2,109 @@
#include "StdAfx.h"
+#include "../../../C/CpuArch.h"
+
+#include "../Common/StreamUtils.h"
+
#include "BranchMisc.h"
namespace NCompress {
namespace NBranch {
-STDMETHODIMP CCoder::Init()
+Z7_COM7F_IMF(CCoder::Init())
+{
+ _pc = 0;
+ return S_OK;
+}
+
+
+Z7_COM7F_IMF2(UInt32, CCoder::Filter(Byte *data, UInt32 size))
+{
+ const UInt32 processed = (UInt32)(size_t)(BraFunc(data, size, _pc) - data);
+ _pc += processed;
+ return processed;
+}
+
+
+namespace NArm64 {
+
+#ifndef Z7_EXTRACT_ONLY
+
+Z7_COM7F_IMF(CEncoder::Init())
+{
+ _pc = _pc_Init;
+ return S_OK;
+}
+
+Z7_COM7F_IMF2(UInt32, CEncoder::Filter(Byte *data, UInt32 size))
+{
+ const UInt32 processed = (UInt32)(size_t)(Z7_BRANCH_CONV_ENC(ARM64)(data, size, _pc) - data);
+ _pc += processed;
+ return processed;
+}
+
+Z7_COM7F_IMF(CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps))
{
- _bufferPos = 0;
+ UInt32 pc = 0;
+ for (UInt32 i = 0; i < numProps; i++)
+ {
+ const PROPID propID = propIDs[i];
+ if (propID == NCoderPropID::kDefaultProp ||
+ propID == NCoderPropID::kBranchOffset)
+ {
+ const PROPVARIANT &prop = props[i];
+ if (prop.vt != VT_UI4)
+ return E_INVALIDARG;
+ pc = prop.ulVal;
+ if ((pc & 3) != 0)
+ return E_INVALIDARG;
+ }
+ }
+ _pc_Init = pc;
return S_OK;
}
-STDMETHODIMP_(UInt32) CCoder::Filter(Byte *data, UInt32 size)
+
+Z7_COM7F_IMF(CEncoder::WriteCoderProperties(ISequentialOutStream *outStream))
+{
+ if (_pc_Init == 0)
+ return S_OK;
+ Byte buf[4];
+ SetUi32(buf, _pc_Init)
+ return WriteStream(outStream, buf, 4);
+}
+
+#endif
+
+
+Z7_COM7F_IMF(CDecoder::Init())
{
- UInt32 processed = (UInt32)BraFunc(data, size, _bufferPos, _encode);
- _bufferPos += processed;
+ _pc = _pc_Init;
+ return S_OK;
+}
+
+Z7_COM7F_IMF2(UInt32, CDecoder::Filter(Byte *data, UInt32 size))
+{
+ const UInt32 processed = (UInt32)(size_t)(Z7_BRANCH_CONV_DEC(ARM64)(data, size, _pc) - data);
+ _pc += processed;
return processed;
}
+Z7_COM7F_IMF(CDecoder::SetDecoderProperties2(const Byte *props, UInt32 size))
+{
+ UInt32 val = 0;
+ if (size != 0)
+ {
+ if (size != 4)
+ return E_NOTIMPL;
+ val = GetUi32(props);
+ if ((val & 3) != 0)
+ return E_NOTIMPL;
+ }
+ _pc_Init = val;
+ return S_OK;
+}
+
+}
+
}}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.h b/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.h
index 66fc23d2cd1..a5793f729d3 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/BranchMisc.h
@@ -1,35 +1,57 @@
// BranchMisc.h
-#ifndef __COMPRESS_BRANCH_MISC_H
-#define __COMPRESS_BRANCH_MISC_H
+#ifndef ZIP7_INC_COMPRESS_BRANCH_MISC_H
+#define ZIP7_INC_COMPRESS_BRANCH_MISC_H
+#include "../../../C/Bra.h"
#include "../../Common/MyCom.h"
#include "../ICoder.h"
-EXTERN_C_BEGIN
+namespace NCompress {
+namespace NBranch {
-typedef SizeT (*Func_Bra)(Byte *data, SizeT size, UInt32 ip, int encoding);
+Z7_CLASS_IMP_COM_1(
+ CCoder
+ , ICompressFilter
+)
+ UInt32 _pc;
+ z7_Func_BranchConv BraFunc;
+public:
+ CCoder(z7_Func_BranchConv bra): _pc(0), BraFunc(bra) {}
+};
-EXTERN_C_END
+namespace NArm64 {
-namespace NCompress {
-namespace NBranch {
+#ifndef Z7_EXTRACT_ONLY
-class CCoder:
- public ICompressFilter,
- public CMyUnknownImp
-{
- UInt32 _bufferPos;
- int _encode;
- Func_Bra BraFunc;
+Z7_CLASS_IMP_COM_3(
+ CEncoder
+ , ICompressFilter
+ , ICompressSetCoderProperties
+ , ICompressWriteCoderProperties
+)
+ UInt32 _pc;
+ UInt32 _pc_Init;
public:
- MY_UNKNOWN_IMP1(ICompressFilter);
- INTERFACE_ICompressFilter(;)
+ CEncoder(): _pc(0), _pc_Init(0) {}
+};
+
+#endif
- CCoder(Func_Bra bra, int encode): _bufferPos(0), _encode(encode), BraFunc(bra) {}
+Z7_CLASS_IMP_COM_2(
+ CDecoder
+ , ICompressFilter
+ , ICompressSetDecoderProperties2
+)
+ UInt32 _pc;
+ UInt32 _pc_Init;
+public:
+ CDecoder(): _pc(0), _pc_Init(0) {}
};
+}
+
}}
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Compress/BranchRegister.cpp b/3rdparty/lzma/CPP/7zip/Compress/BranchRegister.cpp
index 6331c1b9e12..80fbf60ab78 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/BranchRegister.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/BranchRegister.cpp
@@ -2,8 +2,6 @@
#include "StdAfx.h"
-#include "../../../C/Bra.h"
-
#include "../Common/RegisterCodec.h"
#include "BranchMisc.h"
@@ -11,9 +9,18 @@
namespace NCompress {
namespace NBranch {
+#ifdef Z7_EXTRACT_ONLY
+#define GET_CREATE_FUNC(x) NULL
+#define CREATE_BRA_E(n)
+#else
+#define GET_CREATE_FUNC(x) x
+#define CREATE_BRA_E(n) \
+ REGISTER_FILTER_CREATE(CreateBra_Encoder_ ## n, CCoder(Z7_BRANCH_CONV_ENC(n)))
+#endif
+
#define CREATE_BRA(n) \
- REGISTER_FILTER_CREATE(CreateBra_Decoder_ ## n, CCoder(n ## _Convert, false)) \
- REGISTER_FILTER_CREATE(CreateBra_Encoder_ ## n, CCoder(n ## _Convert, true)) \
+ REGISTER_FILTER_CREATE(CreateBra_Decoder_ ## n, CCoder(Z7_BRANCH_CONV_DEC(n))) \
+ CREATE_BRA_E(n)
CREATE_BRA(PPC)
CREATE_BRA(IA64)
@@ -23,8 +30,8 @@ CREATE_BRA(SPARC)
#define METHOD_ITEM(n, id, name) \
REGISTER_FILTER_ITEM( \
- CreateBra_Decoder_ ## n, \
- CreateBra_Encoder_ ## n, \
+ CreateBra_Decoder_ ## n, GET_CREATE_FUNC( \
+ CreateBra_Encoder_ ## n), \
0x3030000 + id, name)
REGISTER_CODECS_VAR
@@ -38,4 +45,11 @@ REGISTER_CODECS_VAR
REGISTER_CODECS(Branch)
+namespace NArm64 {
+REGISTER_FILTER_E(ARM64,
+ CDecoder(),
+ CEncoder(),
+ 0xa, "ARM64")
+}
+
}}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/ByteSwap.cpp b/3rdparty/lzma/CPP/7zip/Compress/ByteSwap.cpp
index 4c11806eb73..cc28d8b90b5 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/ByteSwap.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/ByteSwap.cpp
@@ -2,6 +2,8 @@
#include "StdAfx.h"
+#include "../../../C/SwapBytes.h"
+
#include "../../Common/MyCom.h"
#include "../ICoder.h"
@@ -11,80 +13,77 @@
namespace NCompress {
namespace NByteSwap {
-class CByteSwap2:
- public ICompressFilter,
- public CMyUnknownImp
-{
-public:
- MY_UNKNOWN_IMP1(ICompressFilter);
- INTERFACE_ICompressFilter(;)
-};
-
-class CByteSwap4:
- public ICompressFilter,
- public CMyUnknownImp
-{
-public:
- MY_UNKNOWN_IMP1(ICompressFilter);
- INTERFACE_ICompressFilter(;)
-};
+Z7_CLASS_IMP_COM_1(CByteSwap2, ICompressFilter) };
+Z7_CLASS_IMP_COM_1(CByteSwap4, ICompressFilter) };
-STDMETHODIMP CByteSwap2::Init() { return S_OK; }
+Z7_COM7F_IMF(CByteSwap2::Init()) { return S_OK; }
-STDMETHODIMP_(UInt32) CByteSwap2::Filter(Byte *data, UInt32 size)
+Z7_COM7F_IMF2(UInt32, CByteSwap2::Filter(Byte *data, UInt32 size))
{
- const UInt32 kStep = 2;
- if (size < kStep)
- return 0;
- size &= ~(kStep - 1);
-
- const Byte *end = data + (size_t)size;
-
- do
+ const UInt32 kMask = 2 - 1;
+ size &= ~kMask;
+ /*
+ if ((unsigned)(ptrdiff_t)data & kMask)
{
- Byte b0 = data[0];
- data[0] = data[1];
- data[1] = b0;
- data += kStep;
+ if (size == 0)
+ return 0;
+ const Byte *end = data + (size_t)size;
+ do
+ {
+ const Byte b0 = data[0];
+ data[0] = data[1];
+ data[1] = b0;
+ data += kStep;
+ }
+ while (data != end);
}
- while (data != end);
-
+ else
+ */
+ z7_SwapBytes2((UInt16 *)(void *)data, size >> 1);
return size;
}
-STDMETHODIMP CByteSwap4::Init() { return S_OK; }
-STDMETHODIMP_(UInt32) CByteSwap4::Filter(Byte *data, UInt32 size)
+Z7_COM7F_IMF(CByteSwap4::Init()) { return S_OK; }
+
+Z7_COM7F_IMF2(UInt32, CByteSwap4::Filter(Byte *data, UInt32 size))
{
- const UInt32 kStep = 4;
- if (size < kStep)
- return 0;
- size &= ~(kStep - 1);
-
- const Byte *end = data + (size_t)size;
-
- do
+ const UInt32 kMask = 4 - 1;
+ size &= ~kMask;
+ /*
+ if ((unsigned)(ptrdiff_t)data & kMask)
{
- Byte b0 = data[0];
- Byte b1 = data[1];
- data[0] = data[3];
- data[1] = data[2];
- data[2] = b1;
- data[3] = b0;
- data += kStep;
+ if (size == 0)
+ return 0;
+ const Byte *end = data + (size_t)size;
+ do
+ {
+ const Byte b0 = data[0];
+ const Byte b1 = data[1];
+ data[0] = data[3];
+ data[1] = data[2];
+ data[2] = b1;
+ data[3] = b0;
+ data += kStep;
+ }
+ while (data != end);
}
- while (data != end);
-
+ else
+ */
+ z7_SwapBytes4((UInt32 *)(void *)data, size >> 2);
return size;
}
+static struct C_SwapBytesPrepare { C_SwapBytesPrepare() { z7_SwapBytesPrepare(); } } g_SwapBytesPrepare;
+
+
REGISTER_FILTER_CREATE(CreateFilter2, CByteSwap2())
REGISTER_FILTER_CREATE(CreateFilter4, CByteSwap4())
REGISTER_CODECS_VAR
{
REGISTER_FILTER_ITEM(CreateFilter2, CreateFilter2, 0x20302, "Swap2"),
- REGISTER_FILTER_ITEM(CreateFilter4, CreateFilter4, 0x20304, "Swap4")
+ REGISTER_FILTER_ITEM(CreateFilter4, CreateFilter4, 0x20304, "Swap4"),
};
REGISTER_CODECS(ByteSwap)
diff --git a/3rdparty/lzma/CPP/7zip/Compress/CodecExports.cpp b/3rdparty/lzma/CPP/7zip/Compress/CodecExports.cpp
index 5bb6ff8d21d..e37ae143b05 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/CodecExports.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/CodecExports.cpp
@@ -3,11 +3,13 @@
#include "StdAfx.h"
#include "../../../C/CpuArch.h"
+#include "../../../C/7zVersion.h"
#include "../../Common/ComTry.h"
#include "../../Common/MyCom.h"
#include "../../Windows/Defs.h"
+#include "../../Windows/PropVariant.h"
#include "../ICoder.h"
@@ -21,7 +23,7 @@ extern const CHasherInfo *g_Hashers[];
static void SetPropFromAscii(const char *s, PROPVARIANT *prop) throw()
{
- UINT len = (UINT)strlen(s);
+ const UINT len = (UINT)strlen(s);
BSTR dest = ::SysAllocStringLen(NULL, len);
if (dest)
{
@@ -45,7 +47,7 @@ static HRESULT MethodToClassID(UInt16 typeId, CMethodId id, PROPVARIANT *value)
clsId.Data1 = k_7zip_GUID_Data1;
clsId.Data2 = k_7zip_GUID_Data2;
clsId.Data3 = typeId;
- SetUi64(clsId.Data4, id);
+ SetUi64(clsId.Data4, id)
return SetPropGUID(clsId, value);
}
@@ -61,7 +63,7 @@ static HRESULT FindCodecClassId(const GUID *clsid, bool isCoder2, bool isFilter,
if (clsid->Data3 == k_7zip_GUID_Data3_Decoder) encode = false;
else if (clsid->Data3 != k_7zip_GUID_Data3_Encoder) return S_OK;
- UInt64 id = GetUi64(clsid->Data4);
+ const UInt64 id = GetUi64(clsid->Data4);
for (unsigned i = 0; i < g_NumCodecs; i++)
{
@@ -75,7 +77,7 @@ static HRESULT FindCodecClassId(const GUID *clsid, bool isCoder2, bool isFilter,
if (codec.NumStreams == 1 ? isCoder2 : !isCoder2)
return E_NOINTERFACE;
- index = i;
+ index = (int)i;
return S_OK;
}
@@ -169,7 +171,7 @@ STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject)
bool isFilter = false;
bool isCoder2 = false;
- bool isCoder = (*iid == IID_ICompressCoder) != 0;
+ const bool isCoder = (*iid == IID_ICompressCoder) != 0;
if (!isCoder)
{
isFilter = (*iid == IID_ICompressFilter) != 0;
@@ -183,13 +185,13 @@ STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject)
bool encode;
int codecIndex;
- HRESULT res = FindCodecClassId(clsid, isCoder2, isFilter, encode, codecIndex);
+ const HRESULT res = FindCodecClassId(clsid, isCoder2, isFilter, encode, codecIndex);
if (res != S_OK)
return res;
if (codecIndex < 0)
return CLASS_E_CLASSNOTAVAILABLE;
- return CreateCoderMain(codecIndex, encode, outObject);
+ return CreateCoderMain((unsigned)codecIndex, encode, outObject);
}
@@ -255,8 +257,8 @@ STDAPI GetMethodProperty(UInt32 codecIndex, PROPID propID, PROPVARIANT *value)
}
-STDAPI GetNumberOfMethods(UINT32 *numCodecs);
-STDAPI GetNumberOfMethods(UINT32 *numCodecs)
+STDAPI GetNumberOfMethods(UInt32 *numCodecs);
+STDAPI GetNumberOfMethods(UInt32 *numCodecs)
{
*numCodecs = g_NumCodecs;
return S_OK;
@@ -271,10 +273,10 @@ static int FindHasherClassId(const GUID *clsid) throw()
clsid->Data2 != k_7zip_GUID_Data2 ||
clsid->Data3 != k_7zip_GUID_Data3_Hasher)
return -1;
- UInt64 id = GetUi64(clsid->Data4);
+ const UInt64 id = GetUi64(clsid->Data4);
for (unsigned i = 0; i < g_NumCodecs; i++)
if (id == g_Hashers[i]->Id)
- return i;
+ return (int)i;
return -1;
}
@@ -292,11 +294,11 @@ STDAPI CreateHasher(const GUID *clsid, IHasher **outObject);
STDAPI CreateHasher(const GUID *clsid, IHasher **outObject)
{
COM_TRY_BEGIN
- *outObject = 0;
- int index = FindHasherClassId(clsid);
+ *outObject = NULL;
+ const int index = FindHasherClassId(clsid);
if (index < 0)
return CLASS_E_CLASSNOTAVAILABLE;
- return CreateHasher2(index, outObject);
+ return CreateHasher2((UInt32)(unsigned)index, outObject);
COM_TRY_END
}
@@ -326,17 +328,7 @@ STDAPI GetHasherProp(UInt32 codecIndex, PROPID propID, PROPVARIANT *value)
return S_OK;
}
-class CHashers:
- public IHashers,
- public CMyUnknownImp
-{
-public:
- MY_UNKNOWN_IMP1(IHashers)
-
- STDMETHOD_(UInt32, GetNumHashers)();
- STDMETHOD(GetHasherProp)(UInt32 index, PROPID propID, PROPVARIANT *value);
- STDMETHOD(CreateHasher)(UInt32 index, IHasher **hasher);
-};
+Z7_CLASS_IMP_COM_1(CHashers, IHashers) };
STDAPI GetHashers(IHashers **hashers);
STDAPI GetHashers(IHashers **hashers)
@@ -349,17 +341,38 @@ STDAPI GetHashers(IHashers **hashers)
COM_TRY_END
}
-STDMETHODIMP_(UInt32) CHashers::GetNumHashers()
+Z7_COM7F_IMF2(UInt32, CHashers::GetNumHashers())
{
return g_NumHashers;
}
-STDMETHODIMP CHashers::GetHasherProp(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHashers::GetHasherProp(UInt32 index, PROPID propID, PROPVARIANT *value))
{
return ::GetHasherProp(index, propID, value);
}
-STDMETHODIMP CHashers::CreateHasher(UInt32 index, IHasher **hasher)
+Z7_COM7F_IMF(CHashers::CreateHasher(UInt32 index, IHasher **hasher))
{
return ::CreateHasher2(index, hasher);
}
+
+
+STDAPI GetModuleProp(PROPID propID, PROPVARIANT *value);
+STDAPI GetModuleProp(PROPID propID, PROPVARIANT *value)
+{
+ ::VariantClear((VARIANTARG *)value);
+ switch (propID)
+ {
+ case NModulePropID::kInterfaceType:
+ {
+ NWindows::NCOM::PropVarEm_Set_UInt32(value, NModuleInterfaceType::k_IUnknown_VirtDestructor_ThisModule);
+ break;
+ }
+ case NModulePropID::kVersion:
+ {
+ NWindows::NCOM::PropVarEm_Set_UInt32(value, (MY_VER_MAJOR << 16) | MY_VER_MINOR);
+ break;
+ }
+ }
+ return S_OK;
+}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.cpp
index a49bba8a519..b779e08b5b3 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.cpp
@@ -15,15 +15,15 @@ CCopyCoder::~CCopyCoder()
::MidFree(_buf);
}
-STDMETHODIMP CCopyCoder::SetFinishMode(UInt32 /* finishMode */)
+Z7_COM7F_IMF(CCopyCoder::SetFinishMode(UInt32 /* finishMode */))
{
return S_OK;
}
-STDMETHODIMP CCopyCoder::Code(ISequentialInStream *inStream,
+Z7_COM7F_IMF(CCopyCoder::Code(ISequentialInStream *inStream,
ISequentialOutStream *outStream,
const UInt64 * /* inSize */, const UInt64 *outSize,
- ICompressProgressInfo *progress)
+ ICompressProgressInfo *progress))
{
if (!_buf)
{
@@ -44,7 +44,12 @@ STDMETHODIMP CCopyCoder::Code(ISequentialInStream *inStream,
{
size = (UInt32)rem;
if (size == 0)
+ {
+ /* if we enable the following check,
+ we will make one call of Read(_buf, 0) for empty stream */
+ // if (TotalSize != 0)
return S_OK;
+ }
}
}
@@ -81,7 +86,7 @@ STDMETHODIMP CCopyCoder::Code(ISequentialInStream *inStream,
return E_FAIL; // internal code failure
pos += processed;
TotalSize += processed;
- RINOK(res);
+ RINOK(res)
if (processed == 0)
return E_FAIL;
}
@@ -90,32 +95,32 @@ STDMETHODIMP CCopyCoder::Code(ISequentialInStream *inStream,
else
TotalSize += size;
- RINOK(readRes);
+ RINOK(readRes)
if (size != kBufSize)
return S_OK;
if (progress && (TotalSize & (((UInt32)1 << 22) - 1)) == 0)
{
- RINOK(progress->SetRatioInfo(&TotalSize, &TotalSize));
+ RINOK(progress->SetRatioInfo(&TotalSize, &TotalSize))
}
}
}
-STDMETHODIMP CCopyCoder::SetInStream(ISequentialInStream *inStream)
+Z7_COM7F_IMF(CCopyCoder::SetInStream(ISequentialInStream *inStream))
{
_inStream = inStream;
TotalSize = 0;
return S_OK;
}
-STDMETHODIMP CCopyCoder::ReleaseInStream()
+Z7_COM7F_IMF(CCopyCoder::ReleaseInStream())
{
_inStream.Release();
return S_OK;
}
-STDMETHODIMP CCopyCoder::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CCopyCoder::Read(void *data, UInt32 size, UInt32 *processedSize))
{
UInt32 realProcessedSize = 0;
HRESULT res = _inStream->Read(data, size, &realProcessedSize);
@@ -125,7 +130,7 @@ STDMETHODIMP CCopyCoder::Read(void *data, UInt32 size, UInt32 *processedSize)
return res;
}
-STDMETHODIMP CCopyCoder::GetInStreamProcessedSize(UInt64 *value)
+Z7_COM7F_IMF(CCopyCoder::GetInStreamProcessedSize(UInt64 *value))
{
*value = TotalSize;
return S_OK;
@@ -141,7 +146,7 @@ HRESULT CopyStream_ExactSize(ISequentialInStream *inStream, ISequentialOutStream
{
NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder;
CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
- RINOK(copyCoder->Code(inStream, outStream, NULL, &size, progress));
+ RINOK(copyCoder->Code(inStream, outStream, NULL, &size, progress))
return copyCoderSpec->TotalSize == size ? S_OK : E_FAIL;
}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.h b/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.h
index a9d0b6db269..cb93e4eea9f 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/CopyCoder.h
@@ -1,7 +1,7 @@
// Compress/CopyCoder.h
-#ifndef __COMPRESS_COPY_CODER_H
-#define __COMPRESS_COPY_CODER_H
+#ifndef ZIP7_INC_COMPRESS_COPY_CODER_H
+#define ZIP7_INC_COMPRESS_COPY_CODER_H
#include "../../Common/MyCom.h"
@@ -9,36 +9,21 @@
namespace NCompress {
-class CCopyCoder:
- public ICompressCoder,
- public ICompressSetInStream,
- public ISequentialInStream,
- public ICompressSetFinishMode,
- public ICompressGetInStreamProcessedSize,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_5(
+ CCopyCoder
+ , ICompressCoder
+ , ICompressSetInStream
+ , ISequentialInStream
+ , ICompressSetFinishMode
+ , ICompressGetInStreamProcessedSize
+)
Byte *_buf;
CMyComPtr<ISequentialInStream> _inStream;
public:
UInt64 TotalSize;
- CCopyCoder(): _buf(0), TotalSize(0) {};
+ CCopyCoder(): _buf(NULL), TotalSize(0) {}
~CCopyCoder();
-
- MY_UNKNOWN_IMP5(
- ICompressCoder,
- ICompressSetInStream,
- ISequentialInStream,
- ICompressSetFinishMode,
- ICompressGetInStreamProcessedSize)
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetInStream)(ISequentialInStream *inStream);
- STDMETHOD(ReleaseInStream)();
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(SetFinishMode)(UInt32 finishMode);
- STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
};
HRESULT CopyStream(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress);
diff --git a/3rdparty/lzma/CPP/7zip/Compress/DeltaFilter.cpp b/3rdparty/lzma/CPP/7zip/Compress/DeltaFilter.cpp
index 3986ae4fddb..35b77ba75cd 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/DeltaFilter.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/DeltaFilter.cpp
@@ -23,41 +23,40 @@ struct CDelta
};
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
-class CEncoder:
+class CEncoder Z7_final:
public ICompressFilter,
public ICompressSetCoderProperties,
public ICompressWriteCoderProperties,
- CDelta,
- public CMyUnknownImp
+ public CMyUnknownImp,
+ CDelta
{
-public:
- MY_UNKNOWN_IMP3(ICompressFilter, ICompressSetCoderProperties, ICompressWriteCoderProperties)
- INTERFACE_ICompressFilter(;)
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
- STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
+ Z7_IFACES_IMP_UNK_3(
+ ICompressFilter,
+ ICompressSetCoderProperties,
+ ICompressWriteCoderProperties)
};
-STDMETHODIMP CEncoder::Init()
+Z7_COM7F_IMF(CEncoder::Init())
{
DeltaInit();
return S_OK;
}
-STDMETHODIMP_(UInt32) CEncoder::Filter(Byte *data, UInt32 size)
+Z7_COM7F_IMF2(UInt32, CEncoder::Filter(Byte *data, UInt32 size))
{
Delta_Encode(_state, _delta, data, size);
return size;
}
-STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps))
{
UInt32 delta = _delta;
for (UInt32 i = 0; i < numProps; i++)
{
const PROPVARIANT &prop = props[i];
- PROPID propID = propIDs[i];
+ const PROPID propID = propIDs[i];
if (propID >= NCoderPropID::kReduceSize)
continue;
if (prop.vt != VT_UI4)
@@ -78,40 +77,39 @@ STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIA
return S_OK;
}
-STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream)
+Z7_COM7F_IMF(CEncoder::WriteCoderProperties(ISequentialOutStream *outStream))
{
- Byte prop = (Byte)(_delta - 1);
+ const Byte prop = (Byte)(_delta - 1);
return outStream->Write(&prop, 1, NULL);
}
#endif
-class CDecoder:
+class CDecoder Z7_final:
public ICompressFilter,
public ICompressSetDecoderProperties2,
- CDelta,
- public CMyUnknownImp
+ public CMyUnknownImp,
+ CDelta
{
-public:
- MY_UNKNOWN_IMP2(ICompressFilter, ICompressSetDecoderProperties2)
- INTERFACE_ICompressFilter(;)
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
+ Z7_IFACES_IMP_UNK_2(
+ ICompressFilter,
+ ICompressSetDecoderProperties2)
};
-STDMETHODIMP CDecoder::Init()
+Z7_COM7F_IMF(CDecoder::Init())
{
DeltaInit();
return S_OK;
}
-STDMETHODIMP_(UInt32) CDecoder::Filter(Byte *data, UInt32 size)
+Z7_COM7F_IMF2(UInt32, CDecoder::Filter(Byte *data, UInt32 size))
{
Delta_Decode(_state, _delta, data, size);
return size;
}
-STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *props, UInt32 size)
+Z7_COM7F_IMF(CDecoder::SetDecoderProperties2(const Byte *props, UInt32 size))
{
if (size != 1)
return E_INVALIDARG;
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp
index 653fe2de088..eab78000201 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp
@@ -21,7 +21,7 @@ CDecoder::CDecoder():
, _finishMode(false)
, _inBufSize(1 << 20)
, _outStep(1 << 20)
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
, _tryMt(1)
, _numThreads(1)
, _memUsage((UInt64)(sizeof(size_t)) << 28)
@@ -34,10 +34,10 @@ CDecoder::~CDecoder()
Lzma2DecMt_Destroy(_dec);
}
-STDMETHODIMP CDecoder::SetInBufSize(UInt32 , UInt32 size) { _inBufSize = size; return S_OK; }
-STDMETHODIMP CDecoder::SetOutBufSize(UInt32 , UInt32 size) { _outStep = size; return S_OK; }
+Z7_COM7F_IMF(CDecoder::SetInBufSize(UInt32 , UInt32 size)) { _inBufSize = size; return S_OK; }
+Z7_COM7F_IMF(CDecoder::SetOutBufSize(UInt32 , UInt32 size)) { _outStep = size; return S_OK; }
-STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *prop, UInt32 size)
+Z7_COM7F_IMF(CDecoder::SetDecoderProperties2(const Byte *prop, UInt32 size))
{
if (size != 1)
return E_NOTIMPL;
@@ -48,7 +48,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *prop, UInt32 size)
}
-STDMETHODIMP CDecoder::SetFinishMode(UInt32 finishMode)
+Z7_COM7F_IMF(CDecoder::SetFinishMode(UInt32 finishMode))
{
_finishMode = (finishMode != 0);
return S_OK;
@@ -56,7 +56,7 @@ STDMETHODIMP CDecoder::SetFinishMode(UInt32 finishMode)
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static UInt64 Get_ExpectedBlockSize_From_Dict(UInt32 dictSize)
{
@@ -81,8 +81,8 @@ static UInt64 Get_ExpectedBlockSize_From_Dict(UInt32 dictSize)
#define RET_IF_WRAP_ERROR(wrapRes, sRes, sResErrorCode) \
if (wrapRes != S_OK /* && (sRes == SZ_OK || sRes == sResErrorCode) */) return wrapRes;
-STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress))
{
_inProcessed = 0;
@@ -102,24 +102,24 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
props.inBufSize_ST = _inBufSize;
props.outStep_ST = _outStep;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
{
props.numThreads = 1;
UInt32 numThreads = _numThreads;
if (_tryMt && numThreads >= 1)
{
- UInt64 useLimit = _memUsage;
- UInt32 dictSize = LZMA2_DIC_SIZE_FROM_PROP_FULL(_prop);
- UInt64 expectedBlockSize64 = Get_ExpectedBlockSize_From_Dict(dictSize);
- size_t expectedBlockSize = (size_t)expectedBlockSize64;
- size_t inBlockMax = expectedBlockSize + expectedBlockSize / 16;
+ const UInt64 useLimit = _memUsage;
+ const UInt32 dictSize = LZMA2_DIC_SIZE_FROM_PROP_FULL(_prop);
+ const UInt64 expectedBlockSize64 = Get_ExpectedBlockSize_From_Dict(dictSize);
+ const size_t expectedBlockSize = (size_t)expectedBlockSize64;
+ const size_t inBlockMax = expectedBlockSize + expectedBlockSize / 16;
if (expectedBlockSize == expectedBlockSize64 && inBlockMax >= expectedBlockSize)
{
props.outBlockMax = expectedBlockSize;
props.inBlockMax = inBlockMax;
const size_t kOverheadSize = props.inBufSize_MT + (1 << 16);
- UInt64 okThreads = useLimit / (props.outBlockMax + props.inBlockMax + kOverheadSize);
+ const UInt64 okThreads = useLimit / (props.outBlockMax + props.inBlockMax + kOverheadSize);
if (numThreads > okThreads)
numThreads = (UInt32)okThreads;
if (numThreads == 0)
@@ -143,7 +143,7 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
UInt64 inProcessed = 0;
int isMT = False;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
isMT = _tryMt;
#endif
@@ -162,7 +162,7 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
*/
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
/* we reset _tryMt, only if p->props.numThreads was changed */
if (props.numThreads > 1)
_tryMt = isMT;
@@ -186,22 +186,22 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
}
-STDMETHODIMP CDecoder::GetInStreamProcessedSize(UInt64 *value)
+Z7_COM7F_IMF(CDecoder::GetInStreamProcessedSize(UInt64 *value))
{
*value = _inProcessed;
return S_OK;
}
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
-STDMETHODIMP CDecoder::SetNumberOfThreads(UInt32 numThreads)
+Z7_COM7F_IMF(CDecoder::SetNumberOfThreads(UInt32 numThreads))
{
_numThreads = numThreads;
return S_OK;
}
-STDMETHODIMP CDecoder::SetMemLimit(UInt64 memUsage)
+Z7_COM7F_IMF(CDecoder::SetMemLimit(UInt64 memUsage))
{
_memUsage = memUsage;
return S_OK;
@@ -210,9 +210,9 @@ STDMETHODIMP CDecoder::SetMemLimit(UInt64 memUsage)
#endif
-#ifndef NO_READ_FROM_CODER
+#ifndef Z7_NO_READ_FROM_CODER
-STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
+Z7_COM7F_IMF(CDecoder::SetOutStreamSize(const UInt64 *outSize))
{
CLzma2DecMtProps props;
Lzma2DecMtProps_Init(&props);
@@ -230,7 +230,7 @@ STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
_inWrap.Init(_inStream);
- SRes res = Lzma2DecMt_Init(_dec, _prop, &props, outSize, _finishMode, &_inWrap.vt);
+ const SRes res = Lzma2DecMt_Init(_dec, _prop, &props, outSize, _finishMode, &_inWrap.vt);
if (res != SZ_OK)
return SResToHRESULT(res);
@@ -238,11 +238,13 @@ STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
}
-STDMETHODIMP CDecoder::SetInStream(ISequentialInStream *inStream) { _inStream = inStream; return S_OK; }
-STDMETHODIMP CDecoder::ReleaseInStream() { _inStream.Release(); return S_OK; }
+Z7_COM7F_IMF(CDecoder::SetInStream(ISequentialInStream *inStream))
+ { _inStream = inStream; return S_OK; }
+Z7_COM7F_IMF(CDecoder::ReleaseInStream())
+ { _inStream.Release(); return S_OK; }
-STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -250,7 +252,7 @@ STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
size_t size2 = size;
UInt64 inProcessed = 0;
- SRes res = Lzma2DecMt_Read(_dec, (Byte *)data, &size2, &inProcessed);
+ const SRes res = Lzma2DecMt_Read(_dec, (Byte *)data, &size2, &inProcessed);
_inProcessed += inProcessed;
if (processedSize)
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.h b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.h
index e14148848f6..7ca717e7f41 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Decoder.h
@@ -1,7 +1,7 @@
// Lzma2Decoder.h
-#ifndef __LZMA2_DECODER_H
-#define __LZMA2_DECODER_H
+#ifndef ZIP7_INC_LZMA2_DECODER_H
+#define ZIP7_INC_LZMA2_DECODER_H
#include "../../../C/Lzma2DecMt.h"
@@ -10,26 +10,55 @@
namespace NCompress {
namespace NLzma2 {
-class CDecoder:
+class CDecoder Z7_final:
public ICompressCoder,
public ICompressSetDecoderProperties2,
public ICompressSetFinishMode,
public ICompressGetInStreamProcessedSize,
public ICompressSetBufSize,
-
- #ifndef NO_READ_FROM_CODER
+ #ifndef Z7_NO_READ_FROM_CODER
public ICompressSetInStream,
public ICompressSetOutStreamSize,
public ISequentialInStream,
- #endif
-
- #ifndef _7ZIP_ST
+ #endif
+ #ifndef Z7_ST
public ICompressSetCoderMt,
public ICompressSetMemLimit,
- #endif
-
+ #endif
public CMyUnknownImp
{
+ Z7_COM_QI_BEGIN2(ICompressCoder)
+ Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2)
+ Z7_COM_QI_ENTRY(ICompressSetFinishMode)
+ Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize)
+ Z7_COM_QI_ENTRY(ICompressSetBufSize)
+ #ifndef Z7_NO_READ_FROM_CODER
+ Z7_COM_QI_ENTRY(ICompressSetInStream)
+ Z7_COM_QI_ENTRY(ICompressSetOutStreamSize)
+ Z7_COM_QI_ENTRY(ISequentialInStream)
+ #endif
+ #ifndef Z7_ST
+ Z7_COM_QI_ENTRY(ICompressSetCoderMt)
+ Z7_COM_QI_ENTRY(ICompressSetMemLimit)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ICompressCoder)
+ Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2)
+ Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
+ Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize)
+ Z7_IFACE_COM7_IMP(ICompressSetBufSize)
+ #ifndef Z7_NO_READ_FROM_CODER
+ Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+ Z7_IFACE_COM7_IMP(ICompressSetInStream)
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+ #endif
+ #ifndef Z7_ST
+ Z7_IFACE_COM7_IMP(ICompressSetCoderMt)
+ Z7_IFACE_COM7_IMP(ICompressSetMemLimit)
+ #endif
+
CLzma2DecMtHandle _dec;
UInt64 _inProcessed;
Byte _prop;
@@ -37,58 +66,20 @@ class CDecoder:
UInt32 _inBufSize;
UInt32 _outStep;
-public:
- MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
- MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2)
- MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
- MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)
- MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize)
-
- #ifndef NO_READ_FROM_CODER
- MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)
- MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize)
- MY_QUERYINTERFACE_ENTRY(ISequentialInStream)
- #endif
-
- #ifndef _7ZIP_ST
- MY_QUERYINTERFACE_ENTRY(ICompressSetCoderMt)
- MY_QUERYINTERFACE_ENTRY(ICompressSetMemLimit)
- #endif
-
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
- STDMETHOD(SetFinishMode)(UInt32 finishMode);
- STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
- STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
- STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
-
- #ifndef _7ZIP_ST
-private:
+ #ifndef Z7_ST
int _tryMt;
UInt32 _numThreads;
UInt64 _memUsage;
-public:
- STDMETHOD(SetNumberOfThreads)(UInt32 numThreads);
- STDMETHOD(SetMemLimit)(UInt64 memUsage);
- #endif
+ #endif
- #ifndef NO_READ_FROM_CODER
-private:
+ #ifndef Z7_NO_READ_FROM_CODER
CMyComPtr<ISequentialInStream> _inStream;
CSeqInStreamWrap _inWrap;
-public:
- STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
- STDMETHOD(SetInStream)(ISequentialInStream *inStream);
- STDMETHOD(ReleaseInStream)();
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- #endif
+ #endif
+public:
CDecoder();
- virtual ~CDecoder();
+ ~CDecoder();
};
}}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp
index 6a5d67976e6..0dc7e23b463 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp
@@ -55,33 +55,33 @@ HRESULT SetLzma2Prop(PROPID propID, const PROPVARIANT &prop, CLzma2EncProps &lzm
lzma2Props.numTotalThreads = (int)(prop.ulVal);
break;
default:
- RINOK(NLzma::SetLzmaProp(propID, prop, lzma2Props.lzmaProps));
+ RINOK(NLzma::SetLzmaProp(propID, prop, lzma2Props.lzmaProps))
}
return S_OK;
}
-STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs,
- const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderProperties(const PROPID *propIDs,
+ const PROPVARIANT *coderProps, UInt32 numProps))
{
CLzma2EncProps lzma2Props;
Lzma2EncProps_Init(&lzma2Props);
for (UInt32 i = 0; i < numProps; i++)
{
- RINOK(SetLzma2Prop(propIDs[i], coderProps[i], lzma2Props));
+ RINOK(SetLzma2Prop(propIDs[i], coderProps[i], lzma2Props))
}
return SResToHRESULT(Lzma2Enc_SetProps(_encoder, &lzma2Props));
}
-STDMETHODIMP CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
- const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
+ const PROPVARIANT *coderProps, UInt32 numProps))
{
for (UInt32 i = 0; i < numProps; i++)
{
const PROPVARIANT &prop = coderProps[i];
- PROPID propID = propIDs[i];
+ const PROPID propID = propIDs[i];
if (propID == NCoderPropID::kExpectedDataSize)
if (prop.vt == VT_UI8)
Lzma2Enc_SetDataSize(_encoder, prop.uhVal.QuadPart);
@@ -90,9 +90,9 @@ STDMETHODIMP CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
}
-STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream)
+Z7_COM7F_IMF(CEncoder::WriteCoderProperties(ISequentialOutStream *outStream))
{
- Byte prop = Lzma2Enc_WriteProperties(_encoder);
+ const Byte prop = Lzma2Enc_WriteProperties(_encoder);
return WriteStream(outStream, &prop, 1);
}
@@ -100,8 +100,8 @@ STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream)
#define RET_IF_WRAP_ERROR(wrapRes, sRes, sResErrorCode) \
if (wrapRes != S_OK /* && (sRes == SZ_OK || sRes == sResErrorCode) */) return wrapRes;
-STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress))
{
CSeqInStreamWrap inWrap;
CSeqOutStreamWrap outWrap;
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.h b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.h
index f681ad16ff3..18c29e1207e 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Encoder.h
@@ -1,7 +1,7 @@
// Lzma2Encoder.h
-#ifndef __LZMA2_ENCODER_H
-#define __LZMA2_ENCODER_H
+#ifndef ZIP7_INC_LZMA2_ENCODER_H
+#define ZIP7_INC_LZMA2_ENCODER_H
#include "../../../C/Lzma2Enc.h"
@@ -12,29 +12,17 @@
namespace NCompress {
namespace NLzma2 {
-class CEncoder:
- public ICompressCoder,
- public ICompressSetCoderProperties,
- public ICompressWriteCoderProperties,
- public ICompressSetCoderPropertiesOpt,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_4(
+ CEncoder
+ , ICompressCoder
+ , ICompressSetCoderProperties
+ , ICompressWriteCoderProperties
+ , ICompressSetCoderPropertiesOpt
+)
CLzma2EncHandle _encoder;
public:
- MY_UNKNOWN_IMP4(
- ICompressCoder,
- ICompressSetCoderProperties,
- ICompressWriteCoderProperties,
- ICompressSetCoderPropertiesOpt)
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
- STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
- STDMETHOD(SetCoderPropertiesOpt)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
-
CEncoder();
- virtual ~CEncoder();
+ ~CEncoder();
};
}}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Register.cpp b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Register.cpp
index 8f279ebf166..fe53346385d 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/Lzma2Register.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/Lzma2Register.cpp
@@ -6,7 +6,7 @@
#include "Lzma2Decoder.h"
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
#include "Lzma2Encoder.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.cpp
index a25d36d144a..4f05b4833b6 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.cpp
@@ -25,14 +25,14 @@ namespace NCompress {
namespace NLzma {
CDecoder::CDecoder():
- _inBuf(NULL),
- _lzmaStatus(LZMA_STATUS_NOT_SPECIFIED),
FinishStream(false),
_propsWereSet(false),
_outSizeDefined(false),
_outStep(1 << 20),
_inBufSize(0),
- _inBufSizeNew(1 << 20)
+ _inBufSizeNew(1 << 20),
+ _lzmaStatus(LZMA_STATUS_NOT_SPECIFIED),
+ _inBuf(NULL)
{
_inProcessed = 0;
_inPos = _inLim = 0;
@@ -42,7 +42,7 @@ CDecoder::CDecoder():
_alloc.numAlignBits = 7;
_alloc.offset = 0;
*/
- LzmaDec_Construct(&_state);
+ LzmaDec_CONSTRUCT(&_state)
}
CDecoder::~CDecoder()
@@ -51,8 +51,10 @@ CDecoder::~CDecoder()
MyFree(_inBuf);
}
-STDMETHODIMP CDecoder::SetInBufSize(UInt32 , UInt32 size) { _inBufSizeNew = size; return S_OK; }
-STDMETHODIMP CDecoder::SetOutBufSize(UInt32 , UInt32 size) { _outStep = size; return S_OK; }
+Z7_COM7F_IMF(CDecoder::SetInBufSize(UInt32 , UInt32 size))
+ { _inBufSizeNew = size; return S_OK; }
+Z7_COM7F_IMF(CDecoder::SetOutBufSize(UInt32 , UInt32 size))
+ { _outStep = size; return S_OK; }
HRESULT CDecoder::CreateInputBuffer()
{
@@ -69,7 +71,7 @@ HRESULT CDecoder::CreateInputBuffer()
}
-STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *prop, UInt32 size)
+Z7_COM7F_IMF(CDecoder::SetDecoderProperties2(const Byte *prop, UInt32 size))
{
RINOK(SResToHRESULT(LzmaDec_Allocate(&_state, prop, size, &g_AlignedAlloc))) // &_alloc.vt
_propsWereSet = true;
@@ -90,7 +92,7 @@ void CDecoder::SetOutStreamSizeResume(const UInt64 *outSize)
}
-STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
+Z7_COM7F_IMF(CDecoder::SetOutStreamSize(const UInt64 *outSize))
{
_inProcessed = 0;
_inPos = _inLim = 0;
@@ -99,14 +101,14 @@ STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
}
-STDMETHODIMP CDecoder::SetFinishMode(UInt32 finishMode)
+Z7_COM7F_IMF(CDecoder::SetFinishMode(UInt32 finishMode))
{
FinishStream = (finishMode != 0);
return S_OK;
}
-STDMETHODIMP CDecoder::GetInStreamProcessedSize(UInt64 *value)
+Z7_COM7F_IMF(CDecoder::GetInStreamProcessedSize(UInt64 *value))
{
*value = _inProcessed;
return S_OK;
@@ -154,7 +156,7 @@ HRESULT CDecoder::CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *
SizeT inProcessed = _inLim - _inPos;
ELzmaStatus status;
- SRes res = LzmaDec_DecodeToDic(&_state, dicPos + size, _inBuf + _inPos, &inProcessed, finishMode, &status);
+ const SRes res = LzmaDec_DecodeToDic(&_state, dicPos + size, _inBuf + _inPos, &inProcessed, finishMode, &status);
_lzmaStatus = status;
_inPos += (UInt32)inProcessed;
@@ -163,22 +165,22 @@ HRESULT CDecoder::CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *
_outProcessed += outProcessed;
// we check for LZMA_STATUS_NEEDS_MORE_INPUT to allow RangeCoder initialization, if (_outSizeDefined && _outSize == 0)
- bool outFinished = (_outSizeDefined && _outProcessed >= _outSize);
+ const bool outFinished = (_outSizeDefined && _outProcessed >= _outSize);
- bool needStop = (res != 0
+ const bool needStop = (res != 0
|| (inProcessed == 0 && outProcessed == 0)
|| status == LZMA_STATUS_FINISHED_WITH_MARK
|| (outFinished && status != LZMA_STATUS_NEEDS_MORE_INPUT));
if (needStop || outProcessed >= size)
{
- HRESULT res2 = WriteStream(outStream, _state.dic + wrPos, _state.dicPos - wrPos);
+ const HRESULT res2 = WriteStream(outStream, _state.dic + wrPos, _state.dicPos - wrPos);
if (_state.dicPos == _state.dicBufSize)
_state.dicPos = 0;
wrPos = _state.dicPos;
- RINOK(res2);
+ RINOK(res2)
if (needStop)
{
@@ -207,14 +209,14 @@ HRESULT CDecoder::CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *
if (progress)
{
const UInt64 inSize = _inProcessed - startInProgress;
- RINOK(progress->SetRatioInfo(&inSize, &_outProcessed));
+ RINOK(progress->SetRatioInfo(&inSize, &_outProcessed))
}
}
}
-STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress))
{
if (!_inBuf)
return E_INVALIDARG;
@@ -227,13 +229,14 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
}
-#ifndef NO_READ_FROM_CODER
-
-STDMETHODIMP CDecoder::SetInStream(ISequentialInStream *inStream) { _inStream = inStream; return S_OK; }
-STDMETHODIMP CDecoder::ReleaseInStream() { _inStream.Release(); return S_OK; }
+#ifndef Z7_NO_READ_FROM_CODER
+Z7_COM7F_IMF(CDecoder::SetInStream(ISequentialInStream *inStream))
+ { _inStream = inStream; return S_OK; }
+Z7_COM7F_IMF(CDecoder::ReleaseInStream())
+ { _inStream.Release(); return S_OK; }
-STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -264,7 +267,7 @@ STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
SizeT outProcessed = size;
ELzmaStatus status;
- SRes res = LzmaDec_DecodeToBuf(&_state, (Byte *)data, &outProcessed,
+ const SRes res = LzmaDec_DecodeToBuf(&_state, (Byte *)data, &outProcessed,
_inBuf + _inPos, &inProcessed, finishMode, &status);
_lzmaStatus = status;
@@ -308,7 +311,7 @@ HRESULT CDecoder::CodeResume(ISequentialOutStream *outStream, const UInt64 *outS
HRESULT CDecoder::ReadFromInputStream(void *data, UInt32 size, UInt32 *processedSize)
{
- RINOK(CreateInputBuffer());
+ RINOK(CreateInputBuffer())
if (processedSize)
*processedSize = 0;
diff --git a/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h b/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h
index 37dec0258f5..095e76ff3a4 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h
@@ -1,7 +1,7 @@
// LzmaDecoder.h
-#ifndef __LZMA_DECODER_H
-#define __LZMA_DECODER_H
+#ifndef ZIP7_INC_LZMA_DECODER_H
+#define ZIP7_INC_LZMA_DECODER_H
// #include "../../../C/Alloc.h"
#include "../../../C/LzmaDec.h"
@@ -12,39 +12,71 @@
namespace NCompress {
namespace NLzma {
-class CDecoder:
+class CDecoder Z7_final:
public ICompressCoder,
public ICompressSetDecoderProperties2,
public ICompressSetFinishMode,
public ICompressGetInStreamProcessedSize,
public ICompressSetBufSize,
- #ifndef NO_READ_FROM_CODER
+ #ifndef Z7_NO_READ_FROM_CODER
public ICompressSetInStream,
public ICompressSetOutStreamSize,
public ISequentialInStream,
- #endif
+ #endif
public CMyUnknownImp
{
- Byte *_inBuf;
- UInt32 _inPos;
- UInt32 _inLim;
-
- ELzmaStatus _lzmaStatus;
+ Z7_COM_QI_BEGIN2(ICompressCoder)
+ Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2)
+ Z7_COM_QI_ENTRY(ICompressSetFinishMode)
+ Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize)
+ Z7_COM_QI_ENTRY(ICompressSetBufSize)
+ #ifndef Z7_NO_READ_FROM_CODER
+ Z7_COM_QI_ENTRY(ICompressSetInStream)
+ Z7_COM_QI_ENTRY(ICompressSetOutStreamSize)
+ Z7_COM_QI_ENTRY(ISequentialInStream)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ICompressCoder)
+public:
+ Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2)
+private:
+ Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
+ Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize)
+ // Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+ Z7_IFACE_COM7_IMP(ICompressSetBufSize)
+
+ #ifndef Z7_NO_READ_FROM_CODER
public:
- bool FinishStream; // set it before decoding, if you need to decode full LZMA stream
+ Z7_IFACE_COM7_IMP(ICompressSetInStream)
+private:
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+ Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+ #else
+ Z7_COM7F_IMF(SetOutStreamSize(const UInt64 *outSize));
+ #endif
+public:
+ bool FinishStream; // set it before decoding, if you need to decode full LZMA stream
private:
bool _propsWereSet;
bool _outSizeDefined;
- UInt64 _outSize;
- UInt64 _inProcessed;
- UInt64 _outProcessed;
UInt32 _outStep;
UInt32 _inBufSize;
UInt32 _inBufSizeNew;
+ ELzmaStatus _lzmaStatus;
+ UInt32 _inPos;
+ UInt32 _inLim;
+ Byte *_inBuf;
+
+ UInt64 _outSize;
+ UInt64 _inProcessed;
+ UInt64 _outProcessed;
+
// CAlignOffsetAlloc _alloc;
CLzmaDec _state;
@@ -53,53 +85,21 @@ private:
HRESULT CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress);
void SetOutStreamSizeResume(const UInt64 *outSize);
-public:
- MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
- MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2)
- MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
- MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)
- MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize)
- #ifndef NO_READ_FROM_CODER
- MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)
- MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize)
- MY_QUERYINTERFACE_ENTRY(ISequentialInStream)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
- STDMETHOD(SetFinishMode)(UInt32 finishMode);
- STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
- STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
- STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
- STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
-
- #ifndef NO_READ_FROM_CODER
-
+ #ifndef Z7_NO_READ_FROM_CODER
private:
CMyComPtr<ISequentialInStream> _inStream;
public:
-
- STDMETHOD(SetInStream)(ISequentialInStream *inStream);
- STDMETHOD(ReleaseInStream)();
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-
HRESULT CodeResume(ISequentialOutStream *outStream, const UInt64 *outSize, ICompressProgressInfo *progress);
HRESULT ReadFromInputStream(void *data, UInt32 size, UInt32 *processedSize);
-
- #endif
-
- UInt64 GetInputProcessedSize() const { return _inProcessed; }
+ #endif
+public:
CDecoder();
- virtual ~CDecoder();
+ ~CDecoder();
+ UInt64 GetInputProcessedSize() const { return _inProcessed; }
UInt64 GetOutputProcessedSize() const { return _outProcessed; }
-
bool NeedsMoreInput() const { return _lzmaStatus == LZMA_STATUS_NEEDS_MORE_INPUT; }
-
bool CheckFinishStatus(bool withEndMark) const
{
return _lzmaStatus == (withEndMark ?
diff --git a/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.cpp
index dabd77a0fe2..08e3ba53f9b 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.cpp
@@ -48,12 +48,12 @@ static inline wchar_t GetLowCharFast(wchar_t c)
static int ParseMatchFinder(const wchar_t *s, int *btMode, int *numHashBytes)
{
- wchar_t c = GetLowCharFast(*s++);
+ const wchar_t c = GetLowCharFast(*s++);
if (c == 'h')
{
if (GetLowCharFast(*s++) != 'c')
return 0;
- int num = (int)(*s++ - L'0');
+ const int num = (int)(*s++ - L'0');
if (num < 4 || num > 5)
return 0;
if (*s != 0)
@@ -68,7 +68,7 @@ static int ParseMatchFinder(const wchar_t *s, int *btMode, int *numHashBytes)
{
if (GetLowCharFast(*s++) != 't')
return 0;
- int num = (int)(*s++ - L'0');
+ const int num = (int)(*s++ - L'0');
if (num < 2 || num > 5)
return 0;
if (*s != 0)
@@ -101,6 +101,15 @@ HRESULT SetLzmaProp(PROPID propID, const PROPVARIANT &prop, CLzmaEncProps &ep)
return S_OK;
}
+ if (propID == NCoderPropID::kHashBits)
+ {
+ if (prop.vt == VT_UI4)
+ ep.numHashOutBits = prop.ulVal;
+ else
+ return E_INVALIDARG;
+ return S_OK;
+ }
+
if (propID > NCoderPropID::kReduceSize)
return S_OK;
@@ -133,7 +142,7 @@ HRESULT SetLzmaProp(PROPID propID, const PROPVARIANT &prop, CLzmaEncProps &ep)
if (prop.vt != VT_UI4)
return E_INVALIDARG;
- UInt32 v = prop.ulVal;
+ const UInt32 v = prop.ulVal;
switch (propID)
{
case NCoderPropID::kDefaultProp:
@@ -155,8 +164,8 @@ HRESULT SetLzmaProp(PROPID propID, const PROPVARIANT &prop, CLzmaEncProps &ep)
return S_OK;
}
-STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs,
- const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderProperties(const PROPID *propIDs,
+ const PROPVARIANT *coderProps, UInt32 numProps))
{
CLzmaEncProps props;
LzmaEncProps_Init(&props);
@@ -164,7 +173,7 @@ STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs,
for (UInt32 i = 0; i < numProps; i++)
{
const PROPVARIANT &prop = coderProps[i];
- PROPID propID = propIDs[i];
+ const PROPID propID = propIDs[i];
switch (propID)
{
case NCoderPropID::kEndMarker:
@@ -173,20 +182,20 @@ STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs,
props.writeEndMark = (prop.boolVal != VARIANT_FALSE);
break;
default:
- RINOK(SetLzmaProp(propID, prop, props));
+ RINOK(SetLzmaProp(propID, prop, props))
}
}
return SResToHRESULT(LzmaEnc_SetProps(_encoder, &props));
}
-STDMETHODIMP CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
- const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
+ const PROPVARIANT *coderProps, UInt32 numProps))
{
for (UInt32 i = 0; i < numProps; i++)
{
const PROPVARIANT &prop = coderProps[i];
- PROPID propID = propIDs[i];
+ const PROPID propID = propIDs[i];
if (propID == NCoderPropID::kExpectedDataSize)
if (prop.vt == VT_UI8)
LzmaEnc_SetDataSize(_encoder, prop.uhVal.QuadPart);
@@ -195,11 +204,11 @@ STDMETHODIMP CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
}
-STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream)
+Z7_COM7F_IMF(CEncoder::WriteCoderProperties(ISequentialOutStream *outStream))
{
Byte props[LZMA_PROPS_SIZE];
- size_t size = LZMA_PROPS_SIZE;
- RINOK(LzmaEnc_WriteProperties(_encoder, props, &size));
+ SizeT size = LZMA_PROPS_SIZE;
+ RINOK(LzmaEnc_WriteProperties(_encoder, props, &size))
return WriteStream(outStream, props, size);
}
@@ -293,8 +302,8 @@ static void PrintStat(HANDLE thread, UInt64 totalTime, const CBaseStat *prevStat
-STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress))
{
CSeqInStreamWrap inWrap;
CSeqOutStreamWrap outWrap;
diff --git a/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.h b/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.h
index 7d706ad7025..2836d7df5b6 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/LzmaEncoder.h
@@ -1,7 +1,7 @@
// LzmaEncoder.h
-#ifndef __LZMA_ENCODER_H
-#define __LZMA_ENCODER_H
+#ifndef ZIP7_INC_LZMA_ENCODER_H
+#define ZIP7_INC_LZMA_ENCODER_H
#include "../../../C/LzmaEnc.h"
@@ -12,30 +12,29 @@
namespace NCompress {
namespace NLzma {
-class CEncoder:
+class CEncoder Z7_final:
public ICompressCoder,
public ICompressSetCoderProperties,
public ICompressWriteCoderProperties,
public ICompressSetCoderPropertiesOpt,
public CMyUnknownImp
{
- CLzmaEncHandle _encoder;
- UInt64 _inputProcessed;
-public:
- MY_UNKNOWN_IMP4(
+ Z7_COM_UNKNOWN_IMP_4(
ICompressCoder,
ICompressSetCoderProperties,
ICompressWriteCoderProperties,
ICompressSetCoderPropertiesOpt)
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
- STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
- STDMETHOD(SetCoderPropertiesOpt)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
+ Z7_IFACE_COM7_IMP(ICompressCoder)
+public:
+ Z7_IFACE_COM7_IMP(ICompressSetCoderProperties)
+ Z7_IFACE_COM7_IMP(ICompressWriteCoderProperties)
+ Z7_IFACE_COM7_IMP(ICompressSetCoderPropertiesOpt)
+
+ CLzmaEncHandle _encoder;
+ UInt64 _inputProcessed;
CEncoder();
- virtual ~CEncoder();
+ ~CEncoder();
UInt64 GetInputProcessedSize() const { return _inputProcessed; }
bool IsWriteEndMark() const { return LzmaEnc_IsWriteEndMark(_encoder) != 0; }
diff --git a/3rdparty/lzma/CPP/7zip/Compress/LzmaRegister.cpp b/3rdparty/lzma/CPP/7zip/Compress/LzmaRegister.cpp
index c802a99fa0e..887f7a2db1e 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/LzmaRegister.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/LzmaRegister.cpp
@@ -6,7 +6,7 @@
#include "LzmaDecoder.h"
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
#include "LzmaEncoder.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.cpp
index 7f54ec3bcec..1238df60cb9 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.cpp
@@ -1,5 +1,4 @@
// PpmdDecoder.cpp
-// 2020-07-03 : Igor Pavlov : Public domain
#include "StdAfx.h"
@@ -29,14 +28,13 @@ CDecoder::~CDecoder()
Ppmd7_Free(&_ppmd, &g_BigAlloc);
}
-STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *props, UInt32 size)
+Z7_COM7F_IMF(CDecoder::SetDecoderProperties2(const Byte *props, UInt32 size))
{
if (size < 5)
return E_INVALIDARG;
_order = props[0];
- UInt32 memSize = GetUi32(props + 1);
- if (
- // _order < PPMD7_MIN_ORDER ||
+ const UInt32 memSize = GetUi32(props + 1);
+ if (_order < PPMD7_MIN_ORDER ||
_order > PPMD7_MAX_ORDER ||
memSize < PPMD7_MIN_MEM_SIZE ||
memSize > PPMD7_MAX_MEM_SIZE)
@@ -48,7 +46,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *props, UInt32 size)
return S_OK;
}
-#define _rangeDec _ppmd.rc.dec
+#define MY_rangeDec _ppmd.rc.dec
#define CHECK_EXTRA_ERROR \
if (_inStream.Extra) { \
@@ -67,7 +65,7 @@ HRESULT CDecoder::CodeSpec(Byte *memStream, UInt32 size)
case kStatus_Error: return S_FALSE;
case kStatus_NeedInit:
_inStream.Init();
- if (!Ppmd7z_RangeDec_Init(&_rangeDec))
+ if (!Ppmd7z_RangeDec_Init(&MY_rangeDec))
{
_status = kStatus_Error;
return (_res = S_FALSE);
@@ -110,7 +108,7 @@ HRESULT CDecoder::CodeSpec(Byte *memStream, UInt32 size)
if (!FinishStream
|| !_outSizeDefined
|| _outSize != _processedSize
- || _rangeDec.Code == 0)
+ || MY_rangeDec.Code == 0)
return S_OK;
/*
// We can decode additional End Marker here:
@@ -119,7 +117,7 @@ HRESULT CDecoder::CodeSpec(Byte *memStream, UInt32 size)
*/
}
- if (sym != PPMD7_SYM_END || _rangeDec.Code != 0)
+ if (sym != PPMD7_SYM_END || MY_rangeDec.Code != 0)
{
_status = kStatus_Error;
return (_res = S_FALSE);
@@ -131,8 +129,8 @@ HRESULT CDecoder::CodeSpec(Byte *memStream, UInt32 size)
-STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress))
{
if (!_outBuf)
{
@@ -147,16 +145,16 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
do
{
const UInt64 startPos = _processedSize;
- HRESULT res = CodeSpec(_outBuf, kBufSize);
- size_t processed = (size_t)(_processedSize - startPos);
- RINOK(WriteStream(outStream, _outBuf, processed));
- RINOK(res);
+ const HRESULT res = CodeSpec(_outBuf, kBufSize);
+ const size_t processed = (size_t)(_processedSize - startPos);
+ RINOK(WriteStream(outStream, _outBuf, processed))
+ RINOK(res)
if (_status == kStatus_Finished_With_Mark)
break;
if (progress)
{
const UInt64 inProcessed = _inStream.GetProcessed();
- RINOK(progress->SetRatioInfo(&inProcessed, &_processedSize));
+ RINOK(progress->SetRatioInfo(&inProcessed, &_processedSize))
}
}
while (!_outSizeDefined || _processedSize < _outSize);
@@ -168,7 +166,7 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
}
-STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
+Z7_COM7F_IMF(CDecoder::SetOutStreamSize(const UInt64 *outSize))
{
_outSizeDefined = (outSize != NULL);
if (_outSizeDefined)
@@ -179,37 +177,37 @@ STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
return S_OK;
}
-STDMETHODIMP CDecoder::SetFinishMode(UInt32 finishMode)
+Z7_COM7F_IMF(CDecoder::SetFinishMode(UInt32 finishMode))
{
FinishStream = (finishMode != 0);
return S_OK;
}
-STDMETHODIMP CDecoder::GetInStreamProcessedSize(UInt64 *value)
+Z7_COM7F_IMF(CDecoder::GetInStreamProcessedSize(UInt64 *value))
{
*value = _inStream.GetProcessed();
return S_OK;
}
-#ifndef NO_READ_FROM_CODER
+#ifndef Z7_NO_READ_FROM_CODER
-STDMETHODIMP CDecoder::SetInStream(ISequentialInStream *inStream)
+Z7_COM7F_IMF(CDecoder::SetInStream(ISequentialInStream *inStream))
{
InSeqStream = inStream;
_inStream.Stream = inStream;
return S_OK;
}
-STDMETHODIMP CDecoder::ReleaseInStream()
+Z7_COM7F_IMF(CDecoder::ReleaseInStream())
{
InSeqStream.Release();
return S_OK;
}
-STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize))
{
const UInt64 startPos = _processedSize;
- HRESULT res = CodeSpec((Byte *)data, size);
+ const HRESULT res = CodeSpec((Byte *)data, size);
if (processedSize)
*processedSize = (UInt32)(_processedSize - startPos);
return res;
diff --git a/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.h b/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.h
index f1a8ee2118c..22e5bd49587 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/PpmdDecoder.h
@@ -1,8 +1,7 @@
// PpmdDecoder.h
-// 2020-07-03 : Igor Pavlov : Public domain
-#ifndef __COMPRESS_PPMD_DECODER_H
-#define __COMPRESS_PPMD_DECODER_H
+#ifndef ZIP7_INC_COMPRESS_PPMD_DECODER_H
+#define ZIP7_INC_COMPRESS_PPMD_DECODER_H
#include "../../../C/Ppmd7.h"
@@ -15,18 +14,42 @@
namespace NCompress {
namespace NPpmd {
-class CDecoder :
+class CDecoder Z7_final:
public ICompressCoder,
public ICompressSetDecoderProperties2,
public ICompressSetFinishMode,
public ICompressGetInStreamProcessedSize,
- #ifndef NO_READ_FROM_CODER
+ #ifndef Z7_NO_READ_FROM_CODER
public ICompressSetInStream,
public ICompressSetOutStreamSize,
public ISequentialInStream,
- #endif
+ #endif
public CMyUnknownImp
{
+ Z7_COM_QI_BEGIN2(ICompressCoder)
+ Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2)
+ Z7_COM_QI_ENTRY(ICompressSetFinishMode)
+ Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize)
+ #ifndef Z7_NO_READ_FROM_CODER
+ Z7_COM_QI_ENTRY(ICompressSetInStream)
+ Z7_COM_QI_ENTRY(ICompressSetOutStreamSize)
+ Z7_COM_QI_ENTRY(ISequentialInStream)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ICompressCoder)
+ Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2)
+ Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
+ Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize)
+ #ifndef Z7_NO_READ_FROM_CODER
+ Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+ Z7_IFACE_COM7_IMP(ICompressSetInStream)
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+ #else
+ Z7_COM7F_IMF(SetOutStreamSize(const UInt64 *outSize));
+ #endif
+
Byte *_outBuf;
CByteInBufWrap _inStream;
CPpmd7 _ppmd;
@@ -43,36 +66,9 @@ class CDecoder :
public:
- #ifndef NO_READ_FROM_CODER
+ #ifndef Z7_NO_READ_FROM_CODER
CMyComPtr<ISequentialInStream> InSeqStream;
- #endif
-
- MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
- MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2)
- MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
- MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)
- #ifndef NO_READ_FROM_CODER
- MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)
- MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize)
- MY_QUERYINTERFACE_ENTRY(ISequentialInStream)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
- STDMETHOD(SetFinishMode)(UInt32 finishMode);
- STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
-
- STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
-
- #ifndef NO_READ_FROM_CODER
- STDMETHOD(SetInStream)(ISequentialInStream *inStream);
- STDMETHOD(ReleaseInStream)();
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- #endif
+ #endif
CDecoder():
_outBuf(NULL),
diff --git a/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.cpp
index d41d2acad2b..2dfca6df6f2 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.cpp
@@ -24,7 +24,7 @@ void CEncProps::Normalize(int level)
const unsigned kMult = 16;
if (MemSize / kMult > ReduceSize)
{
- for (unsigned i = 16; i <= 31; i++)
+ for (unsigned i = 16; i < 32; i++)
{
UInt32 m = (UInt32)1 << i;
if (ReduceSize <= m / kMult)
@@ -52,7 +52,7 @@ CEncoder::~CEncoder()
Ppmd7_Free(&_ppmd, &g_BigAlloc);
}
-STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps))
{
int level = -1;
CEncProps props;
@@ -109,7 +109,7 @@ STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIA
if (prop.vt != VT_UI4)
return E_INVALIDARG;
- UInt32 v = (UInt32)prop.ulVal;
+ const UInt32 v = (UInt32)prop.ulVal;
switch (propID)
{
case NCoderPropID::kOrder:
@@ -127,17 +127,17 @@ STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIA
return S_OK;
}
-STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream)
+Z7_COM7F_IMF(CEncoder::WriteCoderProperties(ISequentialOutStream *outStream))
{
const UInt32 kPropSize = 5;
Byte props[kPropSize];
props[0] = (Byte)_props.Order;
- SetUi32(props + 1, _props.MemSize);
+ SetUi32(props + 1, _props.MemSize)
return WriteStream(outStream, props, kPropSize);
}
-HRESULT CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress))
{
if (!_inBuf)
{
@@ -160,7 +160,7 @@ HRESULT CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outS
for (;;)
{
UInt32 size;
- RINOK(inStream->Read(_inBuf, kBufSize, &size));
+ RINOK(inStream->Read(_inBuf, kBufSize, &size))
if (size == 0)
{
// We don't write EndMark in PPMD-7z.
@@ -179,13 +179,13 @@ HRESULT CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outS
*/
Ppmd7z_EncodeSymbols(&_ppmd, buf, lim);
- RINOK(_outStream.Res);
+ RINOK(_outStream.Res)
processed += size;
if (progress)
{
const UInt64 outSize = _outStream.GetProcessed();
- RINOK(progress->SetRatioInfo(&processed, &outSize));
+ RINOK(progress->SetRatioInfo(&processed, &outSize))
}
}
}
diff --git a/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.h b/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.h
index 0104663f562..057cccbec59 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/PpmdEncoder.h
@@ -1,7 +1,7 @@
// PpmdEncoder.h
-#ifndef __COMPRESS_PPMD_ENCODER_H
-#define __COMPRESS_PPMD_ENCODER_H
+#ifndef ZIP7_INC_COMPRESS_PPMD_ENCODER_H
+#define ZIP7_INC_COMPRESS_PPMD_ENCODER_H
#include "../../../C/Ppmd7.h"
@@ -29,25 +29,17 @@ struct CEncProps
void Normalize(int level);
};
-class CEncoder :
- public ICompressCoder,
- public ICompressSetCoderProperties,
- public ICompressWriteCoderProperties,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_3(
+ CEncoder
+ , ICompressCoder
+ , ICompressSetCoderProperties
+ , ICompressWriteCoderProperties
+)
Byte *_inBuf;
CByteOutBufWrap _outStream;
CPpmd7 _ppmd;
CEncProps _props;
public:
- MY_UNKNOWN_IMP3(
- ICompressCoder,
- ICompressSetCoderProperties,
- ICompressWriteCoderProperties)
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
- STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
CEncoder();
~CEncoder();
};
diff --git a/3rdparty/lzma/CPP/7zip/Compress/PpmdRegister.cpp b/3rdparty/lzma/CPP/7zip/Compress/PpmdRegister.cpp
index a3ebb5f3d87..fb5619c969f 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/PpmdRegister.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/PpmdRegister.cpp
@@ -6,7 +6,7 @@
#include "PpmdDecoder.h"
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
#include "PpmdEncoder.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Compress/StdAfx.h b/3rdparty/lzma/CPP/7zip/Compress/StdAfx.h
index 1cbd7feaeec..80866550d1f 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.cpp
index 0371173c36f..420bd714003 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.cpp
@@ -50,10 +50,10 @@ HRESULT CDecoder::Decode(ISequentialInStream *seqInStream, ISequentialOutStream
int isMT = False;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
{
props.numThreads = 1;
- UInt32 numThreads = _numThreads;
+ const UInt32 numThreads = _numThreads;
if (_tryMt && numThreads > 1)
{
@@ -87,7 +87,7 @@ HRESULT CDecoder::Decode(ISequentialInStream *seqInStream, ISequentialOutStream
MainDecodeSRes = res;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
// _tryMt = isMT;
#endif
@@ -113,33 +113,33 @@ HRESULT CDecoder::Decode(ISequentialInStream *seqInStream, ISequentialOutStream
}
-HRESULT CComDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 * /* inSize */, const UInt64 *outSize, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CComDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 * /* inSize */, const UInt64 *outSize, ICompressProgressInfo *progress))
{
return Decode(inStream, outStream, outSize, _finishStream, progress);
}
-STDMETHODIMP CComDecoder::SetFinishMode(UInt32 finishMode)
+Z7_COM7F_IMF(CComDecoder::SetFinishMode(UInt32 finishMode))
{
_finishStream = (finishMode != 0);
return S_OK;
}
-STDMETHODIMP CComDecoder::GetInStreamProcessedSize(UInt64 *value)
+Z7_COM7F_IMF(CComDecoder::GetInStreamProcessedSize(UInt64 *value))
{
*value = Stat.InSize;
return S_OK;
}
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
-STDMETHODIMP CComDecoder::SetNumberOfThreads(UInt32 numThreads)
+Z7_COM7F_IMF(CComDecoder::SetNumberOfThreads(UInt32 numThreads))
{
_numThreads = numThreads;
return S_OK;
}
-STDMETHODIMP CComDecoder::SetMemLimit(UInt64 memUsage)
+Z7_COM7F_IMF(CComDecoder::SetMemLimit(UInt64 memUsage))
{
_memUsage = memUsage;
return S_OK;
diff --git a/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.h b/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.h
index 7ad81f49aba..40ed4f5c5cd 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/XzDecoder.h
@@ -1,7 +1,7 @@
// XzDecoder.h
-#ifndef __XZ_DECODER_H
-#define __XZ_DECODER_H
+#ifndef ZIP7_INC_XZ_DECODER_H
+#define ZIP7_INC_XZ_DECODER_H
#include "../../../C/Xz.h"
@@ -46,45 +46,38 @@ struct CDecoder
};
-class CComDecoder:
+class CComDecoder Z7_final:
public ICompressCoder,
public ICompressSetFinishMode,
public ICompressGetInStreamProcessedSize,
-
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
public ICompressSetCoderMt,
public ICompressSetMemLimit,
- #endif
-
+ #endif
public CMyUnknownImp,
public CDecoder
{
+ Z7_COM_QI_BEGIN2(ICompressCoder)
+ Z7_COM_QI_ENTRY(ICompressSetFinishMode)
+ Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize)
+ #ifndef Z7_ST
+ Z7_COM_QI_ENTRY(ICompressSetCoderMt)
+ Z7_COM_QI_ENTRY(ICompressSetMemLimit)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ICompressCoder)
+ Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
+ Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize)
+ #ifndef Z7_ST
+ Z7_IFACE_COM7_IMP(ICompressSetCoderMt)
+ Z7_IFACE_COM7_IMP(ICompressSetMemLimit)
+ #endif
+
bool _finishStream;
public:
- MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
-
- MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
- MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)
-
- #ifndef _7ZIP_ST
- MY_QUERYINTERFACE_ENTRY(ICompressSetCoderMt)
- MY_QUERYINTERFACE_ENTRY(ICompressSetMemLimit)
- #endif
-
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetFinishMode)(UInt32 finishMode);
- STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
-
- #ifndef _7ZIP_ST
- STDMETHOD(SetNumberOfThreads)(UInt32 numThreads);
- STDMETHOD(SetMemLimit)(UInt64 memUsage);
- #endif
-
CComDecoder(): _finishStream(false) {}
};
diff --git a/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.cpp b/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.cpp
index d6f42caf2d3..33f0bde4713 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.cpp
+++ b/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.cpp
@@ -15,9 +15,7 @@
namespace NCompress {
namespace NLzma2 {
-
HRESULT SetLzma2Prop(PROPID propID, const PROPVARIANT &prop, CLzma2EncProps &lzma2Props);
-
}
namespace NXz {
@@ -63,7 +61,7 @@ static const CMethodNamePair g_NamePairs[] =
static int FilterIdFromName(const wchar_t *name)
{
- for (unsigned i = 0; i < ARRAY_SIZE(g_NamePairs); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_NamePairs); i++)
{
const CMethodNamePair &pair = g_NamePairs[i];
if (StringsAreEqualNoCase_Ascii(name, pair.Name))
@@ -130,7 +128,7 @@ HRESULT CEncoder::SetCoderProp(PROPID propID, const PROPVARIANT &prop)
{
if (prop.vt == VT_UI4)
{
- UInt32 id32 = prop.ulVal;
+ const UInt32 id32 = prop.ulVal;
if (id32 == XZ_ID_Delta)
return E_INVALIDARG;
xzProps.filterProps.id = prop.ulVal;
@@ -156,7 +154,7 @@ HRESULT CEncoder::SetCoderProp(PROPID propID, const PROPVARIANT &prop)
}
else
{
- int filterId = FilterIdFromName(prop.bstrVal);
+ const int filterId = FilterIdFromName(prop.bstrVal);
if (filterId < 0 /* || filterId == XZ_ID_LZMA2 */)
return E_INVALIDARG;
id32 = (unsigned)filterId;
@@ -165,11 +163,11 @@ HRESULT CEncoder::SetCoderProp(PROPID propID, const PROPVARIANT &prop)
if (id32 == XZ_ID_Delta)
{
- wchar_t c = *name;
+ const wchar_t c = *name;
if (c != '-' && c != ':')
return E_INVALIDARG;
name++;
- UInt32 delta = ConvertStringToUInt32(name, &end);
+ const UInt32 delta = ConvertStringToUInt32(name, &end);
if (end == name || *end != 0 || delta == 0 || delta > 256)
return E_INVALIDARG;
xzProps.filterProps.delta = delta;
@@ -185,14 +183,14 @@ HRESULT CEncoder::SetCoderProp(PROPID propID, const PROPVARIANT &prop)
}
-STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs,
- const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderProperties(const PROPID *propIDs,
+ const PROPVARIANT *coderProps, UInt32 numProps))
{
XzProps_Init(&xzProps);
for (UInt32 i = 0; i < numProps; i++)
{
- RINOK(SetCoderProp(propIDs[i], coderProps[i]));
+ RINOK(SetCoderProp(propIDs[i], coderProps[i]))
}
return S_OK;
@@ -200,13 +198,13 @@ STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs,
}
-STDMETHODIMP CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
- const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
+ const PROPVARIANT *coderProps, UInt32 numProps))
{
for (UInt32 i = 0; i < numProps; i++)
{
const PROPVARIANT &prop = coderProps[i];
- PROPID propID = propIDs[i];
+ const PROPID propID = propIDs[i];
if (propID == NCoderPropID::kExpectedDataSize)
if (prop.vt == VT_UI8)
XzEnc_SetDataSize(_encoder, prop.uhVal.QuadPart);
@@ -218,8 +216,8 @@ STDMETHODIMP CEncoder::SetCoderPropertiesOpt(const PROPID *propIDs,
#define RET_IF_WRAP_ERROR(wrapRes, sRes, sResErrorCode) \
if (wrapRes != S_OK /* && (sRes == SZ_OK || sRes == sResErrorCode) */) return wrapRes;
-STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress)
+Z7_COM7F_IMF(CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
+ const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress))
{
CSeqInStreamWrap inWrap;
CSeqOutStreamWrap outWrap;
diff --git a/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.h b/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.h
index ea5190ee6ea..434f582091e 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/XzEncoder.h
@@ -1,7 +1,7 @@
// XzEncoder.h
-#ifndef __XZ_ENCODER_H
-#define __XZ_ENCODER_H
+#ifndef ZIP7_INC_XZ_ENCODER_H
+#define ZIP7_INC_XZ_ENCODER_H
#include "../../../C/XzEnc.h"
@@ -12,33 +12,22 @@
namespace NCompress {
namespace NXz {
-
-class CEncoder:
- public ICompressCoder,
- public ICompressSetCoderProperties,
- public ICompressSetCoderPropertiesOpt,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_3(
+ CEncoder
+ , ICompressCoder
+ , ICompressSetCoderProperties
+ , ICompressSetCoderPropertiesOpt
+)
CXzEncHandle _encoder;
public:
CXzProps xzProps;
- MY_UNKNOWN_IMP3(
- ICompressCoder,
- ICompressSetCoderProperties,
- ICompressSetCoderPropertiesOpt)
-
void InitCoderProps();
HRESULT SetCheckSize(UInt32 checkSizeInBytes);
HRESULT SetCoderProp(PROPID propID, const PROPVARIANT &prop);
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
- STDMETHOD(SetCoderPropertiesOpt)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
CEncoder();
- virtual ~CEncoder();
+ ~CEncoder();
};
}}
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/7zAes.cpp b/3rdparty/lzma/CPP/7zip/Crypto/7zAes.cpp
index 7f34e910847..6b1c648d5c1 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/7zAes.cpp
+++ b/3rdparty/lzma/CPP/7zip/Crypto/7zAes.cpp
@@ -8,7 +8,7 @@
#include "../../Common/ComTry.h"
#include "../../Common/MyBuffer2.h"
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
#include "../../Windows/Synchronization.h"
#endif
@@ -17,7 +17,7 @@
#include "7zAes.h"
#include "MyAes.h"
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
#include "RandGen.h"
#endif
@@ -86,8 +86,8 @@ void CKeyInfo::CalcKey()
r += numUnroll;
do
{
- SetUi32(dest, i); i++; dest += bufSize;
- // SetUi32(dest, i); i++; dest += bufSize;
+ SetUi32(dest, i) i++; dest += bufSize;
+ // SetUi32(dest, i) i++; dest += bufSize;
}
while (i < r);
Sha256_Update((CSha256 *)(void *)(Byte *)sha, buf, unrollSize);
@@ -153,7 +153,7 @@ void CKeyInfoCache::Add(const CKeyInfo &key)
static CKeyInfoCache g_GlobalKeyCache(32);
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static NWindows::NSynchronization::CCriticalSection g_GlobalKeyCacheCriticalSection;
#define MT_LOCK NWindows::NSynchronization::CCriticalSectionLock lock(g_GlobalKeyCacheCriticalSection);
#else
@@ -185,10 +185,10 @@ void CBase::PrepareKey()
g_GlobalKeyCache.FindAndAdd(_key);
}
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
/*
-STDMETHODIMP CEncoder::ResetSalt()
+Z7_COM7F_IMF(CEncoder::ResetSalt())
{
_key.SaltSize = 4;
g_RandomGenerator.Generate(_key.Salt, _key.SaltSize);
@@ -196,7 +196,7 @@ STDMETHODIMP CEncoder::ResetSalt()
}
*/
-STDMETHODIMP CEncoder::ResetInitVector()
+Z7_COM7F_IMF(CEncoder::ResetInitVector())
{
for (unsigned i = 0; i < sizeof(_iv); i++)
_iv[i] = 0;
@@ -205,7 +205,7 @@ STDMETHODIMP CEncoder::ResetInitVector()
return S_OK;
}
-STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream)
+Z7_COM7F_IMF(CEncoder::WriteCoderProperties(ISequentialOutStream *outStream))
{
Byte props[2 + sizeof(_key.Salt) + sizeof(_iv)];
unsigned propsSize = 1;
@@ -243,7 +243,7 @@ CDecoder::CDecoder()
_aesFilter = new CAesCbcDecoder(kKeySize);
}
-STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
+Z7_COM7F_IMF(CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size))
{
_key.ClearProps();
@@ -282,7 +282,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
}
-STDMETHODIMP CBaseCoder::CryptoSetPassword(const Byte *data, UInt32 size)
+Z7_COM7F_IMF(CBaseCoder::CryptoSetPassword(const Byte *data, UInt32 size))
{
COM_TRY_BEGIN
@@ -293,23 +293,23 @@ STDMETHODIMP CBaseCoder::CryptoSetPassword(const Byte *data, UInt32 size)
COM_TRY_END
}
-STDMETHODIMP CBaseCoder::Init()
+Z7_COM7F_IMF(CBaseCoder::Init())
{
COM_TRY_BEGIN
PrepareKey();
CMyComPtr<ICryptoProperties> cp;
- RINOK(_aesFilter.QueryInterface(IID_ICryptoProperties, &cp));
+ RINOK(_aesFilter.QueryInterface(IID_ICryptoProperties, &cp))
if (!cp)
return E_FAIL;
- RINOK(cp->SetKey(_key.Key, kKeySize));
- RINOK(cp->SetInitVector(_iv, sizeof(_iv)));
+ RINOK(cp->SetKey(_key.Key, kKeySize))
+ RINOK(cp->SetInitVector(_iv, sizeof(_iv)))
return _aesFilter->Init();
COM_TRY_END
}
-STDMETHODIMP_(UInt32) CBaseCoder::Filter(Byte *data, UInt32 size)
+Z7_COM7F_IMF2(UInt32, CBaseCoder::Filter(Byte *data, UInt32 size))
{
return _aesFilter->Filter(data, size);
}
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/7zAes.h b/3rdparty/lzma/CPP/7zip/Crypto/7zAes.h
index a67ac0b61b3..8f7bf03eb29 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/7zAes.h
+++ b/3rdparty/lzma/CPP/7zip/Crypto/7zAes.h
@@ -1,7 +1,7 @@
// 7zAes.h
-#ifndef __CRYPTO_7Z_AES_H
-#define __CRYPTO_7Z_AES_H
+#ifndef ZIP7_INC_CRYPTO_7Z_AES_H
+#define ZIP7_INC_CRYPTO_7Z_AES_H
#include "../../Common/MyBuffer.h"
#include "../../Common/MyCom.h"
@@ -43,10 +43,13 @@ public:
Password.Wipe();
NumCyclesPower = 0;
SaltSize = 0;
- MY_memset_0_ARRAY(Salt);
- MY_memset_0_ARRAY(Key);
+ Z7_memset_0_ARRAY(Salt);
+ Z7_memset_0_ARRAY(Key);
}
+#ifdef Z7_CPP_IS_SUPPORTED_default
+ CKeyInfo(const CKeyInfo &) = default;
+#endif
~CKeyInfo() { Wipe(); }
};
@@ -79,48 +82,46 @@ class CBaseCoder:
public CMyUnknownImp,
public CBase
{
+ Z7_IFACE_COM7_IMP(ICompressFilter)
+ Z7_IFACE_COM7_IMP(ICryptoSetPassword)
protected:
+ virtual ~CBaseCoder() {}
CMyComPtr<ICompressFilter> _aesFilter;
-
-public:
- INTERFACE_ICompressFilter(;)
-
- STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size);
};
-#ifndef EXTRACT_ONLY
+#ifndef Z7_EXTRACT_ONLY
-class CEncoder:
+class CEncoder Z7_final:
public CBaseCoder,
public ICompressWriteCoderProperties,
// public ICryptoResetSalt,
public ICryptoResetInitVector
{
-public:
- MY_UNKNOWN_IMP4(
+ Z7_COM_UNKNOWN_IMP_4(
ICompressFilter,
ICryptoSetPassword,
ICompressWriteCoderProperties,
// ICryptoResetSalt,
ICryptoResetInitVector)
- STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
- // STDMETHOD(ResetSalt)();
- STDMETHOD(ResetInitVector)();
+ Z7_IFACE_COM7_IMP(ICompressWriteCoderProperties)
+ // Z7_IFACE_COM7_IMP(ICryptoResetSalt)
+ Z7_IFACE_COM7_IMP(ICryptoResetInitVector)
+public:
CEncoder();
};
#endif
-class CDecoder:
+class CDecoder Z7_final:
public CBaseCoder,
public ICompressSetDecoderProperties2
{
-public:
- MY_UNKNOWN_IMP3(
+ Z7_COM_UNKNOWN_IMP_3(
ICompressFilter,
ICryptoSetPassword,
ICompressSetDecoderProperties2)
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
+ Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2)
+public:
CDecoder();
};
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/7zAesRegister.cpp b/3rdparty/lzma/CPP/7zip/Crypto/7zAesRegister.cpp
index 35605f4352d..69d0890a40b 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/7zAesRegister.cpp
+++ b/3rdparty/lzma/CPP/7zip/Crypto/7zAesRegister.cpp
@@ -9,7 +9,7 @@
namespace NCrypto {
namespace N7z {
-REGISTER_FILTER_E(_7zAES,
+REGISTER_FILTER_E(SzAES,
CDecoder,
CEncoder,
0x6F10701, "7zAES")
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/MyAes.cpp b/3rdparty/lzma/CPP/7zip/Crypto/MyAes.cpp
index 5cb7f46359b..6abc38812b3 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/MyAes.cpp
+++ b/3rdparty/lzma/CPP/7zip/Crypto/MyAes.cpp
@@ -10,11 +10,16 @@ namespace NCrypto {
static struct CAesTabInit { CAesTabInit() { AesGenTables();} } g_AesTabInit;
-CAesCoder::CAesCoder(bool encodeMode, unsigned keySize, bool ctrMode):
- _keySize(keySize),
+CAesCoder::CAesCoder(
+ // bool encodeMode,
+ unsigned keySize
+ // , bool ctrMode
+ ):
_keyIsSet(false),
- _encodeMode(encodeMode),
- _ctrMode(ctrMode),
+ // _encodeMode(encodeMode),
+ // _ctrMode(ctrMode),
+ _keySize(keySize),
+ // _ctrPos(0), // _ctrPos =0 will be set in Init()
_aes(AES_NUM_IVMRK_WORDS * 4 + AES_BLOCK_SIZE * 2)
{
// _offset = ((0 - (unsigned)(ptrdiff_t)_aes) & 0xF) / sizeof(UInt32);
@@ -24,64 +29,128 @@ CAesCoder::CAesCoder(bool encodeMode, unsigned keySize, bool ctrMode):
for (unsigned i = 0; i < 16; i++) _iv[i] = (Byte)(i + 1);
_iv[0] = 0xFE; _iv[1] = _iv[2] = _iv[3] = 0xFF;
*/
- SetFunctions(0);
}
-STDMETHODIMP CAesCoder::Init()
+Z7_COM7F_IMF(CAesCoder::Init())
{
+ _ctrPos = 0;
AesCbc_Init(Aes(), _iv);
return _keyIsSet ? S_OK : E_NOTIMPL; // E_FAIL
}
-STDMETHODIMP_(UInt32) CAesCoder::Filter(Byte *data, UInt32 size)
+Z7_COM7F_IMF2(UInt32, CAesCoder::Filter(Byte *data, UInt32 size))
{
if (!_keyIsSet)
return 0;
- if (size == 0)
- return 0;
if (size < AES_BLOCK_SIZE)
{
- #ifndef _SFX
- if (_ctrMode)
- {
- // use that code only for last block !!!
- Byte *ctr = (Byte *)(Aes() + AES_NUM_IVMRK_WORDS);
- memset(ctr, 0, AES_BLOCK_SIZE);
- memcpy(ctr, data, size);
- _codeFunc(Aes(), ctr, 1);
- memcpy(data, ctr, size);
- return size;
- }
- #endif
+ if (size == 0)
+ return 0;
return AES_BLOCK_SIZE;
}
size >>= 4;
+ // (data) must be aligned for 16-bytes here
_codeFunc(Aes(), data, size);
return size << 4;
}
-STDMETHODIMP CAesCoder::SetKey(const Byte *data, UInt32 size)
+
+Z7_COM7F_IMF(CAesCoder::SetKey(const Byte *data, UInt32 size))
{
if ((size & 0x7) != 0 || size < 16 || size > 32)
return E_INVALIDARG;
if (_keySize != 0 && size != _keySize)
return E_INVALIDARG;
- AES_SET_KEY_FUNC setKeyFunc = (_ctrMode | _encodeMode) ? Aes_SetKey_Enc : Aes_SetKey_Dec;
- setKeyFunc(Aes() + 4, data, size);
+ _setKeyFunc(Aes() + 4, data, size);
_keyIsSet = true;
return S_OK;
}
-STDMETHODIMP CAesCoder::SetInitVector(const Byte *data, UInt32 size)
+Z7_COM7F_IMF(CAesCoder::SetInitVector(const Byte *data, UInt32 size))
{
if (size != AES_BLOCK_SIZE)
return E_INVALIDARG;
memcpy(_iv, data, size);
+ /* we allow SetInitVector() call before SetKey() call.
+ so we ignore possible error in Init() here */
CAesCoder::Init(); // don't call virtual function here !!!
return S_OK;
}
-#ifndef _SFX
+
+#ifndef Z7_SFX
+
+/*
+Z7_COM7F_IMF(CAesCtrCoder::Init())
+{
+ _ctrPos = 0;
+ return CAesCoder::Init();
+}
+*/
+
+Z7_COM7F_IMF2(UInt32, CAesCtrCoder::Filter(Byte *data, UInt32 size))
+{
+ if (!_keyIsSet)
+ return 0;
+ if (size == 0)
+ return 0;
+
+ if (_ctrPos != 0)
+ {
+ /* Optimized caller will not call here */
+ const Byte *ctr = (Byte *)(Aes() + AES_NUM_IVMRK_WORDS);
+ unsigned num = 0;
+ for (unsigned i = _ctrPos; i != AES_BLOCK_SIZE; i++)
+ {
+ if (num == size)
+ {
+ _ctrPos = i;
+ return num;
+ }
+ data[num++] ^= ctr[i];
+ }
+ _ctrPos = 0;
+ /* if (num < size) {
+ we can filter more data with _codeFunc().
+ But it's supposed that the caller can work correctly,
+ even if we do only partial filtering here.
+ So we filter data only for current 16-byte block. }
+ */
+ /*
+ size -= num;
+ size >>= 4;
+ // (data) must be aligned for 16-bytes here
+ _codeFunc(Aes(), data + num, size);
+ return num + (size << 4);
+ */
+ return num;
+ }
+
+ if (size < AES_BLOCK_SIZE)
+ {
+ /* The good optimized caller can call here only in last Filter() call.
+ But we support also non-optimized callers,
+ where another Filter() calls are allowed after this call.
+ */
+ Byte *ctr = (Byte *)(Aes() + AES_NUM_IVMRK_WORDS);
+ memset(ctr, 0, AES_BLOCK_SIZE);
+ memcpy(ctr, data, size);
+ _codeFunc(Aes(), ctr, 1);
+ memcpy(data, ctr, size);
+ _ctrPos = size;
+ return size;
+ }
+
+ size >>= 4;
+ // (data) must be aligned for 16-bytes here
+ _codeFunc(Aes(), data, size);
+ return size << 4;
+}
+
+#endif // Z7_SFX
+
+
+#ifndef Z7_EXTRACT_ONLY
#ifdef MY_CPU_X86_OR_AMD64
#define USE_HW_AES
@@ -101,93 +170,65 @@ STDMETHODIMP CAesCoder::SetInitVector(const Byte *data, UInt32 size)
#endif
#endif
+#ifdef USE_HW_AES
+ #define SET_AES_FUNC_2(f2) \
+ if (algo == 2) if (g_Aes_SupportedFunctions_Flags & k_Aes_SupportedFunctions_HW) \
+ { f = f2; }
+ #ifdef MY_CPU_X86_OR_AMD64
+ #define SET_AES_FUNC_23(f2, f3) \
+ SET_AES_FUNC_2(f2) \
+ if (algo == 3) if (g_Aes_SupportedFunctions_Flags & k_Aes_SupportedFunctions_HW_256) \
+ { f = f3; }
+ #else // MY_CPU_X86_OR_AMD64
+ #define SET_AES_FUNC_23(f2, f3) \
+ SET_AES_FUNC_2(f2)
+ #endif // MY_CPU_X86_OR_AMD64
+#else // USE_HW_AES
+ #define SET_AES_FUNC_23(f2, f3)
+#endif // USE_HW_AES
+
+#define SET_AES_FUNCS(c, f0, f1, f2, f3) \
+ bool c::SetFunctions(UInt32 algo) { \
+ _codeFunc = f0; if (algo < 1) return true; \
+ AES_CODE_FUNC f = NULL; \
+ if (algo == 1) { f = f1; } \
+ SET_AES_FUNC_23(f2, f3) \
+ if (f) { _codeFunc = f; return true; } \
+ return false; }
+
+
+
+#ifndef Z7_SFX
+SET_AES_FUNCS(
+ CAesCtrCoder,
+ g_AesCtr_Code,
+ AesCtr_Code,
+ AesCtr_Code_HW,
+ AesCtr_Code_HW_256)
#endif
-
-bool CAesCoder::SetFunctions(UInt32
- #ifndef _SFX
- algo
- #endif
- )
-{
- _codeFunc = g_AesCbc_Decode;
-
- #ifdef _SFX
-
- return true;
-
- #else
-
- if (_ctrMode)
- _codeFunc = g_AesCtr_Code;
- else if (_encodeMode)
- _codeFunc = g_AesCbc_Encode;
-
- if (algo < 1)
- return true;
-
- if (algo == 1)
- {
- _codeFunc = AesCbc_Decode;
-
- #ifndef _SFX
- if (_ctrMode)
- _codeFunc = AesCtr_Code;
- else if (_encodeMode)
- _codeFunc = AesCbc_Encode;
- #endif
- return true;
- }
-
- #ifdef USE_HW_AES
- // if (CPU_IsSupported_AES())
- {
- if (algo == 2)
- if (g_Aes_SupportedFunctions_Flags & k_Aes_SupportedFunctions_HW)
- {
- _codeFunc = AesCbc_Decode_HW;
- #ifndef _SFX
- if (_ctrMode)
- _codeFunc = AesCtr_Code_HW;
- else if (_encodeMode)
- _codeFunc = AesCbc_Encode_HW;
- #endif
- return true;
- }
-
- #if defined(MY_CPU_X86_OR_AMD64)
- if (algo == 3)
- if (g_Aes_SupportedFunctions_Flags & k_Aes_SupportedFunctions_HW_256)
- {
- _codeFunc = AesCbc_Decode_HW_256;
- #ifndef _SFX
- if (_ctrMode)
- _codeFunc = AesCtr_Code_HW_256;
- else if (_encodeMode)
- _codeFunc = AesCbc_Encode_HW;
- #endif
- return true;
- }
- #endif
- }
- #endif
-
- return false;
-
- #endif
-}
-
-
-#ifndef _SFX
-
-STDMETHODIMP CAesCoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps)
+SET_AES_FUNCS(
+ CAesCbcEncoder,
+ g_AesCbc_Encode,
+ AesCbc_Encode,
+ AesCbc_Encode_HW,
+ AesCbc_Encode_HW)
+
+SET_AES_FUNCS(
+ CAesCbcDecoder,
+ g_AesCbc_Decode,
+ AesCbc_Decode,
+ AesCbc_Decode_HW,
+ AesCbc_Decode_HW_256)
+
+Z7_COM7F_IMF(CAesCoder::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps))
{
UInt32 algo = 0;
for (UInt32 i = 0; i < numProps; i++)
{
- const PROPVARIANT &prop = coderProps[i];
if (propIDs[i] == NCoderPropID::kDefaultProp)
{
+ const PROPVARIANT &prop = coderProps[i];
if (prop.vt != VT_UI4)
return E_INVALIDARG;
if (prop.ulVal > 3)
@@ -200,6 +241,6 @@ STDMETHODIMP CAesCoder::SetCoderProperties(const PROPID *propIDs, const PROPVARI
return S_OK;
}
-#endif
+#endif // Z7_EXTRACT_ONLY
}
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/MyAes.h b/3rdparty/lzma/CPP/7zip/Crypto/MyAes.h
index a60042be33e..a3c1c27faa5 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/MyAes.h
+++ b/3rdparty/lzma/CPP/7zip/Crypto/MyAes.h
@@ -1,7 +1,7 @@
// Crypto/MyAes.h
-#ifndef __CRYPTO_MY_AES_H
-#define __CRYPTO_MY_AES_H
+#ifndef ZIP7_INC_CRYPTO_MY_AES_H
+#define ZIP7_INC_CRYPTO_MY_AES_H
#include "../../../C/Aes.h"
@@ -12,68 +12,111 @@
namespace NCrypto {
+#ifdef Z7_EXTRACT_ONLY
+#define Z7_IFACEN_IAesCoderSetFunctions(x)
+#else
+#define Z7_IFACEN_IAesCoderSetFunctions(x) \
+ virtual bool SetFunctions(UInt32 algo) x
+#endif
+
+
class CAesCoder:
public ICompressFilter,
public ICryptoProperties,
- #ifndef _SFX
+ #ifndef Z7_EXTRACT_ONLY
public ICompressSetCoderProperties,
- #endif
+ #endif
public CMyUnknownImp
{
- AES_CODE_FUNC _codeFunc;
+ Z7_COM_QI_BEGIN2(ICompressFilter)
+ Z7_COM_QI_ENTRY(ICryptoProperties)
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_COM_QI_ENTRY(ICompressSetCoderProperties)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+public:
+ Z7_IFACE_COM7_IMP_NONFINAL(ICompressFilter)
+ Z7_IFACE_COM7_IMP(ICryptoProperties)
+private:
+ #ifndef Z7_EXTRACT_ONLY
+ Z7_IFACE_COM7_IMP(ICompressSetCoderProperties)
+ #endif
+
+protected:
+ bool _keyIsSet;
+ // bool _encodeMode;
+ // bool _ctrMode;
// unsigned _offset;
unsigned _keySize;
- bool _keyIsSet;
- bool _encodeMode;
- bool _ctrMode;
-
+ unsigned _ctrPos; // we need _ctrPos here for Init() / SetInitVector()
+ AES_CODE_FUNC _codeFunc;
+ AES_SET_KEY_FUNC _setKeyFunc;
+private:
// UInt32 _aes[AES_NUM_IVMRK_WORDS + 3];
- CAlignedBuffer _aes;
+ CAlignedBuffer1 _aes;
Byte _iv[AES_BLOCK_SIZE];
// UInt32 *Aes() { return _aes + _offset; }
+protected:
UInt32 *Aes() { return (UInt32 *)(void *)(Byte *)_aes; }
- bool SetFunctions(UInt32 algo);
+ Z7_IFACE_PURE(IAesCoderSetFunctions)
public:
- CAesCoder(bool encodeMode, unsigned keySize, bool ctrMode);
-
- virtual ~CAesCoder() {}; // we need virtual destructor for derived classes
-
- MY_QUERYINTERFACE_BEGIN2(ICompressFilter)
- MY_QUERYINTERFACE_ENTRY(ICryptoProperties)
- #ifndef _SFX
- MY_QUERYINTERFACE_ENTRY(ICompressSetCoderProperties)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- INTERFACE_ICompressFilter(;)
-
+ CAesCoder(
+ // bool encodeMode,
+ unsigned keySize
+ // , bool ctrMode
+ );
+ virtual ~CAesCoder() {} // we need virtual destructor for derived classes
void SetKeySize(unsigned size) { _keySize = size; }
-
- STDMETHOD(SetKey)(const Byte *data, UInt32 size);
- STDMETHOD(SetInitVector)(const Byte *data, UInt32 size);
-
- #ifndef _SFX
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
- #endif
};
-#ifndef _SFX
+
+#ifndef Z7_EXTRACT_ONLY
struct CAesCbcEncoder: public CAesCoder
{
- CAesCbcEncoder(unsigned keySize = 0): CAesCoder(true, keySize, false) {}
+ CAesCbcEncoder(unsigned keySize = 0): CAesCoder(keySize)
+ {
+ _setKeyFunc = Aes_SetKey_Enc;
+ _codeFunc = g_AesCbc_Encode;
+ }
+ Z7_IFACE_IMP(IAesCoderSetFunctions)
};
#endif
struct CAesCbcDecoder: public CAesCoder
{
- CAesCbcDecoder(unsigned keySize = 0): CAesCoder(false, keySize, false) {}
+ CAesCbcDecoder(unsigned keySize = 0): CAesCoder(keySize)
+ {
+ _setKeyFunc = Aes_SetKey_Dec;
+ _codeFunc = g_AesCbc_Decode;
+ }
+ Z7_IFACE_IMP(IAesCoderSetFunctions)
};
+#ifndef Z7_SFX
+struct CAesCtrCoder: public CAesCoder
+{
+private:
+ // unsigned _ctrPos;
+ // Z7_IFACE_COM7_IMP(ICompressFilter)
+ // Z7_COM7F_IMP(Init())
+ Z7_COM7F_IMP2(UInt32, Filter(Byte *data, UInt32 size))
+public:
+ CAesCtrCoder(unsigned keySize = 0): CAesCoder(keySize)
+ {
+ _ctrPos = 0;
+ _setKeyFunc = Aes_SetKey_Enc;
+ _codeFunc = g_AesCtr_Code;
+ }
+ Z7_IFACE_IMP(IAesCoderSetFunctions)
+};
+#endif
+
}
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/MyAesReg.cpp b/3rdparty/lzma/CPP/7zip/Crypto/MyAesReg.cpp
index 86bd25474fb..e2b4f72dbdc 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/MyAesReg.cpp
+++ b/3rdparty/lzma/CPP/7zip/Crypto/MyAesReg.cpp
@@ -8,22 +8,21 @@
namespace NCrypto {
-#ifndef _SFX
+#ifndef Z7_SFX
-#define REGISTER_AES_2(name, nameString, keySize, isCtr) \
+#define REGISTER_AES_2(name, nameString, keySize) \
REGISTER_FILTER_E(name, \
- CAesCoder(false, keySize, isCtr), \
- CAesCoder(true , keySize, isCtr), \
- 0x6F00100 | ((keySize - 16) * 8) | (isCtr ? 4 : 1), \
+ CAesCbcDecoder(keySize), \
+ CAesCbcEncoder(keySize), \
+ 0x6F00100 | ((keySize - 16) * 8) | (/* isCtr */ 0 ? 4 : 1), \
nameString) \
-#define REGISTER_AES(name, nameString, isCtr) \
- /* REGISTER_AES_2(AES128 ## name, "AES128" nameString, 16, isCtr) */ \
- /* REGISTER_AES_2(AES192 ## name, "AES192" nameString, 24, isCtr) */ \
- REGISTER_AES_2(AES256 ## name, "AES256" nameString, 32, isCtr) \
+#define REGISTER_AES(name, nameString) \
+ /* REGISTER_AES_2(AES128 ## name, "AES128" nameString, 16) */ \
+ /* REGISTER_AES_2(AES192 ## name, "AES192" nameString, 24) */ \
+ REGISTER_AES_2(AES256 ## name, "AES256" nameString, 32) \
-REGISTER_AES(CBC, "CBC", false)
-// REGISTER_AES(CTR, "CTR", true)
+REGISTER_AES(CBC, "CBC")
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/RandGen.cpp b/3rdparty/lzma/CPP/7zip/Crypto/RandGen.cpp
index 65633fd8f3b..05a6c06d4c3 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/RandGen.cpp
+++ b/3rdparty/lzma/CPP/7zip/Crypto/RandGen.cpp
@@ -6,7 +6,7 @@
#ifndef USE_STATIC_SYSTEM_RAND
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
#include "../../Windows/Synchronization.h"
#endif
@@ -76,9 +76,9 @@ void CRandomGenerator::Init()
#ifdef _WIN32
DWORD w = ::GetCurrentProcessId();
- HASH_UPD(w);
+ HASH_UPD(w)
w = ::GetCurrentThreadId();
- HASH_UPD(w);
+ HASH_UPD(w)
#ifdef UNDER_CE
/*
@@ -96,11 +96,14 @@ void CRandomGenerator::Init()
}
#else
{
- HMODULE hModule = ::LoadLibrary(TEXT("Advapi32.dll"));
+ const HMODULE hModule = ::LoadLibrary(TEXT("advapi32.dll"));
if (hModule)
{
// SystemFunction036() is real name of RtlGenRandom() function
- Func_RtlGenRandom my_RtlGenRandom = (Func_RtlGenRandom)(void *)GetProcAddress(hModule, "SystemFunction036");
+ const
+ Func_RtlGenRandom
+ my_RtlGenRandom = Z7_GET_PROC_ADDRESS(
+ Func_RtlGenRandom, hModule, "SystemFunction036");
if (my_RtlGenRandom)
{
if (my_RtlGenRandom(buf, kBufSize))
@@ -117,9 +120,9 @@ void CRandomGenerator::Init()
#else
pid_t pid = getpid();
- HASH_UPD(pid);
+ HASH_UPD(pid)
pid = getppid();
- HASH_UPD(pid);
+ HASH_UPD(pid)
{
int f = open("/dev/urandom", O_RDONLY);
@@ -164,25 +167,25 @@ void CRandomGenerator::Init()
#ifdef _WIN32
LARGE_INTEGER v;
if (::QueryPerformanceCounter(&v))
- HASH_UPD(v.QuadPart);
+ HASH_UPD(v.QuadPart)
#endif
#ifdef USE_POSIX_TIME
#ifdef USE_POSIX_TIME2
timeval v;
- if (gettimeofday(&v, 0) == 0)
+ if (gettimeofday(&v, NULL) == 0)
{
- HASH_UPD(v.tv_sec);
- HASH_UPD(v.tv_usec);
+ HASH_UPD(v.tv_sec)
+ HASH_UPD(v.tv_usec)
}
#endif
- time_t v2 = time(NULL);
- HASH_UPD(v2);
+ const time_t v2 = time(NULL);
+ HASH_UPD(v2)
#endif
#ifdef _WIN32
- DWORD tickCount = ::GetTickCount();
- HASH_UPD(tickCount);
+ const DWORD tickCount = ::GetTickCount();
+ HASH_UPD(tickCount)
#endif
for (unsigned j = 0; j < 100; j++)
@@ -198,7 +201,7 @@ void CRandomGenerator::Init()
_needInit = false;
}
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static NWindows::NSynchronization::CCriticalSection g_CriticalSection;
#define MT_LOCK NWindows::NSynchronization::CCriticalSectionLock lock(g_CriticalSection);
#else
@@ -222,7 +225,7 @@ void CRandomGenerator::Generate(Byte *data, unsigned size)
Sha256_Init(&hash);
UInt32 salt = 0xF672ABD1;
- HASH_UPD(salt);
+ HASH_UPD(salt)
Sha256_Update(&hash, _buff, SHA256_DIGEST_SIZE);
MY_ALIGN (16)
Byte buff[SHA256_DIGEST_SIZE];
@@ -232,6 +235,7 @@ void CRandomGenerator::Generate(Byte *data, unsigned size)
}
}
+MY_ALIGN (16)
CRandomGenerator g_RandomGenerator;
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/RandGen.h b/3rdparty/lzma/CPP/7zip/Crypto/RandGen.h
index 5122ec4b447..3bd69ec2d16 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/RandGen.h
+++ b/3rdparty/lzma/CPP/7zip/Crypto/RandGen.h
@@ -1,7 +1,7 @@
// RandGen.h
-#ifndef __CRYPTO_RAND_GEN_H
-#define __CRYPTO_RAND_GEN_H
+#ifndef ZIP7_INC_CRYPTO_RAND_GEN_H
+#define ZIP7_INC_CRYPTO_RAND_GEN_H
#include "../../../C/Sha256.h"
@@ -27,10 +27,11 @@ class CRandomGenerator
void Init();
public:
- CRandomGenerator(): _needInit(true) {};
+ CRandomGenerator(): _needInit(true) {}
void Generate(Byte *data, unsigned size);
};
+MY_ALIGN (16)
extern CRandomGenerator g_RandomGenerator;
#define MY_RAND_GEN(data, size) g_RandomGenerator.Generate(data, size)
diff --git a/3rdparty/lzma/CPP/7zip/Crypto/StdAfx.h b/3rdparty/lzma/CPP/7zip/Crypto/StdAfx.h
index 1cbd7feaeec..80866550d1f 100644
--- a/3rdparty/lzma/CPP/7zip/Crypto/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/Crypto/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/Guid.txt b/3rdparty/lzma/CPP/7zip/Guid.txt
index 8fcdd849d4c..eee28f731e9 100644
--- a/3rdparty/lzma/CPP/7zip/Guid.txt
+++ b/3rdparty/lzma/CPP/7zip/Guid.txt
@@ -31,12 +31,15 @@
02 ISequentialOutStream
03 IInStream
04 IOutStream
+
06 IStreamGetSize
07 IOutStreamFinish
08 IStreamGetProps
09 IStreamGetProps2
0A IStreamGetProp
+ 10 IStreamSetRestriction
+
04 ICoder.h
@@ -94,7 +97,8 @@
10 IArchiveOpenCallback
20 IArchiveExtractCallback
- 21 IArchiveExtractCallbackMessage
+ 21 IArchiveExtractCallbackMessage (deprecated in v23)
+ 22 IArchiveExtractCallbackMessage2 (new in v23)
30 IArchiveOpenVolumeCallback
40 IInArchiveGetStream
diff --git a/3rdparty/lzma/CPP/7zip/ICoder.h b/3rdparty/lzma/CPP/7zip/ICoder.h
index 9177f5e5094..aec2834ad09 100644
--- a/3rdparty/lzma/CPP/7zip/ICoder.h
+++ b/3rdparty/lzma/CPP/7zip/ICoder.h
@@ -1,39 +1,40 @@
// ICoder.h
-#ifndef __ICODER_H
-#define __ICODER_H
+#ifndef ZIP7_INC_ICODER_H
+#define ZIP7_INC_ICODER_H
#include "IStream.h"
-#define CODER_INTERFACE(i, x) DECL_INTERFACE(i, 4, x)
+Z7_PURE_INTERFACES_BEGIN
-CODER_INTERFACE(ICompressProgressInfo, 0x04)
-{
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE;
-
- /* (inSize) can be NULL, if unknown
- (outSize) can be NULL, if unknown
+#define Z7_IFACE_CONSTR_CODER(i, n) \
+ Z7_DECL_IFACE_7ZIP(i, 4, n) \
+ { Z7_IFACE_COM7_PURE(i) };
+#define Z7_IFACEM_ICompressProgressInfo(x) \
+ x(SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
+Z7_IFACE_CONSTR_CODER(ICompressProgressInfo, 0x04)
+ /*
+ SetRatioInfo()
+ (inSize) can be NULL, if unknown
+ (outSize) can be NULL, if unknown
returns:
S_OK
E_ABORT : Break by user
another error codes
*/
-};
-CODER_INTERFACE(ICompressCoder, 0x05)
-{
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize,
- ICompressProgressInfo *progress) PURE;
-};
+#define Z7_IFACEM_ICompressCoder(x) \
+ x(Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, \
+ const UInt64 *inSize, const UInt64 *outSize, \
+ ICompressProgressInfo *progress))
+Z7_IFACE_CONSTR_CODER(ICompressCoder, 0x05)
-CODER_INTERFACE(ICompressCoder2, 0x18)
-{
- STDMETHOD(Code)(ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams,
- ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams,
- ICompressProgressInfo *progress) PURE;
-};
+#define Z7_IFACEM_ICompressCoder2(x) \
+ x(Code(ISequentialInStream * const *inStreams, const UInt64 *const *inSizes, UInt32 numInStreams, \
+ ISequentialOutStream *const *outStreams, const UInt64 *const *outSizes, UInt32 numOutStreams, \
+ ICompressProgressInfo *progress))
+Z7_IFACE_CONSTR_CODER(ICompressCoder2, 0x18)
/*
ICompressCoder::Code
@@ -54,7 +55,7 @@ CODER_INTERFACE(ICompressCoder2, 0x18)
{
Encoders in 7-Zip ignore (inSize).
Decoder can use (*inSize) to check that stream was decoded correctly.
- Some decoder in 7-Zip check it, if (full_decoding mode was set via ICompressSetFinishMode)
+ Some decoders in 7-Zip check it, if (full_decoding mode was set via ICompressSetFinishMode)
}
If it's required to limit the reading from input stream (inStream), it can
@@ -132,71 +133,91 @@ namespace NCoderPropID
kCheckSize, // VT_UI4 : size of digest in bytes
kFilter, // VT_BSTR
kMemUse, // VT_UI8
- kAffinity // VT_UI8
+ kAffinity, // VT_UI8
+ kBranchOffset, // VT_UI4
+ kHashBits, // VT_UI4
+ /*
+ // kHash3Bits, // VT_UI4
+ // kHash2Bits, // VT_UI4
+ // kChainBits, // VT_UI4
+ kChainSize, // VT_UI4
+ kNativeLevel, // VT_UI4
+ kFast, // VT_UI4
+ kMinMatch, // VT_UI4 The minimum slen is 3 and the maximum is 7.
+ kOverlapLog, // VT_UI4 The minimum ovlog is 0 and the maximum is 9. (default: 6)
+ kRowMatchFinder, // VT_BOOL
+ kLdmEnable, // VT_BOOL
+ // kLdmWindowSizeLog, // VT_UI4
+ kLdmWindowSize, // VT_UI4
+ kLdmHashLog, // VT_UI4 The minimum ldmhlog is 6 and the maximum is 26 (default: 20).
+ kLdmMinMatchLength, // VT_UI4 The minimum ldmslen is 4 and the maximum is 4096 (default: 64).
+ kLdmBucketSizeLog, // VT_UI4 The minimum ldmblog is 0 and the maximum is 8 (default: 3).
+ kLdmHashRateLog, // VT_UI4 The default value is wlog - ldmhlog.
+ kWriteUnpackSizeFlag, // VT_BOOL
+ kUsePledged, // VT_BOOL
+ kUseSizeHintPledgedForSmall, // VT_BOOL
+ kUseSizeHintForEach, // VT_BOOL
+ kUseSizeHintGlobal, // VT_BOOL
+ kParamSelectMode, // VT_UI4
+ // kSearchLog, // VT_UI4 The minimum slog is 1 and the maximum is 26
+ // kTargetLen, // VT_UI4 The minimum tlen is 0 and the maximum is 999.
+ */
+ k_NUM_DEFINED
};
}
-CODER_INTERFACE(ICompressSetCoderPropertiesOpt, 0x1F)
-{
- STDMETHOD(SetCoderPropertiesOpt)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) PURE;
-};
+#define Z7_IFACEM_ICompressSetCoderPropertiesOpt(x) \
+ x(SetCoderPropertiesOpt(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps))
+Z7_IFACE_CONSTR_CODER(ICompressSetCoderPropertiesOpt, 0x1F)
-CODER_INTERFACE(ICompressSetCoderProperties, 0x20)
-{
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) PURE;
-};
+
+#define Z7_IFACEM_ICompressSetCoderProperties(x) \
+ x(SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps))
+Z7_IFACE_CONSTR_CODER(ICompressSetCoderProperties, 0x20)
/*
-CODER_INTERFACE(ICompressSetCoderProperties, 0x21)
-{
- STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE;
-};
+#define Z7_IFACEM_ICompressSetDecoderProperties(x) \
+ x(SetDecoderProperties(ISequentialInStream *inStream))
+Z7_IFACE_CONSTR_CODER(ICompressSetDecoderProperties, 0x21)
*/
-CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22)
-{
+#define Z7_IFACEM_ICompressSetDecoderProperties2(x) \
+ x(SetDecoderProperties2(const Byte *data, UInt32 size))
+Z7_IFACE_CONSTR_CODER(ICompressSetDecoderProperties2, 0x22)
/* returns:
S_OK
E_NOTIMP : unsupported properties
E_INVALIDARG : incorrect (or unsupported) properties
E_OUTOFMEMORY : memory allocation error
*/
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE;
-};
-CODER_INTERFACE(ICompressWriteCoderProperties, 0x23)
-{
- STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream) PURE;
-};
-CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24)
-{
- STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE;
-};
+#define Z7_IFACEM_ICompressWriteCoderProperties(x) \
+ x(WriteCoderProperties(ISequentialOutStream *outStream))
+Z7_IFACE_CONSTR_CODER(ICompressWriteCoderProperties, 0x23)
-CODER_INTERFACE(ICompressSetCoderMt, 0x25)
-{
- STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE;
-};
+#define Z7_IFACEM_ICompressGetInStreamProcessedSize(x) \
+ x(GetInStreamProcessedSize(UInt64 *value))
+Z7_IFACE_CONSTR_CODER(ICompressGetInStreamProcessedSize, 0x24)
-CODER_INTERFACE(ICompressSetFinishMode, 0x26)
-{
- STDMETHOD(SetFinishMode)(UInt32 finishMode) PURE;
+#define Z7_IFACEM_ICompressSetCoderMt(x) \
+ x(SetNumberOfThreads(UInt32 numThreads))
+Z7_IFACE_CONSTR_CODER(ICompressSetCoderMt, 0x25)
+#define Z7_IFACEM_ICompressSetFinishMode(x) \
+ x(SetFinishMode(UInt32 finishMode))
+Z7_IFACE_CONSTR_CODER(ICompressSetFinishMode, 0x26)
/* finishMode:
0 : partial decoding is allowed. It's default mode for ICompressCoder::Code(), if (outSize) is defined.
1 : full decoding. The stream must be finished at the end of decoding. */
-};
-CODER_INTERFACE(ICompressGetInStreamProcessedSize2, 0x27)
-{
- STDMETHOD(GetInStreamProcessedSize2)(UInt32 streamIndex, UInt64 *value) PURE;
-};
+#define Z7_IFACEM_ICompressGetInStreamProcessedSize2(x) \
+ x(GetInStreamProcessedSize2(UInt32 streamIndex, UInt64 *value))
+Z7_IFACE_CONSTR_CODER(ICompressGetInStreamProcessedSize2, 0x27)
-CODER_INTERFACE(ICompressSetMemLimit, 0x28)
-{
- STDMETHOD(SetMemLimit)(UInt64 memUsage) PURE;
-};
+#define Z7_IFACEM_ICompressSetMemLimit(x) \
+ x(SetMemLimit(UInt64 memUsage))
+Z7_IFACE_CONSTR_CODER(ICompressSetMemLimit, 0x28)
/*
@@ -208,23 +229,18 @@ CODER_INTERFACE(ICompressSetMemLimit, 0x28)
data from the internal buffer.
in ReadUnusedFromInBuf(): the Coder is not allowed to use (ISequentialInStream *inStream) object, that was sent to ICoder::Code().
*/
-
-CODER_INTERFACE(ICompressReadUnusedFromInBuf, 0x29)
-{
- STDMETHOD(ReadUnusedFromInBuf)(void *data, UInt32 size, UInt32 *processedSize) PURE;
-};
+#define Z7_IFACEM_ICompressReadUnusedFromInBuf(x) \
+ x(ReadUnusedFromInBuf(void *data, UInt32 size, UInt32 *processedSize))
+Z7_IFACE_CONSTR_CODER(ICompressReadUnusedFromInBuf, 0x29)
-
-CODER_INTERFACE(ICompressGetSubStreamSize, 0x30)
-{
- STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE;
-
+#define Z7_IFACEM_ICompressGetSubStreamSize(x) \
+ x(GetSubStreamSize(UInt64 subStream, UInt64 *value))
+Z7_IFACE_CONSTR_CODER(ICompressGetSubStreamSize, 0x30)
/* returns:
S_OK : (*value) contains the size or estimated size (can be incorrect size)
S_FALSE : size is undefined
E_NOTIMP : the feature is not implemented
-
Let's (read_size) is size of data that was already read by ISequentialInStream::Read().
The caller should call GetSubStreamSize() after each Read() and check sizes:
if (start_of_subStream + *value < read_size)
@@ -234,74 +250,74 @@ CODER_INTERFACE(ICompressGetSubStreamSize, 0x30)
subStream++;
}
*/
-};
-CODER_INTERFACE(ICompressSetInStream, 0x31)
-{
- STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE;
- STDMETHOD(ReleaseInStream)() PURE;
-};
+#define Z7_IFACEM_ICompressSetInStream(x) \
+ x(SetInStream(ISequentialInStream *inStream)) \
+ x(ReleaseInStream())
+Z7_IFACE_CONSTR_CODER(ICompressSetInStream, 0x31)
-CODER_INTERFACE(ICompressSetOutStream, 0x32)
-{
- STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE;
- STDMETHOD(ReleaseOutStream)() PURE;
-};
+#define Z7_IFACEM_ICompressSetOutStream(x) \
+ x(SetOutStream(ISequentialOutStream *outStream)) \
+ x(ReleaseOutStream())
+Z7_IFACE_CONSTR_CODER(ICompressSetOutStream, 0x32)
/*
-CODER_INTERFACE(ICompressSetInStreamSize, 0x33)
-{
- STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE;
-};
+#define Z7_IFACEM_ICompressSetInStreamSize(x) \
+ x(SetInStreamSize(const UInt64 *inSize)) \
+Z7_IFACE_CONSTR_CODER(ICompressSetInStreamSize, 0x33)
*/
-CODER_INTERFACE(ICompressSetOutStreamSize, 0x34)
-{
- STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE;
-
+#define Z7_IFACEM_ICompressSetOutStreamSize(x) \
+ x(SetOutStreamSize(const UInt64 *outSize))
+Z7_IFACE_CONSTR_CODER(ICompressSetOutStreamSize, 0x34)
/* That function initializes decoder structures.
Call this function only for stream version of decoder.
if (outSize == NULL), then output size is unknown
if (outSize != NULL), then the decoder must stop decoding after (*outSize) bytes. */
-};
-
-CODER_INTERFACE(ICompressSetBufSize, 0x35)
-{
- STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size) PURE;
- STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size) PURE;
-};
-CODER_INTERFACE(ICompressInitEncoder, 0x36)
-{
- STDMETHOD(InitEncoder)() PURE;
+#define Z7_IFACEM_ICompressSetBufSize(x) \
+ x(SetInBufSize(UInt32 streamIndex, UInt32 size)) \
+ x(SetOutBufSize(UInt32 streamIndex, UInt32 size))
+
+Z7_IFACE_CONSTR_CODER(ICompressSetBufSize, 0x35)
+#define Z7_IFACEM_ICompressInitEncoder(x) \
+ x(InitEncoder())
+Z7_IFACE_CONSTR_CODER(ICompressInitEncoder, 0x36)
/* That function initializes encoder structures.
Call this function only for stream version of encoder. */
-};
-CODER_INTERFACE(ICompressSetInStream2, 0x37)
-{
- STDMETHOD(SetInStream2)(UInt32 streamIndex, ISequentialInStream *inStream) PURE;
- STDMETHOD(ReleaseInStream2)(UInt32 streamIndex) PURE;
-};
+#define Z7_IFACEM_ICompressSetInStream2(x) \
+ x(SetInStream2(UInt32 streamIndex, ISequentialInStream *inStream)) \
+ x(ReleaseInStream2(UInt32 streamIndex))
+Z7_IFACE_CONSTR_CODER(ICompressSetInStream2, 0x37)
/*
-CODER_INTERFACE(ICompressSetOutStream2, 0x38)
-{
- STDMETHOD(SetOutStream2)(UInt32 streamIndex, ISequentialOutStream *outStream) PURE;
- STDMETHOD(ReleaseOutStream2)(UInt32 streamIndex) PURE;
-};
-
-CODER_INTERFACE(ICompressSetInStreamSize2, 0x39)
-{
- STDMETHOD(SetInStreamSize2)(UInt32 streamIndex, const UInt64 *inSize) PURE;
-};
+#define Z7_IFACEM_ICompressSetOutStream2(x) \
+ x(SetOutStream2(UInt32 streamIndex, ISequentialOutStream *outStream))
+ x(ReleaseOutStream2(UInt32 streamIndex))
+Z7_IFACE_CONSTR_CODER(ICompressSetOutStream2, 0x38)
+
+#define Z7_IFACEM_ICompressSetInStreamSize2(x) \
+ x(SetInStreamSize2(UInt32 streamIndex, const UInt64 *inSize))
+Z7_IFACE_CONSTR_CODER(ICompressSetInStreamSize2, 0x39)
*/
+/*
+#define Z7_IFACEM_ICompressInSubStreams(x) \
+ x(GetNextInSubStream(UInt64 *streamIndexRes, ISequentialInStream **stream))
+Z7_IFACE_CONSTR_CODER(ICompressInSubStreams, 0x3A)
+
+#define Z7_IFACEM_ICompressOutSubStreams(x) \
+ x(GetNextOutSubStream(UInt64 *streamIndexRes, ISequentialOutStream **stream))
+Z7_IFACE_CONSTR_CODER(ICompressOutSubStreams, 0x3B)
+*/
/*
ICompressFilter
- Filter() converts as most as possible bytes required for fast processing.
+ Filter(Byte *data, UInt32 size)
+ (size)
+ converts as most as possible bytes required for fast processing.
Some filters have (smallest_fast_block).
For example, (smallest_fast_block == 16) for AES CBC/CTR filters.
If data stream is not finished, caller must call Filter() for larger block:
@@ -310,13 +326,28 @@ CODER_INTERFACE(ICompressSetInStreamSize2, 0x39)
{
The filter can leave some bytes at the end of data without conversion:
if there are data alignment reasons or speed reasons.
- The caller must read additional data from stream and call Filter() again.
+ The caller can read additional data from stream and call Filter() again.
}
If data stream was finished, caller can call Filter() for (size < smallest_fast_block)
- data : must be aligned for at least 16 bytes for some filters (AES)
-
- returns: (outSize):
+ (data) parameter:
+ Some filters require alignment for any Filter() call:
+ 1) (stream_offset % alignment_size) == (data % alignment_size)
+ 2) (alignment_size == 2^N)
+ where (stream_offset) - is the number of bytes that were already filtered before.
+ The callers of Filter() are required to meet these requirements.
+ (alignment_size) can be different:
+ 16 : for AES filters
+ 4 or 2 : for some branch convert filters
+ 1 : for another filters
+ (alignment_size >= 16) is enough for all current filters of 7-Zip.
+ But the caller can use larger (alignment_size).
+ Recommended alignment for (data) of Filter() call is (alignment_size == 64).
+ Also it's recommended to use aligned value for (size):
+ (size % alignment_size == 0),
+ if it's not last call of Filter() for current stream.
+
+ returns: (outSize):
if (outSize == 0) : Filter have not converted anything.
So the caller can stop processing, if data stream was finished.
if (outSize <= size) : Filter have converted outSize bytes
@@ -325,60 +356,47 @@ CODER_INTERFACE(ICompressSetInStreamSize2, 0x39)
(it's for crypto block algorithms).
*/
-#define INTERFACE_ICompressFilter(x) \
- STDMETHOD(Init)() x; \
- STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) x; \
+#define Z7_IFACEM_ICompressFilter(x) \
+ x(Init()) \
+ x##2(UInt32, Filter(Byte *data, UInt32 size))
+Z7_IFACE_CONSTR_CODER(ICompressFilter, 0x40)
-CODER_INTERFACE(ICompressFilter, 0x40)
-{
- INTERFACE_ICompressFilter(PURE);
-};
+#define Z7_IFACEM_ICompressCodecsInfo(x) \
+ x(GetNumMethods(UInt32 *numMethods)) \
+ x(GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)) \
+ x(CreateDecoder(UInt32 index, const GUID *iid, void* *coder)) \
+ x(CreateEncoder(UInt32 index, const GUID *iid, void* *coder))
+Z7_IFACE_CONSTR_CODER(ICompressCodecsInfo, 0x60)
-CODER_INTERFACE(ICompressCodecsInfo, 0x60)
-{
- STDMETHOD(GetNumMethods)(UInt32 *numMethods) PURE;
- STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
- STDMETHOD(CreateDecoder)(UInt32 index, const GUID *iid, void **coder) PURE;
- STDMETHOD(CreateEncoder)(UInt32 index, const GUID *iid, void **coder) PURE;
-};
+#define Z7_IFACEM_ISetCompressCodecsInfo(x) \
+ x(SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo))
+Z7_IFACE_CONSTR_CODER(ISetCompressCodecsInfo, 0x61)
-CODER_INTERFACE(ISetCompressCodecsInfo, 0x61)
-{
- STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo) PURE;
-};
-
-CODER_INTERFACE(ICryptoProperties, 0x80)
-{
- STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE;
- STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE;
-};
+#define Z7_IFACEM_ICryptoProperties(x) \
+ x(SetKey(const Byte *data, UInt32 size)) \
+ x(SetInitVector(const Byte *data, UInt32 size))
+Z7_IFACE_CONSTR_CODER(ICryptoProperties, 0x80)
/*
-CODER_INTERFACE(ICryptoResetSalt, 0x88)
-{
- STDMETHOD(ResetSalt)() PURE;
-};
+ x(ResetSalt())
+Z7_IFACE_CONSTR_CODER(ICryptoResetSalt, 0x88)
*/
-CODER_INTERFACE(ICryptoResetInitVector, 0x8C)
-{
- STDMETHOD(ResetInitVector)() PURE;
-
+#define Z7_IFACEM_ICryptoResetInitVector(x) \
+ x(ResetInitVector())
+Z7_IFACE_CONSTR_CODER(ICryptoResetInitVector, 0x8C)
/* Call ResetInitVector() only for encoding.
Call ResetInitVector() before encoding and before WriteCoderProperties().
Crypto encoder can create random IV in that function. */
-};
-CODER_INTERFACE(ICryptoSetPassword, 0x90)
-{
- STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE;
-};
+#define Z7_IFACEM_ICryptoSetPassword(x) \
+ x(CryptoSetPassword(const Byte *data, UInt32 size))
+Z7_IFACE_CONSTR_CODER(ICryptoSetPassword, 0x90)
-CODER_INTERFACE(ICryptoSetCRC, 0xA0)
-{
- STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE;
-};
+#define Z7_IFACEM_ICryptoSetCRC(x) \
+ x(CryptoSetCRC(UInt32 crc))
+Z7_IFACE_CONSTR_CODER(ICryptoSetCRC, 0xA0)
namespace NMethodPropID
@@ -399,24 +417,48 @@ namespace NMethodPropID
};
}
-
-#define INTERFACE_IHasher(x) \
- STDMETHOD_(void, Init)() throw() x; \
- STDMETHOD_(void, Update)(const void *data, UInt32 size) throw() x; \
- STDMETHOD_(void, Final)(Byte *digest) throw() x; \
- STDMETHOD_(UInt32, GetDigestSize)() throw() x; \
-
-CODER_INTERFACE(IHasher, 0xC0)
+namespace NModuleInterfaceType
{
- INTERFACE_IHasher(PURE)
-};
+ /*
+ virtual destructor in IUnknown:
+ - no : 7-Zip (Windows)
+ - no : 7-Zip (Linux) (v23) in default mode
+ - yes : p7zip
+ - yes : 7-Zip (Linux) before v23
+ - yes : 7-Zip (Linux) (v23), if Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN is defined
+ */
+ const UInt32 k_IUnknown_VirtDestructor_No = 0;
+ const UInt32 k_IUnknown_VirtDestructor_Yes = 1;
+ const UInt32 k_IUnknown_VirtDestructor_ThisModule =
+ #if !defined(_WIN32) && defined(Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN)
+ k_IUnknown_VirtDestructor_Yes;
+ #else
+ k_IUnknown_VirtDestructor_No;
+ #endif
+}
-CODER_INTERFACE(IHashers, 0xC1)
+namespace NModulePropID
{
- STDMETHOD_(UInt32, GetNumHashers)() PURE;
- STDMETHOD(GetHasherProp)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
- STDMETHOD(CreateHasher)(UInt32 index, IHasher **hasher) PURE;
-};
+ enum EEnum
+ {
+ kInterfaceType, // VT_UI4
+ kVersion // VT_UI4
+ };
+}
+
+
+#define Z7_IFACEM_IHasher(x) \
+ x##2(void, Init()) \
+ x##2(void, Update(const void *data, UInt32 size)) \
+ x##2(void, Final(Byte *digest)) \
+ x##2(UInt32, GetDigestSize())
+Z7_IFACE_CONSTR_CODER(IHasher, 0xC0)
+
+#define Z7_IFACEM_IHashers(x) \
+ x##2(UInt32, GetNumHashers()) \
+ x(GetHasherProp(UInt32 index, PROPID propID, PROPVARIANT *value)) \
+ x(CreateHasher(UInt32 index, IHasher **hasher))
+Z7_IFACE_CONSTR_CODER(IHashers, 0xC1)
extern "C"
{
@@ -428,6 +470,8 @@ extern "C"
typedef HRESULT (WINAPI *Func_GetHashers)(IHashers **hashers);
typedef HRESULT (WINAPI *Func_SetCodecs)(ICompressCodecsInfo *compressCodecsInfo);
+ typedef HRESULT (WINAPI *Func_GetModuleProp)(PROPID propID, PROPVARIANT *value);
}
+Z7_PURE_INTERFACES_END
#endif
diff --git a/3rdparty/lzma/CPP/7zip/IDecl.h b/3rdparty/lzma/CPP/7zip/IDecl.h
index 077ef0ee3f5..c4d454127fc 100644
--- a/3rdparty/lzma/CPP/7zip/IDecl.h
+++ b/3rdparty/lzma/CPP/7zip/IDecl.h
@@ -1,8 +1,9 @@
// IDecl.h
-#ifndef __IDECL_H
-#define __IDECL_H
+#ifndef ZIP7_INC_IDECL_H
+#define ZIP7_INC_IDECL_H
+#include "../Common/Common.h"
#include "../Common/MyUnknown.h"
#define k_7zip_GUID_Data1 0x23170F69
@@ -14,15 +15,62 @@
#define k_7zip_GUID_Data3_Encoder 0x2791
#define k_7zip_GUID_Data3_Hasher 0x2792
-
-#define DECL_INTERFACE_SUB(i, base, groupId, subId) \
- DEFINE_GUID(IID_ ## i, \
+#define Z7_DECL_IFACE_7ZIP_SUB(i, _base, groupId, subId) \
+ Z7_DEFINE_GUID(IID_ ## i, \
k_7zip_GUID_Data1, \
k_7zip_GUID_Data2, \
k_7zip_GUID_Data3_Common, \
0, 0, 0, (groupId), 0, (subId), 0, 0); \
- struct i: public base
+ struct Z7_DECLSPEC_NOVTABLE i: public _base
+
+#define Z7_DECL_IFACE_7ZIP(i, groupId, subId) \
+ Z7_DECL_IFACE_7ZIP_SUB(i, IUnknown, groupId, subId)
+
+
+#ifdef COM_DECLSPEC_NOTHROW
+#define Z7_COMWF_B COM_DECLSPEC_NOTHROW STDMETHODIMP
+#define Z7_COMWF_B_(t) COM_DECLSPEC_NOTHROW STDMETHODIMP_(t)
+#else
+#define Z7_COMWF_B STDMETHODIMP
+#define Z7_COMWF_B_(t) STDMETHODIMP_(t)
+#endif
+
+#if defined(_MSC_VER) && !defined(COM_DECLSPEC_NOTHROW)
+#define Z7_COM7F_B __declspec(nothrow) STDMETHODIMP
+#define Z7_COM7F_B_(t) __declspec(nothrow) STDMETHODIMP_(t)
+#else
+#define Z7_COM7F_B Z7_COMWF_B
+#define Z7_COM7F_B_(t) Z7_COMWF_B_(t)
+#endif
+
+// #define Z7_COM7F_E Z7_noexcept
+#define Z7_COM7F_E throw()
+#define Z7_COM7F_EO Z7_COM7F_E Z7_override
+#define Z7_COM7F_EOF Z7_COM7F_EO Z7_final
+#define Z7_COM7F_IMF(f) Z7_COM7F_B f Z7_COM7F_E
+#define Z7_COM7F_IMF2(t, f) Z7_COM7F_B_(t) f Z7_COM7F_E
+
+#define Z7_COM7F_PURE(f) virtual Z7_COM7F_IMF(f) =0;
+#define Z7_COM7F_PURE2(t, f) virtual Z7_COM7F_IMF2(t, f) =0;
+#define Z7_COM7F_IMP(f) Z7_COM7F_IMF(f) Z7_override Z7_final;
+#define Z7_COM7F_IMP2(t, f) Z7_COM7F_IMF2(t, f) Z7_override Z7_final;
+#define Z7_COM7F_IMP_NONFINAL(f) Z7_COM7F_IMF(f) Z7_override;
+#define Z7_COM7F_IMP_NONFINAL2(t, f) Z7_COM7F_IMF2(t, f) Z7_override;
+
+#define Z7_IFACE_PURE(name) Z7_IFACEN_ ## name(=0;)
+#define Z7_IFACE_IMP(name) Z7_IFACEN_ ## name(Z7_override Z7_final;)
+
+#define Z7_IFACE_COM7_PURE(name) Z7_IFACEM_ ## name(Z7_COM7F_PURE)
+#define Z7_IFACE_COM7_IMP(name) Z7_IFACEM_ ## name(Z7_COM7F_IMP)
+#define Z7_IFACE_COM7_IMP_NONFINAL(name) Z7_IFACEM_ ## name(Z7_COM7F_IMP_NONFINAL)
+
+
+#define Z7_IFACE_DECL_PURE(name) \
+ DECLARE_INTERFACE(name) \
+ { Z7_IFACE_PURE(name) };
-#define DECL_INTERFACE(i, groupId, subId) DECL_INTERFACE_SUB(i, IUnknown, groupId, subId)
+#define Z7_IFACE_DECL_PURE_(name, baseiface) \
+ DECLARE_INTERFACE_(name, baseiface) \
+ { Z7_IFACE_PURE(name) };
#endif
diff --git a/3rdparty/lzma/CPP/7zip/IPassword.h b/3rdparty/lzma/CPP/7zip/IPassword.h
index 4ccc9ac742b..689f08cb4b4 100644
--- a/3rdparty/lzma/CPP/7zip/IPassword.h
+++ b/3rdparty/lzma/CPP/7zip/IPassword.h
@@ -1,14 +1,17 @@
// IPassword.h
-#ifndef __IPASSWORD_H
-#define __IPASSWORD_H
+#ifndef ZIP7_INC_IPASSWORD_H
+#define ZIP7_INC_IPASSWORD_H
#include "../Common/MyTypes.h"
-#include "../Common/MyUnknown.h"
#include "IDecl.h"
-#define PASSWORD_INTERFACE(i, x) DECL_INTERFACE(i, 5, x)
+Z7_PURE_INTERFACES_BEGIN
+
+#define Z7_IFACE_CONSTR_PASSWORD(i, n) \
+ Z7_DECL_IFACE_7ZIP(i, 5, n) \
+ { Z7_IFACE_COM7_PURE(i) };
/*
How to use output parameter (BSTR *password):
@@ -20,10 +23,9 @@ out: The callee rewrites BSTR variable (*password) with new allocated string poi
The caller must free BSTR string with function SysFreeString();
*/
-PASSWORD_INTERFACE(ICryptoGetTextPassword, 0x10)
-{
- STDMETHOD(CryptoGetTextPassword)(BSTR *password) PURE;
-};
+#define Z7_IFACEM_ICryptoGetTextPassword(x) \
+ x(CryptoGetTextPassword(BSTR *password))
+Z7_IFACE_CONSTR_PASSWORD(ICryptoGetTextPassword, 0x10)
/*
@@ -44,10 +46,9 @@ out:
The caller must free BSTR string with function SysFreeString()
*/
+#define Z7_IFACEM_ICryptoGetTextPassword2(x) \
+ x(CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password))
+Z7_IFACE_CONSTR_PASSWORD(ICryptoGetTextPassword2, 0x11)
-PASSWORD_INTERFACE(ICryptoGetTextPassword2, 0x11)
-{
- STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password) PURE;
-};
-
+Z7_PURE_INTERFACES_END
#endif
diff --git a/3rdparty/lzma/CPP/7zip/IProgress.h b/3rdparty/lzma/CPP/7zip/IProgress.h
index fac951eca48..67149830bd7 100644
--- a/3rdparty/lzma/CPP/7zip/IProgress.h
+++ b/3rdparty/lzma/CPP/7zip/IProgress.h
@@ -1,19 +1,20 @@
// IProgress.h
-#ifndef __IPROGRESS_H
-#define __IPROGRESS_H
+#ifndef ZIP7_INC_IPROGRESS_H
+#define ZIP7_INC_IPROGRESS_H
#include "../Common/MyTypes.h"
#include "IDecl.h"
-#define INTERFACE_IProgress(x) \
- STDMETHOD(SetTotal)(UInt64 total) x; \
- STDMETHOD(SetCompleted)(const UInt64 *completeValue) x; \
+Z7_PURE_INTERFACES_BEGIN
-DECL_INTERFACE(IProgress, 0, 5)
-{
- INTERFACE_IProgress(PURE)
-};
+#define Z7_IFACEM_IProgress(x) \
+ x(SetTotal(UInt64 total)) \
+ x(SetCompleted(const UInt64 *completeValue)) \
+Z7_DECL_IFACE_7ZIP(IProgress, 0, 5)
+ { Z7_IFACE_COM7_PURE(IProgress) };
+
+Z7_PURE_INTERFACES_END
#endif
diff --git a/3rdparty/lzma/CPP/7zip/IStream.h b/3rdparty/lzma/CPP/7zip/IStream.h
index 2793a1e9b17..4a58bc973ac 100644
--- a/3rdparty/lzma/CPP/7zip/IStream.h
+++ b/3rdparty/lzma/CPP/7zip/IStream.h
@@ -1,24 +1,28 @@
// IStream.h
-#ifndef __ISTREAM_H
-#define __ISTREAM_H
+#ifndef ZIP7_INC_ISTREAM_H
+#define ZIP7_INC_ISTREAM_H
#include "../Common/MyTypes.h"
#include "../Common/MyWindows.h"
#include "IDecl.h"
-#define STREAM_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 3, x)
-#define STREAM_INTERFACE(i, x) STREAM_INTERFACE_SUB(i, IUnknown, x)
+Z7_PURE_INTERFACES_BEGIN
-STREAM_INTERFACE(ISequentialInStream, 0x01)
-{
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize) PURE;
-
- /*
+#define Z7_IFACE_CONSTR_STREAM_SUB(i, base, n) \
+ Z7_DECL_IFACE_7ZIP_SUB(i, base, 3, n) \
+ { Z7_IFACE_COM7_PURE(i) };
+
+#define Z7_IFACE_CONSTR_STREAM(i, n) \
+ Z7_IFACE_CONSTR_STREAM_SUB(i, IUnknown, n)
+
+
+/*
+ISequentialInStream::Read()
The requirement for caller: (processedSize != NULL).
The callee can allow (processedSize == NULL) for compatibility reasons.
-
+
if (size == 0), this function returns S_OK and (*processedSize) is set to 0.
if (size != 0)
@@ -31,21 +35,21 @@ STREAM_INTERFACE(ISequentialInStream, 0x01)
If seek pointer before Read() call was changed to position past the end of stream:
if (seek_pointer >= stream_size), this function returns S_OK and (*processedSize) is set to 0.
-
+
ERROR CASES:
If the function returns error code, then (*processedSize) is size of
data written to (data) buffer (it can be data before error or data with errors).
The recommended way for callee to work with reading errors:
1) write part of data before error to (data) buffer and return S_OK.
2) return error code for further calls of Read().
- */
-};
+*/
+#define Z7_IFACEM_ISequentialInStream(x) \
+ x(Read(void *data, UInt32 size, UInt32 *processedSize))
+Z7_IFACE_CONSTR_STREAM(ISequentialInStream, 0x01)
-STREAM_INTERFACE(ISequentialOutStream, 0x02)
-{
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize) PURE;
-
- /*
+
+/*
+ISequentialOutStream::Write()
The requirement for caller: (processedSize != NULL).
The callee can allow (processedSize == NULL) for compatibility reasons.
@@ -59,8 +63,11 @@ STREAM_INTERFACE(ISequentialOutStream, 0x02)
ERROR CASES:
If the function returns error code, then (*processedSize) is size of
data written from (data) buffer.
- */
-};
+*/
+#define Z7_IFACEM_ISequentialOutStream(x) \
+ x(Write(const void *data, UInt32 size, UInt32 *processedSize))
+Z7_IFACE_CONSTR_STREAM(ISequentialOutStream, 0x02)
+
#ifdef _WIN32
@@ -72,48 +79,42 @@ STREAM_INTERFACE(ISequentialOutStream, 0x02)
#else
-#define HRESULT_WIN32_ERROR_NEGATIVE_SEEK MY__E_ERROR_NEGATIVE_SEEK
+#define HRESULT_WIN32_ERROR_NEGATIVE_SEEK MY_E_ERROR_NEGATIVE_SEEK
#endif
-/* Seek() Function
- If you seek before the beginning of the stream, Seek() function returns error code:
+/*
+IInStream::Seek() / IOutStream::Seek()
+ If you seek to position before the beginning of the stream,
+ Seek() function returns error code:
Recommended error code is __HRESULT_FROM_WIN32(ERROR_NEGATIVE_SEEK).
or STG_E_INVALIDFUNCTION
-
It is allowed to seek past the end of the stream.
-
-
if Seek() returns error, then the value of *newPosition is undefined.
*/
-STREAM_INTERFACE_SUB(IInStream, ISequentialInStream, 0x03)
-{
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE;
-};
+#define Z7_IFACEM_IInStream(x) \
+ x(Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
+Z7_IFACE_CONSTR_STREAM_SUB(IInStream, ISequentialInStream, 0x03)
-STREAM_INTERFACE_SUB(IOutStream, ISequentialOutStream, 0x04)
-{
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE;
- STDMETHOD(SetSize)(UInt64 newSize) PURE;
-};
+#define Z7_IFACEM_IOutStream(x) \
+ x(Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)) \
+ x(SetSize(UInt64 newSize))
+Z7_IFACE_CONSTR_STREAM_SUB(IOutStream, ISequentialOutStream, 0x04)
-STREAM_INTERFACE(IStreamGetSize, 0x06)
-{
- STDMETHOD(GetSize)(UInt64 *size) PURE;
-};
+#define Z7_IFACEM_IStreamGetSize(x) \
+ x(GetSize(UInt64 *size))
+Z7_IFACE_CONSTR_STREAM(IStreamGetSize, 0x06)
-STREAM_INTERFACE(IOutStreamFinish, 0x07)
-{
- STDMETHOD(OutStreamFinish)() PURE;
-};
+#define Z7_IFACEM_IOutStreamFinish(x) \
+ x(OutStreamFinish())
+Z7_IFACE_CONSTR_STREAM(IOutStreamFinish, 0x07)
+#define Z7_IFACEM_IStreamGetProps(x) \
+ x(GetProps(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib))
+Z7_IFACE_CONSTR_STREAM(IStreamGetProps, 0x08)
-STREAM_INTERFACE(IStreamGetProps, 0x08)
-{
- STDMETHOD(GetProps)(UInt64 *size, FILETIME *cTime, FILETIME *aTime, FILETIME *mTime, UInt32 *attrib) PURE;
-};
struct CStreamFileProps
{
@@ -128,16 +129,79 @@ struct CStreamFileProps
FILETIME MTime;
};
-STREAM_INTERFACE(IStreamGetProps2, 0x09)
-{
- STDMETHOD(GetProps2)(CStreamFileProps *props) PURE;
-};
+#define Z7_IFACEM_IStreamGetProps2(x) \
+ x(GetProps2(CStreamFileProps *props))
+Z7_IFACE_CONSTR_STREAM(IStreamGetProps2, 0x09)
-STREAM_INTERFACE(IStreamGetProp, 0x0a)
-{
- STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) PURE;
- STDMETHOD(ReloadProps)() PURE;
-};
+#define Z7_IFACEM_IStreamGetProp(x) \
+ x(GetProperty(PROPID propID, PROPVARIANT *value)) \
+ x(ReloadProps())
+Z7_IFACE_CONSTR_STREAM(IStreamGetProp, 0x0a)
+
+
+/*
+IStreamSetRestriction::SetRestriction(UInt64 begin, UInt64 end)
+
+ It sets region of data in output stream that is restricted.
+ For restricted region it's expected (or allowed)
+ to change data with different calls of Write()/SetSize().
+ Another regions of output stream will be supposed as non-restricted:
+ - The callee usually doesn't flush the data in restricted region.
+ - The callee usually can flush data from non-restricted region.
+
+inputs:
+
+ (begin > end) is not allowed, and returns E_FAIL;
+
+ if (begin == end)
+ {
+ it means that there is no region restriction for flushing.
+ The callee is allowed to flush already written data and
+ is allowed to flush all data in future calls of
+ ISequentialOutStream::Write(), but before next call of SetRestriction().
+ The pair of values (begin == 0 && end == 0) is recommended to
+ remove all restrictions.
+ }
+
+ if (begin < end)
+ {
+ it means that callee must NOT to flush any data in region [begin, end).
+ The caller is allowed to Seek() to that region and rewrite the
+ data in that restriction region.
+ if (end == (UInt64(Int64)-1)
+ {
+ there is no upper bound for restricted region.
+ So non-restricted region will be [0, begin) in that case
+ }
+
+ Note: it's not expected that some already written region was marked as
+ non-restricted by old call SetRestriction() and later the part of
+ that region was marked as restricted with new call SetRestriction().
+ For example, for different calls with non-empty restricted regions:
+ (begin_new >= begin_old) is expected :
+ {
+ SetRestriction(begin_old, ...)
+ ...
+ SetRestriction(begin_new, ...)
+ }
+ }
+
+ returns:
+ - if (begin > end) it return ERROR code (E_FAIL)
+ - S_OK : if no errors.
+ - Also the call of SetRestriction() can initiate the flushing of already written data.
+ So it can return the result of that flushing.
+
+ Note: IOutStream::SetSize() also can change the data.
+ So it's not expected the call
+ IOutStream::SetSize() to unrestricted already written region.
+*/
+
+#define Z7_IFACEM_IStreamSetRestriction(x) \
+ x(SetRestriction(UInt64 begin, UInt64 end)) \
+
+Z7_IFACE_CONSTR_STREAM(IStreamSetRestriction, 0x10)
+Z7_PURE_INTERFACES_END
#endif
diff --git a/3rdparty/lzma/CPP/7zip/LzmaDec.mak b/3rdparty/lzma/CPP/7zip/LzmaDec.mak
index bed4700a4cd..3beb5052ee5 100644
--- a/3rdparty/lzma/CPP/7zip/LzmaDec.mak
+++ b/3rdparty/lzma/CPP/7zip/LzmaDec.mak
@@ -1,6 +1,6 @@
!IF "$(PLATFORM)" == "x64"
!IFNDEF NO_ASM
-CFLAGS_C_SPEC = -D_LZMA_DEC_OPT
+CFLAGS_C_SPEC = -DZ7_LZMA_DEC_OPT
ASM_OBJS = $(ASM_OBJS) \
$O\LzmaDecOpt.obj
!ENDIF
diff --git a/3rdparty/lzma/CPP/7zip/MyVersionInfo.rc b/3rdparty/lzma/CPP/7zip/MyVersionInfo.rc
index fab66860a5d..fc63d798a9f 100644
--- a/3rdparty/lzma/CPP/7zip/MyVersionInfo.rc
+++ b/3rdparty/lzma/CPP/7zip/MyVersionInfo.rc
@@ -1,2 +1,2 @@
#include "MyVersion.h"
-#include "..\..\C\7zVersion.rc"
+#include "../../C/7zVersion.rc"
diff --git a/3rdparty/lzma/CPP/7zip/PropID.h b/3rdparty/lzma/CPP/7zip/PropID.h
index 2da636fa362..e0747942832 100644
--- a/3rdparty/lzma/CPP/7zip/PropID.h
+++ b/3rdparty/lzma/CPP/7zip/PropID.h
@@ -1,7 +1,7 @@
// PropID.h
-#ifndef __7ZIP_PROP_ID_H
-#define __7ZIP_PROP_ID_H
+#ifndef ZIP7_INC_7ZIP_PROP_ID_H
+#define ZIP7_INC_7ZIP_PROP_ID_H
#include "../Common/MyTypes.h"
@@ -110,6 +110,8 @@ enum
kpidGroupId,
kpidDeviceMajor,
kpidDeviceMinor,
+ kpidDevMajor,
+ kpidDevMinor,
kpid_NUM_DEFINED,
diff --git a/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.cpp b/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.cpp
index a55fa22d699..121a2f1051f 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.cpp
@@ -5,10 +5,9 @@
#include <stdio.h>
#include "../../../Common/MyWindows.h"
-
-#include "../../../Common/Defs.h"
#include "../../../Common/MyInitGuid.h"
+#include "../../../Common/Defs.h"
#include "../../../Common/IntToString.h"
#include "../../../Common/StringConvert.h"
@@ -30,13 +29,13 @@
#ifdef _WIN32
extern
HINSTANCE g_hInstance;
-HINSTANCE g_hInstance = 0;
+HINSTANCE g_hInstance = NULL;
#endif
// You can find full list of all GUIDs supported by 7-Zip in Guid.txt file.
// 7z format GUID: {23170F69-40C1-278A-1000-000110070000}
-#define DEFINE_GUID_ARC(name, id) DEFINE_GUID(name, \
+#define DEFINE_GUID_ARC(name, id) Z7_DEFINE_GUID(name, \
0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, id, 0x00, 0x00);
enum
@@ -154,7 +153,7 @@ static void PrintError(const char *message, const FString &name)
static HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result)
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, propID, &prop));
+ RINOK(archive->GetProperty(index, propID, &prop))
if (prop.vt == VT_BOOL)
result = VARIANT_BOOLToBool(prop.boolVal);
else if (prop.vt == VT_EMPTY)
@@ -177,18 +176,13 @@ static const wchar_t * const kEmptyFileAlias = L"[Content]";
// Archive Open callback class
-class CArchiveOpenCallback:
+class CArchiveOpenCallback Z7_final:
public IArchiveOpenCallback,
public ICryptoGetTextPassword,
public CMyUnknownImp
{
+ Z7_IFACES_IMP_UNK_2(IArchiveOpenCallback, ICryptoGetTextPassword)
public:
- MY_UNKNOWN_IMP1(ICryptoGetTextPassword)
-
- STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes);
- STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes);
-
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
bool PasswordIsDefined;
UString Password;
@@ -196,17 +190,17 @@ public:
CArchiveOpenCallback() : PasswordIsDefined(false) {}
};
-STDMETHODIMP CArchiveOpenCallback::SetTotal(const UInt64 * /* files */, const UInt64 * /* bytes */)
+Z7_COM7F_IMF(CArchiveOpenCallback::SetTotal(const UInt64 * /* files */, const UInt64 * /* bytes */))
{
return S_OK;
}
-STDMETHODIMP CArchiveOpenCallback::SetCompleted(const UInt64 * /* files */, const UInt64 * /* bytes */)
+Z7_COM7F_IMF(CArchiveOpenCallback::SetCompleted(const UInt64 * /* files */, const UInt64 * /* bytes */))
{
return S_OK;
}
-STDMETHODIMP CArchiveOpenCallback::CryptoGetTextPassword(BSTR *password)
+Z7_COM7F_IMF(CArchiveOpenCallback::CryptoGetTextPassword(BSTR *password))
{
if (!PasswordIsDefined)
{
@@ -321,27 +315,14 @@ struct CArcTime
-class CArchiveExtractCallback:
+class CArchiveExtractCallback Z7_final:
public IArchiveExtractCallback,
public ICryptoGetTextPassword,
public CMyUnknownImp
{
-public:
- MY_UNKNOWN_IMP1(ICryptoGetTextPassword)
-
- // IProgress
- STDMETHOD(SetTotal)(UInt64 size);
- STDMETHOD(SetCompleted)(const UInt64 *completeValue);
-
- // IArchiveExtractCallback
- STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode);
- STDMETHOD(PrepareOperation)(Int32 askExtractMode);
- STDMETHOD(SetOperationResult)(Int32 resultEOperationResult);
+ Z7_IFACES_IMP_UNK_2(IArchiveExtractCallback, ICryptoGetTextPassword)
+ Z7_IFACE_COM7_IMP(IProgress)
- // ICryptoGetTextPassword
- STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword);
-
-private:
CMyComPtr<IInArchive> _archiveHandler;
FString _directoryPath; // Output directory
UString _filePath; // name inside arcvhive
@@ -376,26 +357,26 @@ void CArchiveExtractCallback::Init(IInArchive *archiveHandler, const FString &di
NName::NormalizeDirPathPrefix(_directoryPath);
}
-STDMETHODIMP CArchiveExtractCallback::SetTotal(UInt64 /* size */)
+Z7_COM7F_IMF(CArchiveExtractCallback::SetTotal(UInt64 /* size */))
{
return S_OK;
}
-STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 * /* completeValue */)
+Z7_COM7F_IMF(CArchiveExtractCallback::SetCompleted(const UInt64 * /* completeValue */))
{
return S_OK;
}
-STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index,
- ISequentialOutStream **outStream, Int32 askExtractMode)
+Z7_COM7F_IMF(CArchiveExtractCallback::GetStream(UInt32 index,
+ ISequentialOutStream **outStream, Int32 askExtractMode))
{
- *outStream = 0;
+ *outStream = NULL;
_outFileStream.Release();
{
// Get Name
NCOM::CPropVariant prop;
- RINOK(_archiveHandler->GetProperty(index, kpidPath, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidPath, &prop))
UString fullPath;
if (prop.vt == VT_EMPTY)
@@ -415,7 +396,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index,
{
// Get Attrib
NCOM::CPropVariant prop;
- RINOK(_archiveHandler->GetProperty(index, kpidAttrib, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidAttrib, &prop))
if (prop.vt == VT_EMPTY)
{
_processedFileInfo.Attrib = 0;
@@ -430,13 +411,13 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index,
}
}
- RINOK(IsArchiveItemFolder(_archiveHandler, index, _processedFileInfo.isDir));
+ RINOK(IsArchiveItemFolder(_archiveHandler, index, _processedFileInfo.isDir))
{
_processedFileInfo.MTime.Clear();
// Get Modified Time
NCOM::CPropVariant prop;
- RINOK(_archiveHandler->GetProperty(index, kpidMTime, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidMTime, &prop))
switch (prop.vt)
{
case VT_EMPTY:
@@ -453,7 +434,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index,
{
// Get Size
NCOM::CPropVariant prop;
- RINOK(_archiveHandler->GetProperty(index, kpidSize, &prop));
+ RINOK(_archiveHandler->GetProperty(index, kpidSize, &prop))
UInt64 newFileSize;
/* bool newFileSizeDefined = */ ConvertPropVariantToUInt64(prop, newFileSize);
}
@@ -498,13 +479,13 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index,
return S_OK;
}
-STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode)
+Z7_COM7F_IMF(CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode))
{
_extractMode = false;
switch (askExtractMode)
{
case NArchive::NExtract::NAskMode::kExtract: _extractMode = true; break;
- };
+ }
switch (askExtractMode)
{
case NArchive::NExtract::NAskMode::kExtract: Print(kExtractingString); break;
@@ -513,12 +494,12 @@ STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode)
case NArchive::NExtract::NAskMode::kReadExternal: Print(kReadingString); break;
default:
Print("??? "); break;
- };
+ }
Print(_filePath);
return S_OK;
}
-STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult)
+Z7_COM7F_IMF(CArchiveExtractCallback::SetOperationResult(Int32 operationResult))
{
switch (operationResult)
{
@@ -564,7 +545,7 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult)
else
{
char temp[16];
- ConvertUInt32ToString(operationResult, temp);
+ ConvertUInt32ToString((UInt32)operationResult, temp);
Print("Error #");
Print(temp);
}
@@ -579,7 +560,7 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult)
_processedFileInfo.MTime.Write_To_FiTime(ft);
_outFileStreamSpec->SetMTime(&ft);
}
- RINOK(_outFileStreamSpec->Close());
+ RINOK(_outFileStreamSpec->Close())
}
_outFileStream.Release();
if (_extractMode && _processedFileInfo.Attrib_Defined)
@@ -589,7 +570,7 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult)
}
-STDMETHODIMP CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password)
+Z7_COM7F_IMF(CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password))
{
if (!PasswordIsDefined)
{
@@ -617,28 +598,14 @@ struct CDirItem: public NWindows::NFile::NFind::CFileInfoBase
{}
};
-class CArchiveUpdateCallback:
+class CArchiveUpdateCallback Z7_final:
public IArchiveUpdateCallback2,
public ICryptoGetTextPassword2,
public CMyUnknownImp
{
-public:
- MY_UNKNOWN_IMP2(IArchiveUpdateCallback2, ICryptoGetTextPassword2)
-
- // IProgress
- STDMETHOD(SetTotal)(UInt64 size);
- STDMETHOD(SetCompleted)(const UInt64 *completeValue);
-
- // IUpdateCallback2
- STDMETHOD(GetUpdateItemInfo)(UInt32 index,
- Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive);
- STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value);
- STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream);
- STDMETHOD(SetOperationResult)(Int32 operationResult);
- STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size);
- STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream);
-
- STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password);
+ Z7_IFACES_IMP_UNK_2(IArchiveUpdateCallback2, ICryptoGetTextPassword2)
+ Z7_IFACE_COM7_IMP(IProgress)
+ Z7_IFACE_COM7_IMP(IArchiveUpdateCallback)
public:
CRecordVector<UInt64> VolumesSizes;
@@ -675,18 +642,18 @@ public:
}
};
-STDMETHODIMP CArchiveUpdateCallback::SetTotal(UInt64 /* size */)
+Z7_COM7F_IMF(CArchiveUpdateCallback::SetTotal(UInt64 /* size */))
{
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::SetCompleted(const UInt64 * /* completeValue */)
+Z7_COM7F_IMF(CArchiveUpdateCallback::SetCompleted(const UInt64 * /* completeValue */))
{
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 /* index */,
- Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 /* index */,
+ Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive))
{
if (newData)
*newData = BoolToInt(true);
@@ -697,7 +664,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 /* index */,
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value))
{
NCOM::CPropVariant prop;
@@ -744,9 +711,9 @@ static void GetStream2(const wchar_t *name)
Print(name);
}
-STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream))
{
- RINOK(Finilize());
+ RINOK(Finilize())
const CDirItem &dirItem = (*DirItems)[index];
GetStream2(dirItem.Path_For_Handler);
@@ -760,8 +727,8 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream
FString path = DirPrefix + dirItem.FullPath;
if (!inStreamSpec->Open(path))
{
- DWORD sysError = ::GetLastError();
- FailedCodes.Add(sysError);
+ const DWORD sysError = ::GetLastError();
+ FailedCodes.Add(HRESULT_FROM_WIN32(sysError));
FailedFiles.Add(path);
// if (systemError == ERROR_SHARING_VIOLATION)
{
@@ -777,13 +744,13 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::SetOperationResult(Int32 /* operationResult */)
+Z7_COM7F_IMF(CArchiveUpdateCallback::SetOperationResult(Int32 /* operationResult */))
{
m_NeedBeClosed = true;
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size))
{
if (VolumesSizes.Size() == 0)
return S_FALSE;
@@ -793,7 +760,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size)
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream))
{
wchar_t temp[16];
ConvertUInt32ToString(index + 1, temp);
@@ -801,18 +768,18 @@ STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOu
while (res.Len() < 2)
res.InsertAtFront(L'0');
UString fileName = VolName;
- fileName += '.';
+ fileName.Add_Dot();
fileName += res;
fileName += VolExt;
COutFileStream *streamSpec = new COutFileStream;
CMyComPtr<ISequentialOutStream> streamLoc(streamSpec);
if (!streamSpec->Create(us2fs(fileName), false))
- return ::GetLastError();
+ return GetLastError_noZero_HRESULT();
*volumeStream = streamLoc.Detach();
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password)
+Z7_COM7F_IMF(CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password))
{
if (!PasswordIsDefined)
{
@@ -836,7 +803,7 @@ STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDef
#define NT_CHECK_FAIL_ACTION PrintError("Unsupported Windows version"); return 1;
#endif
-int MY_CDECL main(int numArgs, const char *args[])
+int Z7_CDECL main(int numArgs, const char *args[])
{
NT_CHECK
@@ -872,8 +839,11 @@ int MY_CDECL main(int numArgs, const char *args[])
return 1;
}
- Func_CreateObject createObjectFunc = (Func_CreateObject)lib.GetProc("CreateObject");
- if (!createObjectFunc)
+ Func_CreateObject
+ f_CreateObject = Z7_GET_PROC_ADDRESS(
+ Func_CreateObject, lib.Get_HMODULE(),
+ "CreateObject");
+ if (!f_CreateObject)
{
PrintError("Cannot get CreateObject");
return 1;
@@ -966,7 +936,7 @@ int MY_CDECL main(int numArgs, const char *args[])
}
CMyComPtr<IOutArchive> outArchive;
- if (createObjectFunc(&CLSID_Format, &IID_IOutArchive, (void **)&outArchive) != S_OK)
+ if (f_CreateObject(&CLSID_Format, &IID_IOutArchive, (void **)&outArchive) != S_OK)
{
PrintError("Cannot get class object");
return 1;
@@ -986,7 +956,7 @@ int MY_CDECL main(int numArgs, const char *args[])
L"s",
L"x"
};
- const unsigned kNumProps = ARRAY_SIZE(names);
+ const unsigned kNumProps = Z7_ARRAY_SIZE(names);
NCOM::CPropVariant values[kNumProps] =
{
L"lzma",
@@ -1048,7 +1018,7 @@ int MY_CDECL main(int numArgs, const char *args[])
}
CMyComPtr<IInArchive> archive;
- if (createObjectFunc(&CLSID_Format, &IID_IInArchive, (void **)&archive) != S_OK)
+ if (f_CreateObject(&CLSID_Format, &IID_IInArchive, (void **)&archive) != S_OK)
{
PrintError("Cannot get class object");
return 1;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.dsp b/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.dsp
index b412c8e9a7d..d46300feb2a 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.dsp
+++ b/3rdparty/lzma/CPP/7zip/UI/Client7z/Client7z.dsp
@@ -104,6 +104,10 @@ SOURCE=.\StdAfx.h
# PROP Default_Filter ""
# Begin Source File
+SOURCE=..\..\..\Windows\Defs.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Windows\DLL.cpp
# End Source File
# Begin Source File
@@ -144,6 +148,10 @@ SOURCE=..\..\..\Windows\FileName.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Windows\NtCheck.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Windows\PropVariant.cpp
# End Source File
# Begin Source File
@@ -158,12 +166,24 @@ SOURCE=..\..\..\Windows\PropVariantConv.cpp
SOURCE=..\..\..\Windows\PropVariantConv.h
# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Windows\TimeUtils.h
+# End Source File
# End Group
# Begin Group "Common"
# PROP Default_Filter ""
# Begin Source File
+SOURCE=..\..\..\Common\Common.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\Defs.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\IntToString.cpp
# End Source File
# Begin Source File
@@ -172,6 +192,22 @@ SOURCE=..\..\..\Common\IntToString.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyBuffer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyCom.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyInitGuid.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\Common\MyLinux.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyString.cpp
# End Source File
# Begin Source File
@@ -180,6 +216,10 @@ SOURCE=..\..\..\Common\MyString.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyTypes.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\MyVector.cpp
# End Source File
# Begin Source File
@@ -188,6 +228,10 @@ SOURCE=..\..\..\Common\MyVector.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\Common\MyWindows.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\Common\NewHandler.cpp
# End Source File
# Begin Source File
@@ -222,6 +266,54 @@ SOURCE=..\..\Common\FileStreams.cpp
SOURCE=..\..\Common\FileStreams.h
# End Source File
+# Begin Source File
+
+SOURCE=..\..\Common\UniqBlocks.h
+# End Source File
+# End Group
+# Begin Group "C"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zTypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zVersion.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\7zWindows.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\Compiler.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\CpuArch.h
+# End Source File
+# End Group
+# Begin Group "7zip"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\IDecl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IPassword.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\IProgress.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\PropID.h
+# End Source File
# End Group
# Begin Source File
@@ -229,7 +321,7 @@ SOURCE=.\Client7z.cpp
# End Source File
# Begin Source File
-SOURCE=..\..\..\..\C\Sort.h
+SOURCE=..\..\Archive\IArchive.h
# End Source File
# End Target
# End Project
diff --git a/3rdparty/lzma/CPP/7zip/UI/Client7z/StdAfx.h b/3rdparty/lzma/CPP/7zip/UI/Client7z/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Client7z/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Client7z/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp
index d88c8516e01..2bdbc418243 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp
@@ -15,7 +15,7 @@
#include <stdio.h>
-#ifdef _7ZIP_LARGE_PAGES
+#ifdef Z7_LARGE_PAGES
#include "../../../../C/Alloc.h"
#endif
@@ -42,7 +42,7 @@
extern bool g_CaseSensitive;
extern bool g_PathTrailReplaceMode;
-#ifdef _7ZIP_LARGE_PAGES
+#ifdef Z7_LARGE_PAGES
extern
bool g_LargePagesMode;
bool g_LargePagesMode = false;
@@ -174,7 +174,7 @@ enum Enum
kDeleteAfterCompressing,
kSetArcMTime
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
, kPassword
#endif
};
@@ -322,7 +322,7 @@ static const CSwitchForm kSwitchForms[] =
{ "sdel", SWFRM_SIMPLE },
{ "stl", SWFRM_SIMPLE }
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
, { "p", SWFRM_STRING }
#endif
};
@@ -340,7 +340,7 @@ static const char * const kEmptyFilePath = "Empty file path";
bool CArcCommand::IsFromExtractGroup() const
{
- switch (CommandType)
+ switch ((int)CommandType)
{
case NCommandType::kTest:
case NCommandType::kExtract:
@@ -353,7 +353,7 @@ bool CArcCommand::IsFromExtractGroup() const
NExtract::NPathMode::EEnum CArcCommand::GetPathMode() const
{
- switch (CommandType)
+ switch ((int)CommandType)
{
case NCommandType::kTest:
case NCommandType::kExtractFull:
@@ -365,7 +365,7 @@ NExtract::NPathMode::EEnum CArcCommand::GetPathMode() const
bool CArcCommand::IsFromUpdateGroup() const
{
- switch (CommandType)
+ switch ((int)CommandType)
{
case NCommandType::kAdd:
case NCommandType::kUpdate:
@@ -438,7 +438,7 @@ static void AddNameToCensor(NWildcard::CCensor &censor,
{
bool recursed = false;
- switch (nop.RecursedType)
+ switch ((int)nop.RecursedType)
{
case NRecursedType::kWildcardOnlyRecursed:
recursed = DoesNameContainWildcard(name);
@@ -905,7 +905,7 @@ static void SetAddCommandOptions(
CUpdateOptions &options)
{
NUpdateArchive::CActionSet defaultActionSet;
- switch (commandType)
+ switch ((int)commandType)
{
case NCommandType::kAdd:
defaultActionSet = NUpdateArchive::k_ActionSet_Add;
@@ -944,8 +944,10 @@ static void SetAddCommandOptions(
FOR_VECTOR (i, sv)
{
UInt64 size;
- if (!ParseComplexSize(sv[i], size) || size == 0)
+ if (!ParseComplexSize(sv[i], size))
throw CArcCmdLineException("Incorrect volume size:", sv[i]);
+ if (i == sv.Size() - 1 && size == 0)
+ throw CArcCmdLineException("zero size last volume is not allowed");
options.VolumesSizes.Add(size);
}
}
@@ -992,7 +994,7 @@ void CArcCmdLineParser::Parse1(const UStringVector &commandStrings,
CArcCmdLineOptions &options)
{
Parse1Log.Empty();
- if (!parser.ParseStrings(kSwitchForms, ARRAY_SIZE(kSwitchForms), commandStrings))
+ if (!parser.ParseStrings(kSwitchForms, Z7_ARRAY_SIZE(kSwitchForms), commandStrings))
throw CArcCmdLineException(parser.ErrorMessage, parser.ErrorLine);
options.IsInTerminal = MY_IS_TERMINAL(stdin);
@@ -1054,7 +1056,7 @@ void CArcCmdLineParser::Parse1(const UStringVector &commandStrings,
if (parser[NKey::kLargePages].ThereIs)
{
- unsigned slp = 0;
+ UInt32 slp = 0;
const UString &s = parser[NKey::kLargePages].PostStrings[0];
if (s.IsEmpty())
slp = 1;
@@ -1064,7 +1066,7 @@ void CArcCmdLineParser::Parse1(const UStringVector &commandStrings,
throw CArcCmdLineException("Unsupported switch postfix for -slp", s);
}
- #ifdef _7ZIP_LARGE_PAGES
+ #ifdef Z7_LARGE_PAGES
if (slp >
#if defined(_WIN32) && !defined(UNDER_CE)
(unsigned)NSecurity::Get_LargePages_RiskLevel()
@@ -1181,8 +1183,8 @@ static const CCodePagePair g_CodePagePairs[] =
{ "utf-8", CP_UTF8 },
{ "win", CP_ACP },
{ "dos", CP_OEMCP },
- { "utf-16le", MY__CP_UTF16 },
- { "utf-16be", MY__CP_UTF16BE }
+ { "utf-16le", Z7_WIN_CP_UTF16 },
+ { "utf-16be", Z7_WIN_CP_UTF16BE }
};
static Int32 FindCharset(const NCommandLineParser::CParser &parser, unsigned keyIndex,
@@ -1197,7 +1199,7 @@ static Int32 FindCharset(const NCommandLineParser::CParser &parser, unsigned key
if (v < ((UInt32)1 << 16))
return (Int32)v;
name.MakeLower_Ascii();
- unsigned num = byteOnlyCodePages ? kNumByteOnlyCodePages : ARRAY_SIZE(g_CodePagePairs);
+ const unsigned num = byteOnlyCodePages ? kNumByteOnlyCodePages : Z7_ARRAY_SIZE(g_CodePagePairs);
for (unsigned i = 0;; i++)
{
if (i == num) // to disable warnings from different compilers
@@ -1355,7 +1357,7 @@ void CArcCmdLineParser::Parse2(CArcCmdLineOptions &options)
options.YesToAll = parser[NKey::kYes].ThereIs;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
options.PasswordEnabled = parser[NKey::kPassword].ThereIs;
if (options.PasswordEnabled)
options.Password = parser[NKey::kPassword].PostStrings[0];
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h
index 745f999dd7c..9e375b55aba 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h
@@ -1,7 +1,7 @@
// ArchiveCommandLine.h
-#ifndef __ARCHIVE_COMMAND_LINE_H
-#define __ARCHIVE_COMMAND_LINE_H
+#ifndef ZIP7_INC_ARCHIVE_COMMAND_LINE_H
+#define ZIP7_INC_ARCHIVE_COMMAND_LINE_H
#include "../../../Common/CommandLineParser.h"
#include "../../../Common/Wildcard.h"
@@ -66,6 +66,14 @@ struct CArcCmdLineOptions
bool TechMode;
bool ShowTime;
+ CBoolPair NtSecurity;
+ CBoolPair AltStreams;
+ CBoolPair HardLinks;
+ CBoolPair SymLinks;
+
+ CBoolPair StoreOwnerId;
+ CBoolPair StoreOwnerName;
+
AString ListFields;
int ConsoleCodePage;
@@ -75,7 +83,7 @@ struct CArcCmdLineOptions
CArcCommand Command;
UString ArchiveName;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool PasswordEnabled;
UString Password;
#endif
@@ -83,7 +91,7 @@ struct CArcCmdLineOptions
UStringVector HashMethods;
// UString HashFilePath;
- bool AppendName;
+ // bool AppendName;
// UStringVector ArchivePathsSorted;
// UStringVector ArchivePathsFullSorted;
NWildcard::CCensor arcCensor;
@@ -93,14 +101,6 @@ struct CArcCmdLineOptions
CExtractOptionsBase ExtractOptions;
- CBoolPair NtSecurity;
- CBoolPair AltStreams;
- CBoolPair HardLinks;
- CBoolPair SymLinks;
-
- CBoolPair StoreOwnerId;
- CBoolPair StoreOwnerName;
-
CUpdateOptions UpdateOptions;
CHashOptions HashOptions;
UString ArcType;
@@ -145,7 +145,7 @@ struct CArcCmdLineOptions
LogLevel(0)
{
- };
+ }
};
class CArcCmdLineParser
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp
index a574f136e7c..4b0cbedad31 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp
@@ -25,8 +25,8 @@
#include "../../../Windows/PropVariant.h"
#include "../../../Windows/PropVariantConv.h"
-#if defined(_WIN32) && !defined(UNDER_CE) && !defined(_SFX)
-#define _USE_SECURITY_CODE
+#if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
+#define Z7_USE_SECURITY_CODE
#include "../../../Windows/SecurityUtils.h"
#endif
@@ -54,9 +54,9 @@ static const char * const kCantCreateHardLink = "Cannot create hard link";
static const char * const kCantCreateSymLink = "Cannot create symbolic link";
#endif
-#ifndef _SFX
+#ifndef Z7_SFX
-STDMETHODIMP COutStreamWithHash::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(COutStreamWithHash::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
HRESULT result = S_OK;
if (_stream)
@@ -69,10 +69,10 @@ STDMETHODIMP COutStreamWithHash::Write(const void *data, UInt32 size, UInt32 *pr
return result;
}
-#endif // _SFX
+#endif // Z7_SFX
-#ifdef _USE_SECURITY_CODE
+#ifdef Z7_USE_SECURITY_CODE
bool InitLocalPrivileges();
bool InitLocalPrivileges()
{
@@ -92,11 +92,11 @@ bool InitLocalPrivileges()
return false;
return (GetLastError() == ERROR_SUCCESS);
}
-#endif // _USE_SECURITY_CODE
+#endif // Z7_USE_SECURITY_CODE
-#if defined(_WIN32) && !defined(UNDER_CE) && !defined(_SFX)
+#if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
static const char * const kOfficeExtensions =
" doc dot wbk"
@@ -117,7 +117,7 @@ static bool FindExt2(const char *p, const UString &name)
return false;
AString s;
- for (unsigned pos = dotPos + 1;; pos++)
+ for (unsigned pos = (unsigned)(dotPos + 1);; pos++)
{
const wchar_t c = name[pos];
if (c <= 0)
@@ -142,7 +142,7 @@ static const FChar * const k_ZoneId_StreamName = FTEXT(":Zone.Identifier");
void ReadZoneFile_Of_BaseFile(CFSTR fileName2, CByteBuffer &buf)
{
- FString fileName = fileName2;
+ FString fileName (fileName2);
fileName += k_ZoneId_StreamName;
buf.Free();
@@ -188,13 +188,13 @@ static HRESULT Archive_Get_HardLinkNode(IInArchive *archive, UInt32 index, CHard
defined = false;
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidINode, &prop));
+ RINOK(archive->GetProperty(index, kpidINode, &prop))
if (!ConvertPropVariantToUInt64(prop, h.INode))
return S_OK;
}
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidStreamId, &prop));
+ RINOK(archive->GetProperty(index, kpidStreamId, &prop))
ConvertPropVariantToUInt64(prop, h.StreamId);
}
defined = true;
@@ -218,22 +218,27 @@ HRESULT CArchiveExtractCallback::PrepareHardLinks(const CRecordVector<UInt32> *r
numItems = realIndices->Size();
else
{
- RINOK(archive->GetNumberOfItems(&numItems));
+ RINOK(archive->GetNumberOfItems(&numItems))
}
for (UInt32 i = 0; i < numItems; i++)
{
CHardLinkNode h;
bool defined;
- UInt32 realIndex = realIndices ? (*realIndices)[i] : i;
+ const UInt32 realIndex = realIndices ? (*realIndices)[i] : i;
- RINOK(Archive_Get_HardLinkNode(archive, realIndex, h, defined));
+ RINOK(Archive_Get_HardLinkNode(archive, realIndex, h, defined))
if (defined)
{
bool isAltStream = false;
- RINOK(Archive_IsItem_AltStream(archive, realIndex, isAltStream));
+ RINOK(Archive_IsItem_AltStream(archive, realIndex, isAltStream))
if (!isAltStream)
- hardIDs.Add(h);
+ {
+ bool isDir = false;
+ RINOK(Archive_IsItem_Dir(archive, realIndex, isDir))
+ if (!isDir)
+ hardIDs.Add(h);
+ }
}
}
}
@@ -275,7 +280,7 @@ CArchiveExtractCallback::CArchiveExtractCallback():
LocalProgressSpec = new CLocalProgress();
_localProgress = LocalProgressSpec;
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
_saclEnabled = InitLocalPrivileges();
#endif
}
@@ -325,16 +330,18 @@ void CArchiveExtractCallback::Init(
_extractCallback2 = extractCallback2;
+ /*
_compressProgress.Release();
_extractCallback2.QueryInterface(IID_ICompressProgressInfo, &_compressProgress);
_callbackMessage.Release();
- _extractCallback2.QueryInterface(IID_IArchiveExtractCallbackMessage, &_callbackMessage);
+ _extractCallback2.QueryInterface(IID_IArchiveExtractCallbackMessage2, &_callbackMessage);
+ */
_folderArchiveExtractCallback2.Release();
_extractCallback2.QueryInterface(IID_IFolderArchiveExtractCallback2, &_folderArchiveExtractCallback2);
- #ifndef _SFX
+ #ifndef Z7_SFX
ExtractToStreamCallback.Release();
_extractCallback2.QueryInterface(IID_IFolderExtractToStreamCallback, &ExtractToStreamCallback);
@@ -355,7 +362,7 @@ void CArchiveExtractCallback::Init(
_removePathParts = removePathParts;
_removePartsForAltStreams = removePartsForAltStreams;
- #ifndef _SFX
+ #ifndef Z7_SFX
_baseParentFolder = (UInt32)(Int32)-1;
_use_baseParentFolder_mode = false;
#endif
@@ -374,7 +381,7 @@ void CArchiveExtractCallback::Init(
}
-STDMETHODIMP CArchiveExtractCallback::SetTotal(UInt64 size)
+Z7_COM7F_IMF(CArchiveExtractCallback::SetTotal(UInt64 size))
{
COM_TRY_BEGIN
_progressTotal = size;
@@ -407,7 +414,7 @@ static UInt64 MyMultDiv64(UInt64 unpCur, UInt64 unpTotal, UInt64 packTotal)
}
-STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 *completeValue)
+Z7_COM7F_IMF(CArchiveExtractCallback::SetCompleted(const UInt64 *completeValue))
{
COM_TRY_BEGIN
@@ -428,7 +435,7 @@ STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 *completeValue)
}
-STDMETHODIMP CArchiveExtractCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
+Z7_COM7F_IMF(CArchiveExtractCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
{
COM_TRY_BEGIN
return _localProgress->SetRatioInfo(inSize, outSize);
@@ -510,7 +517,7 @@ HRESULT CArchiveExtractCallback::GetTime(UInt32 index, PROPID propID, CArcTime &
{
ft.Clear();
NCOM::CPropVariant prop;
- RINOK(_arc->Archive->GetProperty(index, propID, &prop));
+ RINOK(_arc->Archive->GetProperty(index, propID, &prop))
if (prop.vt == VT_FILETIME)
ft.Set_From_Prop(prop);
else if (prop.vt != VT_EMPTY)
@@ -521,7 +528,7 @@ HRESULT CArchiveExtractCallback::GetTime(UInt32 index, PROPID propID, CArcTime &
HRESULT CArchiveExtractCallback::GetUnpackSize()
{
- return _arc->GetItem_Size(_index, _curSize, _curSizeDefined);
+ return _arc->GetItem_Size(_index, _curSize, _curSize_Defined);
}
static void AddPathToMessage(UString &s, const FString &path)
@@ -564,9 +571,9 @@ HRESULT CArchiveExtractCallback::SendMessageError2(HRESULT errorCode, const char
return _extractCallback2->MessageError(s);
}
-#ifndef _SFX
+#ifndef Z7_SFX
-STDMETHODIMP CGetProp::GetProp(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CGetProp::GetProp(PROPID propID, PROPVARIANT *value))
{
/*
if (propID == kpidName)
@@ -581,7 +588,7 @@ STDMETHODIMP CGetProp::GetProp(PROPID propID, PROPVARIANT *value)
return Arc->Archive->GetProperty(IndexInArc, propID, value);
}
-#endif // _SFX
+#endif // Z7_SFX
#ifdef SUPPORT_LINKS
@@ -749,15 +756,15 @@ HRESULT CArchiveExtractCallback::MyCopyFile(ISequentialOutStream *outStream)
NIO::CInFile inFile;
NIO::COutFile outFile;
- if (!inFile.Open(_CopyFile_Path))
- return SendMessageError_with_LastError("Open error", _CopyFile_Path);
+ if (!inFile.Open(_copyFile_Path))
+ return SendMessageError_with_LastError("Open error", _copyFile_Path);
for (;;)
{
UInt32 num;
if (!inFile.Read(buf.Buf, kBufSize, num))
- return SendMessageError_with_LastError("Read error", _CopyFile_Path);
+ return SendMessageError_with_LastError("Read error", _copyFile_Path);
if (num == 0)
return S_OK;
@@ -777,7 +784,7 @@ HRESULT CArchiveExtractCallback::ReadLink()
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidHardLink, &prop));
+ RINOK(archive->GetProperty(index, kpidHardLink, &prop))
if (prop.vt == VT_BSTR)
{
_link.isHardLink = true;
@@ -807,7 +814,7 @@ HRESULT CArchiveExtractCallback::ReadLink()
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidSymLink, &prop));
+ RINOK(archive->GetProperty(index, kpidSymLink, &prop))
if (prop.vt == VT_BSTR)
{
_link.isHardLink = false;
@@ -937,7 +944,7 @@ static HRESULT GetOwner(IInArchive *archive,
{
{
NWindows::NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, pidId, &prop));
+ RINOK(archive->GetProperty(index, pidId, &prop))
if (prop.vt == VT_UI4)
{
res.Id_Defined = true;
@@ -951,7 +958,7 @@ static HRESULT GetOwner(IInArchive *archive,
}
{
NWindows::NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, pidName, &prop));
+ RINOK(archive->GetProperty(index, pidName, &prop))
if (prop.vt == VT_BSTR)
{
const UString s = prop.bstrVal;
@@ -981,11 +988,11 @@ HRESULT CArchiveExtractCallback::Read_fi_Props()
#ifndef _WIN32
_fi.Owner.Clear();
_fi.Group.Clear();
- #endif
+ #endif
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidPosixAttrib, &prop));
+ RINOK(archive->GetProperty(index, kpidPosixAttrib, &prop))
if (prop.vt == VT_UI4)
{
_fi.SetFromPosixAttrib(prop.ulVal);
@@ -996,7 +1003,7 @@ HRESULT CArchiveExtractCallback::Read_fi_Props()
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidAttrib, &prop));
+ RINOK(archive->GetProperty(index, kpidAttrib, &prop))
if (prop.vt == VT_UI4)
{
_fi.Attrib = prop.ulVal;
@@ -1006,9 +1013,9 @@ HRESULT CArchiveExtractCallback::Read_fi_Props()
return E_FAIL;
}
- RINOK(GetTime(index, kpidCTime, _fi.CTime));
- RINOK(GetTime(index, kpidATime, _fi.ATime));
- RINOK(GetTime(index, kpidMTime, _fi.MTime));
+ RINOK(GetTime(index, kpidCTime, _fi.CTime))
+ RINOK(GetTime(index, kpidATime, _fi.ATime))
+ RINOK(GetTime(index, kpidMTime, _fi.MTime))
#ifndef _WIN32
if (_ntOptions.ExtractOwner)
@@ -1104,9 +1111,19 @@ void CArchiveExtractCallback::CreateFolders()
// 21.04 : we don't change original (_item.PathParts) here
UStringVector pathParts = _item.PathParts;
- if (!_item.IsDir)
+ if (!pathParts.IsEmpty())
{
- if (!pathParts.IsEmpty())
+ /* v23: if we extract symlink, and we know that it links to dir:
+ Linux: we don't create dir item (symlink_from_path) here.
+ Windows: SetReparseData() will create dir item, if it doesn't exist,
+ but if we create dir item here, it's not problem. */
+ if (!_item.IsDir
+ #ifdef SUPPORT_LINKS
+ #ifndef WIN32
+ || !_link.linkPath.IsEmpty()
+ #endif
+ #endif
+ )
pathParts.DeleteBack();
}
@@ -1167,7 +1184,7 @@ HRESULT CArchiveExtractCallback::CheckExistFile(FString &fullProcessedPath, bool
RINOK(_extractCallback2->AskOverwrite(
fs2us(realFullProcessedPath), &ft1, &fileInfo.Size, _item.Path,
_fi.MTime.Def ? &_fi.MTime.FT : NULL,
- _curSizeDefined ? &_curSize : NULL,
+ _curSize_Defined ? &_curSize : NULL,
&overwriteResult))
switch (overwriteResult)
@@ -1197,7 +1214,7 @@ HRESULT CArchiveExtractCallback::CheckExistFile(FString &fullProcessedPath, bool
{
if (!AutoRenamePath(fullProcessedPath))
{
- RINOK(SendMessageError(kCantAutoRename, fullProcessedPath));
+ RINOK(SendMessageError(kCantAutoRename, fullProcessedPath))
return E_FAIL;
}
_isRenamed = true;
@@ -1207,14 +1224,14 @@ HRESULT CArchiveExtractCallback::CheckExistFile(FString &fullProcessedPath, bool
FString existPath (fullProcessedPath);
if (!AutoRenamePath(existPath))
{
- RINOK(SendMessageError(kCantAutoRename, fullProcessedPath));
+ RINOK(SendMessageError(kCantAutoRename, fullProcessedPath))
return E_FAIL;
}
// MyMoveFile can rename folders. So it's OK to use it for folders too
if (!MyMoveFile(fullProcessedPath, existPath))
{
HRESULT errorCode = GetLastError_noZero_HRESULT();
- RINOK(SendMessageError2(errorCode, kCantRenameFile, existPath, fullProcessedPath));
+ RINOK(SendMessageError2(errorCode, kCantRenameFile, existPath, fullProcessedPath))
return E_FAIL;
}
}
@@ -1225,7 +1242,7 @@ HRESULT CArchiveExtractCallback::CheckExistFile(FString &fullProcessedPath, bool
// do we need to delete all files in folder?
if (!RemoveDir(fullProcessedPath))
{
- RINOK(SendMessageError_with_LastError(kCantDeleteOutputDir, fullProcessedPath));
+ RINOK(SendMessageError_with_LastError(kCantDeleteOutputDir, fullProcessedPath))
return S_OK;
}
}
@@ -1235,7 +1252,7 @@ HRESULT CArchiveExtractCallback::CheckExistFile(FString &fullProcessedPath, bool
if (!DeleteFileAlways(fullProcessedPath))
if (GetLastError() != ERROR_FILE_NOT_FOUND) // check it in linux
{
- RINOK(SendMessageError_with_LastError(kCantDeleteOutputFile, fullProcessedPath));
+ RINOK(SendMessageError_with_LastError(kCantDeleteOutputFile, fullProcessedPath))
return S_OK;
// return E_FAIL;
}
@@ -1274,7 +1291,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
{
needExit = true;
- RINOK(Read_fi_Props());
+ RINOK(Read_fi_Props())
#ifdef SUPPORT_LINKS
IInArchive *archive = _arc->Archive;
@@ -1283,7 +1300,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
const UInt32 index = _index;
bool isAnti = false;
- RINOK(_arc->IsItem_Anti(index, isAnti));
+ RINOK(_arc->IsItem_Anti(index, isAnti))
CorrectPathParts();
UString processedPath (MakePathFromParts(_item.PathParts));
@@ -1333,7 +1350,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
}
else if (!_isSplit)
{
- RINOK(CheckExistFile(fullProcessedPath, needExit));
+ RINOK(CheckExistFile(fullProcessedPath, needExit))
if (needExit)
return S_OK;
needExit = true;
@@ -1357,7 +1374,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
#ifndef UNDER_CE
{
bool linkWasSet = false;
- RINOK(SetFromLinkPath(fullProcessedPath, _link, linkWasSet));
+ RINOK(SetFromLinkPath(fullProcessedPath, _link, linkWasSet))
if (linkWasSet)
{
_isSymLinkCreated = _link.IsSymLink();
@@ -1367,18 +1384,18 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
}
#endif // UNDER_CE
- // if (_CopyFile_Path.IsEmpty())
+ // if (_copyFile_Path.IsEmpty())
{
needExit = false;
return S_OK;
}
}
- if (!_hardLinks.IDs.IsEmpty() && !_item.IsAltStream)
+ if (!_hardLinks.IDs.IsEmpty() && !_item.IsAltStream && !_item.IsDir)
{
CHardLinkNode h;
bool defined;
- RINOK(Archive_Get_HardLinkNode(archive, index, h, defined));
+ RINOK(Archive_Get_HardLinkNode(archive, index, h, defined))
if (defined)
{
const int linkIndex = _hardLinks.IDs.FindInSorted2(h);
@@ -1392,7 +1409,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
if (!MyCreateHardLink(fullProcessedPath, hl))
{
HRESULT errorCode = GetLastError_noZero_HRESULT();
- RINOK(SendMessageError2(errorCode, kCantCreateHardLink, fullProcessedPath, hl));
+ RINOK(SendMessageError2(errorCode, kCantCreateHardLink, fullProcessedPath, hl))
return S_OK;
}
@@ -1412,13 +1429,13 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
// ---------- CREATE WRITE FILE -----
_outFileStreamSpec = new COutFileStream;
- CMyComPtr<ISequentialOutStream> outFileStream_Loc(_outFileStreamSpec);
+ CMyComPtr<IOutStream> outFileStream_Loc(_outFileStreamSpec);
if (!_outFileStreamSpec->Open(fullProcessedPath, _isSplit ? OPEN_ALWAYS: CREATE_ALWAYS))
{
// if (::GetLastError() != ERROR_FILE_EXISTS || !isSplit)
{
- RINOK(SendMessageError_with_LastError(kCantOpenOutFile, fullProcessedPath));
+ RINOK(SendMessageError_with_LastError(kCantOpenOutFile, fullProcessedPath))
return S_OK;
}
}
@@ -1427,7 +1444,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
bool is_SymLink_in_Data = false;
- if (_curSizeDefined && _curSize > 0 && _curSize < (1 << 12))
+ if (_curSize_Defined && _curSize > 0 && _curSize < (1 << 12))
{
if (_fi.IsLinuxSymLink())
{
@@ -1451,18 +1468,18 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
}
else // not reprase
{
- if (_ntOptions.PreAllocateOutFile && !_isSplit && _curSizeDefined && _curSize > (1 << 12))
+ if (_ntOptions.PreAllocateOutFile && !_isSplit && _curSize_Defined && _curSize > (1 << 12))
{
// UInt64 ticks = GetCpuTicks();
_fileLength_that_WasSet = _curSize;
bool res = _outFileStreamSpec->File.SetLength(_curSize);
- _fileLengthWasSet = res;
+ _fileLength_WasSet = res;
// ticks = GetCpuTicks() - ticks;
// printf("\nticks = %10d\n", (unsigned)ticks);
if (!res)
{
- RINOK(SendMessageError_with_LastError(kCantSetFileLen, fullProcessedPath));
+ RINOK(SendMessageError_with_LastError(kCantSetFileLen, fullProcessedPath))
}
/*
@@ -1484,7 +1501,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
res = _outFileStreamSpec->SeekToBegin_bool();
if (!res)
{
- RINOK(SendMessageError_with_LastError("Cannot seek to begin of file", fullProcessedPath));
+ RINOK(SendMessageError_with_LastError("Cannot seek to begin of file", fullProcessedPath))
}
} // PreAllocateOutFile
@@ -1501,7 +1518,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
if (_isSplit)
{
- RINOK(_outFileStreamSpec->Seek((Int64)_position, STREAM_SEEK_SET, NULL));
+ RINOK(outFileStream_Loc->Seek((Int64)_position, STREAM_SEEK_SET, NULL))
}
outStreamLoc = outFileStream_Loc;
} // if not reprase
@@ -1516,7 +1533,7 @@ HRESULT CArchiveExtractCallback::GetExtractStream(CMyComPtr<ISequentialOutStream
HRESULT CArchiveExtractCallback::GetItem(UInt32 index)
{
- #ifndef _SFX
+ #ifndef Z7_SFX
_item._use_baseParentFolder_mode = _use_baseParentFolder_mode;
if (_use_baseParentFolder_mode)
{
@@ -1525,7 +1542,7 @@ HRESULT CArchiveExtractCallback::GetItem(UInt32 index)
_pathMode == NExtract::NPathMode::kAbsPaths)
_item._baseParentFolder = -1;
}
- #endif // _SFX
+ #endif // Z7_SFX
#ifdef SUPPORT_ALT_STREAMS
_item.WriteToAltStreamIfColon = _ntOptions.WriteToAltStreamIfColon;
@@ -1535,13 +1552,13 @@ HRESULT CArchiveExtractCallback::GetItem(UInt32 index)
}
-STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode)
+Z7_COM7F_IMF(CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode))
{
COM_TRY_BEGIN
*outStream = NULL;
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_hashStream)
_hashStreamSpec->ReleaseStream();
_hashStreamWasUsed = false;
@@ -1555,8 +1572,8 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
_isSplit = false;
_curSize = 0;
- _curSizeDefined = false;
- _fileLengthWasSet = false;
+ _curSize_Defined = false;
+ _fileLength_WasSet = false;
_fileLength_that_WasSet = 0;
_index = index;
@@ -1574,7 +1591,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
_itemFailure = false;
#ifdef SUPPORT_LINKS
- // _CopyFile_Path.Empty();
+ // _copyFile_Path.Empty();
_link.Clear();
#endif
@@ -1590,16 +1607,16 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
else
_extractMode = true;
break;
- };
+ }
IInArchive *archive = _arc->Archive;
- RINOK(GetItem(index));
+ RINOK(GetItem(index))
{
NCOM::CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidPosition, &prop));
+ RINOK(archive->GetProperty(index, kpidPosition, &prop))
if (prop.vt != VT_EMPTY)
{
if (prop.vt != VT_UI8)
@@ -1610,13 +1627,13 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
}
#ifdef SUPPORT_LINKS
- RINOK(ReadLink());
+ RINOK(ReadLink())
#endif // SUPPORT_LINKS
- RINOK(Archive_GetItemBoolProp(archive, index, kpidEncrypted, _encrypted));
+ RINOK(Archive_GetItemBoolProp(archive, index, kpidEncrypted, _encrypted))
- RINOK(GetUnpackSize());
+ RINOK(GetUnpackSize())
#ifdef SUPPORT_ALT_STREAMS
if (!_ntOptions.AltStreams.Val && _item.IsAltStream)
@@ -1632,7 +1649,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
return S_OK;
}
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_use_baseParentFolder_mode)
{
if (!pathParts.IsEmpty())
@@ -1651,7 +1668,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
}
}
else
- #endif // _SFX
+ #endif // Z7_SFX
{
if (pathParts.IsEmpty())
{
@@ -1734,12 +1751,8 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
numRemovePathParts = pathParts.Size() - 1;
break;
}
- /*
- case NExtract::NPathMode::kFullPaths:
case NExtract::NPathMode::kAbsPaths:
- break;
- */
- default:
+ // default:
break;
}
@@ -1747,7 +1760,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
}
- #ifndef _SFX
+ #ifndef Z7_SFX
if (ExtractToStreamCallback)
{
@@ -1772,7 +1785,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
return ExtractToStreamCallback->GetStream7(name, BoolToInt(_item.IsDir), outStream, askExtractMode, GetProp);
}
- #endif // _SFX
+ #endif // Z7_SFX
CMyComPtr<ISequentialOutStream> outStreamLoc;
@@ -1784,13 +1797,13 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
else
{
bool needExit = true;
- RINOK(GetExtractStream(outStreamLoc, needExit));
+ RINOK(GetExtractStream(outStreamLoc, needExit))
if (needExit)
return S_OK;
}
}
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_hashStream)
{
if (askExtractMode == NArchive::NExtract::NAskMode::kExtract ||
@@ -1802,13 +1815,13 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
_hashStreamWasUsed = true;
}
}
- #endif // _SFX
+ #endif // Z7_SFX
if (outStreamLoc)
{
/*
#ifdef SUPPORT_LINKS
- if (!_CopyFile_Path.IsEmpty())
+ if (!_copyFile_Path.IsEmpty())
{
RINOK(PrepareOperation(askExtractMode));
RINOK(MyCopyFile(outStreamLoc));
@@ -1836,11 +1849,11 @@ STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStre
-STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode)
+Z7_COM7F_IMF(CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode))
{
COM_TRY_BEGIN
- #ifndef _SFX
+ #ifndef Z7_SFX
if (ExtractToStreamCallback)
return ExtractToStreamCallback->PrepareOperation7(askExtractMode);
#endif
@@ -1855,10 +1868,10 @@ STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode)
else
_extractMode = true;
break;
- };
+ }
return _extractCallback2->PrepareOperation(_item.Path, BoolToInt(_item.IsDir),
- askExtractMode, _isSplit ? &_position: 0);
+ askExtractMode, _isSplit ? &_position: NULL);
COM_TRY_END
}
@@ -1875,28 +1888,28 @@ HRESULT CArchiveExtractCallback::CloseFile()
HRESULT hres = S_OK;
const UInt64 processedSize = _outFileStreamSpec->ProcessedSize;
- if (_fileLengthWasSet && _fileLength_that_WasSet > processedSize)
+ if (_fileLength_WasSet && _fileLength_that_WasSet > processedSize)
{
- bool res = _outFileStreamSpec->File.SetLength(processedSize);
- _fileLengthWasSet = res;
+ const bool res = _outFileStreamSpec->File.SetLength(processedSize);
+ _fileLength_WasSet = res;
if (!res)
{
- HRESULT hres2 = SendMessageError_with_LastError(kCantSetFileLen, us2fs(_item.Path));
+ const HRESULT hres2 = SendMessageError_with_LastError(kCantSetFileLen, us2fs(_item.Path));
if (hres == S_OK)
hres = hres2;
}
}
_curSize = processedSize;
- _curSizeDefined = true;
+ _curSize_Defined = true;
- #if defined(_WIN32) && !defined(UNDER_CE) && !defined(_SFX)
+ #if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
if (ZoneBuf.Size() != 0
&& !_item.IsAltStream)
{
// if (NFind::DoesFileExist_Raw(tempFilePath))
if (ZoneMode != NExtract::NZoneIdMode::kOffice ||
- FindExt2(kOfficeExtensions, _diskFilePath))
+ FindExt2(kOfficeExtensions, fs2us(_diskFilePath)))
{
// we must write zone file before setting of timestamps
const FString path = _diskFilePath + k_ZoneId_StreamName;
@@ -1920,7 +1933,7 @@ HRESULT CArchiveExtractCallback::CloseFile()
t.MTime_Defined ? &t.MTime : NULL);
// #endif
- RINOK(_outFileStreamSpec->Close());
+ RINOK(_outFileStreamSpec->Close())
_outFileStream.Release();
return hres;
}
@@ -1964,7 +1977,7 @@ HRESULT CArchiveExtractCallback::SetFromLinkPath(
{
if (!NName::GetFullPath(_dirPathPrefix_Full, us2fs(relatPath), existPath))
{
- RINOK(SendMessageError("Incorrect path", us2fs(relatPath)));
+ RINOK(SendMessageError("Incorrect path", us2fs(relatPath)))
}
}
else
@@ -1982,8 +1995,8 @@ HRESULT CArchiveExtractCallback::SetFromLinkPath(
{
if (!MyCreateHardLink(fullProcessedPath, existPath))
{
- HRESULT errorCode = GetLastError_noZero_HRESULT();
- RINOK(SendMessageError2(errorCode, kCantCreateHardLink, fullProcessedPath, existPath));
+ const HRESULT errorCode = GetLastError_noZero_HRESULT();
+ RINOK(SendMessageError2(errorCode, kCantCreateHardLink, fullProcessedPath, existPath))
}
linkWasSet = true;
return S_OK;
@@ -1998,8 +2011,8 @@ HRESULT CArchiveExtractCallback::SetFromLinkPath(
}
else
{
- if (_curSizeDefined && _curSize == fi.Size)
- _CopyFile_Path = existPath;
+ if (_curSize_Defined && _curSize == fi.Size)
+ _copyFile_Path = existPath;
else
{
RINOK(SendMessageError2("File size collision for file copying", existPath, fullProcessedPath));
@@ -2060,12 +2073,12 @@ HRESULT CArchiveExtractCallback::SetFromLinkPath(
CReparseAttr attr;
if (!attr.Parse(data, data.Size()))
{
- RINOK(SendMessageError("Internal error for symbolic link file", us2fs(_item.Path)));
+ RINOK(SendMessageError("Internal error for symbolic link file", us2fs(_item.Path)))
return S_OK;
}
if (!NFile::NIO::SetReparseData(fullProcessedPath, _item.IsDir, data, (DWORD)data.Size()))
{
- RINOK(SendMessageError_with_LastError(kCantCreateSymLink, fullProcessedPath));
+ RINOK(SendMessageError_with_LastError(kCantCreateSymLink, fullProcessedPath))
return S_OK;
}
linkWasSet = true;
@@ -2077,7 +2090,7 @@ HRESULT CArchiveExtractCallback::SetFromLinkPath(
if (!NFile::NIO::SetSymLink(fullProcessedPath, existPath))
{
- RINOK(SendMessageError_with_LastError(kCantCreateSymLink, fullProcessedPath));
+ RINOK(SendMessageError_with_LastError(kCantCreateSymLink, fullProcessedPath))
return S_OK;
}
linkWasSet = true;
@@ -2110,7 +2123,7 @@ bool CLinkInfo::Parse(const Byte *data, size_t dataSize, bool isLinuxData)
// if windows link was created, then we also must use linux separator
if (u.IsEmpty())
return false;
- wchar_t c = u[0];
+ const wchar_t c = u[0];
isRelative = !IS_PATH_SEPAR(c);
return true;
}
@@ -2157,7 +2170,7 @@ HRESULT CArchiveExtractCallback::CloseReparseAndFile()
{
repraseMode = true;
reparseSize = _bufPtrSeqOutStream_Spec->GetPos();
- if (_curSizeDefined && reparseSize == _outMemBuf.Size())
+ if (_curSize_Defined && reparseSize == _outMemBuf.Size())
{
/*
CReparseAttr reparse;
@@ -2181,7 +2194,7 @@ HRESULT CArchiveExtractCallback::CloseReparseAndFile()
}
if (!needSetReparse && _outFileStream)
{
- HRESULT res2 = WriteStream(_outFileStream, _outMemBuf, reparseSize);
+ const HRESULT res2 = WriteStream(_outFileStream, _outMemBuf, reparseSize);
if (res == S_OK)
res = res2;
}
@@ -2191,18 +2204,18 @@ HRESULT CArchiveExtractCallback::CloseReparseAndFile()
#endif // SUPPORT_LINKS
- HRESULT res2 = CloseFile();
+ const HRESULT res2 = CloseFile();
if (res == S_OK)
res = res2;
- RINOK(res);
+ RINOK(res)
#ifdef SUPPORT_LINKS
if (repraseMode)
{
_curSize = reparseSize;
- _curSizeDefined = true;
+ _curSize_Defined = true;
#ifdef SUPPORT_LINKS
if (needSetReparse)
@@ -2211,19 +2224,19 @@ HRESULT CArchiveExtractCallback::CloseReparseAndFile()
// in Windows : we can create symbolic link even without file deleting
if (!DeleteFileAlways(_diskFilePath))
{
- RINOK(SendMessageError_with_LastError("can't delete file", _diskFilePath));
+ RINOK(SendMessageError_with_LastError("can't delete file", _diskFilePath))
}
{
/*
// for DEBUG ONLY: we can extract sym links as WSL links
- // to elimanate (non-admin) errors for sym links.
+ // to eliminate (non-admin) errors for sym links.
#ifdef _WIN32
if (!linkInfo.isHardLink && !linkInfo.isJunction)
linkInfo.isWSL = true;
#endif
*/
bool linkWasSet = false;
- RINOK(SetFromLinkPath(_diskFilePath, linkInfo, linkWasSet));
+ RINOK(SetFromLinkPath(_diskFilePath, linkInfo, linkWasSet))
if (linkWasSet)
_isSymLinkCreated = linkInfo.IsSymLink();
else
@@ -2282,13 +2295,13 @@ void CArchiveExtractCallback::SetAttrib()
}
-STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 opRes)
+Z7_COM7F_IMF(CArchiveExtractCallback::SetOperationResult(Int32 opRes))
{
COM_TRY_BEGIN
// printf("\nCArchiveExtractCallback::SetOperationResult: %d %s\n", opRes, GetAnsiString(_diskFilePath));
- #ifndef _SFX
+ #ifndef Z7_SFX
if (ExtractToStreamCallback)
{
GetUnpackSize();
@@ -2296,7 +2309,7 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 opRes)
}
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_hashStreamWasUsed)
{
@@ -2308,16 +2321,16 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 opRes)
#endif
, _item.Path);
_curSize = _hashStreamSpec->GetSize();
- _curSizeDefined = true;
+ _curSize_Defined = true;
_hashStreamSpec->ReleaseStream();
_hashStreamWasUsed = false;
}
- #endif // _SFX
+ #endif // Z7_SFX
- RINOK(CloseReparseAndFile());
+ RINOK(CloseReparseAndFile())
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
if (!_stdOutMode && _extractMode && _ntOptions.NtSecurity.Val && _arc->GetRawProps)
{
const void *data;
@@ -2337,12 +2350,12 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 opRes)
}
}
}
- #endif // _USE_SECURITY_CODE
+ #endif // Z7_USE_SECURITY_CODE
- if (!_curSizeDefined)
+ if (!_curSize_Defined)
GetUnpackSize();
- if (_curSizeDefined)
+ if (_curSize_Defined)
{
#ifdef SUPPORT_ALT_STREAMS
if (_item.IsAltStream)
@@ -2364,7 +2377,7 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 opRes)
if (_needSetAttrib)
SetAttrib();
- RINOK(_extractCallback2->SetOperationResult(opRes, BoolToInt(_encrypted)));
+ RINOK(_extractCallback2->SetOperationResult(opRes, BoolToInt(_encrypted)))
return S_OK;
@@ -2373,7 +2386,7 @@ STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 opRes)
-STDMETHODIMP CArchiveExtractCallback::ReportExtractResult(UInt32 indexType, UInt32 index, Int32 opRes)
+Z7_COM7F_IMF(CArchiveExtractCallback::ReportExtractResult(UInt32 indexType, UInt32 index, Int32 opRes))
{
if (_folderArchiveExtractCallback2)
{
@@ -2383,9 +2396,9 @@ STDMETHODIMP CArchiveExtractCallback::ReportExtractResult(UInt32 indexType, UInt
if (indexType == NArchive::NEventIndexType::kInArcIndex && index != (UInt32)(Int32)-1)
{
CReadArcItem item;
- RINOK(_arc->GetItem(index, item));
+ RINOK(_arc->GetItem(index, item))
s = item.Path;
- RINOK(Archive_GetItemBoolProp(_arc->Archive, index, kpidEncrypted, isEncrypted));
+ RINOK(Archive_GetItemBoolProp(_arc->Archive, index, kpidEncrypted, isEncrypted))
}
else
{
@@ -2401,13 +2414,13 @@ STDMETHODIMP CArchiveExtractCallback::ReportExtractResult(UInt32 indexType, UInt
}
-STDMETHODIMP CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password)
+Z7_COM7F_IMF(CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password))
{
COM_TRY_BEGIN
if (!_cryptoGetTextPassword)
{
RINOK(_extractCallback2.QueryInterface(IID_ICryptoGetTextPassword,
- &_cryptoGetTextPassword));
+ &_cryptoGetTextPassword))
}
return _cryptoGetTextPassword->CryptoGetTextPassword(password);
COM_TRY_END
@@ -2435,13 +2448,13 @@ FString CArchiveExtractCallback::Hash_GetFullFilePath()
}
-STDMETHODIMP CArchiveExtractCallback::GetDiskProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CArchiveExtractCallback::GetDiskProperty(UInt32 index, PROPID propID, PROPVARIANT *value))
{
COM_TRY_BEGIN
NCOM::CPropVariant prop;
if (propID == kpidSize)
{
- RINOK(GetItem(index));
+ RINOK(GetItem(index))
const FString fullProcessedPath = Hash_GetFullFilePath();
NFile::NFind::CFileInfo fi;
if (fi.Find_FollowLink(fullProcessedPath))
@@ -2454,7 +2467,7 @@ STDMETHODIMP CArchiveExtractCallback::GetDiskProperty(UInt32 index, PROPID propI
}
-STDMETHODIMP CArchiveExtractCallback::GetStream2(UInt32 index, ISequentialInStream **inStream, UInt32 mode)
+Z7_COM7F_IMF(CArchiveExtractCallback::GetStream2(UInt32 index, ISequentialInStream **inStream, UInt32 mode))
{
COM_TRY_BEGIN
*inStream = NULL;
@@ -2462,7 +2475,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream2(UInt32 index, ISequentialInStre
if (mode != NUpdateNotifyOp::kHashRead)
return E_FAIL;
- RINOK(GetItem(index));
+ RINOK(GetItem(index))
const FString fullProcessedPath = Hash_GetFullFilePath();
CInFileStream *inStreamSpec = new CInFileStream;
@@ -2470,7 +2483,7 @@ STDMETHODIMP CArchiveExtractCallback::GetStream2(UInt32 index, ISequentialInStre
inStreamSpec->Set_PreserveATime(_ntOptions.PreserveATime);
if (!inStreamSpec->OpenShared(fullProcessedPath, _ntOptions.OpenShareForWrite))
{
- RINOK(SendMessageError_with_LastError(kCantOpenInFile, fullProcessedPath));
+ RINOK(SendMessageError_with_LastError(kCantOpenInFile, fullProcessedPath))
return S_OK;
}
*inStream = inStreamRef.Detach();
@@ -2479,8 +2492,8 @@ STDMETHODIMP CArchiveExtractCallback::GetStream2(UInt32 index, ISequentialInStre
}
-STDMETHODIMP CArchiveExtractCallback::ReportOperation(
- UInt32 /* indexType */, UInt32 /* index */, UInt32 /* op */)
+Z7_COM7F_IMF(CArchiveExtractCallback::ReportOperation(
+ UInt32 /* indexType */, UInt32 /* index */, UInt32 /* op */))
{
// COM_TRY_BEGIN
return S_OK;
@@ -2571,7 +2584,7 @@ HRESULT CArchiveExtractCallback::SetDirsTimes()
HRESULT CArchiveExtractCallback::CloseArc()
{
HRESULT res = CloseReparseAndFile();
- HRESULT res2 = SetDirsTimes();
+ const HRESULT res2 = SetDirsTimes();
if (res == S_OK)
res = res2;
_arc = NULL;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h
index fe70bc92dff..5ed20f3f0a8 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h
@@ -1,7 +1,7 @@
// ArchiveExtractCallback.h
-#ifndef __ARCHIVE_EXTRACT_CALLBACK_H
-#define __ARCHIVE_EXTRACT_CALLBACK_H
+#ifndef ZIP7_INC_ARCHIVE_EXTRACT_CALLBACK_H
+#define ZIP7_INC_ARCHIVE_EXTRACT_CALLBACK_H
#include "../../../Common/MyCom.h"
#include "../../../Common/MyLinux.h"
@@ -21,20 +21,18 @@
#include "HashCalc.h"
-#ifndef _SFX
+#ifndef Z7_SFX
-class COutStreamWithHash:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_NOQIB_1(
+ COutStreamWithHash
+ , ISequentialOutStream
+)
CMyComPtr<ISequentialOutStream> _stream;
UInt64 _size;
bool _calculate;
public:
IHashCalc *_hash;
- MY_UNKNOWN_IMP
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
void SetStream(ISequentialOutStream *stream) { _stream = stream; }
void ReleaseStream() { _stream.Release(); }
void Init(bool calculate = true)
@@ -89,24 +87,21 @@ struct CExtractNtOptions
}
};
-#ifndef _SFX
+#ifndef Z7_SFX
-class CGetProp:
- public IGetProp,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CGetProp
+ , IGetProp
+)
public:
- const CArc *Arc;
UInt32 IndexInArc;
+ const CArc *Arc;
// UString Name; // relative path
-
- MY_UNKNOWN_IMP1(IGetProp)
- INTERFACE_IGetProp(;)
};
#endif
-#ifndef _SFX
+#ifndef Z7_SFX
#ifndef UNDER_CE
#define SUPPORT_LINKS
@@ -249,32 +244,75 @@ struct COwnerInfo
#endif
-class CArchiveExtractCallback:
+class CArchiveExtractCallback Z7_final:
public IArchiveExtractCallback,
- public IArchiveExtractCallbackMessage,
+ public IArchiveExtractCallbackMessage2,
public ICryptoGetTextPassword,
public ICompressProgressInfo,
public IArchiveUpdateCallbackFile,
public IArchiveGetDiskProperty,
public CMyUnknownImp
{
+ Z7_COM_UNKNOWN_IMP_5(
+ /* IArchiveExtractCallback, */
+ IArchiveExtractCallbackMessage2,
+ ICryptoGetTextPassword,
+ ICompressProgressInfo,
+ IArchiveUpdateCallbackFile,
+ IArchiveGetDiskProperty)
+
+ Z7_IFACE_COM7_IMP(IProgress)
+ Z7_IFACE_COM7_IMP(IArchiveExtractCallback)
+ Z7_IFACE_COM7_IMP(IArchiveExtractCallbackMessage2)
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
+ Z7_IFACE_COM7_IMP(ICompressProgressInfo)
+ Z7_IFACE_COM7_IMP(IArchiveUpdateCallbackFile)
+ Z7_IFACE_COM7_IMP(IArchiveGetDiskProperty)
+
const CArc *_arc;
CExtractNtOptions _ntOptions;
+ bool _isSplit;
+
+ bool _extractMode;
+
+ bool Write_CTime;
+ bool Write_ATime;
+ bool Write_MTime;
+ bool _keepAndReplaceEmptyDirPrefixes; // replace them to "_";
+
+ bool _encrypted;
+
+ // bool _is_SymLink_in_Data;
+ bool _is_SymLink_in_Data_Linux; // false = WIN32, true = LINUX
+
+ bool _needSetAttrib;
+ bool _isSymLinkCreated;
+ bool _itemFailure;
+
+ bool _curSize_Defined;
+ bool _fileLength_WasSet;
+
+ bool _removePartsForAltStreams;
+
+ bool _stdOutMode;
+ bool _testMode;
+ bool _multiArchives;
+
+ NExtract::NPathMode::EEnum _pathMode;
+ NExtract::NOverwriteMode::EEnum _overwriteMode;
+
const NWildcard::CCensorNode *_wildcardCensor; // we need wildcard for single pass mode (stdin)
CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2;
- CMyComPtr<ICompressProgressInfo> _compressProgress;
- CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
- CMyComPtr<IArchiveExtractCallbackMessage> _callbackMessage;
+ // CMyComPtr<ICompressProgressInfo> _compressProgress;
+ // CMyComPtr<IArchiveExtractCallbackMessage2> _callbackMessage;
CMyComPtr<IFolderArchiveExtractCallback2> _folderArchiveExtractCallback2;
+ CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
FString _dirPathPrefix;
FString _dirPathPrefix_Full;
- NExtract::NPathMode::EEnum _pathMode;
- NExtract::NOverwriteMode::EEnum _overwriteMode;
- bool _keepAndReplaceEmptyDirPrefixes; // replace them to "_";
- #ifndef _SFX
+ #ifndef Z7_SFX
CMyComPtr<IFolderExtractToStreamCallback> ExtractToStreamCallback;
CGetProp *GetProp_Spec;
@@ -285,15 +323,6 @@ class CArchiveExtractCallback:
CReadArcItem _item;
FString _diskFilePath;
UInt64 _position;
- bool _isSplit;
-
- bool _extractMode;
-
- bool Write_CTime;
- bool Write_ATime;
- bool Write_MTime;
-
- bool _encrypted;
struct CProcessedFileInfo
{
@@ -339,17 +368,8 @@ class CArchiveExtractCallback:
}
} _fi;
- // bool _is_SymLink_in_Data;
- bool _is_SymLink_in_Data_Linux; // false = WIN32, true = LINUX
-
- bool _needSetAttrib;
- bool _isSymLinkCreated;
- bool _itemFailure;
-
UInt32 _index;
UInt64 _curSize;
- bool _curSizeDefined;
- bool _fileLengthWasSet;
UInt64 _fileLength_that_WasSet;
COutFileStream *_outFileStreamSpec;
@@ -360,25 +380,17 @@ class CArchiveExtractCallback:
CMyComPtr<ISequentialOutStream> _bufPtrSeqOutStream;
- #ifndef _SFX
+ #ifndef Z7_SFX
COutStreamWithHash *_hashStreamSpec;
CMyComPtr<ISequentialOutStream> _hashStream;
bool _hashStreamWasUsed;
- #endif
-
- bool _removePartsForAltStreams;
- UStringVector _removePathParts;
-
- #ifndef _SFX
bool _use_baseParentFolder_mode;
UInt32 _baseParentFolder;
- #endif
+ #endif
- bool _stdOutMode;
- bool _testMode;
- bool _multiArchives;
+ UStringVector _removePathParts;
CMyComPtr<ICompressProgressInfo> _localProgress;
UInt64 _packTotal;
@@ -392,7 +404,7 @@ class CArchiveExtractCallback:
// CObjectVector<NWindows::NFile::NDir::CDelayedSymLink> _delayedSymLinks;
#endif
- #if defined(_WIN32) && !defined(UNDER_CE) && !defined(_SFX)
+ #if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
bool _saclEnabled;
#endif
@@ -425,23 +437,6 @@ public:
FString DirPathPrefix_for_HashFiles;
- MY_UNKNOWN_IMP5(
- IArchiveExtractCallbackMessage,
- ICryptoGetTextPassword,
- ICompressProgressInfo,
- IArchiveUpdateCallbackFile,
- IArchiveGetDiskProperty
- )
-
- INTERFACE_IArchiveExtractCallback(;)
- INTERFACE_IArchiveExtractCallbackMessage(;)
- INTERFACE_IArchiveUpdateCallbackFile(;)
- INTERFACE_IArchiveGetDiskProperty(;)
-
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
-
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
-
CArchiveExtractCallback();
void InitForMulti(bool multiArchives,
@@ -462,7 +457,7 @@ public:
NumFolders = NumFiles = NumAltStreams = UnpackSize = AltStreams_UnpackSize = 0;
}
- #ifndef _SFX
+ #ifndef Z7_SFX
void SetHashMethods(IHashCalc *hash)
{
@@ -494,7 +489,7 @@ private:
CHardLinks _hardLinks;
CLinkInfo _link;
- // FString _CopyFile_Path;
+ // FString _copyFile_Path;
// HRESULT MyCopyFile(ISequentialOutStream *outStream);
HRESULT Link(const FString &fullProcessedPath);
HRESULT ReadLink();
@@ -512,7 +507,7 @@ public:
// call it after Init()
- #ifndef _SFX
+ #ifndef Z7_SFX
void SetBaseParentFolderIndex(UInt32 indexInArc)
{
_baseParentFolder = indexInArc;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.cpp
index 1baf3e1e300..1c0c3a821b1 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.cpp
@@ -2,154 +2,175 @@
#include "StdAfx.h"
+#include "../../../../C/Sort.h"
+
#include "../../../Common/Wildcard.h"
+#include "../../../Common/StringToInt.h"
#include "../../../Windows/FileDir.h"
#include "../../../Windows/FileName.h"
-#include "ExtractingFilePath.h"
#include "ArchiveName.h"
+#include "ExtractingFilePath.h"
using namespace NWindows;
using namespace NFile;
-static UString CreateArchiveName(const NFind::CFileInfo &fi, bool keepName)
+
+static const char *g_ArcExts =
+ "7z"
+ "\0" "zip"
+ "\0" "tar"
+ "\0" "wim"
+ "\0";
+
+static const char *g_HashExts =
+ "sha256"
+ "\0";
+
+
+UString CreateArchiveName(
+ const UStringVector &paths,
+ bool isHash,
+ const NFind::CFileInfo *fi,
+ UString &baseName)
{
- FString resultName = fi.Name;
- if (!fi.IsDir() && !keepName)
+ bool keepName = isHash;
+ /*
+ if (paths.Size() == 1)
{
- int dotPos = resultName.ReverseFind_Dot();
- if (dotPos > 0)
- {
- FString archiveName2 = resultName.Left((unsigned)dotPos);
- if (archiveName2.ReverseFind_Dot() < 0)
- resultName = archiveName2;
- }
+ const UString &name = paths[0];
+ if (name.Len() > 4)
+ if (CompareFileNames(name.RightPtr(4), L".tar") == 0)
+ keepName = true;
}
- return Get_Correct_FsFile_Name(fs2us(resultName));
-}
+ */
-static FString CreateArchiveName2(const FString &path, bool fromPrev, bool keepName)
-{
- FString resultName ("Archive");
- if (fromPrev)
+ UString name ("Archive");
+ NFind::CFileInfo fi3;
+ if (paths.Size() > 1)
+ fi = NULL;
+ if (!fi && paths.Size() != 0)
{
- FString dirPrefix;
- if (NDir::GetOnlyDirPrefix(path, dirPrefix))
+ const UString &path = paths.Front();
+ if (paths.Size() == 1)
{
- if (!dirPrefix.IsEmpty() && IsPathSepar(dirPrefix.Back()))
- {
- #if defined(_WIN32) && !defined(UNDER_CE)
- if (NName::IsDriveRootPath_SuperAllowed(dirPrefix))
- resultName = dirPrefix[dirPrefix.Len() - 3]; // only letter
- else
- #endif
- {
- dirPrefix.DeleteBack();
- NFind::CFileInfo fi;
- if (fi.Find(dirPrefix))
- resultName = fi.Name;
- }
- }
+ if (fi3.Find(us2fs(path)))
+ fi = &fi3;
}
- }
- else
- {
- NFind::CFileInfo fi;
- if (fi.Find(path))
+ else
{
- resultName = fi.Name;
- if (!fi.IsDir() && !keepName)
+ // we try to use name of parent folder
+ FString dirPrefix;
+ if (NDir::GetOnlyDirPrefix(us2fs(path), dirPrefix))
{
- int dotPos = resultName.ReverseFind_Dot();
- if (dotPos > 0)
+ if (!dirPrefix.IsEmpty() && IsPathSepar(dirPrefix.Back()))
{
- FString name2 = resultName.Left((unsigned)dotPos);
- if (name2.ReverseFind_Dot() < 0)
- resultName = name2;
+ #if defined(_WIN32) && !defined(UNDER_CE)
+ if (NName::IsDriveRootPath_SuperAllowed(dirPrefix))
+ {
+ if (path != fs2us(dirPrefix))
+ name = dirPrefix[dirPrefix.Len() - 3]; // only letter
+ }
+ else
+ #endif
+ {
+ dirPrefix.DeleteBack();
+ if (!dirPrefix.IsEmpty())
+ {
+ const int slash = dirPrefix.ReverseFind_PathSepar();
+ if (slash >= 0 && slash != (int)dirPrefix.Len() - 1)
+ name = dirPrefix.Ptr(slash + 1);
+ else if (fi3.Find(dirPrefix))
+ name = fs2us(fi3.Name);
+ }
+ }
}
}
}
}
- return resultName;
-}
-
-UString CreateArchiveName(const UStringVector &paths, const NFind::CFileInfo *fi)
-{
- bool keepName = false;
- /*
- if (paths.Size() == 1)
- {
- const UString &name = paths[0];
- if (name.Len() > 4)
- if (CompareFileNames(name.RightPtr(4), L".tar") == 0)
- keepName = true;
- }
- */
-
- UString name;
if (fi)
- name = CreateArchiveName(*fi, keepName);
- else
{
- if (paths.IsEmpty())
- return L"archive";
- bool fromPrev = (paths.Size() > 1);
- name = Get_Correct_FsFile_Name(fs2us(CreateArchiveName2(us2fs(paths.Front()), fromPrev, keepName)));
+ name = fs2us(fi->Name);
+ if (!fi->IsDir() && !keepName)
+ {
+ const int dotPos = name.Find(L'.');
+ if (dotPos > 0 && name.Find(L'.', (unsigned)dotPos + 1) < 0)
+ name.DeleteFrom((unsigned)dotPos);
+ }
}
+ name = Get_Correct_FsFile_Name(name);
- UStringVector names;
-
+ CRecordVector<UInt32> ids;
+ bool simple_IsAllowed = true;
+ // for (int y = 0; y < 10000; y++) // for debug
{
+ // ids.Clear();
+ UString n;
+
FOR_VECTOR (i, paths)
{
- NFind::CFileInfo fi2;
- const NFind::CFileInfo *fp;
- if (fi && paths.Size() == 1)
- fp = fi;
- else
+ const UString &a = paths[i];
+ const int slash = a.ReverseFind_PathSepar();
+ // if (name.Len() >= a.Len() - slash + 1) continue;
+ const wchar_t *s = a.Ptr(slash + 1);
+ if (!IsPath1PrefixedByPath2(s, name))
+ continue;
+ s += name.Len();
+ const char *exts = isHash ? g_HashExts : g_ArcExts;
+
+ for (;;)
{
- if (!fi2.Find(us2fs(paths[i])))
+ const char *ext = exts;
+ const unsigned len = MyStringLen(ext);
+ if (len == 0)
+ break;
+ exts += len + 1;
+ n = s;
+ if (n.Len() <= len)
+ continue;
+ if (!StringsAreEqualNoCase_Ascii(n.RightPtr(len), ext))
+ continue;
+ n.DeleteFrom(n.Len() - len);
+ if (n.Back() != '.')
+ continue;
+ n.DeleteBack();
+ if (n.IsEmpty())
+ {
+ simple_IsAllowed = false;
+ break;
+ }
+ if (n.Len() < 2)
+ continue;
+ if (n[0] != '_')
continue;
- fp = &fi2;
+ const wchar_t *end;
+ const UInt32 v = ConvertStringToUInt32(n.Ptr(1), &end);
+ if (*end != 0)
+ continue;
+ ids.Add(v);
+ break;
}
- names.Add(fs2us(fp->Name));
}
}
- UString postfix;
- UInt32 index = 1;
-
- for (;;)
+ baseName = name;
+ if (!simple_IsAllowed)
{
- // we don't want cases when we include archive to itself.
- // so we find first available name for archive
- const UString name2 = name + postfix;
- const UString name2_zip = name2 + L".zip";
- const UString name2_7z = name2 + L".7z";
- const UString name2_tar = name2 + L".tar";
- const UString name2_wim = name2 + L".wim";
-
- unsigned i = 0;
-
- for (i = 0; i < names.Size(); i++)
+ HeapSort(&ids.Front(), ids.Size());
+ UInt32 v = 2;
+ const unsigned num = ids.Size();
+ for (unsigned i = 0; i < num; i++)
{
- const UString &fname = names[i];
- if ( 0 == CompareFileNames(fname, name2_zip)
- || 0 == CompareFileNames(fname, name2_7z)
- || 0 == CompareFileNames(fname, name2_tar)
- || 0 == CompareFileNames(fname, name2_wim))
+ const UInt32 id = ids[i];
+ if (id > v)
break;
+ if (id == v)
+ v = id + 1;
}
-
- if (i == names.Size())
- break;
- index++;
- postfix = "_";
- postfix.Add_UInt32(index);
+ name += '_';
+ name.Add_UInt32(v);
}
-
- name += postfix;
return name;
}
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.h b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.h
index 0d32645f479..9b6b7fe9d38 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveName.h
@@ -1,10 +1,16 @@
// ArchiveName.h
-#ifndef __ARCHIVE_NAME_H
-#define __ARCHIVE_NAME_H
+#ifndef ZIP7_INC_ARCHIVE_NAME_H
+#define ZIP7_INC_ARCHIVE_NAME_H
#include "../../../Windows/FileFind.h"
-UString CreateArchiveName(const UStringVector &paths, const NWindows::NFile::NFind::CFileInfo *fi = NULL);
+/* (fi != NULL) only if (paths.Size() == 1) */
+
+UString CreateArchiveName(
+ const UStringVector &paths,
+ bool isHash,
+ const NWindows::NFile::NFind::CFileInfo *fi,
+ UString &baseName);
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp
index 64aa9878567..4e5f1f56041 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp
@@ -6,14 +6,54 @@
#include "../../../Windows/FileName.h"
#include "../../../Windows/PropVariant.h"
+#include "../../../Windows/System.h"
-#include "../../Common/FileStreams.h"
+#include "../../Common/StreamUtils.h"
#include "ArchiveOpenCallback.h"
+// #define DEBUG_VOLUMES
+
+#ifdef DEBUG_VOLUMES
+#include <stdio.h>
+#endif
+
+
+#ifdef DEBUG_VOLUMES
+ #define PRF(x) x
+#else
+ #define PRF(x)
+#endif
+
using namespace NWindows;
-STDMETHODIMP COpenCallbackImp::SetTotal(const UInt64 *files, const UInt64 *bytes)
+HRESULT COpenCallbackImp::Init2(const FString &folderPrefix, const FString &fileName)
+{
+ Volumes.Init();
+ FileNames.Clear();
+ FileNames_WasUsed.Clear();
+ FileSizes.Clear();
+ _subArchiveMode = false;
+ // TotalSize = 0;
+ PasswordWasAsked = false;
+ _folderPrefix = folderPrefix;
+ if (!_fileInfo.Find_FollowLink(_folderPrefix + fileName))
+ {
+ // throw 20121118;
+ return GetLastError_noZero_HRESULT();
+ }
+ return S_OK;
+}
+
+Z7_COM7F_IMF(COpenCallbackImp::SetSubArchiveName(const wchar_t *name))
+{
+ _subArchiveMode = true;
+ _subArchiveName = name;
+ // TotalSize = 0;
+ return S_OK;
+}
+
+Z7_COM7F_IMF(COpenCallbackImp::SetTotal(const UInt64 *files, const UInt64 *bytes))
{
COM_TRY_BEGIN
if (ReOpenCallback)
@@ -24,7 +64,7 @@ STDMETHODIMP COpenCallbackImp::SetTotal(const UInt64 *files, const UInt64 *bytes
COM_TRY_END
}
-STDMETHODIMP COpenCallbackImp::SetCompleted(const UInt64 *files, const UInt64 *bytes)
+Z7_COM7F_IMF(COpenCallbackImp::SetCompleted(const UInt64 *files, const UInt64 *bytes))
{
COM_TRY_BEGIN
if (ReOpenCallback)
@@ -36,7 +76,7 @@ STDMETHODIMP COpenCallbackImp::SetCompleted(const UInt64 *files, const UInt64 *b
}
-STDMETHODIMP COpenCallbackImp::GetProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(COpenCallbackImp::GetProperty(PROPID propID, PROPVARIANT *value))
{
COM_TRY_BEGIN
NCOM::CPropVariant prop;
@@ -63,24 +103,180 @@ STDMETHODIMP COpenCallbackImp::GetProperty(PROPID propID, PROPVARIANT *value)
COM_TRY_END
}
-struct CInFileStreamVol: public CInFileStream
-{
- unsigned FileNameIndex;
+
+// ---------- CInFileStreamVol ----------
+
+Z7_CLASS_IMP_COM_2(
+ CInFileStreamVol
+ , IInStream
+ , IStreamGetSize
+)
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+public:
+ unsigned FileIndex;
COpenCallbackImp *OpenCallbackImp;
CMyComPtr<IArchiveOpenCallback> OpenCallbackRef;
-
+
+ HRESULT EnsureOpen()
+ {
+ return OpenCallbackImp->Volumes.EnsureOpen(FileIndex);
+ }
+
~CInFileStreamVol()
{
if (OpenCallbackRef)
- OpenCallbackImp->FileNames_WasUsed[FileNameIndex] = false;
+ OpenCallbackImp->AtCloseFile(FileIndex);
}
};
+void CMultiStreams::InsertToList(unsigned index)
+{
+ {
+ CSubStream &s = Streams[index];
+ s.Next = Head;
+ s.Prev = -1;
+ }
+ if (Head != -1)
+ Streams[(unsigned)Head].Prev = (int)index;
+ else
+ {
+ // if (Tail != -1) throw 1;
+ Tail = (int)index;
+ }
+ Head = (int)index;
+ NumListItems++;
+}
+
+// s must bee in List
+void CMultiStreams::RemoveFromList(CSubStream &s)
+{
+ if (s.Next != -1) Streams[(unsigned)s.Next].Prev = s.Prev; else Tail = s.Prev;
+ if (s.Prev != -1) Streams[(unsigned)s.Prev].Next = s.Next; else Head = s.Next;
+ s.Next = -1; // optional
+ s.Prev = -1; // optional
+ NumListItems--;
+}
+
+void CMultiStreams::CloseFile(unsigned index)
+{
+ CSubStream &s = Streams[index];
+ if (s.Stream)
+ {
+ s.Stream.Release();
+ RemoveFromList(s);
+ // s.InFile->Close();
+ // s.IsOpen = false;
+ #ifdef DEBUG_VOLUMES
+ static int numClosing = 0;
+ numClosing++;
+ printf("\nCloseFile %u, total_closes = %u, num_open_files = %u\n", index, numClosing, NumListItems);
+ #endif
+ }
+}
+
+void CMultiStreams::Init()
+{
+ Head = -1;
+ Tail = -1;
+ NumListItems = 0;
+ Streams.Clear();
+}
+
+CMultiStreams::CMultiStreams():
+ Head(-1),
+ Tail(-1),
+ NumListItems(0)
+{
+ NumOpenFiles_AllowedMax = NSystem::Get_File_OPEN_MAX_Reduced_for_3_tasks();
+ PRF(printf("\nNumOpenFiles_Limit = %u\n", NumOpenFiles_AllowedMax));
+}
+
+
+HRESULT CMultiStreams::PrepareToOpenNew()
+{
+ if (NumListItems < NumOpenFiles_AllowedMax)
+ return S_OK;
+ if (Tail == -1)
+ return E_FAIL;
+ CMultiStreams::CSubStream &tailStream = Streams[(unsigned)Tail];
+ RINOK(InStream_GetPos(tailStream.Stream, tailStream.LocalPos))
+ CloseFile((unsigned)Tail);
+ return S_OK;
+}
+
+
+HRESULT CMultiStreams::EnsureOpen(unsigned index)
+{
+ CMultiStreams::CSubStream &s = Streams[index];
+ if (s.Stream)
+ {
+ if ((int)index != Head)
+ {
+ RemoveFromList(s);
+ InsertToList(index);
+ }
+ }
+ else
+ {
+ RINOK(PrepareToOpenNew())
+ {
+ CInFileStream *inFile = new CInFileStream;
+ CMyComPtr<IInStream> inStreamTemp = inFile;
+ if (!inFile->Open(s.Path))
+ return GetLastError_noZero_HRESULT();
+ s.FileSpec = inFile;
+ s.Stream = s.FileSpec;
+ InsertToList(index);
+ }
+ // s.IsOpen = true;
+ if (s.LocalPos != 0)
+ {
+ RINOK(s.Stream->Seek((Int64)s.LocalPos, STREAM_SEEK_SET, &s.LocalPos))
+ }
+ #ifdef DEBUG_VOLUMES
+ static int numOpens = 0;
+ numOpens++;
+ printf("\n-- %u, ReOpen, total_reopens = %u, num_open_files = %u\n", index, numOpens, NumListItems);
+ #endif
+ }
+ return S_OK;
+}
+
+
+Z7_COM7F_IMF(CInFileStreamVol::Read(void *data, UInt32 size, UInt32 *processedSize))
+{
+ if (processedSize)
+ *processedSize = 0;
+ if (size == 0)
+ return S_OK;
+ RINOK(EnsureOpen())
+ CMultiStreams::CSubStream &s = OpenCallbackImp->Volumes.Streams[FileIndex];
+ PRF(printf("\n== %u, Read =%u \n", FileIndex, size));
+ return s.Stream->Read(data, size, processedSize);
+}
+
+Z7_COM7F_IMF(CInFileStreamVol::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
+{
+ // if (seekOrigin >= 3) return STG_E_INVALIDFUNCTION;
+ RINOK(EnsureOpen())
+ CMultiStreams::CSubStream &s = OpenCallbackImp->Volumes.Streams[FileIndex];
+ PRF(printf("\n-- %u, Seek seekOrigin=%u Seek =%u\n", FileIndex, seekOrigin, (unsigned)offset));
+ return s.Stream->Seek(offset, seekOrigin, newPosition);
+}
+
+Z7_COM7F_IMF(CInFileStreamVol::GetSize(UInt64 *size))
+{
+ RINOK(EnsureOpen())
+ CMultiStreams::CSubStream &s = OpenCallbackImp->Volumes.Streams[FileIndex];
+ return s.FileSpec->GetSize(size);
+}
+
+
// from ArchiveExtractCallback.cpp
bool IsSafePath(const UString &path);
-STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStream)
+Z7_COM7F_IMF(COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStream))
{
COM_TRY_BEGIN
*inStream = NULL;
@@ -89,13 +285,13 @@ STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStre
return S_FALSE;
if (Callback)
{
- RINOK(Callback->Open_CheckBreak());
+ RINOK(Callback->Open_CheckBreak())
}
UString name2 = name;
- #ifndef _SFX
+ #ifndef Z7_SFX
#ifdef _WIN32
name2.Replace(L'/', WCHAR_PATH_SEPARATOR);
@@ -112,7 +308,7 @@ STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStre
if (name2.Find(L'*') >= 0)
return S_FALSE;
{
- int startPos = 0;
+ unsigned startPos = 0;
if (name2.IsPrefixedBy_Ascii_NoCase("\\\\?\\"))
startPos = 3;
if (name2.Find(L'?', startPos) >= 0)
@@ -130,16 +326,32 @@ STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStre
return S_FALSE;
if (_fileInfo.IsDir())
return S_FALSE;
- CInFileStreamVol *inFile = new CInFileStreamVol;
- CMyComPtr<IInStream> inStreamTemp = inFile;
- if (!inFile->Open(fullPath))
+
+ CMultiStreams::CSubStream s;
+
{
- return GetLastError_noZero_HRESULT();
+ CInFileStream *inFile = new CInFileStream;
+ CMyComPtr<IInStream> inStreamTemp = inFile;
+ if (!inFile->Open(fullPath))
+ return GetLastError_noZero_HRESULT();
+ RINOK(Volumes.PrepareToOpenNew())
+ s.FileSpec = inFile;
+ s.Stream = s.FileSpec;
+ s.Path = fullPath;
+ // s.Size = _fileInfo.Size;
+ // s.IsOpen = true;
}
+ const unsigned fileIndex = Volumes.Streams.Add(s);
+ Volumes.InsertToList(fileIndex);
+
FileSizes.Add(_fileInfo.Size);
FileNames.Add(name2);
- inFile->FileNameIndex = FileNames_WasUsed.Add(true);
+ FileNames_WasUsed.Add(true);
+
+ CInFileStreamVol *inFile = new CInFileStreamVol;
+ CMyComPtr<IInStream> inStreamTemp = inFile;
+ inFile->FileIndex = fileIndex;
inFile->OpenCallbackImp = this;
inFile->OpenCallbackRef = this;
// TotalSize += _fileInfo.Size;
@@ -148,14 +360,16 @@ STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStre
COM_TRY_END
}
-#ifndef _NO_CRYPTO
-STDMETHODIMP COpenCallbackImp::CryptoGetTextPassword(BSTR *password)
+
+#ifndef Z7_NO_CRYPTO
+Z7_COM7F_IMF(COpenCallbackImp::CryptoGetTextPassword(BSTR *password))
{
COM_TRY_BEGIN
if (ReOpenCallback)
{
- CMyComPtr<ICryptoGetTextPassword> getTextPassword;
- ReOpenCallback.QueryInterface(IID_ICryptoGetTextPassword, &getTextPassword);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ICryptoGetTextPassword,
+ getTextPassword, ReOpenCallback)
if (getTextPassword)
return getTextPassword->CryptoGetTextPassword(password);
}
@@ -166,3 +380,14 @@ STDMETHODIMP COpenCallbackImp::CryptoGetTextPassword(BSTR *password)
COM_TRY_END
}
#endif
+
+// IProgress
+Z7_COM7F_IMF(COpenCallbackImp::SetTotal(const UInt64 /* total */))
+{
+ return S_OK;
+}
+
+Z7_COM7F_IMF(COpenCallbackImp::SetCompleted(const UInt64 * /* completed */))
+{
+ return S_OK;
+}
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h
index 46b267683b3..4e44c9dde21 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h
@@ -1,112 +1,176 @@
// ArchiveOpenCallback.h
-#ifndef __ARCHIVE_OPEN_CALLBACK_H
-#define __ARCHIVE_OPEN_CALLBACK_H
+#ifndef ZIP7_INC_ARCHIVE_OPEN_CALLBACK_H
+#define ZIP7_INC_ARCHIVE_OPEN_CALLBACK_H
#include "../../../Common/MyCom.h"
#include "../../../Windows/FileFind.h"
-#include "../../../Windows/FileIO.h"
-#ifndef _NO_CRYPTO
+#include "../../Common/FileStreams.h"
+
+#ifndef Z7_NO_CRYPTO
#include "../../IPassword.h"
#endif
#include "../../Archive/IArchive.h"
-#ifdef _NO_CRYPTO
+Z7_PURE_INTERFACES_BEGIN
+
+#ifdef Z7_NO_CRYPTO
-#define INTERFACE_IOpenCallbackUI_Crypto(x)
+#define Z7_IFACEM_IOpenCallbackUI_Crypto(x)
#else
-#define INTERFACE_IOpenCallbackUI_Crypto(x) \
- virtual HRESULT Open_CryptoGetTextPassword(BSTR *password) x; \
- /* virtual HRESULT Open_GetPasswordIfAny(bool &passwordIsDefined, UString &password) x; */ \
- /* virtual bool Open_WasPasswordAsked() x; */ \
- /* virtual void Open_Clear_PasswordWasAsked_Flag() x; */ \
+#define Z7_IFACEM_IOpenCallbackUI_Crypto(x) \
+ virtual HRESULT Open_CryptoGetTextPassword(BSTR *password) x \
+ /* virtual HRESULT Open_GetPasswordIfAny(bool &passwordIsDefined, UString &password) x */ \
+ /* virtual bool Open_WasPasswordAsked() x */ \
+ /* virtual void Open_Clear_PasswordWasAsked_Flag() x */ \
#endif
-#define INTERFACE_IOpenCallbackUI(x) \
- virtual HRESULT Open_CheckBreak() x; \
- virtual HRESULT Open_SetTotal(const UInt64 *files, const UInt64 *bytes) x; \
- virtual HRESULT Open_SetCompleted(const UInt64 *files, const UInt64 *bytes) x; \
- virtual HRESULT Open_Finished() x; \
- INTERFACE_IOpenCallbackUI_Crypto(x)
+#define Z7_IFACEN_IOpenCallbackUI(x) \
+ virtual HRESULT Open_CheckBreak() x \
+ virtual HRESULT Open_SetTotal(const UInt64 *files, const UInt64 *bytes) x \
+ virtual HRESULT Open_SetCompleted(const UInt64 *files, const UInt64 *bytes) x \
+ virtual HRESULT Open_Finished() x \
+ Z7_IFACEM_IOpenCallbackUI_Crypto(x)
+
+Z7_IFACE_DECL_PURE(IOpenCallbackUI)
+
+Z7_PURE_INTERFACES_END
+
-struct IOpenCallbackUI
+class CMultiStreams Z7_final
{
- INTERFACE_IOpenCallbackUI(=0)
+public:
+ struct CSubStream
+ {
+ CMyComPtr<IInStream> Stream;
+ CInFileStream *FileSpec;
+ FString Path;
+ // UInt64 Size;
+ UInt64 LocalPos;
+ int Next; // next older
+ int Prev; // prev newer
+ // bool IsOpen;
+
+ CSubStream():
+ FileSpec(NULL),
+ // Size(0),
+ LocalPos(0),
+ Next(-1),
+ Prev(-1)
+ // IsOpen(false)
+ {}
+ };
+
+ CObjectVector<CSubStream> Streams;
+private:
+ // we must use critical section here, if we want to access from different volumnes simultaneously
+ int Head; // newest
+ int Tail; // oldest
+ unsigned NumListItems;
+ unsigned NumOpenFiles_AllowedMax;
+public:
+
+ CMultiStreams();
+ void Init();
+ HRESULT PrepareToOpenNew();
+ void InsertToList(unsigned index);
+ void RemoveFromList(CSubStream &s);
+ void CloseFile(unsigned index);
+ HRESULT EnsureOpen(unsigned index);
};
-class COpenCallbackImp:
+
+/*
+ We need COpenCallbackImp class for multivolume processing.
+ Also we use it as proxy from COM interfaces (IArchiveOpenCallback) to internal (IOpenCallbackUI) interfaces.
+ If archive is multivolume:
+ COpenCallbackImp object will exist after Open stage.
+ COpenCallbackImp object will be deleted when last reference
+ from each volume object (CInFileStreamVol) will be closed (when archive will be closed).
+*/
+
+class COpenCallbackImp Z7_final:
public IArchiveOpenCallback,
public IArchiveOpenVolumeCallback,
public IArchiveOpenSetSubArchiveName,
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
public ICryptoGetTextPassword,
- #endif
+ #endif
+ public IProgress, // IProgress is used for 7zFM
public CMyUnknownImp
{
+ Z7_COM_QI_BEGIN2(IArchiveOpenCallback)
+ Z7_COM_QI_ENTRY(IArchiveOpenVolumeCallback)
+ Z7_COM_QI_ENTRY(IArchiveOpenSetSubArchiveName)
+ #ifndef Z7_NO_CRYPTO
+ Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
+ #endif
+ // Z7_COM_QI_ENTRY(IProgress) // the code doesn't require it
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(IArchiveOpenCallback)
+ Z7_IFACE_COM7_IMP(IArchiveOpenVolumeCallback)
+ Z7_IFACE_COM7_IMP(IProgress)
public:
- MY_QUERYINTERFACE_BEGIN2(IArchiveOpenVolumeCallback)
- MY_QUERYINTERFACE_ENTRY(IArchiveOpenSetSubArchiveName)
- #ifndef _NO_CRYPTO
- MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- INTERFACE_IArchiveOpenCallback(;)
- INTERFACE_IArchiveOpenVolumeCallback(;)
-
- #ifndef _NO_CRYPTO
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
- #endif
-
- STDMETHOD(SetSubArchiveName(const wchar_t *name))
- {
- _subArchiveMode = true;
- _subArchiveName = name;
- // TotalSize = 0;
- return S_OK;
- }
-
+ Z7_IFACE_COM7_IMP(IArchiveOpenSetSubArchiveName)
private:
- FString _folderPrefix;
- NWindows::NFile::NFind::CFileInfo _fileInfo;
+ #ifndef Z7_NO_CRYPTO
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
+ #endif
+
bool _subArchiveMode;
- UString _subArchiveName;
public:
+ bool PasswordWasAsked;
UStringVector FileNames;
CBoolVector FileNames_WasUsed;
CRecordVector<UInt64> FileSizes;
-
- bool PasswordWasAsked;
+ void AtCloseFile(unsigned fileIndex)
+ {
+ FileNames_WasUsed[fileIndex] = false;
+ Volumes.CloseFile(fileIndex);
+ }
+
+ /* we have two ways to Callback from this object
+ 1) IArchiveOpenCallback * ReOpenCallback - for ReOpen function, when IOpenCallbackUI is not available
+ 2) IOpenCallbackUI *Callback - for usual callback
+ we can't transfer IOpenCallbackUI pointer via internal interface,
+ so we use ReOpenCallback to callback without IOpenCallbackUI.
+ */
+
+ /* we use Callback/ReOpenCallback only at Open stage.
+ So the CMyComPtr reference counter is not required,
+ and we don't want additional reference to unused object,
+ if COpenCallbackImp is not closed
+ */
+ IArchiveOpenCallback *ReOpenCallback;
+ // CMyComPtr<IArchiveOpenCallback> ReOpenCallback;
IOpenCallbackUI *Callback;
- CMyComPtr<IArchiveOpenCallback> ReOpenCallback;
+ // CMyComPtr<IUnknown> Callback_Ref;
+
+private:
+ FString _folderPrefix;
+ UString _subArchiveName;
+ NWindows::NFile::NFind::CFileInfo _fileInfo;
+
+public:
+ CMultiStreams Volumes;
+
// UInt64 TotalSize;
- COpenCallbackImp(): _subArchiveMode(false), Callback(NULL) {}
+ COpenCallbackImp():
+ _subArchiveMode(false),
+ ReOpenCallback(NULL),
+ Callback(NULL) {}
- HRESULT Init2(const FString &folderPrefix, const FString &fileName)
- {
- FileNames.Clear();
- FileNames_WasUsed.Clear();
- FileSizes.Clear();
- _subArchiveMode = false;
- // TotalSize = 0;
- PasswordWasAsked = false;
- _folderPrefix = folderPrefix;
- if (!_fileInfo.Find_FollowLink(_folderPrefix + fileName))
- {
- // throw 20121118;
- return GetLastError_noZero_HRESULT();
- }
- return S_OK;
- }
+ HRESULT Init2(const FString &folderPrefix, const FString &fileName);
bool SetSecondFileInfo(CFSTR newName)
{
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/Bench.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/Bench.cpp
index cc0cfd0c433..5da9783d4e1 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/Bench.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/Bench.cpp
@@ -36,19 +36,20 @@
#include "../../../../C/7zCrc.h"
#include "../../../../C/RotateDefs.h"
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
#include "../../../Windows/Synchronization.h"
#include "../../../Windows/Thread.h"
#endif
-#include "../../../Windows/FileIO.h"
#include "../../../Windows/FileFind.h"
+#include "../../../Windows/FileIO.h"
#include "../../../Windows/SystemInfo.h"
-#include "../../../Common/IntToString.h"
#include "../../../Common/MyBuffer2.h"
+#include "../../../Common/IntToString.h"
#include "../../../Common/StringConvert.h"
#include "../../../Common/StringToInt.h"
+#include "../../../Common/Wildcard.h"
#include "../../Common/MethodProps.h"
#include "../../Common/StreamObjects.h"
@@ -58,7 +59,7 @@
using namespace NWindows;
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static const UInt32 k_LZMA = 0x030101;
#endif
@@ -122,7 +123,7 @@ class CBaseRandomGenerator
public:
CBaseRandomGenerator(UInt32 salt = 0): Salt(salt) { Init(); }
void Init() { A1 = 362436069; A2 = 521288629;}
- MY_FORCE_INLINE
+ Z7_FORCE_INLINE
UInt32 GetRnd()
{
return Salt ^
@@ -134,7 +135,7 @@ public:
};
-MY_NO_INLINE
+Z7_NO_INLINE
static void RandGen(Byte *buf, size_t size)
{
CBaseRandomGenerator RG;
@@ -143,7 +144,7 @@ static void RandGen(Byte *buf, size_t size)
for (i = 0; i < size4; i += 4)
{
const UInt32 v = RG.GetRnd();
- SetUi32(buf + i, v);
+ SetUi32(buf + i, v)
}
UInt32 v = RG.GetRnd();
for (; i < size; i++)
@@ -255,16 +256,14 @@ public:
};
-class CBenchmarkInStream:
- public ISequentialInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_NOQIB_1(
+ CBenchmarkInStream
+ , ISequentialInStream
+)
const Byte *Data;
size_t Pos;
size_t Size;
-
public:
- MY_UNKNOWN_IMP
void Init(const Byte *data, size_t size)
{
Data = data;
@@ -272,10 +271,9 @@ public:
Pos = 0;
}
bool WasFinished() const { return Pos == Size; }
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
};
-STDMETHODIMP CBenchmarkInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CBenchmarkInStream::Read(void *data, UInt32 size, UInt32 *processedSize))
{
const UInt32 kMaxBlockSize = (1 << 20);
if (size > kMaxBlockSize)
@@ -293,11 +291,14 @@ STDMETHODIMP CBenchmarkInStream::Read(void *data, UInt32 size, UInt32 *processed
return S_OK;
}
-class CBenchmarkOutStream:
+
+class CBenchmarkOutStream Z7_final:
public ISequentialOutStream,
- public CMidAlignedBuffer,
- public CMyUnknownImp
+ public CMyUnknownImp,
+ public CMidAlignedBuffer
{
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_IFACE_COM7_IMP(ISequentialOutStream)
// bool _overflow;
public:
size_t Pos;
@@ -328,12 +329,9 @@ public:
size_t GetPos() const { return Pos; }
// void Print() { printf("\n%8d %8d\n", (unsigned)BufferSize, (unsigned)Pos); }
-
- MY_UNKNOWN_IMP
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
-STDMETHODIMP CBenchmarkOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CBenchmarkOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
size_t curSize = Size() - Pos;
if (curSize > size)
@@ -357,27 +355,24 @@ STDMETHODIMP CBenchmarkOutStream::Write(const void *data, UInt32 size, UInt32 *p
}
-class CCrcOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_NOQIB_1(
+ CCrcOutStream
+ , ISequentialOutStream
+)
public:
bool CalcCrc;
UInt32 Crc;
UInt64 Pos;
- MY_UNKNOWN_IMP
-
- CCrcOutStream(): CalcCrc(true) {};
+ CCrcOutStream(): CalcCrc(true) {}
void Init() { Crc = CRC_INIT_VAL; Pos = 0; }
void Calc(const void *data, size_t size)
{
Crc = CrcUpdate(Crc, data, size);
}
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
-STDMETHODIMP CCrcOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CCrcOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (CalcCrc)
Calc(data, size);
@@ -394,7 +389,7 @@ static UInt64 GetTimeCount()
#ifdef USE_POSIX_TIME
#ifdef USE_POSIX_TIME2
timeval v;
- if (gettimeofday(&v, 0) == 0)
+ if (gettimeofday(&v, NULL) == 0)
return (UInt64)(v.tv_sec) * 1000000 + (UInt64)v.tv_usec;
return (UInt64)time(NULL) * 1000000;
#else
@@ -531,9 +526,9 @@ static UInt64 GetUserFreq()
#endif
}
-class CBenchProgressStatus
+class CBenchProgressStatus Z7_final
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NSynchronization::CCriticalSection CS;
#endif
public:
@@ -541,14 +536,14 @@ public:
bool EncodeMode;
void SetResult(HRESULT res)
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NSynchronization::CCriticalSectionLock lock(CS);
#endif
Res = res;
}
HRESULT GetResult()
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NSynchronization::CCriticalSectionLock lock(CS);
#endif
return Res;
@@ -580,22 +575,22 @@ void CBenchInfoCalc::SetFinishTime(CBenchInfo &dest)
dest.UserTime = UserTime.GetUserTime();
}
-class CBenchProgressInfo:
+class CBenchProgressInfo Z7_final:
public ICompressProgressInfo,
public CMyUnknownImp,
public CBenchInfoCalc
{
+ Z7_COM_UNKNOWN_IMP_0
+ Z7_IFACE_COM7_IMP(ICompressProgressInfo)
public:
CBenchProgressStatus *Status;
IBenchCallback *Callback;
CBenchProgressInfo(): Callback(NULL) {}
- MY_UNKNOWN_IMP
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
};
-STDMETHODIMP CBenchProgressInfo::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
+Z7_COM7F_IMF(CBenchProgressInfo::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
{
HRESULT res = Status->GetResult();
if (res != S_OK)
@@ -760,13 +755,20 @@ UInt64 CBenchInfo::GetSpeed(UInt64 numUnits) const
return MyMultDiv64(numUnits, GlobalFreq, GlobalTime);
}
+static UInt64 GetNumCommands_from_Size_and_Complexity(UInt64 size, Int32 complexity)
+{
+ return complexity >= 0 ?
+ size * (UInt32)complexity :
+ size / (UInt32)(-complexity);
+}
+
struct CBenchProps
{
bool LzmaRatingMode;
- UInt32 EncComplex;
- UInt32 DecComplexCompr;
- UInt32 DecComplexUnc;
+ Int32 EncComplex;
+ Int32 DecComplexCompr;
+ Int32 DecComplexUnc;
unsigned KeySize;
@@ -777,21 +779,23 @@ struct CBenchProps
void SetLzmaCompexity();
- UInt64 GeComprCommands(UInt64 unpackSize)
+ UInt64 GetNumCommands_Enc(UInt64 unpackSize) const
{
const UInt32 kMinSize = 100;
if (unpackSize < kMinSize)
unpackSize = kMinSize;
- return unpackSize * EncComplex;
+ return GetNumCommands_from_Size_and_Complexity(unpackSize, EncComplex);
}
- UInt64 GeDecomprCommands(UInt64 packSize, UInt64 unpackSize)
+ UInt64 GetNumCommands_Dec(UInt64 packSize, UInt64 unpackSize) const
{
- return (packSize * DecComplexCompr + unpackSize * DecComplexUnc);
+ return
+ GetNumCommands_from_Size_and_Complexity(packSize, DecComplexCompr) +
+ GetNumCommands_from_Size_and_Complexity(unpackSize, DecComplexUnc);
}
- UInt64 GetCompressRating(UInt64 dictSize, UInt64 elapsedTime, UInt64 freq, UInt64 size);
- UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt64 numIterations);
+ UInt64 GetRating_Enc(UInt64 dictSize, UInt64 elapsedTime, UInt64 freq, UInt64 size) const;
+ UInt64 GetRating_Dec(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt64 numIterations) const;
};
void CBenchProps::SetLzmaCompexity()
@@ -802,11 +806,11 @@ void CBenchProps::SetLzmaCompexity()
LzmaRatingMode = true;
}
-UInt64 CBenchProps::GetCompressRating(UInt64 dictSize, UInt64 elapsedTime, UInt64 freq, UInt64 size)
+UInt64 CBenchProps::GetRating_Enc(UInt64 dictSize, UInt64 elapsedTime, UInt64 freq, UInt64 size) const
{
if (dictSize < (1 << kBenchMinDicLogSize))
dictSize = (1 << kBenchMinDicLogSize);
- UInt64 encComplex = EncComplex;
+ Int32 encComplex = EncComplex;
if (LzmaRatingMode)
{
/*
@@ -822,13 +826,13 @@ UInt64 CBenchProps::GetCompressRating(UInt64 dictSize, UInt64 elapsedTime, UInt6
const UInt32 t = GetLogSize_Sub(dictSize) - (kBenchMinDicLogSize << kSubBits);
encComplex = 870 + ((t * t * 5) >> (2 * kSubBits));
}
- const UInt64 numCommands = (UInt64)size * encComplex;
+ const UInt64 numCommands = GetNumCommands_from_Size_and_Complexity(size, encComplex);
return MyMultDiv64(numCommands, freq, elapsedTime);
}
-UInt64 CBenchProps::GetDecompressRating(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt64 numIterations)
+UInt64 CBenchProps::GetRating_Dec(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt64 numIterations) const
{
- const UInt64 numCommands = (inSize * DecComplexCompr + outSize * DecComplexUnc) * numIterations;
+ const UInt64 numCommands = GetNumCommands_Dec(inSize, outSize) * numIterations;
return MyMultDiv64(numCommands, freq, elapsedTime);
}
@@ -838,18 +842,18 @@ UInt64 CBenchInfo::GetRating_LzmaEnc(UInt64 dictSize) const
{
CBenchProps props;
props.SetLzmaCompexity();
- return props.GetCompressRating(dictSize, GlobalTime, GlobalFreq, UnpackSize * NumIterations);
+ return props.GetRating_Enc(dictSize, GlobalTime, GlobalFreq, UnpackSize * NumIterations);
}
UInt64 CBenchInfo::GetRating_LzmaDec() const
{
CBenchProps props;
props.SetLzmaCompexity();
- return props.GetDecompressRating(GlobalTime, GlobalFreq, UnpackSize, PackSize, NumIterations);
+ return props.GetRating_Dec(GlobalTime, GlobalFreq, UnpackSize, PackSize, NumIterations);
}
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
#define NUM_CPU_LEVELS_MAX 3
@@ -988,15 +992,22 @@ struct CBenchSyncCommon
+enum E_CheckCrcMode
+{
+ k_CheckCrcMode_Never = 0,
+ k_CheckCrcMode_Always = 1,
+ k_CheckCrcMode_FirstPass = 2
+};
+
class CEncoderInfo;
-class CEncoderInfo
+class CEncoderInfo Z7_final
{
- CLASS_NO_COPY(CEncoderInfo)
+ Z7_CLASS_NO_COPY(CEncoderInfo)
public:
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NWindows::CThread thread[2];
NSynchronization::CManualResetEvent ReadyEvent;
UInt32 NumDecoderSubThreads;
@@ -1004,6 +1015,7 @@ public:
UInt32 EncoderIndex;
UInt32 NumEncoderInternalThreads;
CAffinityMode AffinityMode;
+ bool IsGlobalMtMode; // if more than one benchmark encoder threads
#endif
CMyComPtr<ICompressCoder> _encoder;
@@ -1024,14 +1036,17 @@ public:
HRESULT Set_Key_and_IV(ICryptoProperties *cp)
{
- RINOK(cp->SetKey(_key, KeySize));
+ RINOK(cp->SetKey(_key, KeySize))
return cp->SetInitVector(_iv, sizeof(_iv));
}
Byte _psw[16];
- bool CheckCrc_Enc;
- bool CheckCrc_Dec;
+ bool CheckCrc_Enc; /* = 1, if we want to check packed data crcs after each pass
+ used for filter and usual coders */
+ bool UseRealData_Enc; /* = 1, if we want to use only original data for each pass
+ used only for filter */
+ E_CheckCrcMode CheckCrcMode_Dec;
struct CDecoderInfo
{
@@ -1079,13 +1094,15 @@ public:
HRESULT Decode(UInt32 decoderIndex);
CEncoderInfo():
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
Common(NULL),
+ IsGlobalMtMode(true),
#endif
Salt(0),
KeySize(0),
CheckCrc_Enc(true),
- CheckCrc_Dec(true),
+ UseRealData_Enc(true),
+ CheckCrcMode_Dec(k_CheckCrcMode_Always),
outStreamSpec(NULL),
callback(NULL),
printCallback(NULL),
@@ -1093,7 +1110,7 @@ public:
propStreamSpec(NULL)
{}
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
static THREAD_FUNC_DECL EncodeThreadFunction(void *param)
{
@@ -1115,7 +1132,7 @@ public:
if (res != S_OK)
encoder->progressInfoSpec[0]->Status->SetResult(res);
encoder->ReadyEvent.Set();
- return 0;
+ return THREAD_FUNC_RET_ZERO;
}
static THREAD_FUNC_DECL DecodeThreadFunction(void *param)
@@ -1128,7 +1145,7 @@ public:
CEncoderInfo *encoder = decoder->Encoder;
encoder->Results[decoder->DecoderIndex] = encoder->Decode(decoder->DecoderIndex);
- return 0;
+ return THREAD_FUNC_RET_ZERO;
}
HRESULT CreateEncoderThread()
@@ -1184,17 +1201,30 @@ HRESULT CEncoderInfo::Generate()
const COneMethodInfo &method = _method;
// we need extra space, if input data is already compressed
- const size_t kCompressedBufferSize = GetBenchCompressedSize(kBufferSize);
+ const size_t kCompressedBufferSize = _encoderFilter ?
+ kBufferSize :
+ GetBenchCompressedSize(kBufferSize);
if (kCompressedBufferSize < kBufferSize)
return E_FAIL;
uncompressedDataPtr = fileData;
-
- if (!fileData)
+ if (fileData)
{
- ALLOC_WITH_HRESULT(&rg, kBufferSize);
-
+ #if !defined(Z7_ST)
+ if (IsGlobalMtMode)
+ {
+ /* we copy the data to local buffer of thread to eliminate
+ using of shared buffer by different threads */
+ ALLOC_WITH_HRESULT(&rg, kBufferSize)
+ memcpy((Byte *)rg, fileData, kBufferSize);
+ uncompressedDataPtr = (const Byte *)rg;
+ }
+ #endif
+ }
+ else
+ {
+ ALLOC_WITH_HRESULT(&rg, kBufferSize)
// DWORD ttt = GetTickCount();
if (generateDictBits == 0)
rg.GenerateSimpleRandom(Salt);
@@ -1211,12 +1241,6 @@ HRESULT CEncoderInfo::Generate()
crc = CrcCalc((const Byte *)rg, rg.Size());
uncompressedDataPtr = (const Byte *)rg;
}
-
- if (_encoderFilter)
- {
- ALLOC_WITH_HRESULT(&rgCopy, kBufferSize);
- }
-
if (!outStream)
{
@@ -1226,6 +1250,15 @@ HRESULT CEncoderInfo::Generate()
ALLOC_WITH_HRESULT(outStreamSpec, kCompressedBufferSize)
+ if (_encoderFilter)
+ {
+ /* we try to reduce the number of memcpy() in main encoding loop.
+ so we copy data to temp buffers here */
+ ALLOC_WITH_HRESULT(&rgCopy, kBufferSize)
+ memcpy((Byte *)*outStreamSpec, uncompressedDataPtr, kBufferSize);
+ memcpy((Byte *)rgCopy, uncompressedDataPtr, kBufferSize);
+ }
+
if (!propStream)
{
propStreamSpec = new CBufPtrSeqOutStream; // CBenchmarkOutStream;
@@ -1251,7 +1284,7 @@ HRESULT CEncoderInfo::Generate()
/* in posix new thread uses same affinity as parent thread,
so we don't need to send affinity to coder in posix */
UInt64 affMask;
- #if !defined(_7ZIP_ST) && defined(_WIN32)
+ #if !defined(Z7_ST) && defined(_WIN32)
{
CCpuSet cpuSet;
affMask = AffinityMode.GetAffinityMask(EncoderIndex, &cpuSet);
@@ -1262,7 +1295,7 @@ HRESULT CEncoderInfo::Generate()
// affMask <<= 3; // debug line: to test no affinity in coder;
// affMask = 0;
- RINOK(method.SetCoderProps_DSReduce_Aff(scp, &reduceSize, (affMask != 0 ? &affMask : NULL)));
+ RINOK(method.SetCoderProps_DSReduce_Aff(scp, &reduceSize, (affMask != 0 ? &affMask : NULL)))
}
else
{
@@ -1274,7 +1307,7 @@ HRESULT CEncoderInfo::Generate()
coder.QueryInterface(IID_ICompressWriteCoderProperties, &writeCoderProps);
if (writeCoderProps)
{
- RINOK(writeCoderProps->WriteCoderProperties(propStream));
+ RINOK(writeCoderProps->WriteCoderProperties(propStream))
}
{
@@ -1282,7 +1315,7 @@ HRESULT CEncoderInfo::Generate()
coder.QueryInterface(IID_ICryptoSetPassword, &sp);
if (sp)
{
- RINOK(sp->CryptoSetPassword(_psw, sizeof(_psw)));
+ RINOK(sp->CryptoSetPassword(_psw, sizeof(_psw)))
// we must call encoding one time to calculate password key for key cache.
// it must be after WriteCoderProperties!
@@ -1304,7 +1337,7 @@ HRESULT CEncoderInfo::Generate()
CMyComPtr<ISequentialOutStream> crcStream = crcStreamSpec;
crcStreamSpec->Init();
- RINOK(_encoder->Code(inStream, crcStream, 0, 0, NULL));
+ RINOK(_encoder->Code(inStream, crcStream, NULL, NULL, NULL))
}
}
}
@@ -1314,19 +1347,22 @@ HRESULT CEncoderInfo::Generate()
}
-static void My_FilterBench(ICompressFilter *filter, Byte *data, size_t size)
+static void My_FilterBench(ICompressFilter *filter, Byte *data, size_t size, UInt32 *crc)
{
while (size != 0)
{
- UInt32 cur = (UInt32)1 << 31;
+ UInt32 cur = crc ? 1 << 17 : 1 << 24;
if (cur > size)
cur = (UInt32)size;
UInt32 processed = filter->Filter(data, cur);
- data += processed;
- // if (processed > size) (in AES filter), we must fill last block with zeros.
- // but it is not important for benchmark. So we just copy that data without filtering.
+ /* if (processed > size) (in AES filter), we must fill last block with zeros.
+ but it is not important for benchmark. So we just copy that data without filtering.
+ if (processed == 0) then filter can't process more */
if (processed > size || processed == 0)
- break;
+ processed = (UInt32)size;
+ if (crc)
+ *crc = CrcUpdate(*crc, data, processed);
+ data += processed;
size -= processed;
}
}
@@ -1336,11 +1372,11 @@ HRESULT CEncoderInfo::Encode()
{
// printf("\nCEncoderInfo::Generate\n");
- RINOK(Generate());
+ RINOK(Generate())
// printf("\n2222\n");
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (Common)
{
Results[0] = S_OK;
@@ -1375,7 +1411,7 @@ HRESULT CEncoderInfo::Encode()
if (cp)
{
- RINOK(Set_Key_and_IV(cp));
+ RINOK(Set_Key_and_IV(cp))
}
compressedSize = 0;
@@ -1384,20 +1420,32 @@ HRESULT CEncoderInfo::Encode()
// CBenchmarkOutStream *outStreamSpec = this->outStreamSpec;
UInt64 prev = 0;
- const UInt32 mask = (CheckCrc_Enc ? 0 : 0xFFF);
- bool useCrc = (mask < NumIterations);
+
+ const UInt32 mask = (CheckCrc_Enc ? 0 : 0xFFFF);
+ const bool useCrc = (mask < NumIterations);
bool crcPrev_defined = false;
UInt32 crcPrev = 0;
- UInt64 i = NumIterations;
+
+ bool useRealData_Enc = UseRealData_Enc;
+ bool data_Was_Changed = false;
+ if (useRealData_Enc)
+ {
+ /* we want memcpy() for each iteration including first iteration.
+ So results will be equal for different number of iterations */
+ data_Was_Changed = true;
+ }
+
+ const UInt64 numIterations = NumIterations;
+ UInt64 i = numIterations;
// printCallback->NewLine();
while (i != 0)
{
i--;
- if (printCallback && bi.UnpackSize - prev >= (1 << 24))
+ if (printCallback && bi.UnpackSize - prev >= (1 << 26))
{
- RINOK(printCallback->CheckBreak());
prev = bi.UnpackSize;
+ RINOK(printCallback->CheckBreak())
}
/*
@@ -1411,21 +1459,25 @@ HRESULT CEncoderInfo::Encode()
if (_encoderFilter)
{
- // if (needRealData)
- memcpy((Byte *)*outStreamSpec, uncompressedDataPtr, kBufferSize);
+ Byte *filterData = rgCopy;
+ if (i == numIterations - 1 || calcCrc || useRealData_Enc)
+ {
+ filterData = (Byte *)*outStreamSpec;
+ if (data_Was_Changed)
+ memcpy(filterData, uncompressedDataPtr, kBufferSize);
+ data_Was_Changed = true;
+ }
_encoderFilter->Init();
- My_FilterBench(_encoderFilter, (Byte *)*outStreamSpec, kBufferSize);
if (calcCrc)
- {
outStreamSpec->InitCrc();
- outStreamSpec->Calc((Byte *)*outStreamSpec, kBufferSize);
- }
+ My_FilterBench(_encoderFilter, filterData, kBufferSize,
+ calcCrc ? &outStreamSpec->Crc : NULL);
}
else
{
outStreamSpec->Init(true, calcCrc); // write real data for speed consistency at any number of iterations
inStreamSpec->Init(uncompressedDataPtr, kBufferSize);
- RINOK(_encoder->Code(inStream, outStream, NULL, NULL, progressInfo[0]));
+ RINOK(_encoder->Code(inStream, outStream, NULL, NULL, progressInfo[0]))
if (!inStreamSpec->WasFinished())
return E_FAIL;
if (compressedSize != outStreamSpec->Pos)
@@ -1461,7 +1513,7 @@ HRESULT CEncoderInfo::Encode()
info.PackSize = compressedSize;
// printf("\n%7d\n", encoder.compressedSize);
- RINOK(callback->SetEncodeResult(info, true));
+ RINOK(callback->SetEncodeResult(info, true))
printCallback->NewLine();
}
*/
@@ -1501,13 +1553,13 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
pi->BenchInfo.UnpackSize = 0;
pi->BenchInfo.PackSize = 0;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
{
CMyComPtr<ICompressSetCoderMt> setCoderMt;
coder.QueryInterface(IID_ICompressSetCoderMt, &setCoderMt);
if (setCoderMt)
{
- RINOK(setCoderMt->SetNumberOfThreads(NumDecoderSubThreads));
+ RINOK(setCoderMt->SetNumberOfThreads(NumDecoderSubThreads))
}
}
#endif
@@ -1517,7 +1569,7 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
if (scp)
{
const UInt64 reduceSize = _uncompressedDataSize;
- RINOK(_method.SetCoderProps(scp, &reduceSize));
+ RINOK(_method.SetCoderProps(scp, &reduceSize))
}
CMyComPtr<ICryptoProperties> cp;
@@ -1528,7 +1580,7 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
RINOK(setDecProps->SetDecoderProperties2(
/* (const Byte *)*propStreamSpec, */
propsData,
- (UInt32)propStreamSpec->GetPos()));
+ (UInt32)propStreamSpec->GetPos()))
}
{
@@ -1536,7 +1588,7 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
coder.QueryInterface(IID_ICryptoSetPassword, &sp);
if (sp)
{
- RINOK(sp->CryptoSetPassword(_psw, sizeof(_psw)));
+ RINOK(sp->CryptoSetPassword(_psw, sizeof(_psw)))
}
}
@@ -1544,7 +1596,7 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
if (cp)
{
- RINOK(Set_Key_and_IV(cp));
+ RINOK(Set_Key_and_IV(cp))
}
CMyComPtr<ICompressSetFinishMode> setFinishMode;
@@ -1559,32 +1611,38 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
decoder->QueryInterface(IID_ICompressSetFinishMode, (void **)&setFinishMode);
}
- const UInt64 numIterations = this->NumIterations;
- const UInt32 mask = (CheckCrc_Dec ? 0 : 0xFFF);
+ const UInt64 numIterations = NumIterations;
+ const E_CheckCrcMode checkCrcMode = CheckCrcMode_Dec;
for (UInt64 i = 0; i < numIterations; i++)
{
- if (printCallback && pi->BenchInfo.UnpackSize - prev >= (1 << 24))
+ if (printCallback && pi->BenchInfo.UnpackSize - prev >= (1 << 26))
{
- RINOK(printCallback->CheckBreak());
+ RINOK(printCallback->CheckBreak())
prev = pi->BenchInfo.UnpackSize;
}
const UInt64 outSize = kBufferSize;
- bool calcCrc = false;
- if (((UInt32)i & mask) == 0)
- calcCrc = true;
+ bool calcCrc = (checkCrcMode != k_CheckCrcMode_Never);
+
crcOutStreamSpec->Init();
-
+
if (_decoderFilter)
{
- if (calcCrc) // for pure filter speed test without multi-iteration consistency
- // if (needRealData)
- memcpy((Byte *)rgCopy, (const Byte *)*outStreamSpec, compressedSize);
- _decoderFilter->Init();
- My_FilterBench(_decoderFilter, (Byte *)rgCopy, compressedSize);
+ Byte *filterData = (Byte *)*outStreamSpec;
if (calcCrc)
- crcOutStreamSpec->Calc((const Byte *)rgCopy, compressedSize);
+ {
+ calcCrc = (i == 0);
+ if (checkCrcMode == k_CheckCrcMode_Always)
+ {
+ calcCrc = true;
+ memcpy((Byte *)rgCopy, (const Byte *)*outStreamSpec, compressedSize);
+ filterData = rgCopy;
+ }
+ }
+ _decoderFilter->Init();
+ My_FilterBench(_decoderFilter, filterData, compressedSize,
+ calcCrc ? &crcOutStreamSpec->Crc : NULL);
}
else
{
@@ -1593,10 +1651,10 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
if (setFinishMode)
{
- RINOK(setFinishMode->SetFinishMode(BoolToUInt(true)));
+ RINOK(setFinishMode->SetFinishMode(BoolToUInt(true)))
}
- RINOK(decoder->Code(inStream, crcOutStream, 0, &outSize, progressInfo[decoderIndex]));
+ RINOK(decoder->Code(inStream, crcOutStream, NULL, &outSize, progressInfo[decoderIndex]))
if (setFinishMode)
{
@@ -1609,7 +1667,7 @@ HRESULT CEncoderInfo::Decode(UInt32 decoderIndex)
if (getInStreamProcessedSize)
{
UInt64 processed;
- RINOK(getInStreamProcessedSize->GetInStreamProcessedSize(&processed));
+ RINOK(getInStreamProcessedSize->GetInStreamProcessedSize(&processed))
if (processed != compressedSize)
return S_FALSE;
}
@@ -1652,7 +1710,7 @@ static UInt64 GetNumIterations(UInt64 numCommands, UInt64 complexInCommands)
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
// ---------- CBenchThreadsFlusher ----------
@@ -1696,7 +1754,7 @@ WRes CBenchThreadsFlusher::StartAndWait(bool exitMode)
return res;
}
-#endif // _7ZIP_ST
+#endif // Z7_ST
@@ -1714,7 +1772,7 @@ static void SetPseudoRand(Byte *data, size_t size, UInt32 startValue)
static HRESULT MethodBench(
DECL_EXTERNAL_CODECS_LOC_VARS
UInt64 complexInCommands,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
bool oldLzmaBenchMode,
UInt32 numThreads,
const CAffinityMode *affinityMode,
@@ -1731,10 +1789,11 @@ static HRESULT MethodBench(
COneMethodInfo method = method2;
UInt64 methodId;
UInt32 numStreams;
+ bool isFilter;
const int codecIndex = FindMethod_Index(
EXTERNAL_CODECS_LOC_VARS
method.MethodName, true,
- methodId, numStreams);
+ methodId, numStreams, isFilter);
if (codecIndex < 0)
return E_NOTIMPL;
if (numStreams != 1)
@@ -1743,7 +1802,7 @@ static HRESULT MethodBench(
UInt32 numEncoderThreads = 1;
UInt32 numSubDecoderThreads = 1;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
numEncoderThreads = numThreads;
if (oldLzmaBenchMode)
@@ -1759,7 +1818,7 @@ static HRESULT MethodBench(
}
}
- bool mtEncMode = (numEncoderThreads > 1) || affinityMode->NeedAffinity();
+ const bool mtEncMode = (numEncoderThreads > 1) || affinityMode->NeedAffinity();
#endif
@@ -1771,10 +1830,10 @@ static HRESULT MethodBench(
for (i = 0; i < numEncoderThreads; i++)
{
CEncoderInfo &encoder = encoders[i];
- encoder.callback = (i == 0) ? callback : 0;
+ encoder.callback = (i == 0) ? callback : NULL;
encoder.printCallback = printCallback;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
encoder.EncoderIndex = i;
encoder.NumEncoderInternalThreads = numSubDecoderThreads;
encoder.AffinityMode = *affinityMode;
@@ -1794,15 +1853,12 @@ static HRESULT MethodBench(
{
CCreatedCoder cod;
- RINOK(CreateCoder_Index(EXTERNAL_CODECS_LOC_VARS (unsigned)codecIndex, true, encoder._encoderFilter, cod));
+ RINOK(CreateCoder_Index(EXTERNAL_CODECS_LOC_VARS (unsigned)codecIndex, true, encoder._encoderFilter, cod))
encoder._encoder = cod.Coder;
if (!encoder._encoder && !encoder._encoderFilter)
return E_NOTIMPL;
}
- encoder.CheckCrc_Enc = (benchProps->EncComplex) > 30;
- encoder.CheckCrc_Dec = (benchProps->DecComplexCompr + benchProps->DecComplexUnc) > 30;
-
SetPseudoRand(encoder._iv, sizeof(encoder._iv), 17);
SetPseudoRand(encoder._key, sizeof(encoder._key), 51);
SetPseudoRand(encoder._psw, sizeof(encoder._psw), 123);
@@ -1811,11 +1867,27 @@ static HRESULT MethodBench(
{
CCreatedCoder cod;
CMyComPtr<ICompressCoder> &decoder = encoder._decoders[j];
- RINOK(CreateCoder_Id(EXTERNAL_CODECS_LOC_VARS methodId, false, encoder._decoderFilter, cod));
+ RINOK(CreateCoder_Id(EXTERNAL_CODECS_LOC_VARS methodId, false, encoder._decoderFilter, cod))
decoder = cod.Coder;
if (!encoder._decoderFilter && !decoder)
return E_NOTIMPL;
}
+
+ encoder.UseRealData_Enc =
+ encoder.CheckCrc_Enc = (benchProps->EncComplex) > 30;
+
+ encoder.CheckCrcMode_Dec = k_CheckCrcMode_Always;
+ if (benchProps->DecComplexCompr +
+ benchProps->DecComplexUnc <= 30)
+ encoder.CheckCrcMode_Dec =
+ k_CheckCrcMode_FirstPass; // for filters
+ // k_CheckCrcMode_Never; // for debug
+ // k_CheckCrcMode_Always; // for debug
+ if (fileData)
+ {
+ encoder.UseRealData_Enc = true;
+ encoder.CheckCrcMode_Dec = k_CheckCrcMode_Always;
+ }
}
UInt32 crc = 0;
@@ -1837,7 +1909,7 @@ static HRESULT MethodBench(
status.Res = S_OK;
status.EncodeMode = true;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
CBenchThreadsFlusher encoderFlusher;
if (mtEncMode)
{
@@ -1853,7 +1925,7 @@ static HRESULT MethodBench(
for (i = 0; i < numEncoderThreads; i++)
{
CEncoderInfo &encoder = encoders[i];
- encoder.NumIterations = GetNumIterations(benchProps->GeComprCommands(uncompressedDataSize), complexInCommands);
+ encoder.NumIterations = GetNumIterations(benchProps->GetNumCommands_Enc(uncompressedDataSize), complexInCommands);
// encoder.NumIterations = 3;
encoder.Salt = g_CrcTable[i & 0xFF];
encoder.Salt ^= (g_CrcTable[(i >> 8) & 0xFF] << 3);
@@ -1877,7 +1949,7 @@ static HRESULT MethodBench(
bpi->BenchInfo.NumIterations = numEncoderThreads;
}
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (mtEncMode)
{
#ifdef USE_ALLOCA
@@ -1885,6 +1957,7 @@ static HRESULT MethodBench(
#endif
encoder.Common = &encoderFlusher.Common;
+ encoder.IsGlobalMtMode = numEncoderThreads > 1;
RINOK(encoder.CreateEncoderThread())
}
#endif
@@ -1892,35 +1965,35 @@ static HRESULT MethodBench(
if (printCallback)
{
- RINOK(printCallback->CheckBreak());
+ RINOK(printCallback->CheckBreak())
}
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (mtEncMode)
{
for (i = 0; i < numEncoderThreads; i++)
{
CEncoderInfo &encoder = encoders[i];
- WRes wres = encoder.ReadyEvent.Lock();
+ const WRes wres = encoder.ReadyEvent.Lock();
if (wres != 0)
return HRESULT_FROM_WIN32(wres);
- RINOK(encoder.Results[0]);
+ RINOK(encoder.Results[0])
}
CBenchProgressInfo *bpi = encoders[0].progressInfoSpec[0];
bpi->SetStartTime();
- WRes wres = encoderFlusher.StartAndWait();
+ const WRes wres = encoderFlusher.StartAndWait();
if (status.Res == 0 && wres != 0)
return HRESULT_FROM_WIN32(wres);
}
else
#endif
{
- RINOK(encoders[0].Encode());
+ RINOK(encoders[0].Encode())
}
- RINOK(status.Res);
+ RINOK(status.Res)
CBenchInfo info;
@@ -1931,13 +2004,13 @@ static HRESULT MethodBench(
for (i = 0; i < numEncoderThreads; i++)
{
- CEncoderInfo &encoder = encoders[i];
+ const CEncoderInfo &encoder = encoders[i];
info.UnpackSize += encoder.kBufferSize;
info.PackSize += encoder.compressedSize;
// printf("\n%7d\n", encoder.compressedSize);
}
- RINOK(callback->SetEncodeResult(info, true));
+ RINOK(callback->SetEncodeResult(info, true))
@@ -1948,7 +2021,7 @@ static HRESULT MethodBench(
status.EncodeMode = false;
const UInt32 numDecoderThreads = numEncoderThreads * numSubDecoderThreads;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
const bool mtDecoderMode = (numDecoderThreads > 1) || affinityMode->NeedAffinity();
#endif
@@ -1957,7 +2030,7 @@ static HRESULT MethodBench(
CEncoderInfo &encoder = encoders[i];
/*
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
// encoder.affinityMode = *affinityMode;
if (encoder.NumEncoderInternalThreads != 1)
encoder.AffinityMode.DivideNum = encoder.NumEncoderInternalThreads;
@@ -1967,7 +2040,11 @@ static HRESULT MethodBench(
if (i == 0)
{
- encoder.NumIterations = GetNumIterations(benchProps->GeDecomprCommands(encoder.compressedSize, encoder.kBufferSize), complexInCommands);
+ encoder.NumIterations = GetNumIterations(
+ benchProps->GetNumCommands_Dec(
+ encoder.compressedSize,
+ encoder.kBufferSize),
+ complexInCommands);
CBenchProgressInfo *bpi = encoder.progressInfoSpec[0];
bpi->Callback = callback;
bpi->BenchInfo.NumIterations = numDecoderThreads;
@@ -1976,7 +2053,7 @@ static HRESULT MethodBench(
else
encoder.NumIterations = encoders[0].NumIterations;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
{
int numSubThreads = method.Get_NumThreads();
encoder.NumDecoderSubThreads = (numSubThreads <= 0) ? 1 : (unsigned)numSubThreads;
@@ -1985,22 +2062,22 @@ static HRESULT MethodBench(
{
for (UInt32 j = 0; j < numSubDecoderThreads; j++)
{
- HRESULT res = encoder.CreateDecoderThread(j, (i == 0 && j == 0)
+ const HRESULT res = encoder.CreateDecoderThread(j, (i == 0 && j == 0)
#ifdef USE_ALLOCA
, ((i * numSubDecoderThreads + j) * 16 * 21) & 0x7FF
#endif
);
- RINOK(res);
+ RINOK(res)
}
}
else
#endif
{
- RINOK(encoder.Decode(0));
+ RINOK(encoder.Decode(0))
}
}
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (mtDecoderMode)
{
WRes wres = 0;
@@ -2009,26 +2086,26 @@ static HRESULT MethodBench(
for (UInt32 j = 0; j < numSubDecoderThreads; j++)
{
CEncoderInfo &encoder = encoders[i];
- WRes wres2 = encoder.thread[j].
+ const WRes wres2 = encoder.thread[j].
// Wait(); // later we can get thread times from thread in UNDER_CE
Wait_Close();
if (wres == 0 && wres2 != 0)
wres = wres2;
- HRESULT res2 = encoder.Results[j];
+ const HRESULT res2 = encoder.Results[j];
if (res == 0 && res2 != 0)
res = res2;
}
if (wres != 0)
return HRESULT_FROM_WIN32(wres);
- RINOK(res);
+ RINOK(res)
}
- #endif // _7ZIP_ST
+ #endif // Z7_ST
- RINOK(status.Res);
+ RINOK(status.Res)
encoders[0].progressInfoSpec[0]->SetFinishTime(info);
/*
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
#ifdef UNDER_CE
if (mtDecoderMode)
for (i = 0; i < numEncoderThreads; i++)
@@ -2048,13 +2125,13 @@ static HRESULT MethodBench(
for (i = 0; i < numEncoderThreads; i++)
{
- CEncoderInfo &encoder = encoders[i];
+ const CEncoderInfo &encoder = encoders[i];
info.UnpackSize += encoder.kBufferSize;
info.PackSize += encoder.compressedSize;
}
- // RINOK(callback->SetDecodeResult(info, false)); // why we called before 21.03 ??
- RINOK(callback->SetDecodeResult(info, true));
+ // RINOK(callback->SetDecodeResult(info, false)) // why we called before 21.03 ??
+ RINOK(callback->SetDecodeResult(info, true))
return S_OK;
}
@@ -2234,7 +2311,7 @@ HRESULT CCrcInfo_Base::CrcProcess(UInt64 numIterations,
if (cur - prev >= ((UInt32)1 << 30))
{
prev = cur;
- RINOK(callback->CheckBreak());
+ RINOK(callback->CheckBreak())
}
}
}
@@ -2266,7 +2343,7 @@ static UInt32 CountCpuFreq(UInt32 sum, UInt32 num, UInt32 val)
EXTERN_C_END
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
struct CBaseThreadInfo
{
@@ -2300,12 +2377,12 @@ static THREAD_FUNC_DECL FreqThreadFunction(void *param)
{
p->CallbackRes = p->Callback->CheckBreak();
if (p->CallbackRes != S_OK)
- return 0;
+ break;
}
sum = CountCpuFreq(sum, p->Size, g_BenchCpuFreqTemp);
}
p->ValRes = sum;
- return 0;
+ return THREAD_FUNC_RET_ZERO;
}
struct CFreqThreads
@@ -2349,7 +2426,7 @@ struct CCrcInfo: public CBaseThreadInfo
HRESULT Res;
UInt32 CheckSum_Res;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
NSynchronization::CManualResetEvent ReadyEvent;
UInt32 ThreadIndex;
CBenchSyncCommon *Common;
@@ -2433,7 +2510,7 @@ static THREAD_FUNC_DECL CrcThreadFunction(void *param)
alloca(p->AllocaSize);
#endif
p->Process();
- return 0;
+ return THREAD_FUNC_RET_ZERO;
}
@@ -2480,7 +2557,7 @@ WRes CCrcThreads::StartAndWait(bool exitMode)
static UInt32 CrcCalc1(const Byte *buf, size_t size)
{
- UInt32 crc = CRC_INIT_VAL;;
+ UInt32 crc = CRC_INIT_VAL;
for (size_t i = 0; i < size; i++)
crc = CRC_UPDATE_BYTE(crc, buf[i]);
return CRC_GET_DIGEST(crc);
@@ -2522,9 +2599,9 @@ struct CBenchMethod
{
unsigned Weight;
unsigned DictBits;
- UInt32 EncComplex;
- UInt32 DecComplexCompr;
- UInt32 DecComplexUnc;
+ Int32 EncComplex;
+ Int32 DecComplexCompr;
+ Int32 DecComplexUnc;
const char *Name;
// unsigned KeySize;
};
@@ -2563,6 +2640,9 @@ static const CBenchMethod g_Bench[] =
// { 10, 22, 1655, 0, 1830, "PPMDZip:x5" },
{ 10, 22, 1655, 0, 1830, "PPMD:x5" },
+ // { 2, 0, -16, 0, -16, "Swap2" },
+ { 2, 0, -16, 0, -16, "Swap4" },
+
// { 2, 0, 3, 0, 4, "Delta:1" },
// { 2, 0, 3, 0, 4, "Delta:2" },
// { 2, 0, 3, 0, 4, "Delta:3" },
@@ -2570,8 +2650,9 @@ static const CBenchMethod g_Bench[] =
// { 2, 0, 3, 0, 4, "Delta:8" },
// { 2, 0, 3, 0, 4, "Delta:32" },
- { 2, 0, 4, 0, 4, "BCJ" },
-
+ { 2, 0, 2, 0, 2, "BCJ" },
+ { 2, 0, 1, 0, 1, "ARM64" },
+
// { 10, 0, 18, 0, 18, "AES128CBC:1" },
// { 10, 0, 21, 0, 21, "AES192CBC:1" },
{ 10, 0, 24, 0, 24, "AES256CBC:1" },
@@ -2607,11 +2688,13 @@ struct CBenchHash
// #define ARM_CRC_MUL 100
#define ARM_CRC_MUL 1
+#define k_Hash_Complex_Mult 256
+
static const CBenchHash g_Hash[] =
{
- { 1, 1820, 0x21e207bb, "CRC32:1" },
- { 10, 558, 0x21e207bb, "CRC32:4" },
- { 10, 339, 0x21e207bb, "CRC32:8" } ,
+ // { 1, 1820, 0x21e207bb, "CRC32:1" },
+ // { 10, 558, 0x21e207bb, "CRC32:4" },
+ { 20, 339, 0x21e207bb, "CRC32:8" } ,
{ 2, 128 *ARM_CRC_MUL, 0x21e207bb, "CRC32:32" },
{ 2, 64 *ARM_CRC_MUL, 0x21e207bb, "CRC32:64" },
{ 10, 512, 0x41b901d1, "CRC64" },
@@ -2656,6 +2739,8 @@ static const unsigned kFieldSize_RU = 6;
static const unsigned kFieldSize_Rating = 6;
static const unsigned kFieldSize_EU = 5;
static const unsigned kFieldSize_Effec = 5;
+static const unsigned kFieldSize_CrcSpeed = 8;
+
static const unsigned kFieldSize_TotalSize = 4 + kFieldSize_Speed + kFieldSize_Usage + kFieldSize_RU + kFieldSize_Rating;
static const unsigned kFieldSize_EUAndEffec = 2 + kFieldSize_EU + kFieldSize_Effec;
@@ -2830,7 +2915,7 @@ AString GetProcessThreadsInfo(const NSystem::CProcessAffinity &ti)
}
-#ifdef _7ZIP_LARGE_PAGES
+#ifdef Z7_LARGE_PAGES
#ifdef _WIN32
extern bool g_LargePagesMode;
@@ -2875,7 +2960,7 @@ static void PrintRequirements(IBenchPrintCallback &f, const char *sizeString,
f.Print(" ?");
f.Print(" MB");
- #ifdef _7ZIP_LARGE_PAGES
+ #ifdef Z7_LARGE_PAGES
{
AString s;
Add_LargePages_String(s);
@@ -2890,30 +2975,34 @@ static void PrintRequirements(IBenchPrintCallback &f, const char *sizeString,
-struct CBenchCallbackToPrint: public IBenchCallback
+struct CBenchCallbackToPrint Z7_final: public IBenchCallback
{
- CBenchProps BenchProps;
- CTotalBenchRes EncodeRes;
- CTotalBenchRes DecodeRes;
- IBenchPrintCallback *_file;
- UInt64 DictSize;
-
+ bool NeedPrint;
bool Use2Columns;
- unsigned NameFieldSize;
-
bool ShowFreq;
- UInt64 CpuFreq;
+ unsigned NameFieldSize;
unsigned EncodeWeight;
unsigned DecodeWeight;
+ UInt64 CpuFreq;
+ UInt64 DictSize;
+
+ IBenchPrintCallback *_file;
+ CBenchProps BenchProps;
+ CTotalBenchRes EncodeRes;
+ CTotalBenchRes DecodeRes;
+
+ CBenchInfo BenchInfo_Results[2];
+
CBenchCallbackToPrint():
+ NeedPrint(true),
Use2Columns(false),
- NameFieldSize(0),
ShowFreq(false),
- CpuFreq(0),
+ NameFieldSize(0),
EncodeWeight(1),
- DecodeWeight(1)
+ DecodeWeight(1),
+ CpuFreq(0)
{}
void Init() { EncodeRes.Init(); DecodeRes.Init(); }
@@ -2921,8 +3010,8 @@ struct CBenchCallbackToPrint: public IBenchCallback
void NewLine();
HRESULT SetFreq(bool showFreq, UInt64 cpuFreq);
- HRESULT SetEncodeResult(const CBenchInfo &info, bool final);
- HRESULT SetDecodeResult(const CBenchInfo &info, bool final);
+ HRESULT SetEncodeResult(const CBenchInfo &info, bool final) Z7_override;
+ HRESULT SetDecodeResult(const CBenchInfo &info, bool final) Z7_override;
};
HRESULT CBenchCallbackToPrint::SetFreq(bool showFreq, UInt64 cpuFreq)
@@ -2934,10 +3023,13 @@ HRESULT CBenchCallbackToPrint::SetFreq(bool showFreq, UInt64 cpuFreq)
HRESULT CBenchCallbackToPrint::SetEncodeResult(const CBenchInfo &info, bool final)
{
- RINOK(_file->CheckBreak());
+ RINOK(_file->CheckBreak())
if (final)
+ BenchInfo_Results[0] = info;
+ if (final)
+ if (NeedPrint)
{
- UInt64 rating = BenchProps.GetCompressRating(DictSize, info.GlobalTime, info.GlobalFreq, info.UnpackSize * info.NumIterations);
+ const UInt64 rating = BenchProps.GetRating_Enc(DictSize, info.GlobalTime, info.GlobalFreq, info.UnpackSize * info.NumIterations);
PrintResults(_file, info,
EncodeWeight, rating,
ShowFreq, CpuFreq, &EncodeRes);
@@ -2951,10 +3043,13 @@ static const char * const kSep = " | ";
HRESULT CBenchCallbackToPrint::SetDecodeResult(const CBenchInfo &info, bool final)
{
- RINOK(_file->CheckBreak());
+ RINOK(_file->CheckBreak())
+ if (final)
+ BenchInfo_Results[1] = info;
if (final)
+ if (NeedPrint)
{
- UInt64 rating = BenchProps.GetDecompressRating(info.GlobalTime, info.GlobalFreq, info.UnpackSize, info.PackSize, info.NumIterations);
+ const UInt64 rating = BenchProps.GetRating_Dec(info.GlobalTime, info.GlobalFreq, info.UnpackSize, info.PackSize, info.NumIterations);
if (Use2Columns)
_file->Print(kSep);
else
@@ -2996,10 +3091,22 @@ static void PrintRight(IBenchPrintCallback &f, const char *s, unsigned size)
f.Print(s);
}
+
+static bool DoesWildcardMatchName_NoCase(const AString &mask, const char *name)
+{
+ UString wildc = GetUnicodeString(mask);
+ UString bname = GetUnicodeString(name);
+ wildc.MakeLower_Ascii();
+ bname.MakeLower_Ascii();
+ return DoesWildcardMatchName(wildc, bname);
+}
+
+
static HRESULT TotalBench(
DECL_EXTERNAL_CODECS_LOC_VARS
+ const COneMethodInfo &methodMask,
UInt64 complexInCommands,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
UInt32 numThreads,
const CAffinityMode *affinityMode,
#endif
@@ -3008,9 +3115,11 @@ static HRESULT TotalBench(
const Byte *fileData,
IBenchPrintCallback *printCallback, CBenchCallbackToPrint *callback)
{
- for (unsigned i = 0; i < ARRAY_SIZE(g_Bench); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_Bench); i++)
{
const CBenchMethod &bench = g_Bench[i];
+ if (!DoesWildcardMatchName_NoCase(methodMask.MethodName, bench.Name))
+ continue;
PrintLeft(*callback->_file, bench.Name, kFieldSize_Name);
{
unsigned keySize = 32;
@@ -3025,7 +3134,7 @@ static HRESULT TotalBench(
COneMethodInfo method;
NCOM::CPropVariant propVariant;
propVariant = bench.Name;
- RINOK(method.ParseMethodFromPROPVARIANT(UString(), propVariant));
+ RINOK(method.ParseMethodFromPROPVARIANT(UString(), propVariant))
size_t unpackSize2 = unpackSize;
if (!forceUnpackSize && bench.DictBits == 0)
@@ -3034,10 +3143,10 @@ static HRESULT TotalBench(
callback->EncodeWeight = bench.Weight;
callback->DecodeWeight = bench.Weight;
- HRESULT res = MethodBench(
+ const HRESULT res = MethodBench(
EXTERNAL_CODECS_LOC_VARS
complexInCommands,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
false, numThreads, affinityMode,
#endif
method,
@@ -3054,7 +3163,7 @@ static HRESULT TotalBench(
}
else
{
- RINOK(res);
+ RINOK(res)
}
callback->NewLine();
@@ -3080,7 +3189,7 @@ struct CFreqBench
{}
HRESULT FreqBench(IBenchPrintCallback *_file
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
, const CAffinityMode *affinityMode
#endif
);
@@ -3088,7 +3197,7 @@ struct CFreqBench
HRESULT CFreqBench::FreqBench(IBenchPrintCallback *_file
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
, const CAffinityMode *affinityMode
#endif
)
@@ -3100,7 +3209,7 @@ HRESULT CFreqBench::FreqBench(IBenchPrintCallback *_file
if (numThreads == 0)
numThreads = 1;
- #ifdef _7ZIP_ST
+ #ifdef Z7_ST
numThreads = 1;
#endif
@@ -3117,7 +3226,7 @@ HRESULT CFreqBench::FreqBench(IBenchPrintCallback *_file
CBenchInfoCalc progressInfoSpec;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
bool mtMode = (numThreads > 1) || affinityMode->NeedAffinity();
@@ -3150,7 +3259,7 @@ HRESULT CFreqBench::FreqBench(IBenchPrintCallback *_file
return HRESULT_FROM_WIN32(wres);
for (i = 0; i < numThreads; i++)
{
- RINOK(threads.Items[i].CallbackRes);
+ RINOK(threads.Items[i].CallbackRes)
}
}
else
@@ -3163,7 +3272,7 @@ HRESULT CFreqBench::FreqBench(IBenchPrintCallback *_file
sum = CountCpuFreq(sum, numIterations2, g_BenchCpuFreqTemp);
if (_file)
{
- RINOK(_file->CheckBreak());
+ RINOK(_file->CheckBreak())
}
}
res += sum;
@@ -3172,7 +3281,7 @@ HRESULT CFreqBench::FreqBench(IBenchPrintCallback *_file
if (res == 0x12345678)
if (_file)
{
- RINOK(_file->CheckBreak());
+ RINOK(_file->CheckBreak())
}
CBenchInfo info;
@@ -3193,7 +3302,7 @@ HRESULT CFreqBench::FreqBench(IBenchPrintCallback *_file
0, // weight
rating,
showFreq, showFreq ? (specifiedFreq != 0 ? specifiedFreq : CpuFreqRes) : 0, NULL);
- RINOK(_file->CheckBreak());
+ RINOK(_file->CheckBreak())
}
return S_OK;
@@ -3215,7 +3324,7 @@ static HRESULT CrcBench(
const UInt32 *checkSum,
const COneMethodInfo &method,
IBenchPrintCallback *_file,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
const CAffinityMode *affinityMode,
#endif
bool showRating,
@@ -3225,7 +3334,7 @@ static HRESULT CrcBench(
if (numThreads == 0)
numThreads = 1;
- #ifdef _7ZIP_ST
+ #ifdef Z7_ST
numThreads = 1;
#endif
@@ -3249,14 +3358,14 @@ static HRESULT CrcBench(
*/
const size_t bsize = (bufferSize == 0 ? 1 : bufferSize);
- UInt64 numIterations = complexInCommands * 256 / complexity / bsize;
+ UInt64 numIterations = complexInCommands * k_Hash_Complex_Mult / complexity / bsize;
if (numIterations == 0)
numIterations = 1;
CBenchInfoCalc progressInfoSpec;
CBenchInfo info;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
bool mtEncMode = (numThreads > 1) || affinityMode->NeedAffinity();
if (mtEncMode)
@@ -3275,14 +3384,14 @@ static HRESULT CrcBench(
{
CCrcInfo &ci = threads.Items[i];
AString name;
- RINOK(CreateHasher(EXTERNAL_CODECS_LOC_VARS hashID, name, ci.Hasher));
+ RINOK(CreateHasher(EXTERNAL_CODECS_LOC_VARS hashID, name, ci.Hasher))
if (!ci.Hasher)
return E_NOTIMPL;
CMyComPtr<ICompressSetCoderProperties> scp;
ci.Hasher.QueryInterface(IID_ICompressSetCoderProperties, &scp);
if (scp)
{
- RINOK(method.SetCoderProps(scp));
+ RINOK(method.SetCoderProps(scp))
}
ci.Callback = _file;
@@ -3320,7 +3429,7 @@ static HRESULT CrcBench(
WRes wres = ci.ReadyEvent.Lock();
if (wres != 0)
return HRESULT_FROM_WIN32(wres);
- RINOK(ci.Res);
+ RINOK(ci.Res)
}
progressInfoSpec.SetStartTime();
@@ -3333,7 +3442,7 @@ static HRESULT CrcBench(
for (i = 0; i < numThreads; i++)
{
- RINOK(threads.Items[i].Res);
+ RINOK(threads.Items[i].Res)
if (i != 0)
if (threads.Items[i].CheckSum_Res !=
threads.Items[i - 1].CheckSum_Res)
@@ -3345,20 +3454,20 @@ static HRESULT CrcBench(
{
CMyComPtr<IHasher> hasher;
AString name;
- RINOK(CreateHasher(EXTERNAL_CODECS_LOC_VARS hashID, name, hasher));
+ RINOK(CreateHasher(EXTERNAL_CODECS_LOC_VARS hashID, name, hasher))
if (!hasher)
return E_NOTIMPL;
CMyComPtr<ICompressSetCoderProperties> scp;
hasher.QueryInterface(IID_ICompressSetCoderProperties, &scp);
if (scp)
{
- RINOK(method.SetCoderProps(scp));
+ RINOK(method.SetCoderProps(scp))
}
CCrcInfo_Base crcib;
crcib.CreateLocalBuf = false;
- RINOK(crcib.Generate(fileData, bufferSize));
+ RINOK(crcib.Generate(fileData, bufferSize))
progressInfoSpec.SetStartTime();
- RINOK(crcib.CrcProcess(numIterations, checkSum, hasher, _file));
+ RINOK(crcib.CrcProcess(numIterations, checkSum, hasher, _file))
progressInfoSpec.SetFinishTime(info);
}
@@ -3382,7 +3491,7 @@ static HRESULT CrcBench(
benchWeight, rating,
showFreq, cpuFreq, encodeRes);
}
- RINOK(_file->CheckBreak());
+ RINOK(_file->CheckBreak())
}
speed = info.GetSpeed(unpSizeThreads);
@@ -3395,20 +3504,23 @@ static HRESULT CrcBench(
static HRESULT TotalBench_Hash(
DECL_EXTERNAL_CODECS_LOC_VARS
+ const COneMethodInfo &methodMask,
UInt64 complexInCommands,
UInt32 numThreads,
size_t bufSize,
const Byte *fileData,
IBenchPrintCallback *printCallback, CBenchCallbackToPrint *callback,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
const CAffinityMode *affinityMode,
#endif
CTotalBenchRes *encodeRes,
bool showFreq, UInt64 cpuFreq)
{
- for (unsigned i = 0; i < ARRAY_SIZE(g_Hash); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_Hash); i++)
{
const CBenchHash &bench = g_Hash[i];
+ if (!DoesWildcardMatchName_NoCase(methodMask.MethodName, bench.Name))
+ continue;
PrintLeft(*callback->_file, bench.Name, kFieldSize_Name);
// callback->BenchProps.DecComplexUnc = bench.DecComplexUnc;
// callback->BenchProps.DecComplexCompr = bench.DecComplexCompr;
@@ -3417,11 +3529,11 @@ static HRESULT TotalBench_Hash(
COneMethodInfo method;
NCOM::CPropVariant propVariant;
propVariant = bench.Name;
- RINOK(method.ParseMethodFromPROPVARIANT(UString(), propVariant));
+ RINOK(method.ParseMethodFromPROPVARIANT(UString(), propVariant))
UInt64 speed, usage;
- HRESULT res = CrcBench(
+ const HRESULT res = CrcBench(
EXTERNAL_CODECS_LOC_VARS
complexInCommands,
numThreads, bufSize, fileData,
@@ -3430,7 +3542,7 @@ static HRESULT TotalBench_Hash(
(!fileData && bufSize == (1 << kNumHashDictBits)) ? &bench.CheckSum : NULL,
method,
printCallback,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
affinityMode,
#endif
true, // showRating
@@ -3441,7 +3553,7 @@ static HRESULT TotalBench_Hash(
}
else
{
- RINOK(res);
+ RINOK(res)
}
callback->NewLine();
}
@@ -3451,7 +3563,8 @@ static HRESULT TotalBench_Hash(
struct CTempValues
{
UInt64 *Values;
- CTempValues(UInt32 num) { Values = new UInt64[num]; }
+ CTempValues(): Values(NULL) {}
+ void Alloc(UInt32 num) { Values = new UInt64[num]; }
~CTempValues() { delete []Values; }
};
@@ -3482,6 +3595,29 @@ static void Print_Usage_and_Threads(IBenchPrintCallback &f, UInt64 usage, UInt32
}
+static void Print_Delimiter(IBenchPrintCallback &f)
+{
+ f.Print(" |");
+}
+
+static void Print_Pow(IBenchPrintCallback &f, unsigned pow)
+{
+ char s[16];
+ ConvertUInt32ToString(pow, s);
+ unsigned pos = MyStringLen(s);
+ s[pos++] = ':';
+ s[pos] = 0;
+ PrintLeft(f, s, kFieldSize_SmallName); // 4
+}
+
+static void Bench_BW_Print_Usage_Speed(IBenchPrintCallback &f,
+ UInt64 usage, UInt64 speed)
+{
+ PrintUsage(f, usage, kFieldSize_Usage);
+ PrintNumber(f, speed / 1000000, kFieldSize_CrcSpeed);
+}
+
+
HRESULT Bench(
DECL_EXTERNAL_CODECS_LOC_VARS
IBenchPrintCallback *printCallback,
@@ -3500,7 +3636,7 @@ HRESULT Bench(
NSystem::CProcessAffinity threadsInfo;
threadsInfo.InitST();
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
if (threadsInfo.Get() && threadsInfo.GetNumProcessThreads() != 0)
numCPUs = threadsInfo.GetNumProcessThreads();
@@ -3533,7 +3669,7 @@ HRESULT Bench(
UInt64 complexInCommands = kComplexInCommands;
UInt32 numThreads_Start = 1;
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
CAffinityMode affinityMode;
#endif
@@ -3597,7 +3733,7 @@ HRESULT Bench(
// (len == 0) is allowed. Also it's allowed if Alloc(0) returns NULL here
- ALLOC_WITH_HRESULT(&fileDataBuffer, len);
+ ALLOC_WITH_HRESULT(&fileDataBuffer, len)
use_fileData = true;
{
@@ -3616,7 +3752,7 @@ HRESULT Bench(
if (name.IsEqualTo("time"))
{
- RINOK(ParsePropToUInt32(UString(), propVariant, testTimeMs));
+ RINOK(ParsePropToUInt32(UString(), propVariant, testTimeMs))
needSetComplexity = true;
testTimeMs *= 1000;
continue;
@@ -3624,7 +3760,7 @@ HRESULT Bench(
if (name.IsEqualTo("timems"))
{
- RINOK(ParsePropToUInt32(UString(), propVariant, testTimeMs));
+ RINOK(ParsePropToUInt32(UString(), propVariant, testTimeMs))
needSetComplexity = true;
continue;
}
@@ -3632,7 +3768,7 @@ HRESULT Bench(
if (name.IsEqualTo("tic"))
{
UInt32 v;
- RINOK(ParsePropToUInt32(UString(), propVariant, v));
+ RINOK(ParsePropToUInt32(UString(), propVariant, v))
if (v >= 64)
return E_INVALIDARG;
complexInCommands = (UInt64)1 << v;
@@ -3644,7 +3780,7 @@ HRESULT Bench(
isFixedDict = true;
if (isCurrent_fixedDict || name.IsEqualTo("ds"))
{
- RINOK(ParsePropToUInt32(UString(), propVariant, startDicLog));
+ RINOK(ParsePropToUInt32(UString(), propVariant, startDicLog))
if (startDicLog > 32)
return E_INVALIDARG;
startDicLog_Defined = true;
@@ -3653,17 +3789,17 @@ HRESULT Bench(
if (name.IsEqualTo("mts"))
{
- RINOK(ParsePropToUInt32(UString(), propVariant, numThreads_Start));
+ RINOK(ParsePropToUInt32(UString(), propVariant, numThreads_Start))
continue;
}
if (name.IsEqualTo("af"))
{
UInt32 bundle;
- RINOK(ParsePropToUInt32(UString(), propVariant, bundle));
+ RINOK(ParsePropToUInt32(UString(), propVariant, bundle))
if (bundle > 0 && bundle < numCPUs)
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
affinityMode.SetLevels(numCPUs, 2);
affinityMode.NumBundleThreads = bundle;
#endif
@@ -3674,7 +3810,7 @@ HRESULT Bench(
if (name.IsEqualTo("freq"))
{
UInt32 freq32 = 0;
- RINOK(ParsePropToUInt32(UString(), propVariant, freq32));
+ RINOK(ParsePropToUInt32(UString(), propVariant, freq32))
if (freq32 == 0)
return E_INVALIDARG;
specifiedFreq = (UInt64)freq32 * 1000000;
@@ -3691,7 +3827,7 @@ HRESULT Bench(
if (name.IsPrefixedBy_Ascii_NoCase("mt"))
{
- UString s = name.Ptr(2);
+ const UString s = name.Ptr(2);
if (s.IsEqualTo("*")
|| (s.IsEmpty()
&& propVariant.vt == VT_BSTR
@@ -3700,13 +3836,13 @@ HRESULT Bench(
multiThreadTests = true;
continue;
}
- #ifndef _7ZIP_ST
- RINOK(ParseMtProp(s, propVariant, numCPUs, numThreadsSpecified));
+ #ifndef Z7_ST
+ RINOK(ParseMtProp(s, propVariant, numCPUs, numThreadsSpecified))
#endif
continue;
}
- RINOK(method.ParseMethodFromPROPVARIANT(name, propVariant));
+ RINOK(method.ParseMethodFromPROPVARIANT(name, propVariant))
}
}
@@ -3714,13 +3850,13 @@ HRESULT Bench(
{
AString s;
- #ifndef _WIN32
+ #ifndef _WIN32
s += "Compiler: ";
GetCompiler(s);
printCallback->Print(s);
printCallback->NewLine();
s.Empty();
- #endif
+ #endif
GetSystemInfoText(s);
printCallback->Print(s);
@@ -3744,7 +3880,7 @@ HRESULT Bench(
for (int jj = 0;; jj++)
{
if (printCallback)
- RINOK(printCallback->CheckBreak());
+ RINOK(printCallback->CheckBreak())
UInt64 start = ::GetTimeCount();
UInt32 sum = (UInt32)start;
@@ -3776,7 +3912,7 @@ HRESULT Bench(
}
if (freqCallback)
{
- RINOK(freqCallback->AddCpuFreq(1, hz, kBenchmarkUsageMult));
+ RINOK(freqCallback->AddCpuFreq(1, hz, kBenchmarkUsageMult))
}
if (jj >= 1)
@@ -3806,7 +3942,7 @@ HRESULT Bench(
}
if (freqCallback)
{
- RINOK(freqCallback->FreqsFinished(1));
+ RINOK(freqCallback->FreqsFinished(1))
}
}
@@ -3830,17 +3966,24 @@ HRESULT Bench(
printCallback->Print(s);
printCallback->Print("T CPU Freq (MHz):");
}
- UInt64 numMilCommands = 1 << 10;
+ UInt64 numMilCommands = 1 <<
+ #ifdef _DEBUG
+ 7;
+ #else
+ 10;
+ #endif
+
if (specifiedFreq != 0)
{
while (numMilCommands > 1 && specifiedFreq < (numMilCommands * 1000000))
numMilCommands >>= 1;
}
- for (int jj = 0;; jj++)
+ // for (int jj = 0;; jj++)
+ for (;;)
{
if (printCallback)
- RINOK(printCallback->CheckBreak());
+ RINOK(printCallback->CheckBreak())
{
// PrintLeft(f, "CPU", kFieldSize_Name);
@@ -3855,16 +3998,16 @@ HRESULT Bench(
fb.showFreq = true;
fb.specifiedFreq = 1;
- HRESULT res = fb.FreqBench(NULL /* printCallback */
- #ifndef _7ZIP_ST
+ const HRESULT res = fb.FreqBench(NULL /* printCallback */
+ #ifndef Z7_ST
, &affinityMode
#endif
);
- RINOK(res);
+ RINOK(res)
if (freqCallback)
{
- RINOK(freqCallback->AddCpuFreq(numThreads, fb.CpuFreqRes, fb.UsageRes));
+ RINOK(freqCallback->AddCpuFreq(numThreads, fb.CpuFreqRes, fb.UsageRes))
}
if (printCallback)
@@ -3889,7 +4032,7 @@ HRESULT Bench(
}
// if (jj >= 1)
{
- bool needStop = (numMilCommands >= (1 <<
+ const bool needStop = (numMilCommands >= (1 <<
#ifdef _DEBUG
7
#else
@@ -3903,7 +4046,7 @@ HRESULT Bench(
}
if (freqCallback)
{
- RINOK(freqCallback->FreqsFinished(numThreads));
+ RINOK(freqCallback->FreqsFinished(numThreads))
}
}
@@ -3923,10 +4066,12 @@ HRESULT Bench(
UInt64 dict = (UInt64)1 << startDicLog;
const bool dictIsDefined = (isFixedDict || method.Get_DicSize(dict));
- const int level = method.GetLevel();
+ const unsigned level = method.GetLevel();
- if (method.MethodName.IsEmpty())
- method.MethodName = "LZMA";
+ AString &methodName = method.MethodName;
+ const AString original_MethodName = methodName;
+ if (methodName.IsEmpty())
+ methodName = "LZMA";
if (benchCallback)
{
@@ -3949,7 +4094,7 @@ HRESULT Bench(
return MethodBench(
EXTERNAL_CODECS_LOC_VARS
complexInCommands,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
true, numThreadsSpecified,
&affinityMode,
#endif
@@ -3958,13 +4103,28 @@ HRESULT Bench(
kOldLzmaDictBits, printCallback, benchCallback, &benchProps);
}
- AString methodName (method.MethodName);
if (methodName.IsEqualTo_Ascii_NoCase("CRC"))
methodName = "crc32";
- method.MethodName = methodName;
+
CMethodId hashID;
-
- if (FindHashMethod(EXTERNAL_CODECS_LOC_VARS methodName, hashID))
+ const bool isHashMethod = FindHashMethod(EXTERNAL_CODECS_LOC_VARS methodName, hashID);
+ int codecIndex = -1;
+ bool isFilter = false;
+ if (!isHashMethod)
+ {
+ UInt32 numStreams;
+ codecIndex = FindMethod_Index(EXTERNAL_CODECS_LOC_VARS original_MethodName,
+ true, // encode
+ hashID, numStreams, isFilter);
+ // we can allow non filter for BW tests
+ if (!isFilter) codecIndex = -1;
+ }
+
+ CBenchCallbackToPrint callback;
+ callback.Init();
+ callback._file = printCallback;
+
+ if (isHashMethod || codecIndex != -1)
{
if (!printCallback)
return S_FALSE;
@@ -3981,17 +4141,27 @@ HRESULT Bench(
dict64 = fileDataBuffer.Size();
}
- // methhodName.RemoveChar(L'-');
- UInt32 complexity = 10000;
+ for (;;)
+ {
+ const int index = method.FindProp(NCoderPropID::kDictionarySize);
+ if (index < 0)
+ break;
+ method.Props.Delete((unsigned)index);
+ }
+
+ // methodName.RemoveChar(L'-');
+ Int32 complexity = 16 * k_Hash_Complex_Mult; // for unknown hash method
const UInt32 *checkSum = NULL;
+ int benchIndex = -1;
+
+ if (isHashMethod)
{
- unsigned i;
- for (i = 0; i < ARRAY_SIZE(g_Hash); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_Hash); i++)
{
const CBenchHash &h = g_Hash[i];
AString benchMethod (h.Name);
AString benchProps;
- int propPos = benchMethod.Find(':');
+ const int propPos = benchMethod.Find(':');
if (propPos >= 0)
{
benchProps = benchMethod.Ptr((unsigned)(propPos + 1));
@@ -4000,45 +4170,80 @@ HRESULT Bench(
if (AreSameMethodNames(benchMethod, methodName))
{
- bool isMainMathed = method.PropsString.IsEmpty();
- if (isMainMathed)
- isMainMathed = !checkSum
- || (benchMethod.IsEqualTo_Ascii_NoCase("crc32") && benchProps.IsEqualTo_Ascii_NoCase("8"));
const bool sameProps = method.PropsString.IsEqualTo_Ascii_NoCase(benchProps);
- if (sameProps || isMainMathed)
+ /*
+ bool isMainMethod = method.PropsString.IsEmpty();
+ if (isMainMethod)
+ isMainMethod = !checkSum
+ || (benchMethod.IsEqualTo_Ascii_NoCase("crc32") && benchProps.IsEqualTo_Ascii_NoCase("8"));
+ if (sameProps || isMainMethod)
+ */
{
- complexity = h.Complex;
+ complexity = (Int32)h.Complex;
checkSum = &h.CheckSum;
if (sameProps)
break;
+ /*
+ if property. is not specified, we use the complexity
+ for latest fastest method (crc32:64)
+ */
}
}
}
- if (!checkSum)
- return E_NOTIMPL;
+ // if (!checkSum) return E_NOTIMPL;
+ }
+ else
+ {
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_Bench); i++)
+ {
+ const CBenchMethod &bench = g_Bench[i];
+ AString benchMethod (bench.Name);
+ AString benchProps;
+ const int propPos = benchMethod.Find(':');
+ if (propPos >= 0)
+ {
+ benchProps = benchMethod.Ptr((unsigned)(propPos + 1));
+ benchMethod.DeleteFrom((unsigned)propPos);
+ }
+
+ if (AreSameMethodNames(benchMethod, methodName))
+ {
+ const bool sameProps = method.PropsString.IsEqualTo_Ascii_NoCase(benchProps);
+ // bool isMainMethod = method.PropsString.IsEmpty();
+ // if (sameProps || isMainMethod)
+ {
+ benchIndex = (int)i;
+ if (sameProps)
+ break;
+ }
+ }
+ }
+ // if (benchIndex < 0) return E_NOTIMPL;
}
{
- UInt64 usage = 1 << 20;
+ /* we count usage only for crc and filter. non-filters are not supported */
+ UInt64 usage = (1 << 20);
UInt64 bufSize = dict64;
+ UInt32 numBlocks = isHashMethod ? 1 : 3;
if (use_fileData)
{
usage += fileDataBuffer.Size();
if (bufSize > fileDataBuffer.Size())
bufSize = fileDataBuffer.Size();
- #ifndef _7ZIP_ST
- if (numThreadsSpecified != 1)
- usage += bufSize * numThreadsSpecified * (k_Crc_CreateLocalBuf_For_File ? 1 : 0);
- #endif
+ if (isHashMethod)
+ {
+ numBlocks = 0;
+ #ifndef Z7_ST
+ if (numThreadsSpecified != 1)
+ numBlocks = (k_Crc_CreateLocalBuf_For_File ? 1 : 0);
+ #endif
+ }
}
- else
- usage += numThreadsSpecified * bufSize;
+ usage += numThreadsSpecified * bufSize * numBlocks;
Print_Usage_and_Threads(f, usage, numThreadsSpecified);
}
-
- f.NewLine();
-
- const unsigned kFieldSize_CrcSpeed = 7;
+
CUIntVector numThreadsVector;
{
unsigned nt = numThreads_Start;
@@ -4047,136 +4252,225 @@ HRESULT Bench(
if (nt > numThreadsSpecified)
break;
numThreadsVector.Add(nt);
- unsigned next = nt * 2;
- UInt32 ntHalf= numThreadsSpecified / 2;
+ const unsigned next = nt * 2;
+ const UInt32 ntHalf= numThreadsSpecified / 2;
if (ntHalf > nt && ntHalf < next)
numThreadsVector.Add(ntHalf);
if (numThreadsSpecified > nt && numThreadsSpecified < next)
numThreadsVector.Add(numThreadsSpecified);
nt = next;
}
+ }
+
+ unsigned numColumns = isHashMethod ? 1 : 2;
+ CTempValues speedTotals;
+ CTempValues usageTotals;
+ {
+ const unsigned numItems = numThreadsVector.Size() * numColumns;
+ speedTotals.Alloc(numItems);
+ usageTotals.Alloc(numItems);
+ for (unsigned i = 0; i < numItems; i++)
{
- f.NewLine();
- f.Print("THRD");
- FOR_VECTOR (ti, numThreadsVector)
- {
- PrintNumber(f, numThreadsVector[ti], 1 + kFieldSize_Usage + kFieldSize_CrcSpeed);
- }
+ speedTotals.Values[i] = 0;
+ usageTotals.Values[i] = 0;
}
+ }
+
+ f.NewLine();
+ for (unsigned line = 0; line < 3; line++)
+ {
+ f.NewLine();
+ f.Print(line == 0 ? "THRD" : line == 1 ? " " : "Size");
+ FOR_VECTOR (ti, numThreadsVector)
{
- f.NewLine();
- f.Print(" ");
- FOR_VECTOR (ti, numThreadsVector)
+ if (ti != 0)
+ Print_Delimiter(f);
+ if (line == 0)
{
- PrintRight(f, "Usage", kFieldSize_Usage + 1);
- PrintRight(f, "BW", kFieldSize_CrcSpeed + 1);
+ PrintSpaces(f, (kFieldSize_CrcSpeed + kFieldSize_Usage + 2) * (numColumns - 1));
+ PrintNumber(f, numThreadsVector[ti], 1 + kFieldSize_Usage + kFieldSize_CrcSpeed);
}
- }
- {
- f.NewLine();
- f.Print("Size");
- FOR_VECTOR (ti, numThreadsVector)
+ else
{
- PrintRight(f, "%", kFieldSize_Usage + 1);
- PrintRight(f, "MB/s", kFieldSize_CrcSpeed + 1);
+ for (unsigned c = 0; c < numColumns; c++)
+ {
+ PrintRight(f, line == 1 ? "Usage" : "%", kFieldSize_Usage + 1);
+ PrintRight(f, line == 1 ? "BW" : "MB/s", kFieldSize_CrcSpeed + 1);
+ }
}
}
}
-
- f.NewLine();
f.NewLine();
- CTempValues speedTotals(numThreadsVector.Size());
- CTempValues usageTotals(numThreadsVector.Size());
- {
- FOR_VECTOR (ti, numThreadsVector)
- {
- speedTotals.Values[ti] = 0;
- usageTotals.Values[ti] = 0;
- }
- }
-
UInt64 numSteps = 0;
- for (UInt32 i = 0; i < numIterations; i++)
+ // for (UInt32 iter = 0; iter < numIterations; iter++)
+ // {
+ unsigned pow = 10; // kNumHashDictBits
+ if (startDicLog_Defined)
+ pow = startDicLog;
+
+ // #define NUM_SUB_BITS 2
+ // pow <<= NUM_SUB_BITS;
+ for (;; pow++)
{
- unsigned pow = 10; // kNumHashDictBits
- if (startDicLog_Defined)
- pow = startDicLog;
- for (;; pow++)
- {
- const UInt64 bufSize = (UInt64)1 << pow;
- char s[16];
- ConvertUInt32ToString(pow, s);
- unsigned pos = MyStringLen(s);
- s[pos++] = ':';
- s[pos++] = ' ';
- s[pos] = 0;
- PrintRight(f, s, 4);
-
- size_t dataSize = fileDataBuffer.Size();
- if (dataSize > bufSize || !use_fileData)
- dataSize = (size_t)bufSize;
+ const UInt64 bufSize = (UInt64)1 << pow;
+ // UInt64 bufSize = (UInt64)1 << (pow >> NUM_SUB_BITS);
+ // bufSize += ((UInt64)pow & ((1 << NUM_SUB_BITS) - 1)) << ((pow >> NUM_SUB_BITS) - NUM_SUB_BITS);
+ size_t dataSize = fileDataBuffer.Size();
+ if (dataSize > bufSize || !use_fileData)
+ dataSize = (size_t)bufSize;
+
+ for (UInt32 iter = 0; iter < numIterations; iter++)
+ {
+ Print_Pow(f, pow);
+ // PrintNumber(f, bufSize >> 10, 4);
+
FOR_VECTOR (ti, numThreadsVector)
{
- RINOK(f.CheckBreak());
- const UInt32 t = numThreadsVector[ti];
- UInt64 speed = 0;
- UInt64 usage = 0;
-
- HRESULT res = CrcBench(EXTERNAL_CODECS_LOC_VARS complexInCommands,
- t,
+ RINOK(f.CheckBreak())
+ const UInt32 numThreads = numThreadsVector[ti];
+ if (isHashMethod)
+ {
+ UInt64 speed = 0;
+ UInt64 usage = 0;
+ const HRESULT res = CrcBench(EXTERNAL_CODECS_LOC_VARS complexInCommands,
+ numThreads,
dataSize, (const Byte *)fileDataBuffer,
speed, usage,
- complexity,
+ (UInt32)complexity,
1, // benchWeight,
(pow == kNumHashDictBits && !use_fileData) ? checkSum : NULL,
method,
&f,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
&affinityMode,
#endif
false, // showRating
NULL, false, 0);
-
- RINOK(res);
-
- PrintUsage(f, usage, kFieldSize_Usage);
- PrintNumber(f, speed / 1000000, kFieldSize_CrcSpeed);
- speedTotals.Values[ti] += speed;
- usageTotals.Values[ti] += usage;
+ RINOK(res)
+
+ if (ti != 0)
+ Print_Delimiter(f);
+
+ Bench_BW_Print_Usage_Speed(f, usage, speed);
+ speedTotals.Values[ti] += speed;
+ usageTotals.Values[ti] += usage;
+ }
+ else
+ {
+ {
+ unsigned keySize = 32;
+ if (IsString1PrefixedByString2(methodName, "AES128")) keySize = 16;
+ else if (IsString1PrefixedByString2(methodName, "AES192")) keySize = 24;
+ callback.BenchProps.KeySize = keySize;
+ }
+
+ COneMethodInfo method2 = method;
+ unsigned bench_DictBits;
+
+ if (benchIndex >= 0)
+ {
+ const CBenchMethod &bench = g_Bench[benchIndex];
+ callback.BenchProps.EncComplex = bench.EncComplex;
+ callback.BenchProps.DecComplexUnc = bench.DecComplexUnc;
+ callback.BenchProps.DecComplexCompr = bench.DecComplexCompr;
+ bench_DictBits = bench.DictBits;
+ // bench_DictBits = kOldLzmaDictBits; = 32 default : for debug
+ }
+ else
+ {
+ bench_DictBits = kOldLzmaDictBits; // = 32 default
+ if (isFilter)
+ {
+ const unsigned k_UnknownCoderComplexity = 4;
+ callback.BenchProps.EncComplex = k_UnknownCoderComplexity;
+ callback.BenchProps.DecComplexUnc = k_UnknownCoderComplexity;
+ }
+ else
+ {
+ callback.BenchProps.EncComplex = 1 << 10;
+ callback.BenchProps.DecComplexUnc = 1 << 6;
+ }
+ callback.BenchProps.DecComplexCompr = 0;
+ }
+ callback.NeedPrint = false;
+
+ if (StringsAreEqualNoCase_Ascii(method2.MethodName, "LZMA"))
+ {
+ const NCOM::CPropVariant propVariant = (UInt32)pow;
+ RINOK(method2.ParseMethodFromPROPVARIANT((UString)"d", propVariant))
+ }
+
+ const HRESULT res = MethodBench(
+ EXTERNAL_CODECS_LOC_VARS
+ complexInCommands,
+ #ifndef Z7_ST
+ false, // oldLzmaBenchMode
+ numThreadsVector[ti],
+ &affinityMode,
+ #endif
+ method2,
+ dataSize, (const Byte *)fileDataBuffer,
+ bench_DictBits,
+ printCallback,
+ &callback,
+ &callback.BenchProps);
+ RINOK(res)
+
+ if (ti != 0)
+ Print_Delimiter(f);
+
+ for (unsigned i = 0; i < 2; i++)
+ {
+ const CBenchInfo &bi = callback.BenchInfo_Results[i];
+ const UInt64 usage = bi.GetUsage();
+ const UInt64 speed = bi.GetUnpackSizeSpeed();
+ usageTotals.Values[ti * 2 + i] += usage;
+ speedTotals.Values[ti * 2 + i] += speed;
+ Bench_BW_Print_Usage_Speed(f, usage, speed);
+ }
+ }
}
f.NewLine();
numSteps++;
- if (dataSize >= dict64)
- break;
}
+ if (dataSize >= dict64)
+ break;
}
+
if (numSteps != 0)
{
- f.NewLine();
f.Print("Avg:");
for (unsigned ti = 0; ti < numThreadsVector.Size(); ti++)
{
- PrintUsage(f, usageTotals.Values[ti] / numSteps, kFieldSize_Usage);
- PrintNumber(f, speedTotals.Values[ti] / numSteps / 1000000, kFieldSize_CrcSpeed);
+ if (ti != 0)
+ Print_Delimiter(f);
+ for (unsigned i = 0; i < numColumns; i++)
+ Bench_BW_Print_Usage_Speed(f,
+ usageTotals.Values[ti * numColumns + i] / numSteps,
+ speedTotals.Values[ti * numColumns + i] / numSteps);
}
f.NewLine();
}
+
return S_OK;
}
bool use2Columns = false;
- bool totalBenchMode = (method.MethodName.IsEqualTo_Ascii_NoCase("*"));
+ bool totalBenchMode = false;
bool onlyHashBench = false;
- if (method.MethodName.IsEqualTo_Ascii_NoCase("hash"))
+ if (methodName.IsEqualTo_Ascii_NoCase("hash"))
{
onlyHashBench = true;
+ methodName = "*";
totalBenchMode = true;
}
+ else if (methodName.Find('*') >= 0)
+ totalBenchMode = true;
// ---------- Threads loop ----------
for (unsigned threadsPassIndex = 0; threadsPassIndex < 3; threadsPassIndex++)
@@ -4207,10 +4501,6 @@ HRESULT Bench(
}
}
- CBenchCallbackToPrint callback;
- callback.Init();
- callback._file = printCallback;
-
IBenchPrintCallback &f = *printCallback;
if (threadsPassIndex > 0)
@@ -4230,7 +4520,7 @@ HRESULT Bench(
if (ramSize_Defined)
for (; dicSizeLog > kBenchMinDicLogSize; dicSizeLog--)
- if (GetBenchMemoryUsage(numThreads, level, ((UInt64)1 << dicSizeLog), totalBenchMode) + (8 << 20) <= ramSize)
+ if (GetBenchMemoryUsage(numThreads, (int)level, ((UInt64)1 << dicSizeLog), totalBenchMode) + (8 << 20) <= ramSize)
break;
dict = (UInt64)1 << dicSizeLog;
@@ -4246,7 +4536,7 @@ HRESULT Bench(
Print_Usage_and_Threads(f,
onlyHashBench ?
GetBenchMemoryUsage_Hash(numThreads, dict) :
- GetBenchMemoryUsage(numThreads, level, dict, totalBenchMode),
+ GetBenchMemoryUsage(numThreads, (int)level, dict, totalBenchMode),
numThreads);
f.NewLine();
@@ -4355,12 +4645,12 @@ HRESULT Bench(
fb.showFreq = (freqTest == kNumCpuTests - 1 || specifiedFreq != 0);
fb.specifiedFreq = specifiedFreq;
- HRESULT res = fb.FreqBench(printCallback
- #ifndef _7ZIP_ST
+ const HRESULT res = fb.FreqBench(printCallback
+ #ifndef Z7_ST
, &affinityMode
#endif
);
- RINOK(res);
+ RINOK(res)
cpuFreq = fb.CpuFreqRes;
callback.NewLine();
@@ -4390,9 +4680,9 @@ HRESULT Bench(
dataSize = (size_t)dict;
}
- HRESULT res = TotalBench(EXTERNAL_CODECS_LOC_VARS
- complexInCommands,
- #ifndef _7ZIP_ST
+ const HRESULT res = TotalBench(EXTERNAL_CODECS_LOC_VARS
+ method, complexInCommands,
+ #ifndef Z7_ST
numThreads,
&affinityMode,
#endif
@@ -4400,7 +4690,7 @@ HRESULT Bench(
dataSize,
(const Byte *)fileDataBuffer,
printCallback, &callback);
- RINOK(res);
+ RINOK(res)
}
{
@@ -4418,14 +4708,16 @@ HRESULT Bench(
dataSize = (size_t)dict;
}
- HRESULT res = TotalBench_Hash(EXTERNAL_CODECS_LOC_VARS complexInCommands, numThreads,
+ const HRESULT res = TotalBench_Hash(EXTERNAL_CODECS_LOC_VARS
+ method, complexInCommands,
+ numThreads,
dataSize, (const Byte *)fileDataBuffer,
printCallback, &callback,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
&affinityMode,
#endif
&callback.EncodeRes, true, cpuFreq);
- RINOK(res);
+ RINOK(res)
}
callback.NewLine();
@@ -4439,12 +4731,12 @@ HRESULT Bench(
fb.showFreq = (specifiedFreq != 0);
fb.specifiedFreq = specifiedFreq;
- HRESULT res = fb.FreqBench(printCallback
- #ifndef _7ZIP_ST
+ const HRESULT res = fb.FreqBench(printCallback
+ #ifndef Z7_ST
, &affinityMode
#endif
);
- RINOK(res);
+ RINOK(res)
callback.NewLine();
}
}
@@ -4455,12 +4747,12 @@ HRESULT Bench(
if (!methodName.IsEqualTo_Ascii_NoCase("LZMA"))
{
unsigned i;
- for (i = 0; i < ARRAY_SIZE(g_Bench); i++)
+ for (i = 0; i < Z7_ARRAY_SIZE(g_Bench); i++)
{
const CBenchMethod &h = g_Bench[i];
AString benchMethod (h.Name);
AString benchProps;
- int propPos = benchMethod.Find(':');
+ const int propPos = benchMethod.Find(':');
if (propPos >= 0)
{
benchProps = benchMethod.Ptr((unsigned)(propPos + 1));
@@ -4475,14 +4767,16 @@ HRESULT Bench(
{
callback.BenchProps.EncComplex = h.EncComplex;
callback.BenchProps.DecComplexCompr = h.DecComplexCompr;
- callback.BenchProps.DecComplexUnc = h.DecComplexUnc;;
+ callback.BenchProps.DecComplexUnc = h.DecComplexUnc;
needSetComplexity = false;
break;
}
}
}
- if (i == ARRAY_SIZE(g_Bench))
+ /*
+ if (i == Z7_ARRAY_SIZE(g_Bench))
return E_NOTIMPL;
+ */
}
if (needSetComplexity)
callback.BenchProps.SetLzmaCompexity();
@@ -4499,12 +4793,7 @@ HRESULT Bench(
pow--;
for (; GetDictSizeFromLog(pow) <= dict; pow++)
{
- char s[16];
- ConvertUInt32ToString(pow, s);
- unsigned pos = MyStringLen(s);
- s[pos++] = ':';
- s[pos] = 0;
- PrintLeft(f, s, kFieldSize_SmallName);
+ Print_Pow(f, pow);
callback.DictSize = (UInt64)1 << pow;
COneMethodInfo method2 = method;
@@ -4515,7 +4804,7 @@ HRESULT Bench(
// method2 can have two different dictionary size properties.
// And last property is main.
NCOM::CPropVariant propVariant = (UInt32)pow;
- RINOK(method2.ParseMethodFromPROPVARIANT((UString)"d", propVariant));
+ RINOK(method2.ParseMethodFromPROPVARIANT((UString)"d", propVariant))
}
size_t uncompressedDataSize;
@@ -4532,10 +4821,10 @@ HRESULT Bench(
uncompressedDataSize += kAdditionalSize;
}
- HRESULT res = MethodBench(
+ const HRESULT res = MethodBench(
EXTERNAL_CODECS_LOC_VARS
complexInCommands,
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
true, numThreads,
&affinityMode,
#endif
@@ -4543,7 +4832,7 @@ HRESULT Bench(
uncompressedDataSize, (const Byte *)fileDataBuffer,
kOldLzmaDictBits, printCallback, &callback, &callback.BenchProps);
f.NewLine();
- RINOK(res);
+ RINOK(res)
if (!multiDict)
break;
}
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/Bench.h b/3rdparty/lzma/CPP/7zip/UI/Common/Bench.h
index ab0c30487c4..313676dd5a1 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/Bench.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/Bench.h
@@ -1,7 +1,7 @@
// Bench.h
-#ifndef __7ZIP_BENCH_H
-#define __7ZIP_BENCH_H
+#ifndef ZIP7_INC_7ZIP_BENCH_H
+#define ZIP7_INC_7ZIP_BENCH_H
#include "../../../Windows/System.h"
@@ -71,32 +71,31 @@ struct CTotalBenchRes
};
+const unsigned kBenchMinDicLogSize = 18;
+
+UInt64 GetBenchMemoryUsage(UInt32 numThreads, int level, UInt64 dictionary, bool totalBench);
-struct IBenchCallback
+Z7_PURE_INTERFACES_BEGIN
+DECLARE_INTERFACE(IBenchCallback)
{
// virtual HRESULT SetFreq(bool showFreq, UInt64 cpuFreq) = 0;
virtual HRESULT SetEncodeResult(const CBenchInfo &info, bool final) = 0;
virtual HRESULT SetDecodeResult(const CBenchInfo &info, bool final) = 0;
};
-
-
-const unsigned kBenchMinDicLogSize = 18;
-
-UInt64 GetBenchMemoryUsage(UInt32 numThreads, int level, UInt64 dictionary, bool totalBench);
-
-struct IBenchPrintCallback
+DECLARE_INTERFACE(IBenchPrintCallback)
{
virtual void Print(const char *s) = 0;
virtual void NewLine() = 0;
virtual HRESULT CheckBreak() = 0;
};
-struct IBenchFreqCallback
+DECLARE_INTERFACE(IBenchFreqCallback)
{
virtual HRESULT AddCpuFreq(unsigned numThreads, UInt64 freq, UInt64 usage) = 0;
virtual HRESULT FreqsFinished(unsigned numThreads) = 0;
};
+Z7_PURE_INTERFACES_END
HRESULT Bench(
DECL_EXTERNAL_CODECS_LOC_VARS
@@ -113,7 +112,7 @@ void GetSysInfo(AString &s1, AString &s2);
void GetCpuName(AString &s);
void AddCpuFeatures(AString &s);
-#ifdef _7ZIP_LARGE_PAGES
+#ifdef Z7_LARGE_PAGES
void Add_LargePages_String(AString &s);
#else
// #define Add_LargePages_String
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/DefaultName.h b/3rdparty/lzma/CPP/7zip/UI/Common/DefaultName.h
index df164560275..46f6e9e67e2 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/DefaultName.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/DefaultName.h
@@ -1,7 +1,7 @@
// DefaultName.h
-#ifndef __DEFAULT_NAME_H
-#define __DEFAULT_NAME_H
+#ifndef ZIP7_INC_DEFAULT_NAME_H
+#define ZIP7_INC_DEFAULT_NAME_H
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/DirItem.h b/3rdparty/lzma/CPP/7zip/UI/Common/DirItem.h
index 86e385fe7e0..ae8493766fa 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/DirItem.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/DirItem.h
@@ -1,7 +1,7 @@
// DirItem.h
-#ifndef __DIR_ITEM_H
-#define __DIR_ITEM_H
+#ifndef ZIP7_INC_DIR_ITEM_H
+#define ZIP7_INC_DIR_ITEM_H
#ifdef _WIN32
#include "../../../Common/MyLinux.h"
@@ -72,15 +72,15 @@ struct CDirItemsStat2: public CDirItemsStat
};
+Z7_PURE_INTERFACES_BEGIN
-#define INTERFACE_IDirItemsCallback(x) \
- virtual HRESULT ScanError(const FString &path, DWORD systemError) x; \
- virtual HRESULT ScanProgress(const CDirItemsStat &st, const FString &path, bool isDir) x; \
+#define Z7_IFACEN_IDirItemsCallback(x) \
+ virtual HRESULT ScanError(const FString &path, DWORD systemError) x \
+ virtual HRESULT ScanProgress(const CDirItemsStat &st, const FString &path, bool isDir) x \
-struct IDirItemsCallback
-{
- INTERFACE_IDirItemsCallback(=0)
-};
+Z7_IFACE_DECL_PURE(IDirItemsCallback)
+
+Z7_PURE_INTERFACES_END
struct CArcTime
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp
index dab372543ed..d536c4739aa 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp
@@ -18,7 +18,7 @@
#include "../../../Windows/FileName.h"
#if defined(_WIN32) && !defined(UNDER_CE)
-#define _USE_SECURITY_CODE
+#define Z7_USE_SECURITY_CODE
#include "../../../Windows/SecurityUtils.h"
#endif
@@ -183,7 +183,7 @@ CDirItems::CDirItems():
, ExcludeDirItems(false)
, ExcludeFileItems(false)
, ShareForWrite(false)
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
, ReadSecure(false)
#endif
#ifndef _WIN32
@@ -191,13 +191,13 @@ CDirItems::CDirItems():
#endif
, Callback(NULL)
{
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
_saclEnabled = InitLocalPrivileges();
#endif
}
-#ifdef _USE_SECURITY_CODE
+#ifdef Z7_USE_SECURITY_CODE
HRESULT CDirItems::AddSecurityItem(const FString &path, int &secureIndex)
{
@@ -236,7 +236,7 @@ HRESULT CDirItems::AddSecurityItem(const FString &path, int &secureIndex)
if (res)
{
if (secureSize != TempSecureBuf.Size())
- errorCode = ERROR_INVALID_FUNCTION;;
+ errorCode = ERROR_INVALID_FUNCTION;
}
else
errorCode = GetLastError();
@@ -253,7 +253,7 @@ HRESULT CDirItems::AddSecurityItem(const FString &path, int &secureIndex)
return AddError(path, errorCode);
}
-#endif // _USE_SECURITY_CODE
+#endif // Z7_USE_SECURITY_CODE
HRESULT CDirItems::EnumerateOneDir(const FString &phyPrefix, CObjectVector<NFind::CFileInfo> &files)
@@ -277,7 +277,7 @@ HRESULT CDirItems::EnumerateOneDir(const FString &phyPrefix, CObjectVector<NFind
files.Add(fi);
if (Callback && (ttt & kScanProgressStepMask) == kScanProgressStepMask)
{
- RINOK(ScanProgress(phyPrefix));
+ RINOK(ScanProgress(phyPrefix))
}
}
@@ -309,7 +309,7 @@ HRESULT CDirItems::EnumerateOneDir(const FString &phyPrefix, CObjectVector<NFind
{
const FString path = phyPrefix + de.Name;
{
- RINOK(AddError(path));
+ RINOK(AddError(path))
continue;
}
}
@@ -318,7 +318,7 @@ HRESULT CDirItems::EnumerateOneDir(const FString &phyPrefix, CObjectVector<NFind
if (Callback && (i & kScanProgressStepMask) == kScanProgressStepMask)
{
- RINOK(ScanProgress(phyPrefix));
+ RINOK(ScanProgress(phyPrefix))
}
}
@@ -332,10 +332,10 @@ HRESULT CDirItems::EnumerateOneDir(const FString &phyPrefix, CObjectVector<NFind
HRESULT CDirItems::EnumerateDir(int phyParent, int logParent, const FString &phyPrefix)
{
- RINOK(ScanProgress(phyPrefix));
+ RINOK(ScanProgress(phyPrefix))
CObjectVector<NFind::CFileInfo> files;
- RINOK(EnumerateOneDir(phyPrefix, files));
+ RINOK(EnumerateOneDir(phyPrefix, files))
FOR_VECTOR (i, files)
{
@@ -361,10 +361,10 @@ HRESULT CDirItems::EnumerateDir(int phyParent, int logParent, const FString &phy
if (CanIncludeItem(fi.IsDir()))
{
int secureIndex = -1;
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
if (ReadSecure)
{
- RINOK(AddSecurityItem(phyPrefix + fi.Name, secureIndex));
+ RINOK(AddSecurityItem(phyPrefix + fi.Name, secureIndex))
}
#endif
AddDirFileInfo(phyParent, logParent, secureIndex, fi);
@@ -372,14 +372,14 @@ HRESULT CDirItems::EnumerateDir(int phyParent, int logParent, const FString &phy
if (Callback && (i & kScanProgressStepMask) == kScanProgressStepMask)
{
- RINOK(ScanProgress(phyPrefix));
+ RINOK(ScanProgress(phyPrefix))
}
if (fi.IsDir())
{
const FString name2 = fi.Name + FCHAR_PATH_SEPARATOR;
unsigned parent = AddPrefix(phyParent, logParent, fs2us(name2));
- RINOK(EnumerateDir((int)parent, (int)parent, phyPrefix + name2));
+ RINOK(EnumerateDir((int)parent, (int)parent, phyPrefix + name2))
}
}
return S_OK;
@@ -412,6 +412,11 @@ HRESULT CDirItems::EnumerateItems2(
const int phyParent = phyPrefix.IsEmpty() ? -1 : (int)AddPrefix(-1, -1, fs2us(phyPrefix));
const int logParent = logPrefix.IsEmpty() ? -1 : (int)AddPrefix(-1, -1, logPrefix);
+ #ifdef _WIN32
+ const bool phyPrefix_isAltStreamPrefix =
+ NFile::NName::IsAltStreamPrefixWithColon(fs2us(phyPrefix));
+ #endif
+
FOR_VECTOR (i, filePaths)
{
const FString &filePath = filePaths[i];
@@ -419,7 +424,7 @@ HRESULT CDirItems::EnumerateItems2(
const FString phyPath = phyPrefix + filePath;
if (!FindFile_KeepDots(fi, phyPath FOLLOW_LINK_PARAM))
{
- RINOK(AddError(phyPath));
+ RINOK(AddError(phyPath))
continue;
}
if (requestedPaths)
@@ -437,20 +442,28 @@ HRESULT CDirItems::EnumerateItems2(
if (CanIncludeItem(fi.IsDir()))
{
int secureIndex = -1;
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
if (ReadSecure)
{
- RINOK(AddSecurityItem(phyPath, secureIndex));
+ RINOK(AddSecurityItem(phyPath, secureIndex))
}
#endif
+ #ifdef _WIN32
+ if (phyPrefix_isAltStreamPrefix && fi.IsAltStream)
+ {
+ const int pos = fi.Name.Find(FChar(':'));
+ if (pos >= 0)
+ fi.Name.DeleteFrontal((unsigned)pos + 1);
+ }
+ #endif
AddDirFileInfo(phyParentCur, logParent, secureIndex, fi);
}
if (fi.IsDir())
{
const FString name2 = fi.Name + FCHAR_PATH_SEPARATOR;
- unsigned parent = AddPrefix(phyParentCur, logParent, fs2us(name2));
- RINOK(EnumerateDir((int)parent, (int)parent, phyPrefix + phyPrefixCur + name2));
+ const unsigned parent = AddPrefix(phyParentCur, logParent, fs2us(name2));
+ RINOK(EnumerateDir((int)parent, (int)parent, phyPrefix + phyPrefixCur + name2))
}
}
@@ -625,10 +638,10 @@ static HRESULT EnumerateForItem(
if (dirItems.CanIncludeItem(fi.IsDir()))
{
int secureIndex = -1;
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
if (dirItems.ReadSecure)
{
- RINOK(dirItems.AddSecurityItem(phyPrefix + fi.Name, secureIndex));
+ RINOK(dirItems.AddSecurityItem(phyPrefix + fi.Name, secureIndex))
}
#endif
#if !defined(UNDER_CE)
@@ -654,7 +667,7 @@ static HRESULT EnumerateForItem(
if (dirItemIndex >= 0)
{
CDirItem &dirItem = dirItems.Items[(unsigned)dirItemIndex];
- RINOK(dirItems.SetLinkInfo(dirItem, fi, phyPrefix));
+ RINOK(dirItems.SetLinkInfo(dirItem, fi, phyPrefix))
if (dirItem.ReparseData.Size() != 0)
return S_OK;
}
@@ -666,7 +679,7 @@ static HRESULT EnumerateForItem(
phyPrefix + fi.Name, // with (fi.Name)
newParts, // with (fi.Name)
addAllSubStreams,
- dirItems));
+ dirItems))
}
#endif
@@ -787,7 +800,7 @@ static HRESULT EnumerateDirItems(
enterToSubFolders = true;
}
- RINOK(dirItems.ScanProgress(phyPrefix));
+ RINOK(dirItems.ScanProgress(phyPrefix))
// try direct_names case at first
if (addParts.IsEmpty() && !enterToSubFolders)
@@ -818,7 +831,7 @@ static HRESULT EnumerateDirItems(
bool needAltStreams = true;
#endif
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
bool needSecurity = true;
#endif
@@ -838,7 +851,7 @@ static HRESULT EnumerateDirItems(
/*
// do we need to ignore security info for "\\" folder ?
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
needSecurity = false;
#endif
*/
@@ -866,7 +879,7 @@ static HRESULT EnumerateDirItems(
#endif
if (!FindFile_KeepDots(fi, fullPath FOLLOW_LINK_PARAM2))
{
- RINOK(dirItems.AddError(fullPath));
+ RINOK(dirItems.AddError(fullPath))
continue;
}
@@ -884,7 +897,7 @@ static HRESULT EnumerateDirItems(
if (isDir ? !item.ForDir : !item.ForFile)
{
// RINOK(dirItems.AddError(fullPath, isDir ? MY_ERROR_IS_DIR: MY_ERROR_NOT_DIR));
- RINOK(dirItems.AddError(fullPath, DI_DEFAULT_ERROR));
+ RINOK(dirItems.AddError(fullPath, DI_DEFAULT_ERROR))
continue;
}
{
@@ -898,10 +911,10 @@ static HRESULT EnumerateDirItems(
if (dirItems.CanIncludeItem(fi.IsDir()))
{
int secureIndex = -1;
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
if (needSecurity && dirItems.ReadSecure)
{
- RINOK(dirItems.AddSecurityItem(fullPath, secureIndex));
+ RINOK(dirItems.AddSecurityItem(fullPath, secureIndex))
}
#endif
@@ -912,7 +925,7 @@ static HRESULT EnumerateDirItems(
#if !defined(UNDER_CE)
{
CDirItem &dirItem = dirItems.Items.Back();
- RINOK(dirItems.SetLinkInfo(dirItem, fi, phyPrefix));
+ RINOK(dirItems.SetLinkInfo(dirItem, fi, phyPrefix))
if (dirItem.ReparseData.Size() != 0)
continue;
}
@@ -926,7 +939,7 @@ static HRESULT EnumerateDirItems(
fullPath, // including (name)
pathParts, // including (fi.Name)
true, /* addAllSubStreams */
- dirItems));
+ dirItems))
}
#endif // defined(_WIN32)
@@ -975,9 +988,9 @@ static HRESULT EnumerateDirItems(
}
RINOK(EnumerateDirItems_Spec(*nextNode, phyParent, logParent, fi.Name, phyPrefix,
- newParts, dirItems, true));
+ newParts, dirItems, true))
}
-
+
for (i = 0; i < curNode.SubNodes.Size(); i++)
{
if (i < needEnterVector.Size())
@@ -987,17 +1000,20 @@ static HRESULT EnumerateDirItems(
FString fullPath = phyPrefix + us2fs(nextNode.Name);
NFind::CFileInfo fi;
- if (phyPrefix.IsEmpty())
+ if (nextNode.Name.IsEmpty())
{
- {
- if (nextNode.Name.IsEmpty())
- fullPath = CHAR_PATH_SEPARATOR;
- #ifdef _WIN32
- else if (NWildcard::IsDriveColonName(nextNode.Name))
- fullPath.Add_PathSepar();
- #endif
- }
+ if (phyPrefix.IsEmpty())
+ fullPath = CHAR_PATH_SEPARATOR;
+ }
+ #ifdef _WIN32
+ else if(phyPrefix.IsEmpty()
+ || (phyPrefix.Len() == NName::kSuperPathPrefixSize
+ && IsSuperPath(phyPrefix)))
+ {
+ if (NWildcard::IsDriveColonName(nextNode.Name))
+ fullPath.Add_PathSepar();
}
+ #endif
// we don't want to call fi.Find() for root folder or virtual folder
if ((phyPrefix.IsEmpty() && nextNode.Name.IsEmpty())
@@ -1015,19 +1031,19 @@ static HRESULT EnumerateDirItems(
{
if (!nextNode.AreThereIncludeItems())
continue;
- RINOK(dirItems.AddError(fullPath));
+ RINOK(dirItems.AddError(fullPath))
continue;
}
if (!fi.IsDir())
{
- RINOK(dirItems.AddError(fullPath, DI_DEFAULT_ERROR));
+ RINOK(dirItems.AddError(fullPath, DI_DEFAULT_ERROR))
continue;
}
}
RINOK(EnumerateDirItems_Spec(nextNode, phyParent, logParent, fi.Name, phyPrefix,
- UStringVector(), dirItems, false));
+ UStringVector(), dirItems, false))
}
return S_OK;
@@ -1073,7 +1089,7 @@ static HRESULT EnumerateDirItems(
fi.Name = driveName;
RINOK(EnumerateForItem(fi, curNode, phyParent, logParent, phyPrefix,
- addParts, dirItems, enterToSubFolders));
+ addParts, dirItems, enterToSubFolders))
}
return S_OK;
}
@@ -1088,7 +1104,7 @@ static HRESULT EnumerateDirItems(
// for (int y = 0; y < 1; y++)
{
// files.Clear();
- RINOK(dirItems.EnumerateOneDir(phyPrefix, files));
+ RINOK(dirItems.EnumerateOneDir(phyPrefix, files))
/*
FOR_VECTOR (i, files)
{
@@ -1134,10 +1150,10 @@ static HRESULT EnumerateDirItems(
#endif
RINOK(EnumerateForItem(fi, curNode, phyParent, logParent, phyPrefix,
- addParts, dirItems, enterToSubFolders));
+ addParts, dirItems, enterToSubFolders))
if (dirItems.Callback && (i & kScanProgressStepMask) == kScanProgressStepMask)
{
- RINOK(dirItems.ScanProgress(phyPrefix));
+ RINOK(dirItems.ScanProgress(phyPrefix))
}
}
@@ -1170,16 +1186,16 @@ HRESULT EnumerateItems(
RINOK(EnumerateDirItems(pair.Head, phyParent, logParent, us2fs(pair.Prefix), UStringVector(),
dirItems,
false // enterToSubFolders
- ));
+ ))
}
dirItems.ReserveDown();
#if defined(_WIN32) && !defined(UNDER_CE)
- RINOK(dirItems.FillFixedReparse());
+ RINOK(dirItems.FillFixedReparse())
#endif
#ifndef _WIN32
- RINOK(dirItems.FillDeviceSizes());
+ RINOK(dirItems.FillDeviceSizes())
#endif
return S_OK;
@@ -1237,7 +1253,7 @@ HRESULT CDirItems::FillFixedReparse()
}
*/
- RINOK(AddError(phyPath));
+ RINOK(AddError(phyPath))
continue;
}
@@ -1485,7 +1501,7 @@ HRESULT EnumerateDirItemsAndSort(
{
HRESULT res = EnumerateItems(censor, censorPathMode, addPathPrefix, dirItems);
st = dirItems.Stat;
- RINOK(res);
+ RINOK(res)
}
FOR_VECTOR (i, dirItems.Items)
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.h b/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.h
index 9b17c6006e8..24f1c8bd548 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/EnumDirItems.h
@@ -1,7 +1,7 @@
// EnumDirItems.h
-#ifndef __ENUM_DIR_ITEMS_H
-#define __ENUM_DIR_ITEMS_H
+#ifndef ZIP7_INC_ENUM_DIR_ITEMS_H
+#define ZIP7_INC_ENUM_DIR_ITEMS_H
#include "../../../Common/Wildcard.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ExitCode.h b/3rdparty/lzma/CPP/7zip/UI/Common/ExitCode.h
index b6d7d4dfcab..2d7b0293a0f 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ExitCode.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ExitCode.h
@@ -1,7 +1,7 @@
// ExitCode.h
-#ifndef __EXIT_CODE_H
-#define __EXIT_CODE_H
+#ifndef ZIP7_INC_EXIT_CODE_H
+#define ZIP7_INC_EXIT_CODE_H
namespace NExitCode {
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/Extract.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/Extract.cpp
index 58f5218b625..34b48719ec6 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/Extract.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/Extract.cpp
@@ -43,6 +43,7 @@ static HRESULT DecompressArchive(
const CExtractOptions &options,
bool calcCrc,
IExtractCallbackUI *callback,
+ IFolderArchiveExtractCallback *callbackFAE,
CArchiveExtractCallback *ecs,
UString &errorMessage,
UInt64 &stdInProcessed)
@@ -94,7 +95,7 @@ static HRESULT DecompressArchive(
if (!options.StdInMode)
{
UInt32 numItems;
- RINOK(archive->GetNumberOfItems(&numItems));
+ RINOK(archive->GetNumberOfItems(&numItems))
CReadArcItem item;
@@ -105,7 +106,7 @@ static HRESULT DecompressArchive(
|| options.ExcludeDirItems
|| options.ExcludeFileItems)
{
- RINOK(arc.GetItem(i, item));
+ RINOK(arc.GetItem(i, item))
if (item.IsDir ? options.ExcludeDirItems : options.ExcludeFileItems)
continue;
}
@@ -115,7 +116,7 @@ static HRESULT DecompressArchive(
item.IsAltStream = false;
if (!options.NtOptions.AltStreams.Val && arc.Ask_AltStream)
{
- RINOK(Archive_IsItem_AltStream(arc.Archive, i, item.IsAltStream));
+ RINOK(Archive_IsItem_AltStream(arc.Archive, i, item.IsAltStream))
}
#endif
}
@@ -194,7 +195,7 @@ static HRESULT DecompressArchive(
options.NtOptions,
options.StdInMode ? &wildcardCensor : NULL,
&arc,
- callback,
+ callbackFAE,
options.StdOutMode, options.TestMode,
outDir,
removePathParts, false,
@@ -207,14 +208,14 @@ static HRESULT DecompressArchive(
!options.TestMode &&
options.NtOptions.HardLinks.Val)
{
- RINOK(ecs->PrepareHardLinks(&realIndices));
+ RINOK(ecs->PrepareHardLinks(&realIndices))
}
#endif
HRESULT result;
- Int32 testMode = (options.TestMode && !calcCrc) ? 1: 0;
+ const Int32 testMode = (options.TestMode && !calcCrc) ? 1: 0;
CArchiveExtractCallback_Closer ecsCloser(ecs);
@@ -228,7 +229,7 @@ static HRESULT DecompressArchive(
else
result = archive->Extract(&realIndices.Front(), realIndices.Size(), testMode, ecs);
- HRESULT res2 = ecsCloser.Close();
+ const HRESULT res2 = ecsCloser.Close();
if (result == S_OK)
result = res2;
@@ -270,7 +271,8 @@ HRESULT Extract(
const CExtractOptions &options,
IOpenCallbackUI *openCallback,
IExtractCallbackUI *extractCallback,
- #ifndef _SFX
+ IFolderArchiveExtractCallback *faeCallback,
+ #ifndef Z7_SFX
IHashCalc *hash,
#endif
UString &errorMessage,
@@ -323,13 +325,13 @@ HRESULT Extract(
options.ZoneMode,
false // keepEmptyDirParts
);
- #ifndef _SFX
+ #ifndef Z7_SFX
ecs->SetHashMethods(hash);
#endif
if (multi)
{
- RINOK(extractCallback->SetTotal(totalPackSize));
+ RINOK(faeCallback->SetTotal(totalPackSize))
}
UInt64 totalPackProcessed = 0;
@@ -364,17 +366,17 @@ HRESULT Extract(
}
/*
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
openCallback->Open_Clear_PasswordWasAsked_Flag();
#endif
*/
- RINOK(extractCallback->BeforeOpen(arcPath, options.TestMode));
+ RINOK(extractCallback->BeforeOpen(arcPath, options.TestMode))
CArchiveLink arcLink;
CObjectVector<COpenType> types2 = types;
/*
- #ifndef _SFX
+ #ifndef Z7_SFX
if (types.IsEmpty())
{
int pos = arcPath.ReverseFind(L'.');
@@ -402,7 +404,7 @@ HRESULT Extract(
*/
COpenOptions op;
- #ifndef _SFX
+ #ifndef Z7_SFX
op.props = &options.Properties;
#endif
op.codecs = codecs;
@@ -418,7 +420,7 @@ HRESULT Extract(
return result;
// arcLink.Set_ErrorsText();
- RINOK(extractCallback->OpenResult(codecs, arcLink, arcPath, result));
+ RINOK(extractCallback->OpenResult(codecs, arcLink, arcPath, result))
if (result != S_OK)
{
@@ -428,7 +430,7 @@ HRESULT Extract(
continue;
}
- #if defined(_WIN32) && !defined(UNDER_CE) && !defined(_SFX)
+ #if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
if (options.ZoneMode != NExtract::NZoneIdMode::kNone
&& !options.StdInMode)
{
@@ -446,7 +448,13 @@ HRESULT Extract(
/* real Extracting to files is possible.
But user can think that hash archive contains real files.
So we block extracting here. */
- return E_NOTIMPL;
+ // v23.00 : we don't break process.
+ RINOK(extractCallback->OpenResult(codecs, arcLink, arcPath, E_NOTIMPL))
+ thereAreNotOpenArcs = true;
+ if (!options.StdInMode)
+ totalPackProcessed += fi.Size;
+ continue;
+ // return E_NOTIMPL; // before v23
}
FString dirPrefix = us2fs(options.HashDir);
if (dirPrefix.IsEmpty())
@@ -490,7 +498,7 @@ HRESULT Extract(
if (newPackSize < 0)
newPackSize = 0;
totalPackSize = (UInt64)newPackSize;
- RINOK(extractCallback->SetTotal(totalPackSize));
+ RINOK(faeCallback->SetTotal(totalPackSize))
}
}
}
@@ -498,13 +506,13 @@ HRESULT Extract(
/*
// Now openCallback and extractCallback use same object. So we don't need to send password.
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool passwordIsDefined;
UString password;
- RINOK(openCallback->Open_GetPasswordIfAny(passwordIsDefined, password));
+ RINOK(openCallback->Open_GetPasswordIfAny(passwordIsDefined, password))
if (passwordIsDefined)
{
- RINOK(extractCallback->SetPassword(password));
+ RINOK(extractCallback->SetPassword(password))
}
#endif
*/
@@ -520,7 +528,7 @@ HRESULT Extract(
UInt64 packProcessed;
const bool calcCrc =
- #ifndef _SFX
+ #ifndef Z7_SFX
(hash != NULL);
#else
false;
@@ -533,7 +541,8 @@ HRESULT Extract(
wildcardCensor,
options,
calcCrc,
- extractCallback, ecs, errorMessage, packProcessed));
+ extractCallback, faeCallback, ecs,
+ errorMessage, packProcessed))
if (!options.StdInMode)
packProcessed = fi.Size + arcLink.VolumesSize;
@@ -546,8 +555,8 @@ HRESULT Extract(
if (multi || thereAreNotOpenArcs)
{
- RINOK(extractCallback->SetTotal(totalPackSize));
- RINOK(extractCallback->SetCompleted(&totalPackProcessed));
+ RINOK(faeCallback->SetTotal(totalPackSize))
+ RINOK(faeCallback->SetCompleted(&totalPackProcessed))
}
st.NumFolders = ecs->NumFolders;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/Extract.h b/3rdparty/lzma/CPP/7zip/UI/Common/Extract.h
index f3d1126b779..b20f607d6d9 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/Extract.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/Extract.h
@@ -1,7 +1,7 @@
// Extract.h
-#ifndef __EXTRACT_H
-#define __EXTRACT_H
+#ifndef ZIP7_INC_EXTRACT_H
+#define ZIP7_INC_EXTRACT_H
#include "../../../Windows/FileFind.h"
@@ -52,12 +52,12 @@ struct CExtractOptions: public CExtractOptionsBase
// bool ShowDialog;
// bool PasswordEnabled;
// UString Password;
- #ifndef _SFX
+ #ifndef Z7_SFX
CObjectVector<CProperty> Properties;
#endif
/*
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CCodecs *Codecs;
#endif
*/
@@ -96,7 +96,8 @@ HRESULT Extract(
const CExtractOptions &options,
IOpenCallbackUI *openCallback,
IExtractCallbackUI *extractCallback,
- #ifndef _SFX
+ IFolderArchiveExtractCallback *faeCallback,
+ #ifndef Z7_SFX
IHashCalc *hash,
#endif
UString &errorMessage,
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ExtractMode.h b/3rdparty/lzma/CPP/7zip/UI/Common/ExtractMode.h
index 9ad831eb708..6e38f2601fb 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ExtractMode.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ExtractMode.h
@@ -1,7 +1,7 @@
// ExtractMode.h
-#ifndef __EXTRACT_MODE_H
-#define __EXTRACT_MODE_H
+#ifndef ZIP7_INC_EXTRACT_MODE_H
+#define ZIP7_INC_EXTRACT_MODE_H
namespace NExtract {
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp
index a1282b72229..88da4ad36c0 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp
@@ -124,7 +124,7 @@ static const char * const g_ReservedNames[] =
static bool IsSupportedName(const UString &name)
{
- for (unsigned i = 0; i < ARRAY_SIZE(g_ReservedNames); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_ReservedNames); i++)
{
const char *reservedName = g_ReservedNames[i];
unsigned len = MyStringLen(reservedName);
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h b/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h
index 8f8f9f1b2a0..bb1732fc8bb 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h
@@ -1,7 +1,7 @@
// ExtractingFilePath.h
-#ifndef __EXTRACTING_FILE_PATH_H
-#define __EXTRACTING_FILE_PATH_H
+#ifndef ZIP7_INC_EXTRACTING_FILE_PATH_H
+#define ZIP7_INC_EXTRACTING_FILE_PATH_H
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.cpp
index f0aa4bd14ff..94c8a06fc8b 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.cpp
@@ -22,7 +22,7 @@
using namespace NWindows;
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
extern const CExternalCodecs *g_ExternalCodecs_Ptr;
#endif
@@ -57,7 +57,7 @@ HRESULT CHashBundle::SetMethods(DECL_EXTERNAL_CODECS_LOC_VARS const UStringVecto
for (i = 0; i < names.Size(); i++)
{
COneMethodInfo m;
- RINOK(m.ParseMethodFromString(names[i]));
+ RINOK(m.ParseMethodFromString(names[i]))
if (m.MethodName.IsEmpty())
m.MethodName = k_DefaultHashMethod;
@@ -92,7 +92,7 @@ HRESULT CHashBundle::SetMethods(DECL_EXTERNAL_CODECS_LOC_VARS const UStringVecto
{
CMyComPtr<IHasher> hasher;
AString name;
- RINOK(CreateHasher(EXTERNAL_CODECS_LOC_VARS ids[i], name, hasher));
+ RINOK(CreateHasher(EXTERNAL_CODECS_LOC_VARS ids[i], name, hasher))
if (!hasher)
throw "Can't create hasher";
const COneMethodInfo &m = methods[i];
@@ -100,7 +100,7 @@ HRESULT CHashBundle::SetMethods(DECL_EXTERNAL_CODECS_LOC_VARS const UStringVecto
CMyComPtr<ICompressSetCoderProperties> scp;
hasher.QueryInterface(IID_ICompressSetCoderProperties, &scp);
if (scp)
- RINOK(m.SetCoderProps(scp, NULL));
+ RINOK(m.SetCoderProps(scp, NULL))
}
const UInt32 digestSize = hasher->GetDigestSize();
if (digestSize > k_HashCalc_DigestSize_Max)
@@ -330,14 +330,14 @@ static void AddHashResultLine(
if (numSpaces > 0)
SetSpacesAndNul(s + pos, (unsigned)numSpaces);
if (i != 0)
- _s += ' ';
+ _s.Add_Space();
_s += s;
}
/*
if (showSize)
{
- _s += ' ';
+ _s.Add_Space();
static const unsigned kSizeField_Len = 13; // same as in HashCon.cpp
char s[kSizeField_Len + 32];
char *p = s;
@@ -467,7 +467,7 @@ HRESULT HashCalc(
}
else
{
- RINOK(callback->StartScanning());
+ RINOK(callback->StartScanning())
dirItems.SymLinks = options.SymLinks.Val;
dirItems.ScanAltStreams = options.AltStreamsMode;
@@ -487,12 +487,12 @@ HRESULT HashCalc(
errorInfo = "Scanning error";
return res;
}
- RINOK(callback->FinishScanning(dirItems.Stat));
+ RINOK(callback->FinishScanning(dirItems.Stat))
}
unsigned i;
CHashBundle hb;
- RINOK(hb.SetMethods(EXTERNAL_CODECS_LOC_VARS options.Methods));
+ RINOK(hb.SetMethods(EXTERNAL_CODECS_LOC_VARS options.Methods))
// hb.Init();
hb.NumErrors = dirItems.Stat.NumErrors;
@@ -500,12 +500,12 @@ HRESULT HashCalc(
UInt64 totalSize = 0;
if (options.StdInMode)
{
- RINOK(callback->SetNumFiles(1));
+ RINOK(callback->SetNumFiles(1))
}
else
{
totalSize = dirItems.Stat.GetTotalBytes();
- RINOK(callback->SetTotal(totalSize));
+ RINOK(callback->SetTotal(totalSize))
}
const UInt32 kBufSize = 1 << 15;
@@ -515,7 +515,7 @@ HRESULT HashCalc(
UInt64 completeValue = 0;
- RINOK(callback->BeforeFirstFile(hb));
+ RINOK(callback->BeforeFirstFile(hb))
/*
CDynLimBuf hashFileString((size_t)1 << 31);
@@ -575,7 +575,7 @@ HRESULT HashCalc(
if (curSize > di.Size)
{
totalSize += curSize - di.Size;
- RINOK(callback->SetTotal(totalSize));
+ RINOK(callback->SetTotal(totalSize))
// printf("\ntotal = %d MiB\n", (unsigned)(totalSize >> 20));
}
}
@@ -585,7 +585,7 @@ HRESULT HashCalc(
}
}
- RINOK(callback->GetStream(path, isDir));
+ RINOK(callback->GetStream(path, isDir))
UInt64 fileSize = 0;
hb.InitForNewFile();
@@ -597,10 +597,10 @@ HRESULT HashCalc(
if ((step & 0xFF) == 0)
{
// printf("\ncompl = %d\n", (unsigned)(completeValue >> 20));
- RINOK(callback->SetCompleted(&completeValue));
+ RINOK(callback->SetCompleted(&completeValue))
}
UInt32 size;
- RINOK(inStream->Read(buf, kBufSize, &size));
+ RINOK(inStream->Read(buf, kBufSize, &size))
if (size == 0)
break;
hb.Update(buf, size);
@@ -626,8 +626,8 @@ HRESULT HashCalc(
}
*/
- RINOK(callback->SetOperationResult(fileSize, hb, !isDir));
- RINOK(callback->SetCompleted(&completeValue));
+ RINOK(callback->SetOperationResult(fileSize, hb, !isDir))
+ RINOK(callback->SetCompleted(&completeValue))
}
/*
@@ -776,7 +776,7 @@ bool CHashPair::ParseCksum(const char *s)
Name = end;
Hash.Alloc(4);
- SetBe32(Hash, crc);
+ SetBe32(Hash, crc)
Size_from_Arc = size;
Size_from_Arc_Defined = true;
@@ -823,7 +823,7 @@ static UString GetMethod_from_FileName(const UString &name)
}
const char *m = "";
unsigned i;
- for (i = 0; i < ARRAY_SIZE(k_CsumMethodNames); i++)
+ for (i = 0; i < Z7_ARRAY_SIZE(k_CsumMethodNames); i++)
{
m = k_CsumMethodNames[i];
if (isExtension)
@@ -836,7 +836,7 @@ static UString GetMethod_from_FileName(const UString &name)
break;
}
UString res;
- if (i != ARRAY_SIZE(k_CsumMethodNames))
+ if (i != Z7_ARRAY_SIZE(k_CsumMethodNames))
res = m;
return res;
}
@@ -1033,27 +1033,27 @@ static const Byte kRawProps[] =
};
-STDMETHODIMP CHandler::GetParent(UInt32 /* index */ , UInt32 *parent, UInt32 *parentType)
+Z7_COM7F_IMF(CHandler::GetParent(UInt32 /* index */ , UInt32 *parent, UInt32 *parentType))
{
*parentType = NParentType::kDir;
*parent = (UInt32)(Int32)-1;
return S_OK;
}
-STDMETHODIMP CHandler::GetNumRawProps(UInt32 *numProps)
+Z7_COM7F_IMF(CHandler::GetNumRawProps(UInt32 *numProps))
{
- *numProps = ARRAY_SIZE(kRawProps);
+ *numProps = Z7_ARRAY_SIZE(kRawProps);
return S_OK;
}
-STDMETHODIMP CHandler::GetRawPropInfo(UInt32 index, BSTR *name, PROPID *propID)
+Z7_COM7F_IMF(CHandler::GetRawPropInfo(UInt32 index, BSTR *name, PROPID *propID))
{
*propID = kRawProps[index];
- *name = 0;
+ *name = NULL;
return S_OK;
}
-STDMETHODIMP CHandler::GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)
+Z7_COM7F_IMF(CHandler::GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType))
{
*data = NULL;
*dataSize = 0;
@@ -1077,7 +1077,7 @@ STDMETHODIMP CHandler::GetRawProp(UInt32 index, PROPID propID, const void **data
IMP_IInArchive_Props
IMP_IInArchive_ArcProps
-STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
+Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
{
*numItems = HashPairs.Size();
return S_OK;
@@ -1089,7 +1089,7 @@ static void Add_OptSpace_String(UString &dest, const char *src)
dest += src;
}
-STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value))
{
NWindows::NCOM::CPropVariant prop;
switch (propID)
@@ -1152,7 +1152,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
}
-STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value))
{
// COM_TRY_BEGIN
NWindows::NCOM::CPropVariant prop;
@@ -1206,10 +1206,9 @@ static HRESULT ReadStream_to_Buf(IInStream *stream, CByteBuffer &buf, IArchiveOp
{
buf.Free();
UInt64 len;
- RINOK(stream->Seek(0, STREAM_SEEK_END, &len));
+ RINOK(InStream_AtBegin_GetSize(stream, len))
if (len == 0 || len >= ((UInt64)1 << 31))
return S_FALSE;
- RINOK(stream->Seek(0, STREAM_SEEK_SET, NULL));
buf.Alloc((size_t)len);
UInt64 pos = 0;
// return ReadStream_FALSE(stream, buf, (size_t)len);
@@ -1218,7 +1217,7 @@ static HRESULT ReadStream_to_Buf(IInStream *stream, CByteBuffer &buf, IArchiveOp
const UInt32 kBlockSize = ((UInt32)1 << 24);
const UInt32 curSize = (len < kBlockSize) ? (UInt32)len : kBlockSize;
UInt32 processedSizeLoc;
- RINOK(stream->Read((Byte *)buf + pos, curSize, &processedSizeLoc));
+ RINOK(stream->Read((Byte *)buf + pos, curSize, &processedSizeLoc))
if (processedSizeLoc == 0)
return E_FAIL;
len -= processedSizeLoc;
@@ -1228,13 +1227,13 @@ static HRESULT ReadStream_to_Buf(IInStream *stream, CByteBuffer &buf, IArchiveOp
if (openCallback)
{
const UInt64 files = 0;
- RINOK(openCallback->SetCompleted(&files, &pos));
+ RINOK(openCallback->SetCompleted(&files, &pos))
}
}
}
-STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback *openCallback)
+Z7_COM7F_IMF(CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback *openCallback))
{
COM_TRY_BEGIN
{
@@ -1261,12 +1260,13 @@ STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallb
if (openCallback)
{
- CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback;
- openCallback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback);
- NCOM::CPropVariant prop;
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveOpenVolumeCallback,
+ openVolumeCallback, openCallback)
if (openVolumeCallback)
{
- RINOK(openVolumeCallback->GetProperty(kpidName, &prop));
+ NCOM::CPropVariant prop;
+ RINOK(openVolumeCallback->GetProperty(kpidName, &prop))
if (prop.vt == VT_BSTR)
_nameExtenstion = GetMethod_from_FileName(prop.bstrVal);
}
@@ -1376,7 +1376,7 @@ void CHandler::ClearVars()
}
-STDMETHODIMP CHandler::Close()
+Z7_COM7F_IMF(CHandler::Close())
{
ClearVars();
_nameExtenstion.Empty();
@@ -1416,8 +1416,8 @@ static void AddDefaultMethod(UStringVector &methods, unsigned size)
else if (size == 4) m = "crc32";
else
return;
- #ifdef EXTERNAL_CODECS
- const CExternalCodecs *__externalCodecs = g_ExternalCodecs_Ptr;
+ #ifdef Z7_EXTERNAL_CODECS
+ const CExternalCodecs *_externalCodecs = g_ExternalCodecs_Ptr;
#endif
CMethodId id;
if (FindHashMethod(EXTERNAL_CODECS_LOC_VARS
@@ -1426,8 +1426,8 @@ static void AddDefaultMethod(UStringVector &methods, unsigned size)
}
-STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
- Int32 testMode, IArchiveExtractCallback *extractCallback)
+Z7_COM7F_IMF(CHandler::Extract(const UInt32 *indices, UInt32 numItems,
+ Int32 testMode, IArchiveExtractCallback *extractCallback))
{
COM_TRY_BEGIN
@@ -1442,8 +1442,8 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
if (numItems == 0)
return S_OK;
- #ifdef EXTERNAL_CODECS
- const CExternalCodecs *__externalCodecs = g_ExternalCodecs_Ptr;
+ #ifdef Z7_EXTERNAL_CODECS
+ const CExternalCodecs *_externalCodecs = g_ExternalCodecs_Ptr;
#endif
CHashBundle hb_Glob;
@@ -1471,15 +1471,17 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
RINOK(hb_Glob.SetMethods(
EXTERNAL_CODECS_LOC_VARS
- methods));
+ methods))
- CMyComPtr<IArchiveUpdateCallbackFile> updateCallbackFile;
- extractCallback->QueryInterface(IID_IArchiveUpdateCallbackFile, (void **)&updateCallbackFile);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveUpdateCallbackFile,
+ updateCallbackFile, extractCallback)
if (!updateCallbackFile)
return E_NOTIMPL;
{
- CMyComPtr<IArchiveGetDiskProperty> GetDiskProperty;
- extractCallback->QueryInterface(IID_IArchiveGetDiskProperty, (void **)&GetDiskProperty);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveGetDiskProperty,
+ GetDiskProperty, extractCallback)
if (GetDiskProperty)
{
UInt64 totalSize = 0;
@@ -1492,13 +1494,13 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
continue;
{
NCOM::CPropVariant prop;
- RINOK(GetDiskProperty->GetDiskProperty(index, kpidSize, &prop));
+ RINOK(GetDiskProperty->GetDiskProperty(index, kpidSize, &prop))
if (prop.vt != VT_UI8)
continue;
totalSize += prop.uhVal.QuadPart;
}
}
- RINOK(extractCallback->SetTotal(totalSize));
+ RINOK(extractCallback->SetTotal(totalSize))
// RINOK(Hash_SetTotalUnpacked->Hash_SetTotalUnpacked(indices, numItems));
}
}
@@ -1516,7 +1518,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
UInt32 i;
for (i = 0; i < numItems; i++)
{
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
const UInt32 index = allFilesMode ? i : indices[i];
CHashPair &hp = HashPairs[index];
@@ -1528,7 +1530,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
const bool isDir = hp.IsDir();
if (!isDir)
{
- RINOK(updateCallbackFile->GetStream2(index, &inStream, NUpdateNotifyOp::kHashRead));
+ RINOK(updateCallbackFile->GetStream2(index, &inStream, NUpdateNotifyOp::kHashRead))
if (!inStream)
{
continue; // we have shown error in GetStream2()
@@ -1541,7 +1543,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
NArchive::NExtract::NAskMode::kExtract;
CMyComPtr<ISequentialOutStream> realOutStream;
- RINOK(extractCallback->GetStream(index, &realOutStream, askMode));
+ RINOK(extractCallback->GetStream(index, &realOutStream, askMode))
/* PrepareOperation() can expect kExtract to set
Attrib and security of output file */
@@ -1570,7 +1572,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
methods_loc.Add(UString(hp.Method));
RINOK(hb_Loc.SetMethods(
EXTERNAL_CODECS_LOC_VARS
- methods_loc));
+ methods_loc))
}
else
res_SetMethods = E_NOTIMPL;
@@ -1583,7 +1585,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
hb_Use = &hb_Loc;
RINOK(hb_Loc.SetMethods(
EXTERNAL_CODECS_LOC_VARS
- methods_loc));
+ methods_loc))
}
}
@@ -1596,16 +1598,16 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
{
if ((step & 0xFF) == 0)
{
- RINOK(lps->SetRatioInfo(NULL, &fileSize));
+ RINOK(progress->SetRatioInfo(NULL, &fileSize))
}
UInt32 size;
- RINOK(inStream->Read(buf, kBufSize, &size));
+ RINOK(inStream->Read(buf, kBufSize, &size))
if (size == 0)
break;
hb_Use->Update(buf, size);
if (realOutStream)
{
- RINOK(WriteStream(realOutStream, buf, size));
+ RINOK(WriteStream(realOutStream, buf, size))
}
fileSize += size;
}
@@ -1638,7 +1640,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
}
}
- RINOK(extractCallback->SetOperationResult(opRes));
+ RINOK(extractCallback->SetOperationResult(opRes))
}
return lps->SetCur();
@@ -1668,7 +1670,7 @@ static HRESULT GetPropString(IArchiveUpdateCallback *callback, UInt32 index, PRO
bool convertSlash)
{
NCOM::CPropVariant prop;
- RINOK(callback->GetProperty(index, propId, &prop));
+ RINOK(callback->GetProperty(index, propId, &prop))
if (prop.vt == VT_BSTR)
{
res = prop.bstrVal;
@@ -1681,15 +1683,15 @@ static HRESULT GetPropString(IArchiveUpdateCallback *callback, UInt32 index, PRO
}
-STDMETHODIMP CHandler::GetFileTimeType(UInt32 *type)
+Z7_COM7F_IMF(CHandler::GetFileTimeType(UInt32 *type))
{
*type = NFileTimeType::kUnix;
return S_OK;
}
-STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems,
- IArchiveUpdateCallback *callback)
+Z7_COM7F_IMF(CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems,
+ IArchiveUpdateCallback *callback))
{
COM_TRY_BEGIN
@@ -1697,8 +1699,8 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
return E_NOTIMPL;
/*
- CMyComPtr<IArchiveUpdateCallbackArcProp> reportArcProp;
- callback->QueryInterface(IID_IArchiveUpdateCallbackArcProp, (void **)&reportArcProp);
+ Z7_DECL_CMyComPtr_QI_FROM(IArchiveUpdateCallbackArcProp,
+ reportArcProp, callback)
*/
CObjectVector<CUpdateItem> updateItems;
@@ -1716,7 +1718,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (!callback)
return E_FAIL;
- RINOK(callback->GetUpdateItemInfo(i, &newData, &newProps, &indexInArc));
+ RINOK(callback->GetUpdateItemInfo(i, &newData, &newProps, &indexInArc))
ui.NewProps = IntToBool(newProps);
ui.NewData = IntToBool(newData);
@@ -1726,7 +1728,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
{
NCOM::CPropVariant prop;
- RINOK(callback->GetProperty(i, kpidIsDir, &prop));
+ RINOK(callback->GetProperty(i, kpidIsDir, &prop))
if (prop.vt == VT_EMPTY)
ui.IsDir = false;
else if (prop.vt != VT_BOOL)
@@ -1736,7 +1738,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
RINOK(GetPropString(callback, i, kpidPath, ui.Path,
- true)); // convertSlash
+ true)) // convertSlash
/*
if (ui.IsDir && !ui.Name.IsEmpty() && ui.Name.Back() != '/')
ui.Name += '/';
@@ -1746,7 +1748,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (IntToBool(newData))
{
NCOM::CPropVariant prop;
- RINOK(callback->GetProperty(i, kpidSize, &prop));
+ RINOK(callback->GetProperty(i, kpidSize, &prop))
if (prop.vt == VT_UI8)
{
ui.Size = prop.uhVal.QuadPart;
@@ -1763,11 +1765,11 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
if (complexity != 0)
{
- RINOK(callback->SetTotal(complexity));
+ RINOK(callback->SetTotal(complexity))
}
- #ifdef EXTERNAL_CODECS
- const CExternalCodecs *__externalCodecs = g_ExternalCodecs_Ptr;
+ #ifdef Z7_EXTERNAL_CODECS
+ const CExternalCodecs *_externalCodecs = g_ExternalCodecs_Ptr;
#endif
CHashBundle hb;
@@ -1785,13 +1787,13 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
else
{
- CMyComPtr<IArchiveGetRootProps> getRootProps;
- callback->QueryInterface(IID_IArchiveGetRootProps, (void **)&getRootProps);
-
- NCOM::CPropVariant prop;
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveGetRootProps,
+ getRootProps, callback)
if (getRootProps)
{
- RINOK(getRootProps->GetRootProp(kpidArcFileName, &prop));
+ NCOM::CPropVariant prop;
+ RINOK(getRootProps->GetRootProp(kpidArcFileName, &prop))
if (prop.vt == VT_BSTR)
{
const UString method = GetMethod_from_FileName(prop.bstrVal);
@@ -1801,7 +1803,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
}
- RINOK(hb.SetMethods(EXTERNAL_CODECS_LOC_VARS methods));
+ RINOK(hb.SetMethods(EXTERNAL_CODECS_LOC_VARS methods))
CLocalProgress *lps = new CLocalProgress;
CMyComPtr<ICompressProgressInfo> progress = lps;
@@ -1834,7 +1836,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
for (i = 0; i < updateItems.Size(); i++)
{
lps->InSize = complexity;
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
const CUpdateItem &ui = updateItems[i];
@@ -1858,12 +1860,13 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
needWrite = false;
else
{
- RINOK(res);
+ RINOK(res)
if (fileInStream)
{
- CMyComPtr<IStreamGetSize> streamGetSize;
- fileInStream->QueryInterface(IID_IStreamGetSize, (void **)&streamGetSize);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IStreamGetSize,
+ streamGetSize, fileInStream)
if (streamGetSize)
{
UInt64 size;
@@ -1871,8 +1874,9 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
currentComplexity = size;
}
/*
- CMyComPtr<IStreamGetProps> getProps;
- fileInStream->QueryInterface(IID_IStreamGetProps, (void **)&getProps);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IStreamGetProps,
+ getProps, fileInStream)
if (getProps)
{
FILETIME mTime;
@@ -1901,11 +1905,11 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
if ((step & 0xFF) == 0)
{
- RINOK(lps->SetRatioInfo(&fileSize, NULL));
+ RINOK(progress->SetRatioInfo(&fileSize, NULL))
// RINOK(callback->SetCompleted(&completeValue));
}
UInt32 size;
- RINOK(fileInStream->Read(buf, kBufSize, &size));
+ RINOK(fileInStream->Read(buf, kBufSize, &size))
if (size == 0)
break;
hb.Update(buf, size);
@@ -1962,7 +1966,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
}
*/
- RINOK(callback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK));
+ RINOK(callback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK))
}
else
{
@@ -1987,7 +1991,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
return E_OUTOFMEMORY;
}
- RINOK(WriteStream(outStream, hashFileString, hashFileString.Len()));
+ RINOK(WriteStream(outStream, hashFileString, hashFileString.Len()))
return S_OK;
COM_TRY_END
@@ -2040,7 +2044,7 @@ HRESULT CHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value)
}
-STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps)
+Z7_COM7F_IMF(CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps))
{
COM_TRY_BEGIN
@@ -2048,7 +2052,7 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
for (UInt32 i = 0; i < numProps; i++)
{
- RINOK(SetProperty(names[i], values[i]));
+ RINOK(SetProperty(names[i], values[i]))
}
return S_OK;
COM_TRY_END
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.h b/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.h
index c566caa881f..0b527c16497 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/HashCalc.h
@@ -1,7 +1,7 @@
// HashCalc.h
-#ifndef __HASH_CALC_H
-#define __HASH_CALC_H
+#ifndef ZIP7_INC_HASH_CALC_H
+#define ZIP7_INC_HASH_CALC_H
#include "../../../Common/UTFConvert.h"
#include "../../../Common/Wildcard.h"
@@ -65,8 +65,10 @@ struct CHasherState
};
+Z7_PURE_INTERFACES_BEGIN
-struct IHashCalc
+
+DECLARE_INTERFACE(IHashCalc)
{
virtual void InitForNewFile() = 0;
virtual void Update(const void *data, UInt32 size) = 0;
@@ -74,7 +76,9 @@ struct IHashCalc
virtual void Final(bool isDir, bool isAltStream, const UString &path) = 0;
};
-struct CHashBundle: public IHashCalc
+Z7_PURE_INTERFACES_END
+
+struct CHashBundle Z7_final: public IHashCalc
{
CObjectVector<CHasherState> Hashers;
@@ -98,32 +102,32 @@ struct CHashBundle: public IHashCalc
NumDirs = NumFiles = NumAltStreams = FilesSize = AltStreamsSize = NumErrors = 0;
}
- virtual ~CHashBundle() {};
-
- void InitForNewFile();
- void Update(const void *data, UInt32 size);
- void SetSize(UInt64 size);
- void Final(bool isDir, bool isAltStream, const UString &path);
+ void InitForNewFile() Z7_override;
+ void Update(const void *data, UInt32 size) Z7_override;
+ void SetSize(UInt64 size) Z7_override;
+ void Final(bool isDir, bool isAltStream, const UString &path) Z7_override;
};
-#define INTERFACE_IHashCallbackUI(x) \
- INTERFACE_IDirItemsCallback(x) \
- virtual HRESULT StartScanning() x; \
- virtual HRESULT FinishScanning(const CDirItemsStat &st) x; \
- virtual HRESULT SetNumFiles(UInt64 numFiles) x; \
- virtual HRESULT SetTotal(UInt64 size) x; \
- virtual HRESULT SetCompleted(const UInt64 *completeValue) x; \
- virtual HRESULT CheckBreak() x; \
- virtual HRESULT BeforeFirstFile(const CHashBundle &hb) x; \
- virtual HRESULT GetStream(const wchar_t *name, bool isFolder) x; \
- virtual HRESULT OpenFileError(const FString &path, DWORD systemError) x; \
- virtual HRESULT SetOperationResult(UInt64 fileSize, const CHashBundle &hb, bool showHash) x; \
- virtual HRESULT AfterLastFile(CHashBundle &hb) x; \
-
-struct IHashCallbackUI: public IDirItemsCallback
-{
- INTERFACE_IHashCallbackUI(=0)
-};
+Z7_PURE_INTERFACES_BEGIN
+
+// INTERFACE_IDirItemsCallback(x)
+
+#define Z7_IFACEN_IHashCallbackUI(x) \
+ virtual HRESULT StartScanning() x \
+ virtual HRESULT FinishScanning(const CDirItemsStat &st) x \
+ virtual HRESULT SetNumFiles(UInt64 numFiles) x \
+ virtual HRESULT SetTotal(UInt64 size) x \
+ virtual HRESULT SetCompleted(const UInt64 *completeValue) x \
+ virtual HRESULT CheckBreak() x \
+ virtual HRESULT BeforeFirstFile(const CHashBundle &hb) x \
+ virtual HRESULT GetStream(const wchar_t *name, bool isFolder) x \
+ virtual HRESULT OpenFileError(const FString &path, DWORD systemError) x \
+ virtual HRESULT SetOperationResult(UInt64 fileSize, const CHashBundle &hb, bool showHash) x \
+ virtual HRESULT AfterLastFile(CHashBundle &hb) x \
+
+Z7_IFACE_DECL_PURE_(IHashCallbackUI, IDirItemsCallback)
+
+Z7_PURE_INTERFACES_END
struct CHashOptionsLocal
@@ -200,7 +204,7 @@ struct CHashOptions
OpenShareForWrite(false),
StdInMode(false),
AltStreamsMode(false),
- PathMode(NWildcard::k_RelatPath) {};
+ PathMode(NWildcard::k_RelatPath) {}
};
@@ -213,7 +217,7 @@ HRESULT HashCalc(
-#ifndef _SFX
+#ifndef Z7_SFX
namespace NHash {
@@ -264,14 +268,12 @@ struct CHashPair
};
-class CHandler:
- public IInArchive,
- public IArchiveGetRawProps,
- // public IGetArchiveHashHandler,
- public IOutArchive,
- public ISetProperties,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_CHandler_IInArchive_3(
+ IArchiveGetRawProps,
+ /* public IGetArchiveHashHandler, */
+ IOutArchive,
+ ISetProperties
+)
bool _isArc;
UInt64 _phySize;
CObjectVector<CHashPair> HashPairs;
@@ -313,21 +315,7 @@ class CHandler:
HRESULT SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value);
public:
-
CHandler();
-
- MY_UNKNOWN_IMP4(
- IInArchive,
- IArchiveGetRawProps,
- IOutArchive,
- ISetProperties
- /*, IGetArchiveHashHandler */
- )
- INTERFACE_IInArchive(;)
- INTERFACE_IOutArchive(;)
- INTERFACE_IArchiveGetRawProps(;)
- // STDMETHOD(GetArchiveHashHandler)(CHandler **handler);
- STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps);
};
}
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h b/3rdparty/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h
index e6a85c6d06f..dd5c0d7214e 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h
@@ -1,7 +1,7 @@
// IFileExtractCallback.h
-#ifndef __I_FILE_EXTRACT_CALLBACK_H
-#define __I_FILE_EXTRACT_CALLBACK_H
+#ifndef ZIP7_INC_I_FILE_EXTRACT_CALLBACK_H
+#define ZIP7_INC_I_FILE_EXTRACT_CALLBACK_H
#include "../../../Common/MyString.h"
@@ -10,6 +10,15 @@
#include "LoadCodecs.h"
#include "OpenArchive.h"
+Z7_PURE_INTERFACES_BEGIN
+
+#define Z7_IFACE_CONSTR_FOLDERARC_SUB(i, base, n) \
+ Z7_DECL_IFACE_7ZIP_SUB(i, base, 1, n) \
+ { Z7_IFACE_COM7_PURE(i) };
+
+#define Z7_IFACE_CONSTR_FOLDERARC(i, n) \
+ Z7_IFACE_CONSTR_FOLDERARC_SUB(i, IUnknown, n)
+
namespace NOverwriteAnswer
{
enum EEnum
@@ -42,27 +51,21 @@ IID_IFolderArchiveExtractCallback is requested by:
IFolderArchiveExtractCallback is used by Common/ArchiveExtractCallback.cpp
*/
-#define INTERFACE_IFolderArchiveExtractCallback(x) \
- STDMETHOD(AskOverwrite)( \
+#define Z7_IFACEM_IFolderArchiveExtractCallback(x) \
+ x(AskOverwrite( \
const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize, \
const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize, \
- Int32 *answer) x; \
- STDMETHOD(PrepareOperation)(const wchar_t *name, Int32 isFolder, Int32 askExtractMode, const UInt64 *position) x; \
- STDMETHOD(MessageError)(const wchar_t *message) x; \
- STDMETHOD(SetOperationResult)(Int32 opRes, Int32 encrypted) x; \
+ Int32 *answer)) \
+ x(PrepareOperation(const wchar_t *name, Int32 isFolder, Int32 askExtractMode, const UInt64 *position)) \
+ x(MessageError(const wchar_t *message)) \
+ x(SetOperationResult(Int32 opRes, Int32 encrypted)) \
-DECL_INTERFACE_SUB(IFolderArchiveExtractCallback, IProgress, 0x01, 0x07)
-{
- INTERFACE_IFolderArchiveExtractCallback(PURE)
-};
+Z7_IFACE_CONSTR_FOLDERARC_SUB(IFolderArchiveExtractCallback, IProgress, 0x07)
-#define INTERFACE_IFolderArchiveExtractCallback2(x) \
- STDMETHOD(ReportExtractResult)(Int32 opRes, Int32 encrypted, const wchar_t *name) x; \
+#define Z7_IFACEM_IFolderArchiveExtractCallback2(x) \
+ x(ReportExtractResult(Int32 opRes, Int32 encrypted, const wchar_t *name)) \
-DECL_INTERFACE_SUB(IFolderArchiveExtractCallback2, IUnknown, 0x01, 0x08)
-{
- INTERFACE_IFolderArchiveExtractCallback2(PURE)
-};
+Z7_IFACE_CONSTR_FOLDERARC(IFolderArchiveExtractCallback2, 0x08)
/* ---------- IExtractCallbackUI ----------
is implemented by
@@ -70,45 +73,40 @@ is implemented by
FileManager/ExtractCallback.h CExtractCallbackImp
*/
-#ifdef _NO_CRYPTO
- #define INTERFACE_IExtractCallbackUI_Crypto(x)
+#ifdef Z7_NO_CRYPTO
+ #define Z7_IFACEM_IExtractCallbackUI_Crypto(px)
#else
- #define INTERFACE_IExtractCallbackUI_Crypto(x) \
- virtual HRESULT SetPassword(const UString &password) x;
+ #define Z7_IFACEM_IExtractCallbackUI_Crypto(px) \
+ virtual HRESULT SetPassword(const UString &password) px
#endif
-#define INTERFACE_IExtractCallbackUI(x) \
- virtual HRESULT BeforeOpen(const wchar_t *name, bool testMode) x; \
- virtual HRESULT OpenResult(const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result) x; \
- virtual HRESULT ThereAreNoFiles() x; \
- virtual HRESULT ExtractResult(HRESULT result) x; \
- INTERFACE_IExtractCallbackUI_Crypto(x)
+#define Z7_IFACEN_IExtractCallbackUI(px) \
+ virtual HRESULT BeforeOpen(const wchar_t *name, bool testMode) px \
+ virtual HRESULT OpenResult(const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result) px \
+ virtual HRESULT ThereAreNoFiles() px \
+ virtual HRESULT ExtractResult(HRESULT result) px \
+ Z7_IFACEM_IExtractCallbackUI_Crypto(px)
-struct IExtractCallbackUI: IFolderArchiveExtractCallback
-{
- INTERFACE_IExtractCallbackUI(PURE)
-};
+// IExtractCallbackUI - is non-COM interface
+// IFolderArchiveExtractCallback - is COM interface
+// Z7_IFACE_DECL_PURE_(IExtractCallbackUI, IFolderArchiveExtractCallback)
+Z7_IFACE_DECL_PURE(IExtractCallbackUI)
-#define INTERFACE_IGetProp(x) \
- STDMETHOD(GetProp)(PROPID propID, PROPVARIANT *value) x; \
+#define Z7_IFACEM_IGetProp(x) \
+ x(GetProp(PROPID propID, PROPVARIANT *value)) \
-DECL_INTERFACE_SUB(IGetProp, IUnknown, 0x01, 0x20)
-{
- INTERFACE_IGetProp(PURE)
-};
+Z7_IFACE_CONSTR_FOLDERARC(IGetProp, 0x20)
-#define INTERFACE_IFolderExtractToStreamCallback(x) \
- STDMETHOD(UseExtractToStream)(Int32 *res) x; \
- STDMETHOD(GetStream7)(const wchar_t *name, Int32 isDir, ISequentialOutStream **outStream, Int32 askExtractMode, IGetProp *getProp) x; \
- STDMETHOD(PrepareOperation7)(Int32 askExtractMode) x; \
- STDMETHOD(SetOperationResult8)(Int32 resultEOperationResult, Int32 encrypted, UInt64 size) x; \
+#define Z7_IFACEM_IFolderExtractToStreamCallback(x) \
+ x(UseExtractToStream(Int32 *res)) \
+ x(GetStream7(const wchar_t *name, Int32 isDir, ISequentialOutStream **outStream, Int32 askExtractMode, IGetProp *getProp)) \
+ x(PrepareOperation7(Int32 askExtractMode)) \
+ x(SetOperationResult8(Int32 resultEOperationResult, Int32 encrypted, UInt64 size)) \
-DECL_INTERFACE_SUB(IFolderExtractToStreamCallback, IUnknown, 0x01, 0x31)
-{
- INTERFACE_IFolderExtractToStreamCallback(PURE)
-};
+Z7_IFACE_CONSTR_FOLDERARC(IFolderExtractToStreamCallback, 0x31)
+Z7_PURE_INTERFACES_END
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp
index b6a20732391..5a65bdcee83 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp
@@ -1,7 +1,7 @@
// LoadCodecs.cpp
/*
-EXTERNAL_CODECS
+Z7_EXTERNAL_CODECS
---------------
CCodecs::Load() tries to detect the directory with plugins.
It stops the checking, if it can find any of the following items:
@@ -22,7 +22,7 @@ EXTERNAL_CODECS
EXPORT_CODECS
-------------
- if (EXTERNAL_CODECS) is defined, then the code exports internal
+ if (Z7_EXTERNAL_CODECS) is defined, then the code exports internal
codecs of client from CCodecs object to external plugins.
7-Zip doesn't use that feature. 7-Zip uses the scheme:
- client application without internal plugins.
@@ -43,29 +43,15 @@ EXPORT_CODECS
#include "LoadCodecs.h"
-using namespace NWindows;
-
-#ifdef NEW_FOLDER_INTERFACE
-#include "../../../Common/StringToInt.h"
-#endif
-
#include "../../ICoder.h"
#include "../../Common/RegisterArc.h"
#include "../../Common/RegisterCodec.h"
-#ifdef EXTERNAL_CODECS
-
+#ifdef Z7_EXTERNAL_CODECS
// #define EXPORT_CODECS
-
-#endif
-
-#ifdef NEW_FOLDER_INTERFACE
-extern HINSTANCE g_hInstance;
-#include "../../../Windows/ResourceString.h"
-static const UINT kIconTypesResId = 100;
#endif
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
#include "../../../Windows/FileFind.h"
#include "../../../Windows/DLL.h"
@@ -75,6 +61,7 @@ static const UINT kIconTypesResId = 100;
#include "../../../Windows/Registry.h"
#endif
+using namespace NWindows;
using namespace NFile;
@@ -119,10 +106,10 @@ static bool ReadPathFromRegistry(HKEY baseKey, LPCWSTR value, FString &path)
#endif // _WIN32
-#endif // EXTERNAL_CODECS
+#endif // Z7_EXTERNAL_CODECS
-static const unsigned kNumArcsMax = 64;
+static const unsigned kNumArcsMax = 72;
static unsigned g_NumArcs = 0;
static const CArcInfo *g_Arcs[kNumArcsMax];
@@ -133,8 +120,10 @@ void RegisterArc(const CArcInfo *arcInfo) throw()
g_Arcs[g_NumArcs] = arcInfo;
g_NumArcs++;
}
+ // else throw 1;
}
+/*
static void SplitString(const UString &srcString, UStringVector &destStrings)
{
destStrings.Clear();
@@ -159,6 +148,7 @@ static void SplitString(const UString &srcString, UStringVector &destStrings)
if (!s.IsEmpty())
destStrings.Add(s);
}
+*/
int CArcInfoEx::FindExtension(const UString &ext) const
{
@@ -187,7 +177,7 @@ void CArcInfoEx::AddExts(const UString &ext, const UString &addExt)
}
}
-#ifndef _SFX
+#ifndef Z7_SFX
static bool ParseSignatures(const Byte *data, unsigned size, CObjectVector<CByteBuffer> &signatures)
{
@@ -205,11 +195,11 @@ static bool ParseSignatures(const Byte *data, unsigned size, CObjectVector<CByte
return true;
}
-#endif // _SFX
+#endif // Z7_SFX
// #include <stdio.h>
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
static FString GetBaseFolderPrefixFromRegistry()
{
@@ -238,7 +228,7 @@ static HRESULT GetCoderClass(Func_GetMethodProperty getMethodProperty, UInt32 in
{
NCOM::CPropVariant prop;
isAssigned = false;
- RINOK(getMethodProperty(index, propId, &prop));
+ RINOK(getMethodProperty(index, propId, &prop))
if (prop.vt == VT_BSTR)
{
if (::SysStringByteLen(prop.bstrVal) != sizeof(GUID))
@@ -258,7 +248,7 @@ static HRESULT GetMethodBoolProp(Func_GetMethodProperty getMethodProperty, UInt3
NCOM::CPropVariant prop;
resVal = false;
isAssigned = false;
- RINOK(getMethodProperty(index, propId, &prop));
+ RINOK(getMethodProperty(index, propId, &prop))
if (prop.vt == VT_BOOL)
{
isAssigned = true;
@@ -269,45 +259,49 @@ static HRESULT GetMethodBoolProp(Func_GetMethodProperty getMethodProperty, UInt3
return S_OK;
}
+#if defined(__clang__)
+#pragma GCC diagnostic ignored "-Wc++98-compat-pedantic"
+#endif
-#define MY_GET_FUNC(dest, type, func) *(void **)(&dest) = (func);
+#define MY_GET_FUNC(dest, type, lib, func) \
+ dest = Z7_GET_PROC_ADDRESS(type, lib.Get_HMODULE(), func);
// #define MY_GET_FUNC(dest, type, func) dest = (type)(func);
-#define MY_GET_FUNC_LOC(dest, type, func) \
- type dest; MY_GET_FUNC(dest, type, func)
+#define MY_GET_FUNC_LOC(dest, type, lib, func) \
+ type dest; MY_GET_FUNC(dest, type, lib, func)
HRESULT CCodecs::LoadCodecs()
{
CCodecLib &lib = Libs.Back();
- MY_GET_FUNC (lib.CreateDecoder, Func_CreateDecoder, lib.Lib.GetProc("CreateDecoder"));
- MY_GET_FUNC (lib.CreateEncoder, Func_CreateEncoder, lib.Lib.GetProc("CreateEncoder"));
- MY_GET_FUNC (lib.GetMethodProperty, Func_GetMethodProperty, lib.Lib.GetProc("GetMethodProperty"));
+ MY_GET_FUNC (lib.CreateDecoder, Func_CreateDecoder, lib.Lib, "CreateDecoder")
+ MY_GET_FUNC (lib.CreateEncoder, Func_CreateEncoder, lib.Lib, "CreateEncoder")
+ MY_GET_FUNC (lib.GetMethodProperty, Func_GetMethodProperty, lib.Lib, "GetMethodProperty")
if (lib.GetMethodProperty)
{
UInt32 numMethods = 1;
- MY_GET_FUNC_LOC (getNumberOfMethods, Func_GetNumberOfMethods, lib.Lib.GetProc("GetNumberOfMethods"));
+ MY_GET_FUNC_LOC (getNumberOfMethods, Func_GetNumberOfMethods, lib.Lib, "GetNumberOfMethods")
if (getNumberOfMethods)
{
- RINOK(getNumberOfMethods(&numMethods));
+ RINOK(getNumberOfMethods(&numMethods))
}
for (UInt32 i = 0; i < numMethods; i++)
{
CDllCodecInfo info;
info.LibIndex = Libs.Size() - 1;
info.CodecIndex = i;
- RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kEncoder, info.Encoder, info.EncoderIsAssigned));
- RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kDecoder, info.Decoder, info.DecoderIsAssigned));
- RINOK(GetMethodBoolProp(lib.GetMethodProperty, i, NMethodPropID::kIsFilter, info.IsFilter, info.IsFilter_Assigned));
+ RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kEncoder, info.Encoder, info.EncoderIsAssigned))
+ RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kDecoder, info.Decoder, info.DecoderIsAssigned))
+ RINOK(GetMethodBoolProp(lib.GetMethodProperty, i, NMethodPropID::kIsFilter, info.IsFilter, info.IsFilter_Assigned))
Codecs.Add(info);
}
}
- MY_GET_FUNC_LOC (getHashers, Func_GetHashers, lib.Lib.GetProc("GetHashers"));
+ MY_GET_FUNC_LOC (getHashers, Func_GetHashers, lib.Lib, "GetHashers")
if (getHashers)
{
- RINOK(getHashers(&lib.ComHashers));
+ RINOK(getHashers(&lib.ComHashers))
if (lib.ComHashers)
{
UInt32 numMethods = lib.ComHashers->GetNumHashers();
@@ -330,7 +324,7 @@ static HRESULT GetProp(
UInt32 index, PROPID propID, NCOM::CPropVariant &prop)
{
if (getProp2)
- return getProp2(index, propID, &prop);;
+ return getProp2(index, propID, &prop);
return getProp(propID, &prop);
}
@@ -341,7 +335,7 @@ static HRESULT GetProp_Bool(
{
res = false;
NCOM::CPropVariant prop;
- RINOK(GetProp(getProp, getProp2, index, propID, prop));
+ RINOK(GetProp(getProp, getProp2, index, propID, prop))
if (prop.vt == VT_BOOL)
res = VARIANT_BOOLToBool(prop.boolVal);
else if (prop.vt != VT_EMPTY)
@@ -357,7 +351,7 @@ static HRESULT GetProp_UInt32(
res = 0;
defined = false;
NCOM::CPropVariant prop;
- RINOK(GetProp(getProp, getProp2, index, propID, prop));
+ RINOK(GetProp(getProp, getProp2, index, propID, prop))
if (prop.vt == VT_UI4)
{
res = prop.ulVal;
@@ -375,7 +369,7 @@ static HRESULT GetProp_String(
{
res.Empty();
NCOM::CPropVariant prop;
- RINOK(GetProp(getProp, getProp2, index, propID, prop));
+ RINOK(GetProp(getProp, getProp2, index, propID, prop))
if (prop.vt == VT_BSTR)
res.SetFromBstr(prop.bstrVal);
else if (prop.vt != VT_EMPTY)
@@ -390,7 +384,7 @@ static HRESULT GetProp_RawData(
{
bb.Free();
NCOM::CPropVariant prop;
- RINOK(GetProp(getProp, getProp2, index, propID, prop));
+ RINOK(GetProp(getProp, getProp2, index, propID, prop))
if (prop.vt == VT_BSTR)
{
UINT len = ::SysStringByteLen(prop.bstrVal);
@@ -413,22 +407,22 @@ HRESULT CCodecs::LoadFormats()
const NDLL::CLibrary &lib = Libs.Back().Lib;
Func_GetHandlerProperty getProp = NULL;
- MY_GET_FUNC_LOC (getProp2, Func_GetHandlerProperty2, lib.GetProc("GetHandlerProperty2"));
- MY_GET_FUNC_LOC (getIsArc, Func_GetIsArc, lib.GetProc("GetIsArc"));
+ MY_GET_FUNC_LOC (getProp2, Func_GetHandlerProperty2, lib, "GetHandlerProperty2")
+ MY_GET_FUNC_LOC (getIsArc, Func_GetIsArc, lib, "GetIsArc")
UInt32 numFormats = 1;
if (getProp2)
{
- MY_GET_FUNC_LOC (getNumberOfFormats, Func_GetNumberOfFormats, lib.GetProc("GetNumberOfFormats"));
+ MY_GET_FUNC_LOC (getNumberOfFormats, Func_GetNumberOfFormats, lib, "GetNumberOfFormats")
if (getNumberOfFormats)
{
- RINOK(getNumberOfFormats(&numFormats));
+ RINOK(getNumberOfFormats(&numFormats))
}
}
else
{
- MY_GET_FUNC (getProp, Func_GetHandlerProperty, lib.GetProc("GetHandlerProperty"));
+ MY_GET_FUNC (getProp, Func_GetHandlerProperty, lib, "GetHandlerProperty")
if (!getProp)
return S_OK;
}
@@ -439,7 +433,7 @@ HRESULT CCodecs::LoadFormats()
item.LibIndex = (int)(Libs.Size() - 1);
item.FormatIndex = i;
- RINOK(GetProp_String(getProp, getProp2, i, NArchive::NHandlerPropID::kName, item.Name));
+ RINOK(GetProp_String(getProp, getProp2, i, NArchive::NHandlerPropID::kName, item.Name))
{
NCOM::CPropVariant prop;
@@ -454,18 +448,18 @@ HRESULT CCodecs::LoadFormats()
}
UString ext, addExt;
- RINOK(GetProp_String(getProp, getProp2, i, NArchive::NHandlerPropID::kExtension, ext));
- RINOK(GetProp_String(getProp, getProp2, i, NArchive::NHandlerPropID::kAddExtension, addExt));
+ RINOK(GetProp_String(getProp, getProp2, i, NArchive::NHandlerPropID::kExtension, ext))
+ RINOK(GetProp_String(getProp, getProp2, i, NArchive::NHandlerPropID::kAddExtension, addExt))
item.AddExts(ext, addExt);
GetProp_Bool(getProp, getProp2, i, NArchive::NHandlerPropID::kUpdate, item.UpdateEnabled);
bool flags_Defined = false;
- RINOK(GetProp_UInt32(getProp, getProp2, i, NArchive::NHandlerPropID::kFlags, item.Flags, flags_Defined));
+ RINOK(GetProp_UInt32(getProp, getProp2, i, NArchive::NHandlerPropID::kFlags, item.Flags, flags_Defined))
item.NewInterface = flags_Defined;
if (!flags_Defined) // && item.UpdateEnabled
{
// support for DLL version before 9.31:
- for (unsigned j = 0; j < ARRAY_SIZE(kArcFlagsPars); j += 2)
+ for (unsigned j = 0; j < Z7_ARRAY_SIZE(kArcFlagsPars); j += 2)
{
bool val = false;
GetProp_Bool(getProp, getProp2, i, kArcFlagsPars[j], val);
@@ -476,21 +470,21 @@ HRESULT CCodecs::LoadFormats()
{
bool defined = false;
- RINOK(GetProp_UInt32(getProp, getProp2, i, NArchive::NHandlerPropID::kTimeFlags, item.TimeFlags, defined));
+ RINOK(GetProp_UInt32(getProp, getProp2, i, NArchive::NHandlerPropID::kTimeFlags, item.TimeFlags, defined))
}
CByteBuffer sig;
- RINOK(GetProp_RawData(getProp, getProp2, i, NArchive::NHandlerPropID::kSignature, sig));
+ RINOK(GetProp_RawData(getProp, getProp2, i, NArchive::NHandlerPropID::kSignature, sig))
if (sig.Size() != 0)
item.Signatures.Add(sig);
else
{
- RINOK(GetProp_RawData(getProp, getProp2, i, NArchive::NHandlerPropID::kMultiSignature, sig));
+ RINOK(GetProp_RawData(getProp, getProp2, i, NArchive::NHandlerPropID::kMultiSignature, sig))
ParseSignatures(sig, (unsigned)sig.Size(), item.Signatures);
}
bool signatureOffset_Defined;
- RINOK(GetProp_UInt32(getProp, getProp2, i, NArchive::NHandlerPropID::kSignatureOffset, item.SignatureOffset, signatureOffset_Defined));
+ RINOK(GetProp_UInt32(getProp, getProp2, i, NArchive::NHandlerPropID::kSignatureOffset, item.SignatureOffset, signatureOffset_Defined))
// bool version_Defined;
// RINOK(GetProp_UInt32(getProp, getProp2, i, NArchive::NHandlerPropID::kVersion, item.Version, version_Defined));
@@ -503,7 +497,7 @@ HRESULT CCodecs::LoadFormats()
return S_OK;
}
-#ifdef _7ZIP_LARGE_PAGES
+#ifdef Z7_LARGE_PAGES
extern "C"
{
extern SIZE_T g_LargePageSize;
@@ -513,12 +507,57 @@ extern "C"
void CCodecs::AddLastError(const FString &path)
{
- HRESULT res = GetLastError_noZero_HRESULT();
+ const HRESULT res = GetLastError_noZero_HRESULT();
CCodecError &error = Errors.AddNew();
error.Path = path;
error.ErrorCode = res;
}
+
+static bool IsSupportedDll(CCodecLib &lib)
+{
+ MY_GET_FUNC_LOC (
+ f_GetModuleProp,
+ Func_GetModuleProp, lib.Lib,
+ "GetModuleProp")
+ /* p7zip and 7-Zip before v23 used virtual destructor in IUnknown,
+ if _WIN32 is not defined */
+ UInt32 flags =
+ #ifdef _WIN32
+ NModuleInterfaceType::k_IUnknown_VirtDestructor_No;
+ #else
+ NModuleInterfaceType::k_IUnknown_VirtDestructor_Yes;
+ #endif
+ if (f_GetModuleProp)
+ {
+ {
+ NCOM::CPropVariant prop;
+ if (f_GetModuleProp(NModulePropID::kInterfaceType, &prop) == S_OK)
+ {
+ if (prop.vt == VT_UI4)
+ flags = prop.ulVal;
+ else if (prop.vt != VT_EMPTY)
+ return false;
+ }
+ }
+ {
+ NCOM::CPropVariant prop;
+ if (f_GetModuleProp(NModulePropID::kVersion, &prop) == S_OK)
+ {
+ if (prop.vt == VT_UI4)
+ lib.Version = prop.ulVal;
+ }
+ }
+ }
+ if (
+ flags
+ // (flags & NModuleFlags::kMask)
+ != NModuleInterfaceType::k_IUnknown_VirtDestructor_ThisModule)
+ return false;
+ return true;
+}
+
+
HRESULT CCodecs::LoadDll(const FString &dllPath, bool needCheckDll, bool *loadedOK)
{
if (loadedOK)
@@ -537,7 +576,7 @@ HRESULT CCodecs::LoadDll(const FString &dllPath, bool needCheckDll, bool *loaded
// #define ERROR_BAD_EXE_FORMAT 193L
*/
// return GetLastError_noZero_HRESULT();
- DWORD lastError = GetLastError();
+ const DWORD lastError = GetLastError();
if (lastError != ERROR_BAD_EXE_FORMAT)
{
CCodecError &error = Errors.AddNew();
@@ -558,20 +597,30 @@ HRESULT CCodecs::LoadDll(const FString &dllPath, bool needCheckDll, bool *loaded
bool used = false;
// HRESULT res = S_OK;
- if (lib.Lib.Load(dllPath))
+ if (lib.Lib.Load(dllPath))
+ {
+ if (!IsSupportedDll(lib))
+ {
+ CCodecError &error = Errors.AddNew();
+ error.Path = dllPath;
+ error.Message = "the module is not compatible with program";
+ }
+ else
{
if (loadedOK)
*loadedOK = true;
+ /*
#ifdef NEW_FOLDER_INTERFACE
lib.LoadIcons();
#endif
+ */
/*
{
- MY_GET_FUNC_LOC (_LibStartup, Func_LibStartup, lib.Lib.GetProc("LibStartup"));
- if (_LibStartup)
+ MY_GET_FUNC_LOC (_libStartup, Func_libStartup, lib.Lib, "LibStartup")
+ if (_libStartup)
{
- HRESULT res = _LibStartup();
+ HRESULT res = _libStartup();
if (res != 0)
{
CCodecError &error = Errors.AddNew();
@@ -582,10 +631,10 @@ HRESULT CCodecs::LoadDll(const FString &dllPath, bool needCheckDll, bool *loaded
}
*/
- #ifdef _7ZIP_LARGE_PAGES
+ #ifdef Z7_LARGE_PAGES
if (g_LargePageSize != 0)
{
- MY_GET_FUNC_LOC (setLargePageMode, Func_SetLargePageMode, lib.Lib.GetProc("SetLargePageMode"));
+ MY_GET_FUNC_LOC (setLargePageMode, Func_SetLargePageMode, lib.Lib, "SetLargePageMode")
if (setLargePageMode)
setLargePageMode();
}
@@ -593,14 +642,14 @@ HRESULT CCodecs::LoadDll(const FString &dllPath, bool needCheckDll, bool *loaded
if (CaseSensitive_Change)
{
- MY_GET_FUNC_LOC (setCaseSensitive, Func_SetCaseSensitive, lib.Lib.GetProc("SetCaseSensitive"));
+ MY_GET_FUNC_LOC (setCaseSensitive, Func_SetCaseSensitive, lib.Lib, "SetCaseSensitive")
if (setCaseSensitive)
setCaseSensitive(CaseSensitive ? 1 : 0);
}
/*
{
- MY_GET_FUNC_LOC (setClientVersion, Func_SetClientVersion, lib.Lib.GetProc("SetClientVersion"));
+ MY_GET_FUNC_LOC (setClientVersion, Func_SetClientVersion, lib.Lib, "SetClientVersion")
if (setClientVersion)
{
// const UInt32 kVersion = (MY_VER_MAJOR << 16) | MY_VER_MINOR;
@@ -610,7 +659,7 @@ HRESULT CCodecs::LoadDll(const FString &dllPath, bool needCheckDll, bool *loaded
*/
- MY_GET_FUNC (lib.CreateObject, Func_CreateObject, lib.Lib.GetProc("CreateObject"));
+ MY_GET_FUNC (lib.CreateObject, Func_CreateObject, lib.Lib, "CreateObject")
{
unsigned startSize = Codecs.Size() + Hashers.Size();
HRESULT res = LoadCodecs();
@@ -640,7 +689,8 @@ HRESULT CCodecs::LoadDll(const FString &dllPath, bool needCheckDll, bool *loaded
}
*/
}
- else
+ }
+ else
{
AddLastError(dllPath);
}
@@ -686,7 +736,7 @@ HRESULT CCodecs::LoadDllsFromFolder(const FString &folderPath)
continue;
#endif
- RINOK(LoadDll(folderPrefix + fi.Name, true));
+ RINOK(LoadDll(folderPrefix + fi.Name, true))
}
return S_OK;
}
@@ -714,18 +764,20 @@ void CCodecs::CloseLibs()
// OutputDebugStringA("~CloseLibs end");
}
-#endif // EXTERNAL_CODECS
+#endif // Z7_EXTERNAL_CODECS
HRESULT CCodecs::Load()
{
+ /*
#ifdef NEW_FOLDER_INTERFACE
InternalIcons.LoadIcons(g_hInstance);
#endif
+ */
Formats.Clear();
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
Errors.Clear();
MainDll_ErrorPath.Empty();
Codecs.Clear();
@@ -751,7 +803,7 @@ HRESULT CCodecs::Load()
item.AddExts(e, ae);
}
- #ifndef _SFX
+ #ifndef Z7_SFX
item.CreateOutArchive = arc.CreateOutArchive;
item.UpdateEnabled = (arc.CreateOutArchive != NULL);
@@ -774,16 +826,16 @@ HRESULT CCodecs::Load()
// printf("\nLoad codecs \n");
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const FString baseFolder = GetBaseFolderPrefixFromRegistry();
{
bool loadedOK;
- RINOK(LoadDll(baseFolder + kMainDll, false, &loadedOK));
+ RINOK(LoadDll(baseFolder + kMainDll, false, &loadedOK))
if (!loadedOK)
MainDll_ErrorPath = kMainDll;
}
- RINOK(LoadDllsFromFolder(baseFolder + kCodecsFolderName));
- RINOK(LoadDllsFromFolder(baseFolder + kFormatsFolderName));
+ RINOK(LoadDllsFromFolder(baseFolder + kCodecsFolderName))
+ RINOK(LoadDllsFromFolder(baseFolder + kFormatsFolderName))
NeedSetLibCodecs = true;
@@ -806,10 +858,10 @@ HRESULT CCodecs::Load()
FOR_VECTOR(i, Libs)
{
CCodecLib &lib = Libs[i];
- MY_GET_FUNC (lib.SetCodecs, Func_SetCodecs, lib.Lib.GetProc("SetCodecs"));
+ MY_GET_FUNC (lib.SetCodecs, Func_SetCodecs, lib.Lib, "SetCodecs")
if (lib.SetCodecs)
{
- RINOK(lib.SetCodecs(this));
+ RINOK(lib.SetCodecs(this))
}
}
}
@@ -821,7 +873,7 @@ HRESULT CCodecs::Load()
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
int CCodecs::FindFormatForArchiveName(const UString &arcPath) const
{
@@ -887,60 +939,10 @@ bool CCodecs::FindFormatForArchiveType(const UString &arcType, CIntVector &forma
return true;
}
-#endif // _SFX
-
-
-#ifdef NEW_FOLDER_INTERFACE
-
-void CCodecIcons::LoadIcons(HMODULE m)
-{
- UString iconTypes;
- MyLoadString(m, kIconTypesResId, iconTypes);
- UStringVector pairs;
- SplitString(iconTypes, pairs);
- FOR_VECTOR (i, pairs)
- {
- const UString &s = pairs[i];
- int pos = s.Find(L':');
- CIconPair iconPair;
- iconPair.IconIndex = -1;
- if (pos < 0)
- pos = (int)s.Len();
- else
- {
- const UString num = s.Ptr((unsigned)pos + 1);
- if (!num.IsEmpty())
- {
- const wchar_t *end;
- iconPair.IconIndex = (int)ConvertStringToUInt32(num, &end);
- if (*end != 0)
- continue;
- }
- }
- iconPair.Ext = s.Left((unsigned)pos);
- IconPairs.Add(iconPair);
- }
-}
-
-bool CCodecIcons::FindIconIndex(const UString &ext, int &iconIndex) const
-{
- iconIndex = -1;
- FOR_VECTOR (i, IconPairs)
- {
- const CIconPair &pair = IconPairs[i];
- if (ext.IsEqualTo_NoCase(pair.Ext))
- {
- iconIndex = pair.IconIndex;
- return true;
- }
- }
- return false;
-}
-
-#endif // NEW_FOLDER_INTERFACE
+#endif // Z7_SFX
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
// #define EXPORT_CODECS
@@ -964,24 +966,24 @@ STDAPI GetHasherProp(UInt32 codecIndex, PROPID propID, PROPVARIANT *value);
#endif // EXPORT_CODECS
-STDMETHODIMP CCodecs::GetNumMethods(UInt32 *numMethods)
+Z7_COM7F_IMF(CCodecs::GetNumMethods(UInt32 *numMethods))
{
*numMethods = NUM_EXPORT_CODECS
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
+ Codecs.Size()
#endif
;
return S_OK;
}
-STDMETHODIMP CCodecs::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CCodecs::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value))
{
#ifdef EXPORT_CODECS
if (index < g_NumCodecs)
return GetMethodProperty(index, propID, value);
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CDllCodecInfo &ci = Codecs[index - NUM_EXPORT_CODECS];
if (propID == NMethodPropID::kDecoderIsAssigned ||
@@ -1010,14 +1012,14 @@ STDMETHODIMP CCodecs::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *valu
#endif
}
-STDMETHODIMP CCodecs::CreateDecoder(UInt32 index, const GUID *iid, void **coder)
+Z7_COM7F_IMF(CCodecs::CreateDecoder(UInt32 index, const GUID *iid, void **coder))
{
#ifdef EXPORT_CODECS
if (index < g_NumCodecs)
return CreateDecoder(index, iid, coder);
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CDllCodecInfo &ci = Codecs[index - NUM_EXPORT_CODECS];
if (ci.DecoderIsAssigned)
{
@@ -1033,14 +1035,14 @@ STDMETHODIMP CCodecs::CreateDecoder(UInt32 index, const GUID *iid, void **coder)
#endif
}
-STDMETHODIMP CCodecs::CreateEncoder(UInt32 index, const GUID *iid, void **coder)
+Z7_COM7F_IMF(CCodecs::CreateEncoder(UInt32 index, const GUID *iid, void **coder))
{
#ifdef EXPORT_CODECS
if (index < g_NumCodecs)
return CreateEncoder(index, iid, coder);
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CDllCodecInfo &ci = Codecs[index - NUM_EXPORT_CODECS];
if (ci.EncoderIsAssigned)
{
@@ -1057,23 +1059,23 @@ STDMETHODIMP CCodecs::CreateEncoder(UInt32 index, const GUID *iid, void **coder)
}
-STDMETHODIMP_(UInt32) CCodecs::GetNumHashers()
+Z7_COM7F_IMF2(UInt32, CCodecs::GetNumHashers())
{
return NUM_EXPORT_HASHERS
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
+ Hashers.Size()
#endif
;
}
-STDMETHODIMP CCodecs::GetHasherProp(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CCodecs::GetHasherProp(UInt32 index, PROPID propID, PROPVARIANT *value))
{
#ifdef EXPORT_CODECS
if (index < g_NumHashers)
return ::GetHasherProp(index, propID, value);
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CDllHasherInfo &ci = Hashers[index - NUM_EXPORT_HASHERS];
return Libs[ci.LibIndex].ComHashers->GetHasherProp(ci.HasherIndex, propID, value);
#else
@@ -1081,13 +1083,13 @@ STDMETHODIMP CCodecs::GetHasherProp(UInt32 index, PROPID propID, PROPVARIANT *va
#endif
}
-STDMETHODIMP CCodecs::CreateHasher(UInt32 index, IHasher **hasher)
+Z7_COM7F_IMF(CCodecs::CreateHasher(UInt32 index, IHasher **hasher))
{
#ifdef EXPORT_CODECS
if (index < g_NumHashers)
return CreateHasher(index, hasher);
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CDllHasherInfo &ci = Hashers[index - NUM_EXPORT_HASHERS];
return Libs[ci.LibIndex].ComHashers->CreateHasher(ci.HasherIndex, hasher);
#else
@@ -1102,7 +1104,7 @@ int CCodecs::GetCodec_LibIndex(UInt32 index) const
return -1;
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CDllCodecInfo &ci = Codecs[index - NUM_EXPORT_CODECS];
return (int)ci.LibIndex;
#else
@@ -1117,7 +1119,7 @@ int CCodecs::GetHasherLibIndex(UInt32 index)
return -1;
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CDllHasherInfo &ci = Hashers[index - NUM_EXPORT_HASHERS];
return (int)ci.LibIndex;
#else
@@ -1140,7 +1142,7 @@ bool CCodecs::GetCodec_DecoderIsAssigned(UInt32 index) const
}
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
return Codecs[index - NUM_EXPORT_CODECS].DecoderIsAssigned;
#else
return false;
@@ -1163,7 +1165,7 @@ bool CCodecs::GetCodec_EncoderIsAssigned(UInt32 index) const
}
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
return Codecs[index - NUM_EXPORT_CODECS].EncoderIsAssigned;
#else
return false;
@@ -1190,7 +1192,7 @@ bool CCodecs::GetCodec_IsFilter(UInt32 index, bool &isAssigned) const
}
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
{
const CDllCodecInfo &c = Codecs[index - NUM_EXPORT_CODECS];
isAssigned = c.IsFilter_Assigned;
@@ -1217,7 +1219,7 @@ UInt32 CCodecs::GetCodec_NumStreams(UInt32 index)
HRESULT CCodecs::GetCodec_Id(UInt32 index, UInt64 &id)
{
NCOM::CPropVariant prop;
- RINOK(GetProperty(index, NMethodPropID::kID, &prop));
+ RINOK(GetProperty(index, NMethodPropID::kID, &prop))
if (prop.vt != VT_UI8)
return E_INVALIDARG;
id = prop.uhVal.QuadPart;
@@ -1286,9 +1288,9 @@ void CCodecs::GetCodecsErrorMessage(UString &s)
}
}
-#endif // EXTERNAL_CODECS
+#endif // Z7_EXTERNAL_CODECS
-#ifndef _SFX
+#ifndef Z7_SFX
extern unsigned g_NumCodecs;
extern const CCodecInfo *g_Codecs[];
@@ -1311,7 +1313,7 @@ void CCodecs::Get_CodecsInfoUser_Vector(CObjectVector<CCodecInfoUser> &v)
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
{
UInt32 numMethods;
if (GetNumMethods(&numMethods) == S_OK)
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.h b/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.h
index 50fb9f8f542..a81bb5c74a9 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/LoadCodecs.h
@@ -1,7 +1,7 @@
// LoadCodecs.h
-#ifndef __LOAD_CODECS_H
-#define __LOAD_CODECS_H
+#ifndef ZIP7_INC_LOAD_CODECS_H
+#define ZIP7_INC_LOAD_CODECS_H
/*
Client application uses LoadCodecs.* to load plugins to
@@ -10,26 +10,26 @@ CCodecs object, that contains 3 lists of plugins:
2) Codecs - external codecs
3) Hashers - external hashers
-EXTERNAL_CODECS
+Z7_EXTERNAL_CODECS
---------------
- if EXTERNAL_CODECS is defined, then the code tries to load external
+ if Z7_EXTERNAL_CODECS is defined, then the code tries to load external
plugins from DLL files (shared libraries).
There are two types of executables in 7-Zip:
1) Executable that uses external plugins must be compiled
- with EXTERNAL_CODECS defined:
+ with Z7_EXTERNAL_CODECS defined:
- 7z.exe, 7zG.exe, 7zFM.exe
- Note: EXTERNAL_CODECS is used also in CPP/7zip/Common/CreateCoder.h
+ Note: Z7_EXTERNAL_CODECS is used also in CPP/7zip/Common/CreateCoder.h
that code is used in plugin module (7z.dll).
- 2) Standalone modules are compiled without EXTERNAL_CODECS:
+ 2) Standalone modules are compiled without Z7_EXTERNAL_CODECS:
- SFX modules: 7z.sfx, 7zCon.sfx
- standalone versions of console 7-Zip: 7za.exe, 7zr.exe
- if EXTERNAL_CODECS is defined, CCodecs class implements interfaces:
+ if Z7_EXTERNAL_CODECS is defined, CCodecs class implements interfaces:
- ICompressCodecsInfo : for Codecs
- IHashers : for Hashers
@@ -51,7 +51,7 @@ EXTERNAL_CODECS
#include "../../../Common/MyString.h"
#include "../../../Common/ComTry.h"
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
#include "../../../Windows/DLL.h"
#endif
@@ -60,7 +60,7 @@ EXTERNAL_CODECS
#include "../../Archive/IArchive.h"
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
struct CDllCodecInfo
{
@@ -104,19 +104,21 @@ struct CArcInfoEx
UString Name;
CObjectVector<CArcExtInfo> Exts;
- #ifndef _SFX
+ #ifndef Z7_SFX
Func_CreateOutArchive CreateOutArchive;
bool UpdateEnabled;
bool NewInterface;
// UInt32 Version;
UInt32 SignatureOffset;
CObjectVector<CByteBuffer> Signatures;
+ /*
#ifdef NEW_FOLDER_INTERFACE
UStringVector AssociateExts;
#endif
+ */
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
int LibIndex;
UInt32 FormatIndex;
CLSID ClassID;
@@ -124,10 +126,10 @@ struct CArcInfoEx
int Compare(const CArcInfoEx &a) const
{
- int res = Name.Compare(a.Name);
+ const int res = Name.Compare(a.Name);
if (res != 0)
return res;
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
return MyCompare(LibIndex, a.LibIndex);
#else
return 0;
@@ -192,6 +194,7 @@ struct CArcInfoEx
bool Is_Tar() const { return Name.IsEqualTo_Ascii_NoCase("tar"); }
bool Is_Zip() const { return Name.IsEqualTo_Ascii_NoCase("zip"); }
bool Is_Rar() const { return Name.IsEqualTo_Ascii_NoCase("rar"); }
+ bool Is_Zstd() const { return Name.IsEqualTo_Ascii_NoCase("zstd"); }
/*
UString GetAllExtensions() const
@@ -200,7 +203,7 @@ struct CArcInfoEx
for (int i = 0; i < Exts.Size(); i++)
{
if (i > 0)
- s += ' ';
+ s.Add_Space();
s += Exts[i].Ext;
}
return s;
@@ -215,42 +218,23 @@ struct CArcInfoEx
TimeFlags(0),
CreateInArchive(NULL),
IsArcFunc(NULL)
- #ifndef _SFX
+ #ifndef Z7_SFX
, CreateOutArchive(NULL)
, UpdateEnabled(false)
, NewInterface(false)
// , Version(0)
, SignatureOffset(0)
#endif
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
, LibIndex(-1)
#endif
{}
};
-#ifdef NEW_FOLDER_INTERFACE
-
-struct CCodecIcons
-{
- struct CIconPair
- {
- UString Ext;
- int IconIndex;
- };
- CObjectVector<CIconPair> IconPairs;
-
- void LoadIcons(HMODULE m);
- bool FindIconIndex(const UString &ext, int &iconIndex) const;
-};
-
-#endif
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
struct CCodecLib
- #ifdef NEW_FOLDER_INTERFACE
- : public CCodecIcons
- #endif
{
NWindows::NDLL::CLibrary Lib;
FString Path;
@@ -262,17 +246,23 @@ struct CCodecLib
Func_SetCodecs SetCodecs;
CMyComPtr<IHashers> ComHashers;
+
+ UInt32 Version;
+ /*
#ifdef NEW_FOLDER_INTERFACE
- void LoadIcons() { CCodecIcons::LoadIcons((HMODULE)Lib); }
+ CCodecIcons CodecIcons;
+ void LoadIcons() { CodecIcons.LoadIcons((HMODULE)Lib); }
#endif
+ */
CCodecLib():
CreateObject(NULL),
GetMethodProperty(NULL),
CreateDecoder(NULL),
CreateEncoder(NULL),
- SetCodecs(NULL)
+ SetCodecs(NULL),
+ Version(0)
{}
};
@@ -301,8 +291,8 @@ struct CCodecInfoUser
};
-class CCodecs:
- #ifdef EXTERNAL_CODECS
+class CCodecs Z7_final:
+ #ifdef Z7_EXTERNAL_CODECS
public ICompressCodecsInfo,
public IHashers,
#else
@@ -310,9 +300,15 @@ class CCodecs:
#endif
public CMyUnknownImp
{
- CLASS_NO_COPY(CCodecs);
+#ifdef Z7_EXTERNAL_CODECS
+ Z7_IFACES_IMP_UNK_2(ICompressCodecsInfo, IHashers)
+#else
+ Z7_COM_UNKNOWN_IMP_0
+#endif // Z7_EXTERNAL_CODECS
+
+ Z7_CLASS_NO_COPY(CCodecs)
public:
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CObjectVector<CCodecLib> Libs;
FString MainDll_ErrorPath;
@@ -323,7 +319,7 @@ public:
class CReleaser
{
- CLASS_NO_COPY(CReleaser);
+ Z7_CLASS_NO_COPY(CReleaser)
/* CCodecsReleaser object releases CCodecs links.
1) CCodecs is COM object that is deleted when all links to that object will be released/
@@ -352,13 +348,15 @@ public:
#endif
+ /*
#ifdef NEW_FOLDER_INTERFACE
CCodecIcons InternalIcons;
#endif
+ */
CObjectVector<CArcInfoEx> Formats;
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
CRecordVector<CDllCodecInfo> Codecs;
CRecordVector<CDllHasherInfo> Hashers;
#endif
@@ -367,7 +365,7 @@ public:
bool CaseSensitive;
CCodecs():
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
NeedSetLibCodecs(true),
#endif
CaseSensitive_Change(false),
@@ -386,34 +384,14 @@ public:
HRESULT Load();
- #ifndef _SFX
+ #ifndef Z7_SFX
int FindFormatForArchiveName(const UString &arcPath) const;
int FindFormatForExtension(const UString &ext) const;
int FindFormatForArchiveType(const UString &arcType) const;
bool FindFormatForArchiveType(const UString &arcType, CIntVector &formatIndices) const;
#endif
- #ifdef EXTERNAL_CODECS
-
- MY_UNKNOWN_IMP2(ICompressCodecsInfo, IHashers)
-
- STDMETHOD(GetNumMethods)(UInt32 *numMethods);
- STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value);
- STDMETHOD(CreateDecoder)(UInt32 index, const GUID *iid, void **coder);
- STDMETHOD(CreateEncoder)(UInt32 index, const GUID *iid, void **coder);
-
- STDMETHOD_(UInt32, GetNumHashers)();
- STDMETHOD(GetHasherProp)(UInt32 index, PROPID propID, PROPVARIANT *value);
- STDMETHOD(CreateHasher)(UInt32 index, IHasher **hasher);
-
- #else
-
- MY_UNKNOWN_IMP
-
- #endif // EXTERNAL_CODECS
-
-
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
int GetCodec_LibIndex(UInt32 index) const;
bool GetCodec_DecoderIsAssigned(UInt32 index) const;
@@ -435,7 +413,7 @@ public:
HRESULT CreateInArchive(unsigned formatIndex, CMyComPtr<IInArchive> &archive) const
{
const CArcInfoEx &ai = Formats[formatIndex];
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
if (ai.LibIndex < 0)
#endif
{
@@ -444,17 +422,17 @@ public:
return S_OK;
COM_TRY_END
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
return CreateArchiveHandler(ai, false, (void **)&archive);
#endif
}
- #ifndef _SFX
+ #ifndef Z7_SFX
HRESULT CreateOutArchive(unsigned formatIndex, CMyComPtr<IOutArchive> &archive) const
{
const CArcInfoEx &ai = Formats[formatIndex];
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
if (ai.LibIndex < 0)
#endif
{
@@ -464,7 +442,7 @@ public:
COM_TRY_END
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
return CreateArchiveHandler(ai, true, (void **)&archive);
#endif
}
@@ -484,21 +462,21 @@ public:
void Get_CodecsInfoUser_Vector(CObjectVector<CCodecInfoUser> &v);
- #endif // _SFX
+ #endif // Z7_SFX
};
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
#define CREATE_CODECS_OBJECT \
CCodecs *codecs = new CCodecs; \
- CExternalCodecs __externalCodecs; \
- __externalCodecs.GetCodecs = codecs; \
- __externalCodecs.GetHashers = codecs; \
+ CExternalCodecs _externalCodecs; \
+ _externalCodecs.GetCodecs = codecs; \
+ _externalCodecs.GetHashers = codecs; \
CCodecs::CReleaser codecsReleaser; \
codecsReleaser.Set(codecs);
#else
#define CREATE_CODECS_OBJECT \
CCodecs *codecs = new CCodecs; \
- CMyComPtr<IUnknown> __codecsRef = codecs;
+ CMyComPtr<IUnknown> _codecsRef = codecs;
#endif
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.cpp
index 4a91a2686eb..a501b86d4b1 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.cpp
@@ -29,11 +29,11 @@
#include "DefaultName.h"
#include "OpenArchive.h"
-#ifndef _SFX
+#ifndef Z7_SFX
#include "SetProperties.h"
#endif
-#ifndef _SFX
+#ifndef Z7_SFX
#ifdef SHOW_DEBUG_INFO
#define PRF(x) x
#else
@@ -95,7 +95,7 @@ Open:
using namespace NWindows;
/*
-#ifdef _SFX
+#ifdef Z7_SFX
#define OPEN_PROPS_PARAM
#else
#define OPEN_PROPS_PARAM , props
@@ -111,7 +111,7 @@ CArc::~CArc()
}
*/
-#ifndef _SFX
+#ifndef Z7_SFX
namespace NArchive {
namespace NParser {
@@ -172,23 +172,14 @@ struct CParseItem
}
};
-class CHandler:
- public IInArchive,
- public IInArchiveGetStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_CHandler_IInArchive_1(
+ IInArchiveGetStream
+)
public:
CObjectVector<CParseItem> _items;
UInt64 _maxEndOffset;
CMyComPtr<IInStream> _stream;
- MY_UNKNOWN_IMP2(
- IInArchive,
- IInArchiveGetStream)
-
- INTERFACE_IInArchive(;)
- STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
-
UInt64 GetLastEnd() const
{
if (_items.IsEmpty())
@@ -300,7 +291,7 @@ static const Byte kProps[] =
IMP_IInArchive_Props
IMP_IInArchive_ArcProps_NO
-STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback * /* openArchiveCallback */)
+Z7_COM7F_IMF(CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback * /* openArchiveCallback */))
{
COM_TRY_BEGIN
{
@@ -311,20 +302,20 @@ STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallb
COM_TRY_END
}
-STDMETHODIMP CHandler::Close()
+Z7_COM7F_IMF(CHandler::Close())
{
_items.Clear();
_stream.Release();
return S_OK;
}
-STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
+Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
{
*numItems = _items.Size();
return S_OK;
}
-STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value))
{
COM_TRY_BEGIN
NCOM::CPropVariant prop;
@@ -340,12 +331,12 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
UString s(sz);
if (!item.Name.IsEmpty())
{
- s += '.';
+ s.Add_Dot();
s += item.Name;
}
if (!item.Extension.IsEmpty())
{
- s += '.';
+ s.Add_Dot();
s += item.Extension;
}
prop = s; break;
@@ -365,12 +356,12 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
COM_TRY_END
}
-HRESULT CHandler::Extract(const UInt32 *indices, UInt32 numItems,
- Int32 testMode, IArchiveExtractCallback *extractCallback)
+Z7_COM7F_IMF(CHandler::Extract(const UInt32 *indices, UInt32 numItems,
+ Int32 testMode, IArchiveExtractCallback *extractCallback))
{
COM_TRY_BEGIN
- bool allFilesMode = (numItems == (UInt32)(Int32)-1);
+ const bool allFilesMode = (numItems == (UInt32)(Int32)-1);
if (allFilesMode)
numItems = _items.Size();
if (_stream && numItems == 0)
@@ -401,35 +392,35 @@ HRESULT CHandler::Extract(const UInt32 *indices, UInt32 numItems,
{
lps->InSize = totalSize;
lps->OutSize = totalSize;
- RINOK(lps->SetCur());
+ RINOK(lps->SetCur())
CMyComPtr<ISequentialOutStream> realOutStream;
- Int32 askMode = testMode ?
+ const Int32 askMode = testMode ?
NExtract::NAskMode::kTest :
NExtract::NAskMode::kExtract;
- UInt32 index = allFilesMode ? i : indices[i];
+ const UInt32 index = allFilesMode ? i : indices[i];
const CParseItem &item = _items[index];
- RINOK(extractCallback->GetStream(index, &realOutStream, askMode));
+ RINOK(extractCallback->GetStream(index, &realOutStream, askMode))
UInt64 unpackSize = item.Size;
totalSize += unpackSize;
bool skipMode = false;
if (!testMode && !realOutStream)
continue;
- RINOK(extractCallback->PrepareOperation(askMode));
+ RINOK(extractCallback->PrepareOperation(askMode))
outStreamSpec->SetStream(realOutStream);
realOutStream.Release();
outStreamSpec->Init(skipMode ? 0 : unpackSize, true);
Int32 opRes = NExtract::NOperationResult::kOK;
- RINOK(_stream->Seek((Int64)item.Offset, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekSet(_stream, item.Offset))
streamSpec->Init(unpackSize);
- RINOK(copyCoder->Code(inStream, outStream, NULL, NULL, progress));
+ RINOK(copyCoder->Code(inStream, outStream, NULL, NULL, progress))
if (outStreamSpec->GetRem() != 0)
opRes = NExtract::NOperationResult::kDataError;
outStreamSpec->ReleaseStream();
- RINOK(extractCallback->SetOperationResult(opRes));
+ RINOK(extractCallback->SetOperationResult(opRes))
}
return S_OK;
@@ -438,7 +429,7 @@ HRESULT CHandler::Extract(const UInt32 *indices, UInt32 numItems,
}
-STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
+Z7_COM7F_IMF(CHandler::GetStream(UInt32 index, ISequentialInStream **stream))
{
COM_TRY_BEGIN
const CParseItem &item = _items[index];
@@ -454,7 +445,7 @@ HRESULT Archive_GetItemBoolProp(IInArchive *arc, UInt32 index, PROPID propID, bo
{
NCOM::CPropVariant prop;
result = false;
- RINOK(arc->GetProperty(index, propID, &prop));
+ RINOK(arc->GetProperty(index, propID, &prop))
if (prop.vt == VT_BOOL)
result = VARIANT_BOOLToBool(prop.boolVal);
else if (prop.vt != VT_EMPTY)
@@ -486,7 +477,7 @@ static HRESULT Archive_GetArcProp_Bool(IInArchive *arc, PROPID propid, bool &res
{
NCOM::CPropVariant prop;
result = false;
- RINOK(arc->GetArchiveProperty(propid, &prop));
+ RINOK(arc->GetArchiveProperty(propid, &prop))
if (prop.vt == VT_BOOL)
result = VARIANT_BOOLToBool(prop.boolVal);
else if (prop.vt != VT_EMPTY)
@@ -498,7 +489,7 @@ static HRESULT Archive_GetArcProp_UInt(IInArchive *arc, PROPID propid, UInt64 &r
{
defined = false;
NCOM::CPropVariant prop;
- RINOK(arc->GetArchiveProperty(propid, &prop));
+ RINOK(arc->GetArchiveProperty(propid, &prop))
switch (prop.vt)
{
case VT_UI4: result = prop.ulVal; break;
@@ -516,7 +507,7 @@ static HRESULT Archive_GetArcProp_Int(IInArchive *arc, PROPID propid, Int64 &res
{
defined = false;
NCOM::CPropVariant prop;
- RINOK(arc->GetArchiveProperty(propid, &prop));
+ RINOK(arc->GetArchiveProperty(propid, &prop))
switch (prop.vt)
{
case VT_UI4: result = prop.ulVal; break;
@@ -530,7 +521,7 @@ static HRESULT Archive_GetArcProp_Int(IInArchive *arc, PROPID propid, Int64 &res
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
HRESULT CArc::GetItem_PathToParent(UInt32 index, UInt32 parent, UStringVector &parts) const
{
@@ -550,14 +541,14 @@ HRESULT CArc::GetItem_PathToParent(UInt32 index, UInt32 parent, UStringVector &p
const void *p;
UInt32 size;
UInt32 propType;
- RINOK(GetRawProps->GetRawProp(curIndex, kpidName, &p, &size, &propType));
+ RINOK(GetRawProps->GetRawProp(curIndex, kpidName, &p, &size, &propType))
if (p && propType == PROP_DATA_TYPE_wchar_t_PTR_Z_LE)
s = (const wchar_t *)p;
else
#endif
{
NCOM::CPropVariant prop;
- RINOK(Archive->GetProperty(curIndex, kpidName, &prop));
+ RINOK(Archive->GetProperty(curIndex, kpidName, &prop))
if (prop.vt == VT_BSTR && prop.bstrVal)
s.SetFromBstr(prop.bstrVal);
else if (prop.vt == VT_EMPTY)
@@ -568,7 +559,7 @@ HRESULT CArc::GetItem_PathToParent(UInt32 index, UInt32 parent, UStringVector &p
UInt32 curParent = (UInt32)(Int32)-1;
UInt32 parentType = 0;
- RINOK(GetRawProps->GetParent(curIndex, &curParent, &parentType));
+ RINOK(GetRawProps->GetParent(curIndex, &curParent, &parentType))
// 18.06: fixed : we don't want to split name to parts
/*
@@ -742,7 +733,7 @@ HRESULT CArc::GetItem_Path(UInt32 index, UString &result) const
{
NCOM::CPropVariant prop;
- RINOK(Archive->GetProperty(index, kpidPath, &prop));
+ RINOK(Archive->GetProperty(index, kpidPath, &prop))
if (prop.vt == VT_BSTR && prop.bstrVal)
result.SetFromBstr(prop.bstrVal);
else if (prop.vt == VT_EMPTY)
@@ -762,15 +753,15 @@ HRESULT CArc::GetItem_DefaultPath(UInt32 index, UString &result) const
{
result.Empty();
bool isDir;
- RINOK(Archive_IsItem_Dir(Archive, index, isDir));
+ RINOK(Archive_IsItem_Dir(Archive, index, isDir))
if (!isDir)
{
result = DefaultName;
NCOM::CPropVariant prop;
- RINOK(Archive->GetProperty(index, kpidExtension, &prop));
+ RINOK(Archive->GetProperty(index, kpidExtension, &prop))
if (prop.vt == VT_BSTR)
{
- result += '.';
+ result.Add_Dot();
result += prop.bstrVal;
}
else if (prop.vt != VT_EMPTY)
@@ -781,11 +772,11 @@ HRESULT CArc::GetItem_DefaultPath(UInt32 index, UString &result) const
HRESULT CArc::GetItem_Path2(UInt32 index, UString &result) const
{
- RINOK(GetItem_Path(index, result));
+ RINOK(GetItem_Path(index, result))
if (Ask_Deleted)
{
bool isDeleted = false;
- RINOK(Archive_IsItem_Deleted(Archive, index, isDeleted));
+ RINOK(Archive_IsItem_Deleted(Archive, index, isDeleted))
if (isDeleted)
result.Insert(0, L"[DELETED]" WSTRING_PATH_SEPARATOR);
}
@@ -830,12 +821,12 @@ HRESULT CArc::GetItem(UInt32 index, CReadArcItem &item) const
item.PathParts.Clear();
- RINOK(Archive_IsItem_Dir(Archive, index, item.IsDir));
+ RINOK(Archive_IsItem_Dir(Archive, index, item.IsDir))
item.MainIsDir = item.IsDir;
- RINOK(GetItem_Path2(index, item.Path));
+ RINOK(GetItem_Path2(index, item.Path))
- #ifndef _SFX
+ #ifndef Z7_SFX
UInt32 mainIndex = index;
#endif
@@ -844,7 +835,7 @@ HRESULT CArc::GetItem(UInt32 index, CReadArcItem &item) const
item.MainPath = item.Path;
if (Ask_AltStream)
{
- RINOK(Archive_IsItem_AltStream(Archive, index, item.IsAltStream));
+ RINOK(Archive_IsItem_AltStream(Archive, index, item.IsAltStream))
}
bool needFindAltStream = false;
@@ -856,11 +847,11 @@ HRESULT CArc::GetItem(UInt32 index, CReadArcItem &item) const
{
UInt32 parentType = 0;
UInt32 parentIndex;
- RINOK(GetRawProps->GetParent(index, &parentIndex, &parentType));
+ RINOK(GetRawProps->GetParent(index, &parentIndex, &parentType))
if (parentType == NParentType::kAltStream)
{
NCOM::CPropVariant prop;
- RINOK(Archive->GetProperty(index, kpidName, &prop));
+ RINOK(Archive->GetProperty(index, kpidName, &prop))
if (prop.vt == VT_BSTR && prop.bstrVal)
item.AltStreamName.SetFromBstr(prop.bstrVal);
else if (prop.vt != VT_EMPTY)
@@ -885,8 +876,8 @@ HRESULT CArc::GetItem(UInt32 index, CReadArcItem &item) const
}
else
{
- RINOK(GetItem_Path2(parentIndex, item.MainPath));
- RINOK(Archive_IsItem_Dir(Archive, parentIndex, item.MainIsDir));
+ RINOK(GetItem_Path2(parentIndex, item.MainPath))
+ RINOK(Archive_IsItem_Dir(Archive, parentIndex, item.MainIsDir))
}
}
}
@@ -908,10 +899,10 @@ HRESULT CArc::GetItem(UInt32 index, CReadArcItem &item) const
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
if (item._use_baseParentFolder_mode)
{
- RINOK(GetItem_PathToParent(mainIndex, (unsigned)item._baseParentFolder, item.PathParts));
+ RINOK(GetItem_PathToParent(mainIndex, (unsigned)item._baseParentFolder, item.PathParts))
#ifdef SUPPORT_ALT_STREAMS
if ((item.WriteToAltStreamIfColon || needFindAltStream) && !item.PathParts.IsEmpty())
@@ -947,14 +938,14 @@ HRESULT CArc::GetItem(UInt32 index, CReadArcItem &item) const
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
static HRESULT Archive_GetItem_Size(IInArchive *archive, UInt32 index, UInt64 &size, bool &defined)
{
NCOM::CPropVariant prop;
defined = false;
size = 0;
- RINOK(archive->GetProperty(index, kpidSize, &prop));
+ RINOK(archive->GetProperty(index, kpidSize, &prop))
switch (prop.vt)
{
case VT_UI1: size = prop.bVal; break;
@@ -975,7 +966,7 @@ HRESULT CArc::GetItem_Size(UInt32 index, UInt64 &size, bool &defined) const
NCOM::CPropVariant prop;
defined = false;
size = 0;
- RINOK(Archive->GetProperty(index, kpidSize, &prop));
+ RINOK(Archive->GetProperty(index, kpidSize, &prop))
switch (prop.vt)
{
case VT_UI1: size = prop.bVal; break;
@@ -993,7 +984,7 @@ HRESULT CArc::GetItem_MTime(UInt32 index, CArcTime &at) const
{
at.Clear();
NCOM::CPropVariant prop;
- RINOK(Archive->GetProperty(index, kpidMTime, &prop));
+ RINOK(Archive->GetProperty(index, kpidMTime, &prop))
if (prop.vt == VT_FILETIME)
{
@@ -1011,7 +1002,7 @@ HRESULT CArc::GetItem_MTime(UInt32 index, CArcTime &at) const
// (at.Prec == 0) before version 22.
// so kpidTimeType is required for that code
prop.Clear();
- RINOK(Archive->GetProperty(index, kpidTimeType, &prop));
+ RINOK(Archive->GetProperty(index, kpidTimeType, &prop))
if (prop.vt == VT_UI4)
{
UInt32 val = prop.ulVal;
@@ -1038,7 +1029,7 @@ HRESULT CArc::GetItem_MTime(UInt32 index, CArcTime &at) const
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
static inline bool TestSignature(const Byte *p1, const Byte *p2, size_t size)
{
@@ -1121,7 +1112,7 @@ static bool IsPreArcFormat(const CArcInfoEx &ai)
{
if (ai.Flags_PreArc())
return true;
- return IsNameFromList(ai.Name, k_PreArcFormats, ARRAY_SIZE(k_PreArcFormats));
+ return IsNameFromList(ai.Name, k_PreArcFormats, Z7_ARRAY_SIZE(k_PreArcFormats));
}
static const char * const k_Formats_with_simple_signuature[] =
@@ -1143,44 +1134,46 @@ static bool IsNewStyleSignature(const CArcInfoEx &ai)
// if (ai.Version >= 0x91F)
if (ai.NewInterface)
return true;
- return IsNameFromList(ai.Name, k_Formats_with_simple_signuature, ARRAY_SIZE(k_Formats_with_simple_signuature));
+ return IsNameFromList(ai.Name, k_Formats_with_simple_signuature, Z7_ARRAY_SIZE(k_Formats_with_simple_signuature));
}
-class CArchiveOpenCallback_Offset:
+
+
+class CArchiveOpenCallback_Offset Z7_final:
public IArchiveOpenCallback,
public IArchiveOpenVolumeCallback,
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
public ICryptoGetTextPassword,
- #endif
+ #endif
public CMyUnknownImp
{
+ Z7_COM_QI_BEGIN2(IArchiveOpenCallback)
+ Z7_COM_QI_ENTRY(IArchiveOpenVolumeCallback)
+ #ifndef Z7_NO_CRYPTO
+ Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(IArchiveOpenCallback)
+ Z7_IFACE_COM7_IMP(IArchiveOpenVolumeCallback)
+ #ifndef Z7_NO_CRYPTO
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
+ #endif
+
public:
CMyComPtr<IArchiveOpenCallback> Callback;
CMyComPtr<IArchiveOpenVolumeCallback> OpenVolumeCallback;
UInt64 Files;
UInt64 Offset;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
CMyComPtr<ICryptoGetTextPassword> GetTextPassword;
#endif
-
- MY_QUERYINTERFACE_BEGIN2(IArchiveOpenCallback)
- MY_QUERYINTERFACE_ENTRY(IArchiveOpenVolumeCallback)
- #ifndef _NO_CRYPTO
- MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- INTERFACE_IArchiveOpenCallback(;)
- INTERFACE_IArchiveOpenVolumeCallback(;)
- #ifndef _NO_CRYPTO
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
- #endif
};
-#ifndef _NO_CRYPTO
-STDMETHODIMP CArchiveOpenCallback_Offset::CryptoGetTextPassword(BSTR *password)
+#ifndef Z7_NO_CRYPTO
+Z7_COM7F_IMF(CArchiveOpenCallback_Offset::CryptoGetTextPassword(BSTR *password))
{
COM_TRY_BEGIN
if (GetTextPassword)
@@ -1190,12 +1183,12 @@ STDMETHODIMP CArchiveOpenCallback_Offset::CryptoGetTextPassword(BSTR *password)
}
#endif
-STDMETHODIMP CArchiveOpenCallback_Offset::SetTotal(const UInt64 *, const UInt64 *)
+Z7_COM7F_IMF(CArchiveOpenCallback_Offset::SetTotal(const UInt64 *, const UInt64 *))
{
return S_OK;
}
-STDMETHODIMP CArchiveOpenCallback_Offset::SetCompleted(const UInt64 *, const UInt64 *bytes)
+Z7_COM7F_IMF(CArchiveOpenCallback_Offset::SetCompleted(const UInt64 *, const UInt64 *bytes))
{
if (!Callback)
return S_OK;
@@ -1205,7 +1198,7 @@ STDMETHODIMP CArchiveOpenCallback_Offset::SetCompleted(const UInt64 *, const UIn
return Callback->SetCompleted(&Files, &value);
}
-STDMETHODIMP CArchiveOpenCallback_Offset::GetProperty(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CArchiveOpenCallback_Offset::GetProperty(PROPID propID, PROPVARIANT *value))
{
if (OpenVolumeCallback)
return OpenVolumeCallback->GetProperty(propID, value);
@@ -1214,7 +1207,7 @@ STDMETHODIMP CArchiveOpenCallback_Offset::GetProperty(PROPID propID, PROPVARIANT
// return E_NOTIMPL;
}
-STDMETHODIMP CArchiveOpenCallback_Offset::GetStream(const wchar_t *name, IInStream **inStream)
+Z7_COM7F_IMF(CArchiveOpenCallback_Offset::GetStream(const wchar_t *name, IInStream **inStream))
{
if (OpenVolumeCallback)
return OpenVolumeCallback->GetStream(name, inStream);
@@ -1266,32 +1259,32 @@ HRESULT CArc::ReadBasicProps(IInArchive *archive, UInt64 startPos, HRESULT openR
ErrorInfo.ClearErrors();
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidErrorFlags, &prop));
+ RINOK(archive->GetArchiveProperty(kpidErrorFlags, &prop))
ErrorInfo.ErrorFlags = GetOpenArcErrorFlags(prop, &ErrorInfo.ErrorFlags_Defined);
}
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidWarningFlags, &prop));
+ RINOK(archive->GetArchiveProperty(kpidWarningFlags, &prop))
ErrorInfo.WarningFlags = GetOpenArcErrorFlags(prop);
}
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidError, &prop));
+ RINOK(archive->GetArchiveProperty(kpidError, &prop))
if (prop.vt != VT_EMPTY)
ErrorInfo.ErrorMessage = (prop.vt == VT_BSTR ? prop.bstrVal : L"Unknown error");
}
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidWarning, &prop));
+ RINOK(archive->GetArchiveProperty(kpidWarning, &prop))
if (prop.vt != VT_EMPTY)
ErrorInfo.WarningMessage = (prop.vt == VT_BSTR ? prop.bstrVal : L"Unknown warning");
}
if (openRes == S_OK || ErrorInfo.IsArc_After_NonOpen())
{
- RINOK(Archive_GetArcProp_UInt(archive, kpidPhySize, PhySize, PhySize_Defined));
+ RINOK(Archive_GetArcProp_UInt(archive, kpidPhySize, PhySize, PhySize_Defined))
/*
RINOK(Archive_GetArcProp_UInt(archive, kpidOkPhySize, OkPhySize, OkPhySize_Defined));
if (!OkPhySize_Defined)
@@ -1302,7 +1295,7 @@ HRESULT CArc::ReadBasicProps(IInArchive *archive, UInt64 startPos, HRESULT openR
*/
bool offsetDefined;
- RINOK(Archive_GetArcProp_Int(archive, kpidOffset, Offset, offsetDefined));
+ RINOK(Archive_GetArcProp_Int(archive, kpidOffset, Offset, offsetDefined))
Int64 globalOffset = (Int64)startPos + Offset;
AvailPhySize = (UInt64)((Int64)FileSize - globalOffset);
@@ -1338,12 +1331,12 @@ HRESULT CArc::PrepareToOpen(const COpenOptions &op, unsigned formatIndex, CMyCom
// OutputDebugStringA("a1");
// PrintNumber("formatIndex", formatIndex);
- RINOK(op.codecs->CreateInArchive(formatIndex, archive));
+ RINOK(op.codecs->CreateInArchive(formatIndex, archive))
// OutputDebugStringA("a2");
if (!archive)
return S_OK;
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
if (op.codecs->NeedSetLibCodecs)
{
const CArcInfoEx &ai = op.codecs->Formats[formatIndex];
@@ -1355,14 +1348,14 @@ HRESULT CArc::PrepareToOpen(const COpenOptions &op, unsigned formatIndex, CMyCom
archive.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo);
if (setCompressCodecsInfo)
{
- RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(op.codecs));
+ RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(op.codecs))
}
}
}
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
const CArcInfoEx &ai = op.codecs->Formats[formatIndex];
@@ -1392,14 +1385,14 @@ HRESULT CArc::PrepareToOpen(const COpenOptions &op, unsigned formatIndex, CMyCom
}
}
*/
- RINOK(SetProperties(archive, *op.props));
+ RINOK(SetProperties(archive, *op.props))
}
#endif
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
static HRESULT ReadParseItemProps(IInArchive *archive, const CArcInfoEx &ai, NArchive::NParser::CParseItem &pi)
{
@@ -1407,14 +1400,14 @@ static HRESULT ReadParseItemProps(IInArchive *archive, const CArcInfoEx &ai, NAr
pi.FileTime_Defined = false;
pi.ArcType = ai.Name;
- RINOK(Archive_GetArcProp_Bool(archive, kpidIsNotArcType, pi.IsNotArcType));
+ RINOK(Archive_GetArcProp_Bool(archive, kpidIsNotArcType, pi.IsNotArcType))
// RINOK(Archive_GetArcProp_Bool(archive, kpidIsSelfExe, pi.IsSelfExe));
pi.IsSelfExe = ai.Flags_PreArc();
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidMTime, &prop));
+ RINOK(archive->GetArchiveProperty(kpidMTime, &prop))
if (prop.vt == VT_FILETIME)
{
pi.FileTime_Defined = true;
@@ -1425,7 +1418,7 @@ static HRESULT ReadParseItemProps(IInArchive *archive, const CArcInfoEx &ai, NAr
if (!pi.FileTime_Defined)
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidCTime, &prop));
+ RINOK(archive->GetArchiveProperty(kpidCTime, &prop))
if (prop.vt == VT_FILETIME)
{
pi.FileTime_Defined = true;
@@ -1435,7 +1428,7 @@ static HRESULT ReadParseItemProps(IInArchive *archive, const CArcInfoEx &ai, NAr
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidName, &prop));
+ RINOK(archive->GetArchiveProperty(kpidName, &prop))
if (prop.vt == VT_BSTR)
{
pi.Name.SetFromBstr(prop.bstrVal);
@@ -1443,7 +1436,7 @@ static HRESULT ReadParseItemProps(IInArchive *archive, const CArcInfoEx &ai, NAr
}
else
{
- RINOK(archive->GetArchiveProperty(kpidExtension, &prop));
+ RINOK(archive->GetArchiveProperty(kpidExtension, &prop))
if (prop.vt == VT_BSTR)
pi.Extension.SetFromBstr(prop.bstrVal);
}
@@ -1451,14 +1444,14 @@ static HRESULT ReadParseItemProps(IInArchive *archive, const CArcInfoEx &ai, NAr
{
NCOM::CPropVariant prop;
- RINOK(archive->GetArchiveProperty(kpidShortComment, &prop));
+ RINOK(archive->GetArchiveProperty(kpidShortComment, &prop))
if (prop.vt == VT_BSTR)
pi.Comment.SetFromBstr(prop.bstrVal);
}
UInt32 numItems;
- RINOK(archive->GetNumberOfItems(&numItems));
+ RINOK(archive->GetNumberOfItems(&numItems))
// pi.NumSubFiles = numItems;
// RINOK(Archive_GetArcProp_UInt(archive, kpidUnpackSize, pi.UnpackSize, pi.UnpackSize_Defined));
@@ -1499,14 +1492,14 @@ HRESULT CArc::CheckZerosTail(const COpenOptions &op, UInt64 offset)
{
if (!op.stream)
return S_OK;
- RINOK(op.stream->Seek((Int64)offset, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekSet(op.stream, offset))
const UInt32 kBufSize = 1 << 11;
Byte buf[kBufSize];
for (;;)
{
UInt32 processed = 0;
- RINOK(op.stream->Read(buf, kBufSize, &processed));
+ RINOK(op.stream->Read(buf, kBufSize, &processed))
if (processed == 0)
{
// ErrorInfo.NonZerosTail = false;
@@ -1527,21 +1520,19 @@ HRESULT CArc::CheckZerosTail(const COpenOptions &op, UInt64 offset)
-#ifndef _SFX
+#ifndef Z7_SFX
-class CExtractCallback_To_OpenCallback:
- public IArchiveExtractCallback,
- public ICompressProgressInfo,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_2(
+ CExtractCallback_To_OpenCallback
+ , IArchiveExtractCallback
+ , ICompressProgressInfo
+)
+ Z7_IFACE_COM7_IMP(IProgress)
public:
CMyComPtr<IArchiveOpenCallback> Callback;
UInt64 Files;
UInt64 Offset;
- MY_UNKNOWN_IMP2(IArchiveExtractCallback, ICompressProgressInfo)
- INTERFACE_IArchiveExtractCallback(;)
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
void Init(IArchiveOpenCallback *callback)
{
Callback = callback;
@@ -1550,17 +1541,17 @@ public:
}
};
-STDMETHODIMP CExtractCallback_To_OpenCallback::SetTotal(UInt64 /* size */)
+Z7_COM7F_IMF(CExtractCallback_To_OpenCallback::SetTotal(UInt64 /* size */))
{
return S_OK;
}
-STDMETHODIMP CExtractCallback_To_OpenCallback::SetCompleted(const UInt64 * /* completeValue */)
+Z7_COM7F_IMF(CExtractCallback_To_OpenCallback::SetCompleted(const UInt64 * /* completeValue */))
{
return S_OK;
}
-STDMETHODIMP CExtractCallback_To_OpenCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 * /* outSize */)
+Z7_COM7F_IMF(CExtractCallback_To_OpenCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 * /* outSize */))
{
if (Callback)
{
@@ -1572,18 +1563,18 @@ STDMETHODIMP CExtractCallback_To_OpenCallback::SetRatioInfo(const UInt64 *inSize
return S_OK;
}
-STDMETHODIMP CExtractCallback_To_OpenCallback::GetStream(UInt32 /* index */, ISequentialOutStream **outStream, Int32 /* askExtractMode */)
+Z7_COM7F_IMF(CExtractCallback_To_OpenCallback::GetStream(UInt32 /* index */, ISequentialOutStream **outStream, Int32 /* askExtractMode */))
{
*outStream = NULL;
return S_OK;
}
-STDMETHODIMP CExtractCallback_To_OpenCallback::PrepareOperation(Int32 /* askExtractMode */)
+Z7_COM7F_IMF(CExtractCallback_To_OpenCallback::PrepareOperation(Int32 /* askExtractMode */))
{
return S_OK;
}
-STDMETHODIMP CExtractCallback_To_OpenCallback::SetOperationResult(Int32 /* operationResult */)
+Z7_COM7F_IMF(CExtractCallback_To_OpenCallback::SetOperationResult(Int32 /* operationResult */))
{
return S_OK;
}
@@ -1597,30 +1588,31 @@ static HRESULT OpenArchiveSpec(IInArchive *archive, bool needPhySize,
/*
if (needPhySize)
{
- CMyComPtr<IArchiveOpen2> open2;
- archive->QueryInterface(IID_IArchiveOpen2, (void **)&open2);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveOpen2,
+ open2, archive)
if (open2)
return open2->ArcOpen2(stream, kOpenFlags_RealPhySize, openCallback);
}
*/
- RINOK(archive->Open(stream, maxCheckStartPosition, openCallback));
+ RINOK(archive->Open(stream, maxCheckStartPosition, openCallback))
if (needPhySize)
{
bool phySize_Defined = false;
UInt64 phySize = 0;
- RINOK(Archive_GetArcProp_UInt(archive, kpidPhySize, phySize, phySize_Defined));
+ RINOK(Archive_GetArcProp_UInt(archive, kpidPhySize, phySize, phySize_Defined))
if (phySize_Defined)
return S_OK;
bool phySizeCantBeDetected = false;
- RINOK(Archive_GetArcProp_Bool(archive, kpidPhySizeCantBeDetected, phySizeCantBeDetected));
+ RINOK(Archive_GetArcProp_Bool(archive, kpidPhySizeCantBeDetected, phySizeCantBeDetected))
if (!phySizeCantBeDetected)
{
PRF(printf("\n-- !phySize_Defined after Open, call archive->Extract()"));
// It's for bzip2/gz and some xz archives, where Open operation doesn't know phySize.
// But the Handler will know phySize after full archive testing.
- RINOK(archive->Extract(NULL, (UInt32)(Int32)-1, BoolToInt(true), extractCallback));
+ RINOK(archive->Extract(NULL, (UInt32)(Int32)-1, BoolToInt(true), extractCallback))
PRF(printf("\n-- OK"));
}
}
@@ -1663,7 +1655,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
const UString fileName = ExtractFileNameFromPath(Path);
UString extension;
{
- int dotPos = fileName.ReverseFind_Dot();
+ const int dotPos = fileName.ReverseFind_Dot();
if (dotPos >= 0)
extension = fileName.Ptr((unsigned)(dotPos + 1));
}
@@ -1671,7 +1663,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
CIntVector orderIndices;
bool searchMarkerInHandler = false;
- #ifdef _SFX
+ #ifdef Z7_SFX
searchMarkerInHandler = true;
#endif
@@ -1681,25 +1673,25 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
isMainFormatArr[i] = false;
}
- UInt64 maxStartOffset =
+ const UInt64 maxStartOffset =
op.openType.MaxStartOffset_Defined ?
op.openType.MaxStartOffset :
kMaxCheckStartPosition;
- #ifndef _SFX
+ #ifndef Z7_SFX
bool isUnknownExt = false;
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
bool isForced = false;
#endif
unsigned numMainTypes = 0;
- int formatIndex = op.openType.FormatIndex;
+ const int formatIndex = op.openType.FormatIndex;
if (formatIndex >= 0)
{
- #ifndef _SFX
+ #ifndef Z7_SFX
isForced = true;
#endif
orderIndices.Add(formatIndex);
@@ -1711,12 +1703,12 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
else
{
unsigned numFinded = 0;
- #ifndef _SFX
+ #ifndef Z7_SFX
bool isPrearcExt = false;
#endif
{
- #ifndef _SFX
+ #ifndef Z7_SFX
bool isZip = false;
bool isRar = false;
@@ -1758,13 +1750,13 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
if (op.excludedFormats->FindInSorted((int)i) >= 0)
continue;
- #ifndef _SFX
+ #ifndef Z7_SFX
if (IsPreArcFormat(ai))
isPrearcExt = true;
#endif
if (ai.FindExtension(extension) >= 0
- #ifndef _SFX
+ #ifndef Z7_SFX
|| (isZip && ai.Is_Zip())
|| (isRar && ai.Is_Rar())
#endif
@@ -1795,11 +1787,11 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
}
*/
- #ifndef _SFX
+ #ifndef Z7_SFX
if (op.stream && orderIndices.Size() >= 2)
{
- RINOK(op.stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(op.stream))
CByteBuffer byteBuffer;
CIntVector orderIndices2;
if (numFinded == 0 || IsExeExt(extension))
@@ -1808,13 +1800,13 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
}
else if (extension.IsEqualTo("000") || extension.IsEqualTo("001"))
{
- int i = FindFormatForArchiveType(op.codecs, orderIndices, "rar");
+ const int i = FindFormatForArchiveType(op.codecs, orderIndices, "rar");
if (i >= 0)
{
const size_t kBufSize = (1 << 10);
byteBuffer.Alloc(kBufSize);
size_t processedSize = kBufSize;
- RINOK(ReadStream(op.stream, byteBuffer, &processedSize));
+ RINOK(ReadStream(op.stream, byteBuffer, &processedSize))
if (processedSize >= 16)
{
const Byte *buf = byteBuffer;
@@ -1834,7 +1826,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
const size_t kBufSize = (1 << 10);
byteBuffer.Alloc(kBufSize);
size_t processedSize = kBufSize;
- RINOK(ReadStream(op.stream, byteBuffer, &processedSize));
+ RINOK(ReadStream(op.stream, byteBuffer, &processedSize))
if (processedSize == 0)
return S_FALSE;
@@ -1870,7 +1862,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
FOR_VECTOR (i, orderIndices)
{
- int val = orderIndices[i];
+ const int val = orderIndices[i];
if (val != -1)
orderIndices2.Add(val);
}
@@ -1879,12 +1871,12 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
if (orderIndices.Size() >= 2)
{
- int iIso = FindFormatForArchiveType(op.codecs, orderIndices, "iso");
- int iUdf = FindFormatForArchiveType(op.codecs, orderIndices, "udf");
+ const int iIso = FindFormatForArchiveType(op.codecs, orderIndices, "iso");
+ const int iUdf = FindFormatForArchiveType(op.codecs, orderIndices, "udf");
if (iUdf > iIso && iIso >= 0)
{
- int isoIndex = orderIndices[(unsigned)iIso];
- int udfIndex = orderIndices[(unsigned)iUdf];
+ const int isoIndex = orderIndices[(unsigned)iIso];
+ const int udfIndex = orderIndices[(unsigned)iUdf];
orderIndices[(unsigned)iUdf] = isoIndex;
orderIndices[(unsigned)iIso] = udfIndex;
}
@@ -1893,7 +1885,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
numMainTypes = numFinded;
isUnknownExt = (numMainTypes == 0) || isPrearcExt;
- #else // _SFX
+ #else // Z7_SFX
numMainTypes = orderIndices.Size();
@@ -1907,13 +1899,12 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
UInt64 fileSize = 0;
if (op.stream)
{
- RINOK(op.stream->Seek(0, STREAM_SEEK_END, &fileSize));
- RINOK(op.stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_GetSize_SeekToBegin(op.stream, fileSize))
}
FileSize = fileSize;
- #ifndef _SFX
+ #ifndef Z7_SFX
CBoolArr skipFrontalFormat(op.codecs->Formats.Size());
{
@@ -1945,7 +1936,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
bool exactOnly = false;
- #ifndef _SFX
+ #ifndef Z7_SFX
const CArcInfoEx &ai = op.codecs->Formats[(unsigned)FormatIndex];
// OutputDebugStringW(ai.Name);
@@ -1963,16 +1954,16 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
// Some handlers do not set total bytes. So we set it here
if (op.callback)
- RINOK(op.callback->SetTotal(NULL, &fileSize));
+ RINOK(op.callback->SetTotal(NULL, &fileSize))
if (op.stream)
{
- RINOK(op.stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(op.stream))
}
CMyComPtr<IInArchive> archive;
- RINOK(PrepareToOpen(op, (unsigned)FormatIndex, archive));
+ RINOK(PrepareToOpen(op, (unsigned)FormatIndex, archive))
if (!archive)
continue;
@@ -1991,13 +1982,13 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
result = openSeq->OpenSeq(op.seqStream);
}
- RINOK(ReadBasicProps(archive, 0, result));
+ RINOK(ReadBasicProps(archive, 0, result))
if (result == S_FALSE)
{
bool isArc = ErrorInfo.IsArc_After_NonOpen();
- #ifndef _SFX
+ #ifndef Z7_SFX
// if it's archive, we allow another open attempt for parser
if (!mode.CanReturnParser || !isArc)
skipFrontalFormat[(unsigned)FormatIndex] = true;
@@ -2017,7 +2008,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
// if (formatIndex < 0 && !searchMarkerInHandler)
{
// if bad archive was detected, we don't need additional open attempts
- #ifndef _SFX
+ #ifndef Z7_SFX
if (!IsPreArcFormat(ai) /* || !mode.SkipSfxStub */)
#endif
return S_FALSE;
@@ -2026,7 +2017,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
}
/*
- #ifndef _SFX
+ #ifndef Z7_SFX
if (IsExeExt(extension) || ai.Flags_PreArc())
{
// openOnlyFullArc = false;
@@ -2039,9 +2030,9 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
continue;
}
- RINOK(result);
+ RINOK(result)
- #ifndef _SFX
+ #ifndef Z7_SFX
bool isMainFormat = isMainFormatArr[(unsigned)FormatIndex];
const COpenSpecFlags &specFlags = mode.GetSpec(isForced, isMainFormat, isUnknownExt);
@@ -2049,7 +2040,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
bool thereIsTail = ErrorInfo.ThereIsTail;
if (thereIsTail && mode.ZerosTailIsAllowed)
{
- RINOK(CheckZerosTail(op, (UInt64)(Offset + (Int64)PhySize)));
+ RINOK(CheckZerosTail(op, (UInt64)(Offset + (Int64)PhySize)))
if (ErrorInfo.IgnoreTail)
thereIsTail = false;
}
@@ -2103,7 +2094,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
- #ifndef _SFX
+ #ifndef Z7_SFX
if (!op.stream)
return S_FALSE;
@@ -2148,9 +2139,9 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
endOfFile = true;
}
byteBuffer.Alloc(bufSize);
- RINOK(op.stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(op.stream))
processedSize = bufSize;
- RINOK(ReadStream(op.stream, byteBuffer, &processedSize));
+ RINOK(ReadStream(op.stream, byteBuffer, &processedSize))
if (processedSize == 0)
return S_FALSE;
if (processedSize < bufSize)
@@ -2232,12 +2223,12 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
const CArcInfoEx &ai = op.codecs->Formats[(unsigned)FormatIndex];
if (op.callback)
- RINOK(op.callback->SetTotal(NULL, &fileSize));
+ RINOK(op.callback->SetTotal(NULL, &fileSize))
- RINOK(op.stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(op.stream))
CMyComPtr<IInArchive> archive;
- RINOK(PrepareToOpen(op, (unsigned)FormatIndex, archive));
+ RINOK(PrepareToOpen(op, (unsigned)FormatIndex, archive))
if (!archive)
continue;
@@ -2263,9 +2254,9 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
// printf(" OpenForSize Error");
continue;
}
- RINOK(result);
+ RINOK(result)
- RINOK(ReadBasicProps(archive, 0, result));
+ RINOK(ReadBasicProps(archive, 0, result))
if (Offset > 0)
{
@@ -2302,7 +2293,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
if (mode.CanReturnArc)
{
- bool isMainFormat = isMainFormatArr[(unsigned)FormatIndex];
+ const bool isMainFormat = isMainFormatArr[(unsigned)FormatIndex];
const COpenSpecFlags &specFlags = mode.GetSpec(isForced, isMainFormat, isUnknownExt);
bool openCur = false;
@@ -2312,7 +2303,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
{
if (mode.ZerosTailIsAllowed)
{
- RINOK(CheckZerosTail(op, (UInt64)(Offset + (Int64)PhySize)));
+ RINOK(CheckZerosTail(op, (UInt64)(Offset + (Int64)PhySize)))
if (ErrorInfo.IgnoreTail)
openCur = true;
}
@@ -2352,7 +2343,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
continue;
// printf("\nAdd offset = %d", (int)pi.Offset);
- RINOK(ReadParseItemProps(archive, ai, pi));
+ RINOK(ReadParseItemProps(archive, ai, pi))
handlerSpec->AddItem(pi);
}
}
@@ -2451,7 +2442,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
// canReturnTailArc = true;
}
- RINOK(op.stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(op.stream))
CLimitedCachedInStream *limitedStreamSpec = new CLimitedCachedInStream;
CMyComPtr<IInStream> limitedStream = limitedStreamSpec;
@@ -2465,13 +2456,13 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
openCallback_Offset = openCallback_Offset_Spec;
openCallback_Offset_Spec->Callback = op.callback;
openCallback_Offset_Spec->Callback.QueryInterface(IID_IArchiveOpenVolumeCallback, &openCallback_Offset_Spec->OpenVolumeCallback);
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
openCallback_Offset_Spec->Callback.QueryInterface(IID_ICryptoGetTextPassword, &openCallback_Offset_Spec->GetTextPassword);
#endif
}
if (op.callback)
- RINOK(op.callback->SetTotal(NULL, &fileSize));
+ RINOK(op.callback->SetTotal(NULL, &fileSize))
CByteBuffer &byteBuffer = limitedStreamSpec->Buffer;
byteBuffer.Alloc(kBufSize);
@@ -2509,8 +2500,8 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
size_t processedSize = kBufSize - bytesInBuf;
// printf("\nRead ask = %d", (unsigned)processedSize);
UInt64 seekPos = bufPhyPos + bytesInBuf;
- RINOK(op.stream->Seek((Int64)(bufPhyPos + bytesInBuf), STREAM_SEEK_SET, NULL));
- RINOK(ReadStream(op.stream, byteBuffer + bytesInBuf, &processedSize));
+ RINOK(InStream_SeekSet(op.stream, bufPhyPos + bytesInBuf))
+ RINOK(ReadStream(op.stream, byteBuffer + bytesInBuf, &processedSize))
// printf(" processed = %d", (unsigned)processedSize);
if (processedSize == 0)
{
@@ -2568,7 +2559,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
if (pos >= callbackPrev + (1 << 23))
{
- RINOK(openCallback_Offset_Spec->SetCompleted(NULL, NULL));
+ RINOK(openCallback_Offset->SetCompleted(NULL, NULL))
callbackPrev = pos;
}
}
@@ -2691,10 +2682,10 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
if (ai.IsArcFunc && startArcPos >= bufPhyPos)
{
- size_t offsetInBuf = (size_t)(startArcPos - bufPhyPos);
+ const size_t offsetInBuf = (size_t)(startArcPos - bufPhyPos);
if (offsetInBuf < bytesInBuf)
{
- UInt32 isArcRes = ai.IsArcFunc(byteBuffer + offsetInBuf, bytesInBuf - offsetInBuf);
+ const UInt32 isArcRes = ai.IsArcFunc(byteBuffer + offsetInBuf, bytesInBuf - offsetInBuf);
if (isArcRes == k_IsArc_Res_NO)
continue;
if (isArcRes == k_IsArc_Res_NEED_MORE && endOfFile)
@@ -2716,7 +2707,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
const COpenSpecFlags &specFlags = mode.GetSpec(isForced, isMainFormat, isUnknownExt);
CMyComPtr<IInArchive> archive;
- RINOK(PrepareToOpen(op, index, archive));
+ RINOK(PrepareToOpen(op, index, archive))
if (!archive)
return E_FAIL;
@@ -2728,12 +2719,12 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
if (ai.Flags_UseGlobalOffset())
{
- limitedStreamSpec->InitAndSeek(0, fileSize);
- limitedStream->Seek((Int64)startArcPos, STREAM_SEEK_SET, NULL);
+ RINOK(limitedStreamSpec->InitAndSeek(0, fileSize))
+ RINOK(InStream_SeekSet(limitedStream, startArcPos))
}
else
{
- limitedStreamSpec->InitAndSeek(startArcPos, rem);
+ RINOK(limitedStreamSpec->InitAndSeek(startArcPos, rem))
arcStreamOffset = startArcPos;
}
@@ -2755,7 +2746,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
useOffsetCallback ? (IArchiveOpenCallback *)openCallback_Offset : (IArchiveOpenCallback *)op.callback,
extractCallback_To_OpenCallback);
- RINOK(ReadBasicProps(archive, ai.Flags_UseGlobalOffset() ? 0 : startArcPos, result));
+ RINOK(ReadBasicProps(archive, ai.Flags_UseGlobalOffset() ? 0 : startArcPos, result))
bool isOpen = false;
@@ -2784,7 +2775,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
continue;
}
isOpen = true;
- RINOK(result);
+ RINOK(result)
PRF(printf(" OK "));
}
@@ -2874,7 +2865,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
pos = pi.Offset + pi.Size;
- RINOK(ReadParseItemProps(archive, ai, pi));
+ RINOK(ReadParseItemProps(archive, ai, pi))
if (pi.Offset < startArcPos && !mode.EachPos /* && phySize_Defined */)
{
@@ -2903,7 +2894,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
bool thereIsTail = ErrorInfo.ThereIsTail;
if (thereIsTail && mode.ZerosTailIsAllowed)
{
- RINOK(CheckZerosTail(op, (UInt64)((Int64)arcStreamOffset + Offset + (Int64)PhySize)));
+ RINOK(CheckZerosTail(op, (UInt64)((Int64)arcStreamOffset + Offset + (Int64)PhySize)))
if (ErrorInfo.IgnoreTail)
thereIsTail = false;
}
@@ -3029,7 +3020,7 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
HRESULT CArc::OpenStream(const COpenOptions &op)
{
- RINOK(OpenStream2(op));
+ RINOK(OpenStream2(op))
// PrintNumber("op.formatIndex 3", op.formatIndex);
if (Archive)
@@ -3039,12 +3030,12 @@ HRESULT CArc::OpenStream(const COpenOptions &op)
Archive->QueryInterface(IID_IArchiveGetRawProps, (void **)&GetRawProps);
Archive->QueryInterface(IID_IArchiveGetRootProps, (void **)&GetRootProps);
- RINOK(Archive_GetArcProp_Bool(Archive, kpidIsTree, IsTree));
- RINOK(Archive_GetArcProp_Bool(Archive, kpidIsDeleted, Ask_Deleted));
- RINOK(Archive_GetArcProp_Bool(Archive, kpidIsAltStream, Ask_AltStream));
- RINOK(Archive_GetArcProp_Bool(Archive, kpidIsAux, Ask_Aux));
- RINOK(Archive_GetArcProp_Bool(Archive, kpidINode, Ask_INode));
- RINOK(Archive_GetArcProp_Bool(Archive, kpidReadOnly, IsReadOnly));
+ RINOK(Archive_GetArcProp_Bool(Archive, kpidIsTree, IsTree))
+ RINOK(Archive_GetArcProp_Bool(Archive, kpidIsDeleted, Ask_Deleted))
+ RINOK(Archive_GetArcProp_Bool(Archive, kpidIsAltStream, Ask_AltStream))
+ RINOK(Archive_GetArcProp_Bool(Archive, kpidIsAux, Ask_Aux))
+ RINOK(Archive_GetArcProp_Bool(Archive, kpidINode, Ask_INode))
+ RINOK(Archive_GetArcProp_Bool(Archive, kpidReadOnly, IsReadOnly))
const UString fileName = ExtractFileNameFromPath(Path);
UString extension;
@@ -3074,7 +3065,7 @@ HRESULT CArc::OpenStream(const COpenOptions &op)
return S_OK;
}
-#ifdef _SFX
+#ifdef Z7_SFX
#ifdef _WIN32
#define k_ExeExt ".exe"
@@ -3105,7 +3096,7 @@ HRESULT CArc::OpenStreamOrFile(COpenOptions &op)
if (!fileStreamSpec->Open(us2fs(Path)))
return GetLastError_noZero_HRESULT();
op.stream = fileStream;
- #ifdef _SFX
+ #ifdef Z7_SFX
IgnoreSplit = true;
#endif
}
@@ -3114,7 +3105,7 @@ HRESULT CArc::OpenStreamOrFile(COpenOptions &op)
if (callback)
{
UInt64 fileSize;
- RINOK(op.stream->Seek(0, STREAM_SEEK_END, &fileSize));
+ RINOK(InStream_GetSize_SeekToEnd(op.stream, fileSize));
RINOK(op.callback->SetTotal(NULL, &fileSize))
}
*/
@@ -3122,7 +3113,7 @@ HRESULT CArc::OpenStreamOrFile(COpenOptions &op)
HRESULT res = OpenStream(op);
IgnoreSplit = false;
- #ifdef _SFX
+ #ifdef Z7_SFX
if (res != S_FALSE
|| !fileStreamSpec
@@ -3141,7 +3132,7 @@ HRESULT CArc::OpenStreamOrFile(COpenOptions &op)
if (ai.Is_Split())
continue;
UString path3 = path2;
- path3 += '.';
+ path3.Add_Dot();
path3 += ai.GetMainExt(); // "7z" for SFX.
Path = path3;
Path += ".001";
@@ -3187,7 +3178,7 @@ HRESULT CArchiveLink::Close()
for (unsigned i = Arcs.Size(); i != 0;)
{
i--;
- RINOK(Arcs[i].Close());
+ RINOK(Arcs[i].Close())
}
IsOpen = false;
// ErrorsText.Empty();
@@ -3320,13 +3311,13 @@ HRESULT CArchiveLink::Open(COpenOptions &op)
UInt32 mainSubfile;
{
NCOM::CPropVariant prop;
- RINOK(arc.Archive->GetArchiveProperty(kpidMainSubfile, &prop));
+ RINOK(arc.Archive->GetArchiveProperty(kpidMainSubfile, &prop))
if (prop.vt == VT_UI4)
mainSubfile = prop.ulVal;
else
break;
UInt32 numItems;
- RINOK(arc.Archive->GetNumberOfItems(&numItems));
+ RINOK(arc.Archive->GetNumberOfItems(&numItems))
if (mainSubfile >= numItems)
break;
}
@@ -3345,16 +3336,17 @@ HRESULT CArchiveLink::Open(COpenOptions &op)
break;
CArc arc2;
- RINOK(arc.GetItem_Path(mainSubfile, arc2.Path));
+ RINOK(arc.GetItem_Path(mainSubfile, arc2.Path))
bool zerosTailIsAllowed;
- RINOK(Archive_GetItemBoolProp(arc.Archive, mainSubfile, kpidZerosTailIsAllowed, zerosTailIsAllowed));
+ RINOK(Archive_GetItemBoolProp(arc.Archive, mainSubfile, kpidZerosTailIsAllowed, zerosTailIsAllowed))
if (op.callback)
{
- CMyComPtr<IArchiveOpenSetSubArchiveName> setSubArchiveName;
- op.callback->QueryInterface(IID_IArchiveOpenSetSubArchiveName, (void **)&setSubArchiveName);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ IArchiveOpenSetSubArchiveName,
+ setSubArchiveName, op.callback)
if (setSubArchiveName)
setSubArchiveName->SetSubArchiveName(arc2.Path);
}
@@ -3365,7 +3357,7 @@ HRESULT CArchiveLink::Open(COpenOptions &op)
CIntVector excl;
COpenOptions op2;
- #ifndef _SFX
+ #ifndef Z7_SFX
op2.props = op.props;
#endif
op2.codecs = op.codecs;
@@ -3388,8 +3380,8 @@ HRESULT CArchiveLink::Open(COpenOptions &op)
NonOpen_ArcPath = arc2.Path;
break;
}
- RINOK(result);
- RINOK(arc.GetItem_MTime(mainSubfile, arc2.MTime));
+ RINOK(result)
+ RINOK(arc.GetItem_MTime(mainSubfile, arc2.MTime))
Arcs.Add(arc2);
}
IsOpen = !Arcs.IsEmpty();
@@ -3408,7 +3400,7 @@ HRESULT CArchiveLink::Open2(COpenOptions &op, IOpenCallbackUI *callbackUI)
if (!op.stream && !op.stdInMode)
{
NFile::NDir::GetFullPathAndSplit(us2fs(op.filePath), prefix, name);
- RINOK(openCallbackSpec->Init2(prefix, name));
+ RINOK(openCallbackSpec->Init2(prefix, name))
}
else
{
@@ -3423,7 +3415,7 @@ HRESULT CArchiveLink::Open2(COpenOptions &op, IOpenCallbackUI *callbackUI)
PasswordWasAsked = openCallbackSpec->PasswordWasAsked;
// Password = openCallbackSpec->Password;
- RINOK(res);
+ RINOK(res)
// VolumePaths.Add(fs2us(prefix + name));
FOR_VECTOR (i, openCallbackSpec->FileNames_WasUsed)
@@ -3446,8 +3438,9 @@ HRESULT CArc::ReOpen(const COpenOptions &op, IArchiveOpenCallback *openCallback_
UInt64 fileSize = 0;
if (op.stream)
{
- RINOK(op.stream->Seek(0, STREAM_SEEK_END, &fileSize));
- RINOK(op.stream->Seek(0, STREAM_SEEK_SET, NULL));
+ RINOK(InStream_SeekToBegin(op.stream))
+ RINOK(InStream_AtBegin_GetSize(op.stream, fileSize))
+ // RINOK(InStream_GetSize_SeekToBegin(op.stream, fileSize))
}
FileSize = fileSize;
@@ -3462,7 +3455,7 @@ HRESULT CArc::ReOpen(const COpenOptions &op, IArchiveOpenCallback *openCallback_
tailStreamSpec->Stream = op.stream;
tailStreamSpec->Offset = (UInt64)globalOffset;
tailStreamSpec->Init();
- RINOK(tailStreamSpec->SeekToStart());
+ RINOK(tailStreamSpec->SeekToStart())
}
// There are archives with embedded STUBs (like ZIP), so we must support signature scanning
@@ -3475,7 +3468,7 @@ HRESULT CArc::ReOpen(const COpenOptions &op, IArchiveOpenCallback *openCallback_
if (res == S_OK)
{
- RINOK(ReadBasicProps(Archive, (UInt64)globalOffset, res));
+ RINOK(ReadBasicProps(Archive, (UInt64)globalOffset, res))
ArcStreamOffset = (UInt64)globalOffset;
if (ArcStreamOffset != 0)
InStream = op.stream;
@@ -3488,7 +3481,7 @@ HRESULT CArchiveLink::Open3(COpenOptions &op, IOpenCallbackUI *callbackUI)
HRESULT res = Open2(op, callbackUI);
if (callbackUI)
{
- RINOK(callbackUI->Open_Finished());
+ RINOK(callbackUI->Open_Finished())
}
return res;
}
@@ -3508,6 +3501,8 @@ HRESULT CArchiveLink::ReOpen(COpenOptions &op)
if (Arcs.Size() == 0) // ???
return Open2(op, NULL);
+ /* if archive is multivolume (unsupported here still)
+ COpenCallbackImp object will exist after Open stage. */
COpenCallbackImp *openCallbackSpec = new COpenCallbackImp;
CMyComPtr<IArchiveOpenCallback> openCallbackNew = openCallbackSpec;
@@ -3516,7 +3511,7 @@ HRESULT CArchiveLink::ReOpen(COpenOptions &op)
{
FString dirPrefix, fileName;
NFile::NDir::GetFullPathAndSplit(us2fs(op.filePath), dirPrefix, fileName);
- RINOK(openCallbackSpec->Init2(dirPrefix, fileName));
+ RINOK(openCallbackSpec->Init2(dirPrefix, fileName))
}
@@ -3527,7 +3522,9 @@ HRESULT CArchiveLink::ReOpen(COpenOptions &op)
op.stream = stream;
CArc &arc = Arcs[0];
- HRESULT res = arc.ReOpen(op, openCallbackNew);
+ const HRESULT res = arc.ReOpen(op, openCallbackNew);
+
+ openCallbackSpec->ReOpenCallback = NULL;
PasswordWasAsked = openCallbackSpec->PasswordWasAsked;
// Password = openCallbackSpec->Password;
@@ -3536,7 +3533,7 @@ HRESULT CArchiveLink::ReOpen(COpenOptions &op)
return res;
}
-#ifndef _SFX
+#ifndef Z7_SFX
bool ParseComplexSize(const wchar_t *s, UInt64 &result);
bool ParseComplexSize(const wchar_t *s, UInt64 &result)
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.h b/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.h
index e3220b94fd0..5c3bfe5df95 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/OpenArchive.h
@@ -1,7 +1,7 @@
// OpenArchive.h
-#ifndef __OPEN_ARCHIVE_H
-#define __OPEN_ARCHIVE_H
+#ifndef ZIP7_INC_OPEN_ARCHIVE_H
+#define ZIP7_INC_OPEN_ARCHIVE_H
#include "../../../Windows/PropVariant.h"
@@ -10,7 +10,7 @@
#include "Property.h"
#include "DirItem.h"
-#ifndef _SFX
+#ifndef Z7_SFX
#define SUPPORT_ALT_STREAMS
@@ -34,7 +34,7 @@ struct COptionalOpenProperties
};
*/
-#ifdef _SFX
+#ifdef Z7_SFX
#define OPEN_PROPS_DECL
#else
#define OPEN_PROPS_DECL const CObjectVector<CProperty> *props;
@@ -243,7 +243,7 @@ struct CReadArcItem
bool MainIsDir;
UInt32 ParentIndex; // use it, if IsAltStream
- #ifndef _SFX
+ #ifndef Z7_SFX
bool _use_baseParentFolder_mode;
int _baseParentFolder;
#endif
@@ -254,7 +254,7 @@ struct CReadArcItem
WriteToAltStreamIfColon = false;
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
_use_baseParentFolder_mode = false;
_baseParentFolder = -1;
#endif
@@ -270,7 +270,7 @@ class CArc
HRESULT CheckZerosTail(const COpenOptions &op, UInt64 offset);
HRESULT OpenStream2(const COpenOptions &options);
- #ifndef _SFX
+ #ifndef Z7_SFX
// parts.Back() can contain alt stream name "nams:AltName"
HRESULT GetItem_PathToParent(UInt32 index, UInt32 parent, UStringVector &parts) const;
#endif
@@ -285,8 +285,17 @@ public:
CMyComPtr<IArchiveGetRawProps> GetRawProps;
CMyComPtr<IArchiveGetRootProps> GetRootProps;
- CArcErrorInfo ErrorInfo; // for OK archives
- CArcErrorInfo NonOpen_ErrorInfo; // ErrorInfo for mainArchive (false OPEN)
+ bool IsParseArc;
+
+ bool IsTree;
+ bool IsReadOnly;
+
+ bool Ask_Deleted;
+ bool Ask_AltStream;
+ bool Ask_Aux;
+ bool Ask_INode;
+
+ bool IgnoreSplit; // don't try split handler
UString Path;
UString filePath;
@@ -305,7 +314,9 @@ public:
// bool OkPhySize_Defined;
UInt64 FileSize;
UInt64 AvailPhySize; // PhySize, but it's reduced if exceed end of file
- // bool offsetDefined;
+
+ CArcErrorInfo ErrorInfo; // for OK archives
+ CArcErrorInfo NonOpen_ErrorInfo; // ErrorInfo for mainArchive (false OPEN)
UInt64 GetEstmatedPhySize() const { return PhySize_Defined ? PhySize : FileSize; }
@@ -314,18 +325,6 @@ public:
// AString ErrorFlagsText;
- bool IsParseArc;
-
- bool IsTree;
- bool IsReadOnly;
-
- bool Ask_Deleted;
- bool Ask_AltStream;
- bool Ask_Aux;
- bool Ask_INode;
-
- bool IgnoreSplit; // don't try split handler
-
// void Set_ErrorFlagsText();
CArc():
@@ -341,8 +340,6 @@ public:
HRESULT ReadBasicProps(IInArchive *archive, UInt64 startPos, HRESULT openRes);
- // ~CArc();
-
HRESULT Close()
{
InStream.Release();
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp
index 72384b3effb..ee9ff323632 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp
@@ -14,7 +14,7 @@
#include "PropIDUtils.h"
-#ifndef _SFX
+#ifndef Z7_SFX
#define Get16(x) GetUi16(x)
#define Get32(x) GetUi32(x)
#endif
@@ -54,7 +54,7 @@ FILE_ATTRIBUTE_
static const char kPosixTypes[16] = { '0', 'p', 'c', '3', 'd', '5', 'b', '7', '-', '9', 'l', 'B', 's', 'D', 'E', 'F' };
-#define MY_ATTR_CHAR(a, n, c) ((a) & (1 << (n))) ? c : '-';
+#define MY_ATTR_CHAR(a, n, c) (((a) & (1 << (n))) ? c : '-')
static void ConvertPosixAttribToString(char *s, UInt32 a) throw()
{
@@ -88,7 +88,7 @@ void ConvertWinAttribToString(char *s, UInt32 wa) throw()
info-zip - no additional marker.
*/
- bool isPosix = ((wa & 0xF0000000) != 0);
+ const bool isPosix = ((wa & 0xF0000000) != 0);
UInt32 posix = 0;
if (isPosix)
@@ -183,7 +183,7 @@ void ConvertPropertyToShortString2(char *dest, const PROPVARIANT &prop, PROPID p
{
if (prop.vt != VT_UI4)
break;
- UInt32 a = prop.ulVal;
+ const UInt32 a = prop.ulVal;
/*
if ((a & 0x8000) && (a & 0x7FFF) == 0)
@@ -207,7 +207,7 @@ void ConvertPropertyToShortString2(char *dest, const PROPVARIANT &prop, PROPID p
ConvertUInt32ToString((UInt32)(prop.uhVal.QuadPart >> 48), dest);
dest += strlen(dest);
*dest++ = '-';
- UInt64 low = prop.uhVal.QuadPart & (((UInt64)1 << 48) - 1);
+ const UInt64 low = prop.uhVal.QuadPart & (((UInt64)1 << 48) - 1);
ConvertUInt64ToString(low, dest);
return;
}
@@ -260,7 +260,7 @@ void ConvertPropertyToString2(UString &dest, const PROPVARIANT &prop, PROPID pro
dest = temp;
}
-#ifndef _SFX
+#ifndef Z7_SFX
static inline unsigned GetHex(unsigned v)
{
@@ -387,33 +387,33 @@ static void ParseSid(AString &s, const Byte *p, UInt32 lim, UInt32 &sidSize)
s += "ERROR";
return;
}
- UInt32 rev = p[0];
+ const UInt32 rev = p[0];
if (rev != 1)
{
s += "UNSUPPORTED";
return;
}
- UInt32 num = p[1];
+ const UInt32 num = p[1];
if (8 + num * 4 > lim)
{
s += "ERROR";
return;
}
sidSize = 8 + num * 4;
- UInt32 authority = GetBe32(p + 4);
+ const UInt32 authority = GetBe32(p + 4);
if (p[2] == 0 && p[3] == 0 && authority == 5 && num >= 1)
{
- UInt32 v0 = Get32(p + 8);
- if (v0 < ARRAY_SIZE(sidNames))
+ const UInt32 v0 = Get32(p + 8);
+ if (v0 < Z7_ARRAY_SIZE(sidNames))
{
s += sidNames[v0];
return;
}
if (v0 == 32 && num == 2)
{
- UInt32 v1 = Get32(p + 12);
- int index = FindPairIndex(sid_32_Names, ARRAY_SIZE(sid_32_Names), v1);
+ const UInt32 v1 = Get32(p + 12);
+ const int index = FindPairIndex(sid_32_Names, Z7_ARRAY_SIZE(sid_32_Names), v1);
if (index >= 0)
{
s += sid_32_Names[(unsigned)index].sz;
@@ -423,7 +423,7 @@ static void ParseSid(AString &s, const Byte *p, UInt32 lim, UInt32 &sidSize)
if (v0 == 21 && num == 5)
{
UInt32 v4 = Get32(p + 8 + 4 * 4);
- int index = FindPairIndex(sid_21_Names, ARRAY_SIZE(sid_21_Names), v4);
+ const int index = FindPairIndex(sid_21_Names, Z7_ARRAY_SIZE(sid_21_Names), v4);
if (index >= 0)
{
s += sid_21_Names[(unsigned)index].sz;
@@ -432,7 +432,7 @@ static void ParseSid(AString &s, const Byte *p, UInt32 lim, UInt32 &sidSize)
}
if (v0 == 80 && num == 6)
{
- for (unsigned i = 0; i < ARRAY_SIZE(services_to_name); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(services_to_name); i++)
{
const CServicesToName &sn = services_to_name[i];
int j;
@@ -457,7 +457,7 @@ static void ParseSid(AString &s, const Byte *p, UInt32 lim, UInt32 &sidSize)
}
for (UInt32 i = 0; i < num; i++)
{
- s += '-';
+ s.Add_Minus();
s.Add_UInt32(Get32(p + 8 + i * 4));
}
}
@@ -475,10 +475,10 @@ static void ParseOwner(AString &s, const Byte *p, UInt32 size, UInt32 pos)
static void ParseAcl(AString &s, const Byte *p, UInt32 size, const char *strName, UInt32 flags, UInt32 offset)
{
- UInt32 control = Get16(p + 2);
+ const UInt32 control = Get16(p + 2);
if ((flags & control) == 0)
return;
- UInt32 pos = Get32(p + offset);
+ const UInt32 pos = Get32(p + offset);
s.Add_Space();
s += strName;
if (pos >= size)
@@ -489,7 +489,7 @@ static void ParseAcl(AString &s, const Byte *p, UInt32 size, const char *strName
return;
if (Get16(p) != 2) // revision
return;
- UInt32 num = Get32(p + 4);
+ const UInt32 num = Get32(p + 4);
s.Add_UInt32(num);
/*
@@ -580,26 +580,26 @@ static bool CheckSid(const Byte *data, UInt32 size, UInt32 pos) throw()
size -= pos;
if (size < 8)
return false;
- UInt32 rev = data[pos];
+ const UInt32 rev = data[pos];
if (rev != 1)
return false;
- UInt32 num = data[pos + 1];
+ const UInt32 num = data[pos + 1];
return (8 + num * 4 <= size);
}
static bool CheckAcl(const Byte *p, UInt32 size, UInt32 flags, UInt32 offset) throw()
{
- UInt32 control = Get16(p + 2);
+ const UInt32 control = Get16(p + 2);
if ((flags & control) == 0)
return true;
- UInt32 pos = Get32(p + offset);
+ const UInt32 pos = Get32(p + offset);
if (pos >= size)
return false;
p += pos;
size -= pos;
if (size < 8)
return false;
- UInt32 aclSize = Get16(p + 2);
+ const UInt32 aclSize = Get16(p + 2);
return (aclSize <= size);
}
@@ -686,22 +686,22 @@ bool ConvertNtReparseToString(const Byte *data, UInt32 size, UString &s)
if (size < 8)
return false;
- UInt32 tag = Get32(data);
- UInt32 len = Get16(data + 4);
+ const UInt32 tag = Get32(data);
+ const UInt32 len = Get16(data + 4);
if (len + 8 > size)
return false;
if (Get16(data + 6) != 0) // padding
return false;
/*
- #define _my_IO_REPARSE_TAG_DEDUP (0x80000013L)
- if (tag == _my_IO_REPARSE_TAG_DEDUP)
+ #define my_IO_REPARSE_TAG_DEDUP (0x80000013L)
+ if (tag == my_IO_REPARSE_TAG_DEDUP)
{
}
*/
{
- int index = FindPairIndex(k_ReparseTags, ARRAY_SIZE(k_ReparseTags), tag);
+ const int index = FindPairIndex(k_ReparseTags, Z7_ARRAY_SIZE(k_ReparseTags), tag);
if (index >= 0)
s += k_ReparseTags[(unsigned)index].sz;
else
@@ -729,7 +729,7 @@ bool ConvertNtReparseToString(const Byte *data, UInt32 size, UString &s)
s += "...";
break;
}
- unsigned b = data[i];
+ const unsigned b = data[i];
s += (char)GetHex((b >> 4) & 0xF);
s += (char)GetHex(b & 0xF);
}
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.h b/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.h
index 915bfc28e03..6df1e94c37d 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/PropIDUtils.h
@@ -1,7 +1,7 @@
// PropIDUtils.h
-#ifndef __PROPID_UTILS_H
-#define __PROPID_UTILS_H
+#ifndef ZIP7_INC_PROPID_UTILS_H
+#define ZIP7_INC_PROPID_UTILS_H
#include "../../../Common/MyString.h"
@@ -11,7 +11,7 @@ void ConvertPropertyToString2(UString &dest, const PROPVARIANT &propVariant, PRO
bool ConvertNtReparseToString(const Byte *data, UInt32 size, UString &s);
void ConvertNtSecureToString(const Byte *data, UInt32 size, AString &s);
-bool CheckNtSecure(const Byte *data, UInt32 size) throw();;
+bool CheckNtSecure(const Byte *data, UInt32 size) throw();
void ConvertWinAttribToString(char *s, UInt32 wa) throw();
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/Property.h b/3rdparty/lzma/CPP/7zip/UI/Common/Property.h
index 8b57a2a648a..04628098916 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/Property.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/Property.h
@@ -1,7 +1,7 @@
// Property.h
-#ifndef __7Z_PROPERTY_H
-#define __7Z_PROPERTY_H
+#ifndef ZIP7_INC_7Z_PROPERTY_H
+#define ZIP7_INC_7Z_PROPERTY_H
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.cpp
index 4b3037af245..5e15d9c09fb 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.cpp
@@ -18,7 +18,7 @@ using namespace NCOM;
static void ParseNumberString(const UString &s, NCOM::CPropVariant &prop)
{
const wchar_t *end;
- UInt64 result = ConvertStringToUInt64(s, &end);
+ const UInt64 result = ConvertStringToUInt64(s, &end);
if (*end != 0 || s.IsEmpty())
prop = s;
else if (result <= (UInt32)0xFFFFFFFF)
@@ -46,8 +46,9 @@ HRESULT SetProperties(IUnknown *unknown, const CObjectVector<CProperty> &propert
{
if (properties.IsEmpty())
return S_OK;
- CMyComPtr<ISetProperties> setProperties;
- unknown->QueryInterface(IID_ISetProperties, (void **)&setProperties);
+ Z7_DECL_CMyComPtr_QI_FROM(
+ ISetProperties,
+ setProperties, unknown)
if (!setProperties)
return S_OK;
@@ -64,7 +65,7 @@ HRESULT SetProperties(IUnknown *unknown, const CObjectVector<CProperty> &propert
{
if (!name.IsEmpty())
{
- wchar_t c = name.Back();
+ const wchar_t c = name.Back();
if (c == L'-')
propVariant = false;
else if (c == L'+')
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.h b/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.h
index 892f1a21037..0676c45daa8 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/SetProperties.h
@@ -1,7 +1,7 @@
// SetProperties.h
-#ifndef __SETPROPERTIES_H
-#define __SETPROPERTIES_H
+#ifndef ZIP7_INC_SETPROPERTIES_H
+#define ZIP7_INC_SETPROPERTIES_H
#include "Property.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/SortUtils.h b/3rdparty/lzma/CPP/7zip/UI/Common/SortUtils.h
index 8e42e06827a..07aa24d22e9 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/SortUtils.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/SortUtils.h
@@ -1,7 +1,7 @@
// SortUtils.h
-#ifndef __SORT_UTLS_H
-#define __SORT_UTLS_H
+#ifndef ZIP7_INC_SORT_UTLS_H
+#define ZIP7_INC_SORT_UTLS_H
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/StdAfx.h b/3rdparty/lzma/CPP/7zip/UI/Common/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/TempFiles.h b/3rdparty/lzma/CPP/7zip/UI/Common/TempFiles.h
index 4099e655898..dd4ac2038d0 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/TempFiles.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/TempFiles.h
@@ -1,7 +1,7 @@
// TempFiles.h
-#ifndef __TEMP_FILES_H
-#define __TEMP_FILES_H
+#ifndef ZIP7_INC_TEMP_FILES_H
+#define ZIP7_INC_TEMP_FILES_H
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/Update.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/Update.cpp
index 042991d196e..27625aebbe4 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/Update.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/Update.cpp
@@ -18,6 +18,8 @@
#include "../../Common/FileStreams.h"
#include "../../Common/LimitedStreams.h"
+#include "../../Common/MultiOutStream.h"
+#include "../../Common/StreamUtils.h"
#include "../../Compress/CopyCoder.h"
@@ -71,203 +73,44 @@ HRESULT CUpdateErrorInfo::SetFromError_DWORD(const char *message, const FString
using namespace NUpdateArchive;
-class COutMultiVolStream:
- public IOutStream,
- public CMyUnknownImp
+struct CMultiOutStream_Rec
{
- unsigned _streamIndex; // required stream
- UInt64 _offsetPos; // offset from start of _streamIndex index
- UInt64 _absPos;
- UInt64 _length;
-
- struct CAltStreamInfo
- {
- COutFileStream *StreamSpec;
- CMyComPtr<IOutStream> Stream;
- FString Name;
- UInt64 Pos;
- UInt64 RealSize;
- };
- CObjectVector<CAltStreamInfo> Streams;
-public:
- // CMyComPtr<IArchiveUpdateCallback2> VolumeCallback;
- CRecordVector<UInt64> Sizes;
- FString Prefix;
- CTempFiles *TempFiles;
-
- void Init()
- {
- _streamIndex = 0;
- _offsetPos = 0;
- _absPos = 0;
- _length = 0;
- }
-
- bool SetMTime(const CFiTime *mTime);
- HRESULT Close();
-
- UInt64 GetSize() const { return _length; }
-
- MY_UNKNOWN_IMP1(IOutStream)
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
- STDMETHOD(SetSize)(UInt64 newSize);
+ CMultiOutStream *Spec;
+ CMyComPtr<IOutStream> Ref;
};
-// static NSynchronization::CCriticalSection g_TempPathsCS;
-
-HRESULT COutMultiVolStream::Close()
-{
- HRESULT res = S_OK;
- FOR_VECTOR (i, Streams)
- {
- COutFileStream *s = Streams[i].StreamSpec;
- if (s)
- {
- HRESULT res2 = s->Close();
- if (res2 != S_OK)
- res = res2;
- }
- }
- return res;
-}
-
-bool COutMultiVolStream::SetMTime(const CFiTime *mTime)
-{
- bool res = true;
- FOR_VECTOR (i, Streams)
- {
- COutFileStream *s = Streams[i].StreamSpec;
- if (s)
- if (!s->SetMTime(mTime))
- res = false;
- }
- return res;
-}
-
-STDMETHODIMP COutMultiVolStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
+struct CMultiOutStream_Bunch
{
- if (processedSize)
- *processedSize = 0;
- while (size > 0)
+ CObjectVector<CMultiOutStream_Rec> Items;
+
+ HRESULT Destruct()
{
- if (_streamIndex >= Streams.Size())
+ HRESULT hres = S_OK;
+ FOR_VECTOR (i, Items)
{
- CAltStreamInfo altStream;
-
- FString name;
- name.Add_UInt32(_streamIndex + 1);
- while (name.Len() < 3)
- name.InsertAtFront(FTEXT('0'));
- name.Insert(0, Prefix);
- altStream.StreamSpec = new COutFileStream;
- altStream.Stream = altStream.StreamSpec;
- if (!altStream.StreamSpec->Create(name, false))
- return GetLastError_noZero_HRESULT();
+ CMultiOutStream_Rec &rec = Items[i];
+ if (rec.Ref)
{
- // NSynchronization::CCriticalSectionLock lock(g_TempPathsCS);
- TempFiles->Paths.Add(name);
+ const HRESULT hres2 = rec.Spec->Destruct();
+ if (hres == S_OK)
+ hres = hres2;
}
-
- altStream.Pos = 0;
- altStream.RealSize = 0;
- altStream.Name = name;
- Streams.Add(altStream);
- continue;
- }
- CAltStreamInfo &altStream = Streams[_streamIndex];
-
- unsigned index = _streamIndex;
- if (index >= Sizes.Size())
- index = Sizes.Size() - 1;
- UInt64 volSize = Sizes[index];
-
- if (_offsetPos >= volSize)
- {
- _offsetPos -= volSize;
- _streamIndex++;
- continue;
- }
- if (_offsetPos != altStream.Pos)
- {
- // CMyComPtr<IOutStream> outStream;
- // RINOK(altStream.Stream.QueryInterface(IID_IOutStream, &outStream));
- RINOK(altStream.Stream->Seek((Int64)_offsetPos, STREAM_SEEK_SET, NULL));
- altStream.Pos = _offsetPos;
}
-
- UInt32 curSize = (UInt32)MyMin((UInt64)size, volSize - altStream.Pos);
- UInt32 realProcessed;
- RINOK(altStream.Stream->Write(data, curSize, &realProcessed));
- data = (const void *)((const Byte *)data + realProcessed);
- size -= realProcessed;
- altStream.Pos += realProcessed;
- _offsetPos += realProcessed;
- _absPos += realProcessed;
- if (_absPos > _length)
- _length = _absPos;
- if (_offsetPos > altStream.RealSize)
- altStream.RealSize = _offsetPos;
- if (processedSize)
- *processedSize += realProcessed;
- if (altStream.Pos == volSize)
- {
- _streamIndex++;
- _offsetPos = 0;
- }
- if (realProcessed == 0 && curSize != 0)
- return E_FAIL;
- break;
- }
- return S_OK;
-}
-
-STDMETHODIMP COutMultiVolStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
-{
- if (seekOrigin >= 3)
- return STG_E_INVALIDFUNCTION;
- switch (seekOrigin)
- {
- case STREAM_SEEK_SET: _absPos = (UInt64)offset; break;
- case STREAM_SEEK_CUR: _absPos = (UInt64)((Int64)_absPos + offset); break;
- case STREAM_SEEK_END: _absPos = (UInt64)((Int64)_length + offset); break;
+ Items.Clear();
+ return hres;
}
- _offsetPos = _absPos;
- if (newPosition)
- *newPosition = _absPos;
- _streamIndex = 0;
- return S_OK;
-}
-STDMETHODIMP COutMultiVolStream::SetSize(UInt64 newSize)
-{
- unsigned i = 0;
- while (i < Streams.Size())
+ void DisableDeletion()
{
- CAltStreamInfo &altStream = Streams[i++];
- if ((UInt64)newSize < altStream.RealSize)
+ FOR_VECTOR (i, Items)
{
- RINOK(altStream.Stream->SetSize(newSize));
- altStream.RealSize = newSize;
- break;
+ CMultiOutStream_Rec &rec = Items[i];
+ if (rec.Ref)
+ rec.Spec->NeedDelete = false;
}
- newSize -= altStream.RealSize;
}
- while (i < Streams.Size())
- {
- {
- CAltStreamInfo &altStream = Streams.Back();
- altStream.Stream.Release();
- DeleteFileAlways(altStream.Name);
- }
- Streams.DeleteBack();
- }
- _offsetPos = _absPos;
- _streamIndex = 0;
- _length = newSize;
- return S_OK;
-}
+};
+
void CArchivePath::ParseFromPath(const UString &path, EArcNameMode mode)
{
@@ -305,7 +148,7 @@ UString CArchivePath::GetFinalPath() const
UString path = GetPathWithoutExt();
if (!BaseExtension.IsEmpty())
{
- path += '.';
+ path.Add_Dot();
path += BaseExtension;
}
return path;
@@ -317,7 +160,7 @@ UString CArchivePath::GetFinalVolPath() const
// if BaseExtension is empty, we must ignore VolExtension also.
if (!BaseExtension.IsEmpty())
{
- path += '.';
+ path.Add_Dot();
path += VolExtension;
}
return path;
@@ -329,7 +172,7 @@ FString CArchivePath::GetTempPath() const
path += us2fs(Name);
if (!BaseExtension.IsEmpty())
{
- path += '.';
+ path.Add_Dot();
path += us2fs(BaseExtension);
}
path += ".tmp";
@@ -403,7 +246,7 @@ bool CUpdateOptions::SetArcPath(const CCodecs *codecs, const UString &arcPath)
}
-struct CUpdateProduceCallbackImp: public IUpdateProduceCallback
+struct CUpdateProduceCallbackImp Z7_final: public IUpdateProduceCallback
{
const CObjectVector<CArcItem> *_arcItems;
CDirItemsStat *_stat;
@@ -417,7 +260,7 @@ struct CUpdateProduceCallbackImp: public IUpdateProduceCallback
_stat(stat),
_callback(callback) {}
- virtual HRESULT ShowDeleteFile(unsigned arcIndex);
+ virtual HRESULT ShowDeleteFile(unsigned arcIndex) Z7_override;
};
@@ -499,6 +342,8 @@ bool CRenamePair::GetNewPath(bool isFolder, const UString &src, UString &dest) c
int FindAltStreamColon_in_Path(const wchar_t *path);
#endif
+
+
static HRESULT Compress(
const CUpdateOptions &options,
bool isUpdatingItself,
@@ -511,6 +356,7 @@ static HRESULT Compress(
const CDirItems &dirItems,
const CDirItem *parentDirItem,
CTempFiles &tempFiles,
+ CMultiOutStream_Bunch &multiStreams,
CUpdateErrorInfo &errorInfo,
IUpdateCallbackUI *callback,
CFinishArchiveStat &st)
@@ -530,15 +376,15 @@ static HRESULT Compress(
}
else
{
- RINOK(codecs->CreateOutArchive((unsigned)formatIndex, outArchive));
+ RINOK(codecs->CreateOutArchive((unsigned)formatIndex, outArchive))
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
{
CMyComPtr<ISetCompressCodecsInfo> setCompressCodecsInfo;
outArchive.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo);
if (setCompressCodecsInfo)
{
- RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecs));
+ RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecs))
}
}
#endif
@@ -548,7 +394,7 @@ static HRESULT Compress(
throw kUpdateIsNotSupoorted;
// we need to set properties to get fileTimeType.
- RINOK(SetProperties(outArchive, options.MethodMode.Properties));
+ RINOK(SetProperties(outArchive, options.MethodMode.Properties))
NFileTimeType::EEnum fileTimeType;
{
@@ -580,7 +426,7 @@ static HRESULT Compress(
*/
UInt32 value;
- RINOK(outArchive->GetFileTimeType(&value));
+ RINOK(outArchive->GetFileTimeType(&value))
// we support any future fileType here.
fileTimeType = (NFileTimeType::EEnum)value;
@@ -676,7 +522,7 @@ static HRESULT Compress(
if (needRename)
{
up2.NewProps = true;
- RINOK(arc->IsItem_Anti(i, up2.IsAnti));
+ RINOK(arc->IsItem_Anti(i, up2.IsAnti))
up2.NewNameIndex = (int)newNames.Add(dest);
}
updatePairs2.Add(up2);
@@ -768,7 +614,7 @@ static HRESULT Compress(
}
}
}
- RINOK(callback->SetNumItems(stat2));
+ RINOK(callback->SetNumItems(stat2))
}
CArchiveUpdateCallback *updateCallbackSpec = new CArchiveUpdateCallback;
@@ -828,7 +674,7 @@ static HRESULT Compress(
COutFileStream *outStreamSpec = NULL;
CStdOutFileStream *stdOutFileStreamSpec = NULL;
- COutMultiVolStream *volStreamSpec = NULL;
+ CMultiOutStream *volStreamSpec = NULL;
if (options.VolumesSizes.Size() == 0)
{
@@ -881,14 +727,17 @@ static HRESULT Compress(
if (arc && arc->GetGlobalOffset() > 0)
return E_NOTIMPL;
- volStreamSpec = new COutMultiVolStream;
+ volStreamSpec = new CMultiOutStream();
outSeekStream = volStreamSpec;
outStream = outSeekStream;
- volStreamSpec->Sizes = options.VolumesSizes;
volStreamSpec->Prefix = us2fs(archivePath.GetFinalVolPath());
- volStreamSpec->Prefix += '.';
- volStreamSpec->TempFiles = &tempFiles;
- volStreamSpec->Init();
+ volStreamSpec->Prefix.Add_Dot();
+ volStreamSpec->Init(options.VolumesSizes);
+ {
+ CMultiOutStream_Rec &rec = multiStreams.Items.AddNew();
+ rec.Spec = volStreamSpec;
+ rec.Ref = rec.Spec;
+ }
/*
updateCallbackSpec->VolumesSizes = volumesSizes;
@@ -913,22 +762,22 @@ static HRESULT Compress(
{
outStreamSpec2 = new COutFileStream;
sfxOutStream = outStreamSpec2;
- FString realPath = us2fs(archivePath.GetFinalPath());
+ const FString realPath = us2fs(archivePath.GetFinalPath());
if (!outStreamSpec2->Create(realPath, false))
return errorInfo.SetFromLastError("cannot open file", realPath);
}
{
UInt64 sfxSize;
- RINOK(sfxStreamSpec->GetSize(&sfxSize));
- RINOK(callback->WriteSfx(fs2us(options.SfxModule), sfxSize));
+ RINOK(sfxStreamSpec->GetSize(&sfxSize))
+ RINOK(callback->WriteSfx(fs2us(options.SfxModule), sfxSize))
}
- RINOK(NCompress::CopyStream(sfxStream, sfxOutStream, NULL));
+ RINOK(NCompress::CopyStream(sfxStream, sfxOutStream, NULL))
if (outStreamSpec2)
{
- RINOK(outStreamSpec2->Close());
+ RINOK(outStreamSpec2->Close())
}
}
@@ -939,8 +788,8 @@ static HRESULT Compress(
else
{
// Int64 globalOffset = arc->GetGlobalOffset();
- RINOK(arc->InStream->Seek(0, STREAM_SEEK_SET, NULL));
- RINOK(NCompress::CopyStream_ExactSize(arc->InStream, outStream, arc->ArcStreamOffset, NULL));
+ RINOK(InStream_SeekToBegin(arc->InStream))
+ RINOK(NCompress::CopyStream_ExactSize(arc->InStream, outStream, arc->ArcStreamOffset, NULL))
if (options.StdOutMode)
tailStream = outStream;
else
@@ -953,10 +802,57 @@ static HRESULT Compress(
}
}
+ CFiTime ft;
+ FiTime_Clear(ft);
+ bool ft_Defined = false;
+ {
+ FOR_VECTOR (i, updatePairs2)
+ {
+ const CUpdatePair2 &pair2 = updatePairs2[i];
+ CFiTime ft2;
+ FiTime_Clear(ft2);
+ bool ft2_Defined = false;
+ /* we use full precision of dirItem, if dirItem is defined
+ and (dirItem will be used or dirItem is sameTime in dir and arc */
+ if (pair2.DirIndex >= 0 &&
+ (pair2.NewProps || pair2.IsSameTime))
+ {
+ ft2 = dirItems.Items[(unsigned)pair2.DirIndex].MTime;
+ ft2_Defined = true;
+ }
+ else if (pair2.UseArcProps && pair2.ArcIndex >= 0)
+ {
+ const CArcItem &arcItem = arcItems[(unsigned)pair2.ArcIndex];
+ if (arcItem.MTime.Def)
+ {
+ arcItem.MTime.Write_To_FiTime(ft2);
+ ft2_Defined = true;
+ }
+ }
+ if (ft2_Defined)
+ {
+ if (!ft_Defined || Compare_FiTime(&ft, &ft2) < 0)
+ {
+ ft = ft2;
+ ft_Defined = true;
+ }
+ }
+ }
+ /*
+ if (fileTimeType != NFileTimeType::kNotDefined)
+ FiTime_Normalize_With_Prec(ft, fileTimeType);
+ */
+ }
+
+ if (volStreamSpec && options.SetArcMTime && ft_Defined)
+ {
+ volStreamSpec->MTime = ft;
+ volStreamSpec->MTime_Defined = true;
+ }
HRESULT result = outArchive->UpdateItems(tailStream, updatePairs2.Size(), updateCallback);
// callback->Finalize();
- RINOK(result);
+ RINOK(result)
if (!updateCallbackSpec->AreAllFilesClosed())
{
@@ -967,10 +863,6 @@ static HRESULT Compress(
if (options.SetArcMTime)
{
- CFiTime ft;
- FiTime_Clear(ft);
- bool isDefined = false;
-
// bool needNormalizeAfterStream;
// needParse;
/*
@@ -990,40 +882,9 @@ static HRESULT Compress(
// CArcTime at = StreamCallback_ArcMTime;
// updateCallbackSpec->StreamCallback_ArcMTime.Write_To_FiTime(ft);
// we must normalize with precision from archive;
- ft = updateCallbackSpec->LatestMTime;
- isDefined = true;
- }
-
- FOR_VECTOR (i, updatePairs2)
- {
- const CUpdatePair2 &pair2 = updatePairs2[i];
- CFiTime ft2;
- bool ft2_Defined = false;
- /* we use full precision of dirItem, if dirItem is defined
- and (dirItem will be used or dirItem is sameTime in dir and arc */
- if (pair2.DirIndex >= 0 &&
- (pair2.NewProps || pair2.IsSameTime))
- {
- ft2 = dirItems.Items[(unsigned)pair2.DirIndex].MTime;
- ft2_Defined = true;
- }
- else if (pair2.UseArcProps && pair2.ArcIndex >= 0)
- {
- const CArcItem &arcItem = arcItems[(unsigned)pair2.ArcIndex];
- if (arcItem.MTime.Def)
- {
- arcItem.MTime.Write_To_FiTime(ft2);
- ft2_Defined = true;
- }
- }
- if (ft2_Defined)
- {
- if (Compare_FiTime(&ft, &ft2) < 0)
- {
- ft = ft2;
- isDefined = true;
- }
- }
+ if (!ft_Defined || Compare_FiTime(&ft, &updateCallbackSpec->LatestMTime) < 0)
+ ft = updateCallbackSpec->LatestMTime;
+ ft_Defined = true;
}
/*
if (fileTimeType != NFileTimeType::kNotDefined)
@@ -1031,12 +892,14 @@ static HRESULT Compress(
*/
}
// if (ft.dwLowDateTime != 0 || ft.dwHighDateTime != 0)
- if (isDefined)
+ if (ft_Defined)
{
+ // we ignore set time errors here.
+ // note that user could move some finished volumes to another folder.
if (outStreamSpec)
outStreamSpec->SetMTime(&ft);
else if (volStreamSpec)
- volStreamSpec->SetMTime(&ft);
+ volStreamSpec->SetMTime_Final(ft);
}
}
@@ -1056,7 +919,10 @@ static HRESULT Compress(
if (outStreamSpec)
result = outStreamSpec->Close();
else if (volStreamSpec)
- result = volStreamSpec->Close();
+ {
+ result = volStreamSpec->FinalFlush_and_CloseFiles(st.NumVolumes);
+ st.IsMultiVolMode = true;
+ }
RINOK(result)
@@ -1121,7 +987,7 @@ static HRESULT EnumerateInArchiveItems(
arcItems.Clear();
UInt32 numItems;
IInArchive *archive = arc.Archive;
- RINOK(archive->GetNumberOfItems(&numItems));
+ RINOK(archive->GetNumberOfItems(&numItems))
arcItems.ClearAndReserve(numItems);
CReadArcItem item;
@@ -1132,7 +998,7 @@ static HRESULT EnumerateInArchiveItems(
{
CArcItem ai;
- RINOK(arc.GetItem(i, item));
+ RINOK(arc.GetItem(i, item))
ai.Name = item.Path;
ai.IsDir = item.IsDir;
ai.IsAltStream =
@@ -1152,8 +1018,8 @@ static HRESULT EnumerateInArchiveItems(
ai.Censored = Censor_CheckPath(censor, item);
// ai.MTime will be set to archive MTime, if not present in archive item
- RINOK(arc.GetItem_MTime(i, ai.MTime));
- RINOK(arc.GetItem_Size(i, ai.Size, ai.Size_Defined));
+ RINOK(arc.GetItem_MTime(i, ai.MTime))
+ RINOK(arc.GetItem_Size(i, ai.Size, ai.Size_Defined))
ai.IndexInServer = i;
arcItems.AddInReserved(ai);
@@ -1163,10 +1029,73 @@ static HRESULT EnumerateInArchiveItems(
#if defined(_WIN32) && !defined(UNDER_CE)
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <mapi.h>
+#else
#include <MAPI.h>
-
#endif
+extern "C" {
+
+#ifdef MAPI_FORCE_UNICODE
+
+#define Z7_WIN_LPMAPISENDMAILW LPMAPISENDMAILW
+#define Z7_WIN_MapiFileDescW MapiFileDescW
+#define Z7_WIN_MapiMessageW MapiMessageW
+#define Z7_WIN_MapiRecipDescW MapiRecipDescW
+
+#else
+
+typedef struct
+{
+ ULONG ulReserved;
+ ULONG ulRecipClass;
+ PWSTR lpszName;
+ PWSTR lpszAddress;
+ ULONG ulEIDSize;
+ PVOID lpEntryID;
+} Z7_WIN_MapiRecipDescW, *Z7_WIN_lpMapiRecipDescW;
+
+typedef struct
+{
+ ULONG ulReserved;
+ ULONG flFlags;
+ ULONG nPosition;
+ PWSTR lpszPathName;
+ PWSTR lpszFileName;
+ PVOID lpFileType;
+} Z7_WIN_MapiFileDescW, *Z7_WIN_lpMapiFileDescW;
+
+typedef struct
+{
+ ULONG ulReserved;
+ PWSTR lpszSubject;
+ PWSTR lpszNoteText;
+ PWSTR lpszMessageType;
+ PWSTR lpszDateReceived;
+ PWSTR lpszConversationID;
+ FLAGS flFlags;
+ Z7_WIN_lpMapiRecipDescW lpOriginator;
+ ULONG nRecipCount;
+ Z7_WIN_lpMapiRecipDescW lpRecips;
+ ULONG nFileCount;
+ Z7_WIN_lpMapiFileDescW lpFiles;
+} Z7_WIN_MapiMessageW, *Z7_WIN_lpMapiMessageW;
+
+typedef ULONG (FAR PASCAL Z7_WIN_MAPISENDMAILW)(
+ LHANDLE lhSession,
+ ULONG_PTR ulUIParam,
+ Z7_WIN_lpMapiMessageW lpMessage,
+ FLAGS flFlags,
+ ULONG ulReserved
+);
+typedef Z7_WIN_MAPISENDMAILW FAR *Z7_WIN_LPMAPISENDMAILW;
+
+#endif // MAPI_FORCE_UNICODE
+}
+#endif // _WIN32
+
+
HRESULT UpdateArchive(
CCodecs *codecs,
const CObjectVector<COpenType> &types,
@@ -1253,8 +1182,7 @@ HRESULT UpdateArchive(
if (!options.VolumesSizes.IsEmpty())
{
arcPath = options.ArchivePath.GetFinalVolPath();
- arcPath += '.';
- arcPath += "001";
+ arcPath += ".001";
}
if (cmdArcPath2.IsEmpty())
@@ -1268,7 +1196,7 @@ HRESULT UpdateArchive(
if (!fi.Find_FollowLink(us2fs(arcPath)))
{
if (renameMode)
- throw "can't find archive";;
+ throw "can't find archive";
if (options.MethodMode.Type.FormatIndex < 0)
{
if (!options.SetArcPath(codecs, cmdArcPath2))
@@ -1319,7 +1247,7 @@ HRESULT UpdateArchive(
CIntVector excl;
COpenOptions op;
- #ifndef _SFX
+ #ifndef Z7_SFX
op.props = &options.MethodMode.Properties;
#endif
op.codecs = codecs;
@@ -1329,7 +1257,7 @@ HRESULT UpdateArchive(
op.stream = NULL;
op.filePath = arcPath;
- RINOK(callback->StartOpenArchive(arcPath));
+ RINOK(callback->StartOpenArchive(arcPath))
HRESULT result = arcLink.Open_Strict(op, openCallback);
@@ -1341,8 +1269,8 @@ HRESULT UpdateArchive(
if (result == S_FALSE)
return E_FAIL;
*/
- RINOK(res2);
- RINOK(result);
+ RINOK(res2)
+ RINOK(result)
if (arcLink.VolumePaths.Size() > 1)
{
@@ -1422,7 +1350,7 @@ HRESULT UpdateArchive(
if (needScanning)
{
- RINOK(callback->StartScanning());
+ RINOK(callback->StartScanning())
dirItems.SymLinks = options.SymLinks.Val;
@@ -1452,7 +1380,7 @@ HRESULT UpdateArchive(
return res;
}
- RINOK(callback->FinishScanning(dirItems.Stat));
+ RINOK(callback->FinishScanning(dirItems.Stat))
// 22.00: we don't need parent folder, if absolute path mode
if (options.PathMode != NWildcard::k_AbsPath)
@@ -1460,7 +1388,7 @@ HRESULT UpdateArchive(
{
NFind::CFileInfo fi;
FString prefix = us2fs(censor.Pairs[0].Prefix);
- prefix += '.';
+ prefix.Add_Dot();
// UString prefix = censor.Pairs[0].Prefix;
/*
if (prefix.Back() == WCHAR_PATH_SEPARATOR)
@@ -1576,7 +1504,7 @@ HRESULT UpdateArchive(
{
RINOK(EnumerateInArchiveItems(
// options.StoreAltStreams,
- censor, arcLink.Arcs.Back(), arcItems));
+ censor, arcLink.Arcs.Back(), arcItems))
}
/*
@@ -1595,8 +1523,10 @@ HRESULT UpdateArchive(
processedItems[i] = 0;
}
+ CMultiOutStream_Bunch multiStreams;
+
/*
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
if (arcLink.PasswordWasAsked)
{
// We set password, if open have requested password
@@ -1640,18 +1570,22 @@ HRESULT UpdateArchive(
parentDirItem_Ptr,
tempFiles,
- errorInfo, callback, st));
+ multiStreams,
+ errorInfo, callback, st))
- RINOK(callback->FinishArchive(st));
+ RINOK(callback->FinishArchive(st))
}
if (thereIsInArchive)
{
- RINOK(arcLink.Close());
+ RINOK(arcLink.Close())
arcLink.Release();
}
+ multiStreams.DisableDeletion();
+ RINOK(multiStreams.Destruct())
+
tempFiles.Paths.Clear();
if (createTempFile)
{
@@ -1702,6 +1636,19 @@ HRESULT UpdateArchive(
return errorInfo.Get_HRESULT_Error();
}
+ FStringVector fullPaths;
+ unsigned i;
+
+ for (i = 0; i < options.Commands.Size(); i++)
+ {
+ CArchivePath &ap = options.Commands[i].ArchivePath;
+ const FString finalPath = us2fs(ap.GetFinalPath());
+ FString arcPath2;
+ if (!MyGetFullPathName(finalPath, arcPath2))
+ return errorInfo.SetFromLastError("GetFullPathName error", finalPath);
+ fullPaths.Add(arcPath2);
+ }
+
/*
LPMAPISENDDOCUMENTS fnSend = (LPMAPISENDDOCUMENTS)mapiLib.GetProc("MAPISendDocuments");
if (fnSend == 0)
@@ -1710,25 +1657,70 @@ HRESULT UpdateArchive(
return errorInfo.Get_HRESULT_Error();
}
*/
+ const
+ Z7_WIN_LPMAPISENDMAILW sendMailW = Z7_GET_PROC_ADDRESS(
+ Z7_WIN_LPMAPISENDMAILW, mapiLib.Get_HMODULE(),
+ "MAPISendMailW");
+ if (sendMailW)
+ {
+
+ CCurrentDirRestorer curDirRestorer;
+
+ UStringVector paths;
+ UStringVector names;
- LPMAPISENDMAIL sendMail = (LPMAPISENDMAIL)(void *)mapiLib.GetProc("MAPISendMail");
- if (sendMail == 0)
+ for (i = 0; i < fullPaths.Size(); i++)
{
- errorInfo.SetFromLastError("7-Zip cannot find MAPISendMail function");
- return errorInfo.Get_HRESULT_Error();;
+ const UString arcPath2 = fs2us(fullPaths[i]);
+ const UString fileName = ExtractFileNameFromPath(arcPath2);
+ paths.Add(arcPath2);
+ names.Add(fileName);
+ // Warning!!! MAPISendDocuments function changes Current directory
+ // fnSend(0, ";", (LPSTR)(LPCSTR)path, (LPSTR)(LPCSTR)name, 0);
}
- FStringVector fullPaths;
- unsigned i;
+ CRecordVector<Z7_WIN_MapiFileDescW> files;
+ files.ClearAndSetSize(paths.Size());
- for (i = 0; i < options.Commands.Size(); i++)
+ for (i = 0; i < paths.Size(); i++)
{
- CArchivePath &ap = options.Commands[i].ArchivePath;
- FString finalPath = us2fs(ap.GetFinalPath());
- FString arcPath2;
- if (!MyGetFullPathName(finalPath, arcPath2))
- return errorInfo.SetFromLastError("GetFullPathName error", finalPath);
- fullPaths.Add(arcPath2);
+ Z7_WIN_MapiFileDescW &f = files[i];
+ memset(&f, 0, sizeof(f));
+ f.nPosition = 0xFFFFFFFF;
+ f.lpszPathName = paths[i].Ptr_non_const();
+ f.lpszFileName = names[i].Ptr_non_const();
+ }
+
+ {
+ Z7_WIN_MapiMessageW m;
+ memset(&m, 0, sizeof(m));
+ m.nFileCount = files.Size();
+ m.lpFiles = &files.Front();
+
+ const UString addr (options.EMailAddress);
+ Z7_WIN_MapiRecipDescW rec;
+ if (!addr.IsEmpty())
+ {
+ memset(&rec, 0, sizeof(rec));
+ rec.ulRecipClass = MAPI_TO;
+ rec.lpszAddress = addr.Ptr_non_const();
+ m.nRecipCount = 1;
+ m.lpRecips = &rec;
+ }
+
+ sendMailW((LHANDLE)0, 0, &m, MAPI_DIALOG, 0);
+ }
+ }
+ else
+ {
+ const
+ LPMAPISENDMAIL sendMail = Z7_GET_PROC_ADDRESS(
+ LPMAPISENDMAIL, mapiLib.Get_HMODULE(),
+ "MAPISendMail");
+ if (!sendMail)
+ {
+ errorInfo.SetFromLastError("7-Zip cannot find MAPISendMail function");
+ return errorInfo.Get_HRESULT_Error();
}
CCurrentDirRestorer curDirRestorer;
@@ -1779,6 +1771,7 @@ HRESULT UpdateArchive(
sendMail((LHANDLE)0, 0, &m, MAPI_DIALOG, 0);
}
+ }
}
#endif
@@ -1827,7 +1820,7 @@ HRESULT UpdateArchive(
&& Compare_FiTime(&fileInfo.MTime, &dirItem.MTime) == 0
&& Compare_FiTime(&fileInfo.CTime, &dirItem.CTime) == 0)
{
- RINOK(callback->DeletingAfterArchiving(phyPath, false));
+ RINOK(callback->DeletingAfterArchiving(phyPath, false))
DeleteFileAlways(phyPath);
}
}
@@ -1852,12 +1845,12 @@ HRESULT UpdateArchive(
const FString phyPath = dirItems.GetPhyPath(pairs[i].Index);
if (NFind::DoesDirExist(phyPath))
{
- RINOK(callback->DeletingAfterArchiving(phyPath, true));
+ RINOK(callback->DeletingAfterArchiving(phyPath, true))
RemoveDir(phyPath);
}
}
- RINOK(callback->FinishDeletingAfterArchiving());
+ RINOK(callback->FinishDeletingAfterArchiving())
}
return S_OK;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/Update.h b/3rdparty/lzma/CPP/7zip/UI/Common/Update.h
index 01fc43e23e0..a9459ffb614 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/Update.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/Update.h
@@ -1,7 +1,7 @@
// Update.h
-#ifndef __COMMON_UPDATE_H
-#define __COMMON_UPDATE_H
+#ifndef ZIP7_INC_COMMON_UPDATE_H
+#define ZIP7_INC_COMMON_UPDATE_H
#include "../../../Common/Wildcard.h"
@@ -34,7 +34,7 @@ struct CArchivePath
FString TempPrefix; // path(folder) for temp location
FString TempPostfix;
- CArchivePath(): Temp(false) {};
+ CArchivePath(): Temp(false) {}
void ParseFromPath(const UString &path, EArcNameMode mode);
UString GetPathWithoutExt() const { return Prefix + Name; }
@@ -81,31 +81,21 @@ struct CRenamePair
struct CUpdateOptions
{
- CCompressionMethodMode MethodMode;
-
- CObjectVector<CUpdateArchiveCommand> Commands;
bool UpdateArchiveItself;
- CArchivePath ArchivePath;
- EArcNameMode ArcNameMode;
-
bool SfxMode;
- FString SfxModule;
-
+
bool PreserveATime;
bool OpenShareForWrite;
bool StopAfterOpenError;
bool StdInMode;
- UString StdInFileName;
bool StdOutMode;
-
+
bool EMailMode;
bool EMailRemoveAfter;
- UString EMailAddress;
- FString WorkingDir;
- NWildcard::ECensorPathMode PathMode;
- // UString AddPathPrefix;
+ bool DeleteAfterCompressing;
+ bool SetArcMTime;
CBoolPair NtSecurity;
CBoolPair AltStreams;
@@ -115,19 +105,28 @@ struct CUpdateOptions
CBoolPair StoreOwnerId;
CBoolPair StoreOwnerName;
- bool DeleteAfterCompressing;
+ EArcNameMode ArcNameMode;
+ NWildcard::ECensorPathMode PathMode;
- bool SetArcMTime;
+ CCompressionMethodMode MethodMode;
+
+ CObjectVector<CUpdateArchiveCommand> Commands;
+ CArchivePath ArchivePath;
+
+ FString SfxModule;
+ UString StdInFileName;
+ UString EMailAddress;
+ FString WorkingDir;
+ // UString AddPathPrefix;
CObjectVector<CRenamePair> RenamePairs;
+ CRecordVector<UInt64> VolumesSizes;
bool InitFormatIndex(const CCodecs *codecs, const CObjectVector<COpenType> &types, const UString &arcPath);
bool SetArcPath(const CCodecs *codecs, const UString &arcPath);
CUpdateOptions():
UpdateArchiveItself(true),
- ArcNameMode(k_ArcNameMode_Smart),
-
SfxMode(false),
PreserveATime(false),
@@ -140,12 +139,13 @@ struct CUpdateOptions
EMailMode(false),
EMailRemoveAfter(false),
- PathMode(NWildcard::k_RelatPath),
-
DeleteAfterCompressing(false),
- SetArcMTime(false)
+ SetArcMTime(false),
- {};
+ ArcNameMode(k_ArcNameMode_Smart),
+ PathMode(NWildcard::k_RelatPath)
+
+ {}
void SetActionCommand_Add()
{
@@ -154,10 +154,9 @@ struct CUpdateOptions
c.ActionSet = NUpdateArchive::k_ActionSet_Add;
Commands.Add(c);
}
-
- CRecordVector<UInt64> VolumesSizes;
};
+
struct CUpdateErrorInfo
{
DWORD SystemError; // it's DWORD (WRes) only;
@@ -170,32 +169,40 @@ struct CUpdateErrorInfo
HRESULT SetFromLastError(const char *message, const FString &fileName);
HRESULT SetFromError_DWORD(const char *message, const FString &fileName, DWORD error);
- CUpdateErrorInfo(): SystemError(0) {};
+ CUpdateErrorInfo(): SystemError(0) {}
};
struct CFinishArchiveStat
{
UInt64 OutArcFileSize;
+ unsigned NumVolumes;
+ bool IsMultiVolMode;
- CFinishArchiveStat(): OutArcFileSize(0) {}
+ CFinishArchiveStat(): OutArcFileSize(0), NumVolumes(0), IsMultiVolMode(false) {}
};
-#define INTERFACE_IUpdateCallbackUI2(x) \
- INTERFACE_IUpdateCallbackUI(x) \
- INTERFACE_IDirItemsCallback(x) \
- virtual HRESULT OpenResult(const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result) x; \
- virtual HRESULT StartScanning() x; \
- virtual HRESULT FinishScanning(const CDirItemsStat &st) x; \
- virtual HRESULT StartOpenArchive(const wchar_t *name) x; \
- virtual HRESULT StartArchive(const wchar_t *name, bool updating) x; \
- virtual HRESULT FinishArchive(const CFinishArchiveStat &st) x; \
- virtual HRESULT DeletingAfterArchiving(const FString &path, bool isDir) x; \
- virtual HRESULT FinishDeletingAfterArchiving() x; \
-
-struct IUpdateCallbackUI2: public IUpdateCallbackUI, public IDirItemsCallback
+Z7_PURE_INTERFACES_BEGIN
+
+// INTERFACE_IUpdateCallbackUI(x)
+// INTERFACE_IDirItemsCallback(x)
+
+#define Z7_IFACEN_IUpdateCallbackUI2(x) \
+ virtual HRESULT OpenResult(const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result) x \
+ virtual HRESULT StartScanning() x \
+ virtual HRESULT FinishScanning(const CDirItemsStat &st) x \
+ virtual HRESULT StartOpenArchive(const wchar_t *name) x \
+ virtual HRESULT StartArchive(const wchar_t *name, bool updating) x \
+ virtual HRESULT FinishArchive(const CFinishArchiveStat &st) x \
+ virtual HRESULT DeletingAfterArchiving(const FString &path, bool isDir) x \
+ virtual HRESULT FinishDeletingAfterArchiving() x \
+
+DECLARE_INTERFACE(IUpdateCallbackUI2):
+ public IUpdateCallbackUI,
+ public IDirItemsCallback
{
- INTERFACE_IUpdateCallbackUI2(=0)
+ Z7_IFACE_PURE(IUpdateCallbackUI2)
};
+Z7_PURE_INTERFACES_END
HRESULT UpdateArchive(
CCodecs *codecs,
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateAction.h b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateAction.h
index bc53fcdbbb1..6a3565e79a6 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateAction.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateAction.h
@@ -1,7 +1,7 @@
// UpdateAction.h
-#ifndef __UPDATE_ACTION_H
-#define __UPDATE_ACTION_H
+#ifndef ZIP7_INC_UPDATE_ACTION_H
+#define ZIP7_INC_UPDATE_ACTION_H
namespace NUpdateArchive {
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp
index c93bfc7e02b..5e2860dd08d 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp
@@ -7,17 +7,23 @@
#ifndef _WIN32
// #include <grp.h>
// #include <pwd.h>
-
+/*
+inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated since glibc 2.25.
+Since glibc 2.3.3, macros have been aliases for three GNU-specific
+functions: gnu_dev_makedev(), gnu_dev_major(), and gnu_dev_minor()
+*/
// for major()/minor():
-#if defined(__FreeBSD__) || defined(BSD)
#include <sys/types.h>
+#if defined(__FreeBSD__) || defined(BSD) || defined(__APPLE__)
#else
+#ifndef major
#include <sys/sysmacros.h>
#endif
-
#endif
-#ifndef _7ZIP_ST
+#endif // _WIN32
+
+#ifndef Z7_ST
#include "../../../Windows/Synchronization.h"
#endif
@@ -36,14 +42,14 @@
#include "UpdateCallback.h"
#if defined(_WIN32) && !defined(UNDER_CE)
-#define _USE_SECURITY_CODE
+#define Z7_USE_SECURITY_CODE
#include "../../../Windows/SecurityUtils.h"
#endif
using namespace NWindows;
using namespace NFile;
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static NSynchronization::CCriticalSection g_CriticalSection;
#define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection);
#else
@@ -51,25 +57,11 @@ static NSynchronization::CCriticalSection g_CriticalSection;
#endif
-#ifdef _USE_SECURITY_CODE
+#ifdef Z7_USE_SECURITY_CODE
bool InitLocalPrivileges();
#endif
CArchiveUpdateCallback::CArchiveUpdateCallback():
- _hardIndex_From((UInt32)(Int32)-1),
-
- Callback(NULL),
-
- DirItems(NULL),
- ParentDirItem(NULL),
-
- Arc(NULL),
- ArcItems(NULL),
- UpdatePairs(NULL),
- NewNames(NULL),
- CommentIndex(-1),
- Comment(NULL),
-
PreserveATime(false),
ShareForWrite(false),
StopAfterOpenError(false),
@@ -92,29 +84,42 @@ CArchiveUpdateCallback::CArchiveUpdateCallback():
Need_LatestMTime(false),
LatestMTime_Defined(false),
- ProcessedItemsStatuses(NULL)
+ Callback(NULL),
+
+ DirItems(NULL),
+ ParentDirItem(NULL),
+
+ Arc(NULL),
+ ArcItems(NULL),
+ UpdatePairs(NULL),
+ NewNames(NULL),
+ Comment(NULL),
+ CommentIndex(-1),
+
+ ProcessedItemsStatuses(NULL),
+ _hardIndex_From((UInt32)(Int32)-1)
{
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
_saclEnabled = InitLocalPrivileges();
#endif
}
-STDMETHODIMP CArchiveUpdateCallback::SetTotal(UInt64 size)
+Z7_COM7F_IMF(CArchiveUpdateCallback::SetTotal(UInt64 size))
{
COM_TRY_BEGIN
return Callback->SetTotal(size);
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::SetCompleted(const UInt64 *completeValue)
+Z7_COM7F_IMF(CArchiveUpdateCallback::SetCompleted(const UInt64 *completeValue))
{
COM_TRY_BEGIN
return Callback->SetCompleted(completeValue);
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
+Z7_COM7F_IMF(CArchiveUpdateCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
{
COM_TRY_BEGIN
return Callback->SetRatioInfo(inSize, outSize);
@@ -135,17 +140,17 @@ static const CStatProp kProps[] =
{ NULL, kpidIsAnti, VT_BOOL}
};
-STDMETHODIMP CArchiveUpdateCallback::EnumProperties(IEnumSTATPROPSTG **)
+Z7_COM7F_IMF(CArchiveUpdateCallback::EnumProperties(IEnumSTATPROPSTG **)
{
- return CStatPropEnumerator::CreateEnumerator(kProps, ARRAY_SIZE(kProps), enumerator);
+ return CStatPropEnumerator::CreateEnumerator(kProps, Z7_ARRAY_SIZE(kProps), enumerator);
}
*/
-STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 index,
- Int32 *newData, Int32 *newProps, UInt32 *indexInArchive)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 index,
+ Int32 *newData, Int32 *newProps, UInt32 *indexInArchive))
{
COM_TRY_BEGIN
- RINOK(Callback->CheckBreak());
+ RINOK(Callback->CheckBreak())
const CUpdatePair2 &up = (*UpdatePairs)[index];
if (newData) *newData = BoolToInt(up.NewData);
if (newProps) *newProps = BoolToInt(up.NewProps);
@@ -160,7 +165,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 index,
}
-STDMETHODIMP CArchiveUpdateCallback::GetRootProp(PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetRootProp(PROPID propID, PROPVARIANT *value))
{
NCOM::CPropVariant prop;
switch (propID)
@@ -176,14 +181,14 @@ STDMETHODIMP CArchiveUpdateCallback::GetRootProp(PROPID propID, PROPVARIANT *val
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetParent(UInt32 /* index */, UInt32 *parent, UInt32 *parentType)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetParent(UInt32 /* index */, UInt32 *parent, UInt32 *parentType))
{
*parentType = NParentType::kDir;
*parent = (UInt32)(Int32)-1;
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetNumRawProps(UInt32 *numProps)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetNumRawProps(UInt32 *numProps))
{
*numProps = 0;
if (StoreNtSecurity)
@@ -191,25 +196,27 @@ STDMETHODIMP CArchiveUpdateCallback::GetNumRawProps(UInt32 *numProps)
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetRawPropInfo(UInt32 /* index */, BSTR *name, PROPID *propID)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetRawPropInfo(UInt32 /* index */, BSTR *name, PROPID *propID))
{
*name = NULL;
*propID = kpidNtSecure;
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetRootRawProp(PROPID
- #ifdef _USE_SECURITY_CODE
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetRootRawProp(PROPID
propID
- #endif
- , const void **data, UInt32 *dataSize, UInt32 *propType)
+ , const void **data, UInt32 *dataSize, UInt32 *propType))
{
- *data = 0;
+ #ifndef Z7_USE_SECURITY_CODE
+ UNUSED_VAR(propID)
+ #endif
+
+ *data = NULL;
*dataSize = 0;
*propType = 0;
if (!StoreNtSecurity)
return S_OK;
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
if (propID == kpidNtSecure)
{
if (StdInMode)
@@ -233,12 +240,10 @@ STDMETHODIMP CArchiveUpdateCallback::GetRootRawProp(PROPID
return S_OK;
}
-// #ifdef _USE_SECURITY_CODE
-// #endif
-STDMETHODIMP CArchiveUpdateCallback::GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType))
{
- *data = 0;
+ *data = NULL;
*dataSize = 0;
*propType = 0;
@@ -265,7 +270,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetRawProp(UInt32 index, PROPID propID, con
const CDirItem &di = DirItems->Items[(unsigned)up.DirIndex];
#endif
- #ifdef _USE_SECURITY_CODE
+ #ifdef Z7_USE_SECURITY_CODE
if (propID == kpidNtSecure)
{
if (!StoreNtSecurity)
@@ -349,7 +354,7 @@ static UString GetRelativePath(const UString &to, const UString &from)
#endif
-STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value))
{
COM_TRY_BEGIN
const CUpdatePair2 &up = (*UpdatePairs)[index];
@@ -385,7 +390,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PR
CReparseAttr attr;
if (attr.Parse(di.ReparseData, di.ReparseData.Size()))
{
- UString simpleName = attr.GetPath();
+ const UString simpleName = attr.GetPath();
if (!attr.IsSymLink_WSL() && attr.IsRelative_Win())
prop = simpleName;
else
@@ -484,6 +489,11 @@ STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PR
// case kpidShortName: prop = di.ShortName; break;
#else
+ #if defined(__APPLE__)
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wsign-conversion"
+ #endif
+
case kpidDeviceMajor:
/*
printf("\ndi.mode = %o\n", di.mode);
@@ -499,6 +509,10 @@ STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PR
prop = (UInt32)minor(di.rdev);
break;
+ #if defined(__APPLE__)
+ #pragma GCC diagnostic pop
+ #endif
+
// case kpidDevice: if (S_ISCHR(di.mode) || S_ISBLK(di.mode)) prop = (UInt64)(di.rdev); break;
case kpidUserId: if (StoreOwnerId) prop = (UInt32)di.uid; break;
@@ -519,22 +533,22 @@ STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PR
COM_TRY_END
}
-#ifndef _7ZIP_ST
-static NSynchronization::CCriticalSection CS;
+#ifndef Z7_ST
+static NSynchronization::CCriticalSection g_CS;
#endif
void CArchiveUpdateCallback::UpdateProcessedItemStatus(unsigned dirIndex)
{
if (ProcessedItemsStatuses)
{
- #ifndef _7ZIP_ST
- NSynchronization::CCriticalSectionLock lock(CS);
+ #ifndef Z7_ST
+ NSynchronization::CCriticalSectionLock lock(g_CS);
#endif
ProcessedItemsStatuses[dirIndex] = 1;
}
}
-STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStream **inStream, UInt32 mode)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStream **inStream, UInt32 mode))
{
COM_TRY_BEGIN
*inStream = NULL;
@@ -542,7 +556,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
if (!up.NewData)
return E_FAIL;
- RINOK(Callback->CheckBreak());
+ RINOK(Callback->CheckBreak())
// RINOK(Callback->Finalize());
bool isDir = IsDir(up);
@@ -554,7 +568,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
name = (*ArcItems)[(unsigned)up.ArcIndex].Name;
else if (up.DirIndex >= 0)
name = DirItems->GetLogPath((unsigned)up.DirIndex);
- RINOK(Callback->GetStream(name, isDir, true, mode));
+ RINOK(Callback->GetStream(name, isDir, true, mode))
/* 9.33: fixed. Handlers expect real stream object for files, even for anti-file.
so we return empty stream */
@@ -569,7 +583,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
return S_OK;
}
- RINOK(Callback->GetStream(DirItems->GetLogPath((unsigned)up.DirIndex), isDir, false, mode));
+ RINOK(Callback->GetStream(DirItems->GetLogPath((unsigned)up.DirIndex), isDir, false, mode))
if (isDir)
return S_OK;
@@ -640,8 +654,9 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
#endif
inStreamSpec->SupportHardLinks = StoreHardLinks;
- inStreamSpec->Set_PreserveATime(PreserveATime
- || mode == NUpdateNotifyOp::kAnalyze); // 22.00 : we don't change access time in Analyze pass.
+ const bool preserveATime = (PreserveATime
+ || mode == NUpdateNotifyOp::kAnalyze); // 22.00 : we don't change access time in Analyze pass.
+ inStreamSpec->Set_PreserveATime(preserveATime);
const FString path = DirItems->GetPhyPath((unsigned)up.DirIndex);
_openFiles_Indexes.Add(index);
@@ -655,12 +670,32 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
if (!inStreamSpec->OpenShared(path, ShareForWrite))
{
- const DWORD error = ::GetLastError();
- const HRESULT hres = Callback->OpenFileError(path, error);
- if (StopAfterOpenError)
+ bool isOpen = false;
+ if (preserveATime)
+ {
+ inStreamSpec->Set_PreserveATime(false);
+ isOpen = inStreamSpec->OpenShared(path, ShareForWrite);
+ }
+ if (!isOpen)
+ {
+ const DWORD error = ::GetLastError();
+ const HRESULT hres = Callback->OpenFileError(path, error);
if (hres == S_OK || hres == S_FALSE)
+ if (StopAfterOpenError ||
+ // v23: we check also for some critical errors:
+ #ifdef _WIN32
+ error == ERROR_NO_SYSTEM_RESOURCES
+ #else
+ error == EMFILE
+ #endif
+ )
+ {
+ if (error == 0)
+ return E_FAIL;
return HRESULT_FROM_WIN32(error);
- return hres;
+ }
+ return hres;
+ }
}
/*
@@ -679,7 +714,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
inStreamSpec->ReloadProps();
}
- // #if defined(USE_WIN_FILE) || !defined(_WIN32)
+ // #if defined(Z7_FILE_STREAMS_USE_WIN_FILE) || !defined(_WIN32)
if (StoreHardLinks)
{
CStreamFileProps props;
@@ -691,8 +726,8 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
pair.Key1 = props.VolID;
pair.Key2 = props.FileID_Low;
pair.Value = index;
- unsigned numItems = _map.Size();
- unsigned pairIndex = _map.AddToUniqueSorted2(pair);
+ const unsigned numItems = _map.Size();
+ const unsigned pairIndex = _map.AddToUniqueSorted2(pair);
if (numItems == _map.Size())
{
// const CKeyKeyValPair &pair2 = _map.Pairs[pairIndex];
@@ -714,14 +749,14 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream2(UInt32 index, ISequentialInStrea
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::SetOperationResult(Int32 opRes)
+Z7_COM7F_IMF(CArchiveUpdateCallback::SetOperationResult(Int32 opRes))
{
COM_TRY_BEGIN
return Callback->SetOperationResult(opRes);
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream))
{
COM_TRY_BEGIN
return GetStream2(index, inStream,
@@ -731,7 +766,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::ReportOperation(UInt32 indexType, UInt32 index, UInt32 op)
+Z7_COM7F_IMF(CArchiveUpdateCallback::ReportOperation(UInt32 indexType, UInt32 index, UInt32 op))
{
COM_TRY_BEGIN
@@ -770,9 +805,9 @@ STDMETHODIMP CArchiveUpdateCallback::ReportOperation(UInt32 indexType, UInt32 in
}
else if (Arc)
{
- RINOK(Arc->GetItem_Path(index, s2));
+ RINOK(Arc->GetItem_Path(index, s2))
s = s2;
- RINOK(Archive_IsItem_Dir(Arc->Archive, index, isDir));
+ RINOK(Archive_IsItem_Dir(Arc->Archive, index, isDir))
}
}
}
@@ -791,7 +826,7 @@ STDMETHODIMP CArchiveUpdateCallback::ReportOperation(UInt32 indexType, UInt32 in
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::ReportExtractResult(UInt32 indexType, UInt32 index, Int32 opRes)
+Z7_COM7F_IMF(CArchiveUpdateCallback::ReportExtractResult(UInt32 indexType, UInt32 index, Int32 opRes))
{
COM_TRY_BEGIN
@@ -825,12 +860,12 @@ STDMETHODIMP CArchiveUpdateCallback::ReportExtractResult(UInt32 indexType, UInt3
s = (*ArcItems)[index].Name;
else if (Arc)
{
- RINOK(Arc->GetItem_Path(index, s2));
+ RINOK(Arc->GetItem_Path(index, s2))
s = s2;
}
if (Archive)
{
- RINOK(Archive_GetItemBoolProp(Archive, index, kpidEncrypted, isEncrypted));
+ RINOK(Archive_GetItemBoolProp(Archive, index, kpidEncrypted, isEncrypted))
}
}
}
@@ -848,7 +883,7 @@ STDMETHODIMP CArchiveUpdateCallback::ReportExtractResult(UInt32 indexType, UInt3
/*
-STDMETHODIMP CArchiveUpdateCallback::DoNeedArcProp(PROPID propID, Int32 *answer)
+Z7_COM7F_IMF(CArchiveUpdateCallback::DoNeedArcProp(PROPID propID, Int32 *answer))
{
*answer = 0;
if (Need_ArcMTime_Report && propID == kpidComboMTime)
@@ -856,7 +891,7 @@ STDMETHODIMP CArchiveUpdateCallback::DoNeedArcProp(PROPID propID, Int32 *answer)
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value)
+Z7_COM7F_IMF(CArchiveUpdateCallback::ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value))
{
if (indexType == NArchive::NEventIndexType::kArcProp)
{
@@ -879,19 +914,19 @@ STDMETHODIMP CArchiveUpdateCallback::ReportProp(UInt32 indexType, UInt32 index,
return Callback->ReportProp(indexType, index, propID, value);
}
-STDMETHODIMP CArchiveUpdateCallback::ReportRawProp(UInt32 indexType, UInt32 index,
- PROPID propID, const void *data, UInt32 dataSize, UInt32 propType)
+Z7_COM7F_IMF(CArchiveUpdateCallback::ReportRawProp(UInt32 indexType, UInt32 index,
+ PROPID propID, const void *data, UInt32 dataSize, UInt32 propType))
{
return Callback->ReportRawProp(indexType, index, propID, data, dataSize, propType);
}
-STDMETHODIMP CArchiveUpdateCallback::ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes)
+Z7_COM7F_IMF(CArchiveUpdateCallback::ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes))
{
return Callback->ReportFinished(indexType, index, opRes);
}
*/
-STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size))
{
if (VolumesSizes.Size() == 0)
return S_FALSE;
@@ -901,7 +936,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size)
return S_OK;
}
-STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream)
+Z7_COM7F_IMF(CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream))
{
COM_TRY_BEGIN
char temp[16];
@@ -910,7 +945,7 @@ STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOu
while (res.Len() < 2)
res.InsertAtFront(FTEXT('0'));
FString fileName = VolName;
- fileName += '.';
+ fileName.Add_Dot();
fileName += res;
fileName += VolExt;
COutFileStream *streamSpec = new COutFileStream;
@@ -922,14 +957,14 @@ STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOu
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password)
+Z7_COM7F_IMF(CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password))
{
COM_TRY_BEGIN
return Callback->CryptoGetTextPassword2(passwordIsDefined, password);
COM_TRY_END
}
-STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword(BSTR *password)
+Z7_COM7F_IMF(CArchiveUpdateCallback::CryptoGetTextPassword(BSTR *password))
{
COM_TRY_BEGIN
return Callback->CryptoGetTextPassword(password);
@@ -949,7 +984,7 @@ HRESULT CArchiveUpdateCallback::InFileStream_On_Error(UINT_PTR val, DWORD error)
{
if (_openFiles_Indexes[i] == index)
{
- RINOK(Callback->ReadingFileError(_openFiles_Paths[i], error));
+ RINOK(Callback->ReadingFileError(_openFiles_Paths[i], error))
break;
}
}
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.h b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.h
index 3719c1ea67a..379b8146293 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateCallback.h
@@ -1,7 +1,7 @@
// UpdateCallback.h
-#ifndef __UPDATE_CALLBACK_H
-#define __UPDATE_CALLBACK_H
+#ifndef ZIP7_INC_UPDATE_CALLBACK_H
+#define ZIP7_INC_UPDATE_CALLBACK_H
#include "../../../Common/MyCom.h"
@@ -27,37 +27,38 @@ struct CArcToDoStat
}
};
-#define INTERFACE_IUpdateCallbackUI(x) \
- virtual HRESULT WriteSfx(const wchar_t *name, UInt64 size) x; \
- virtual HRESULT SetTotal(UInt64 size) x; \
- virtual HRESULT SetCompleted(const UInt64 *completeValue) x; \
- virtual HRESULT SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) x; \
- virtual HRESULT CheckBreak() x; \
- /* virtual HRESULT Finalize() x; */ \
- virtual HRESULT SetNumItems(const CArcToDoStat &stat) x; \
- virtual HRESULT GetStream(const wchar_t *name, bool isDir, bool isAnti, UInt32 mode) x; \
- virtual HRESULT OpenFileError(const FString &path, DWORD systemError) x; \
- virtual HRESULT ReadingFileError(const FString &path, DWORD systemError) x; \
- virtual HRESULT SetOperationResult(Int32 opRes) x; \
- virtual HRESULT ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name) x; \
- virtual HRESULT ReportUpdateOperation(UInt32 op, const wchar_t *name, bool isDir) x; \
- /* virtual HRESULT SetPassword(const UString &password) x; */ \
- virtual HRESULT CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) x; \
- virtual HRESULT CryptoGetTextPassword(BSTR *password) x; \
- virtual HRESULT ShowDeleteFile(const wchar_t *name, bool isDir) x; \
+
+Z7_PURE_INTERFACES_BEGIN
+
+#define Z7_IFACEN_IUpdateCallbackUI(x) \
+ virtual HRESULT WriteSfx(const wchar_t *name, UInt64 size) x \
+ virtual HRESULT SetTotal(UInt64 size) x \
+ virtual HRESULT SetCompleted(const UInt64 *completeValue) x \
+ virtual HRESULT SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) x \
+ virtual HRESULT CheckBreak() x \
+ /* virtual HRESULT Finalize() x */ \
+ virtual HRESULT SetNumItems(const CArcToDoStat &stat) x \
+ virtual HRESULT GetStream(const wchar_t *name, bool isDir, bool isAnti, UInt32 mode) x \
+ virtual HRESULT OpenFileError(const FString &path, DWORD systemError) x \
+ virtual HRESULT ReadingFileError(const FString &path, DWORD systemError) x \
+ virtual HRESULT SetOperationResult(Int32 opRes) x \
+ virtual HRESULT ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name) x \
+ virtual HRESULT ReportUpdateOperation(UInt32 op, const wchar_t *name, bool isDir) x \
+ /* virtual HRESULT SetPassword(const UString &password) x */ \
+ virtual HRESULT CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) x \
+ virtual HRESULT CryptoGetTextPassword(BSTR *password) x \
+ virtual HRESULT ShowDeleteFile(const wchar_t *name, bool isDir) x \
/*
- virtual HRESULT ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value) x; \
- virtual HRESULT ReportRawProp(UInt32 indexType, UInt32 index, PROPID propID, const void *data, UInt32 dataSize, UInt32 propType) x; \
- virtual HRESULT ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes) x; \
+ virtual HRESULT ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value) x \
+ virtual HRESULT ReportRawProp(UInt32 indexType, UInt32 index, PROPID propID, const void *data, UInt32 dataSize, UInt32 propType) x \
+ virtual HRESULT ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes) x \
*/
/* virtual HRESULT CloseProgress() { return S_OK; } */
-struct IUpdateCallbackUI
-{
- INTERFACE_IUpdateCallbackUI(=0)
-};
+Z7_IFACE_DECL_PURE(IUpdateCallbackUI)
+Z7_PURE_INTERFACES_END
struct CKeyKeyValPair
{
@@ -74,11 +75,11 @@ struct CKeyKeyValPair
};
-class CArchiveUpdateCallback:
+class CArchiveUpdateCallback Z7_final:
public IArchiveUpdateCallback2,
public IArchiveUpdateCallbackFile,
// public IArchiveUpdateCallbackArcProp,
- public IArchiveExtractCallbackMessage,
+ public IArchiveExtractCallbackMessage2,
public IArchiveGetRawProps,
public IArchiveGetRootProps,
public ICryptoGetTextPassword2,
@@ -87,54 +88,63 @@ class CArchiveUpdateCallback:
public IInFileStream_Callback,
public CMyUnknownImp
{
- #if defined(_WIN32) && !defined(UNDER_CE)
- bool _saclEnabled;
- #endif
- CRecordVector<CKeyKeyValPair> _map;
+ Z7_COM_QI_BEGIN2(IArchiveUpdateCallback2)
+ Z7_COM_QI_ENTRY(IArchiveUpdateCallbackFile)
+ // Z7_COM_QI_ENTRY(IArchiveUpdateCallbackArcProp)
+ Z7_COM_QI_ENTRY(IArchiveExtractCallbackMessage2)
+ Z7_COM_QI_ENTRY(IArchiveGetRawProps)
+ Z7_COM_QI_ENTRY(IArchiveGetRootProps)
+ Z7_COM_QI_ENTRY(ICryptoGetTextPassword2)
+ Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
+ Z7_COM_QI_ENTRY(ICompressProgressInfo)
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ICompressProgressInfo)
+
+ Z7_IFACE_COM7_IMP(IProgress)
+ Z7_IFACE_COM7_IMP(IArchiveUpdateCallback)
+ Z7_IFACE_COM7_IMP(IArchiveUpdateCallback2)
+ Z7_IFACE_COM7_IMP(IArchiveUpdateCallbackFile)
+ // Z7_IFACE_COM7_IMP(IArchiveUpdateCallbackArcProp)
+ Z7_IFACE_COM7_IMP(IArchiveExtractCallbackMessage2)
+ Z7_IFACE_COM7_IMP(IArchiveGetRawProps)
+ Z7_IFACE_COM7_IMP(IArchiveGetRootProps)
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword2)
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
- UInt32 _hardIndex_From;
- UInt32 _hardIndex_To;
void UpdateProcessedItemStatus(unsigned dirIndex);
public:
- MY_QUERYINTERFACE_BEGIN2(IArchiveUpdateCallback2)
- MY_QUERYINTERFACE_ENTRY(IArchiveUpdateCallbackFile)
- // MY_QUERYINTERFACE_ENTRY(IArchiveUpdateCallbackArcProp)
- MY_QUERYINTERFACE_ENTRY(IArchiveExtractCallbackMessage)
- MY_QUERYINTERFACE_ENTRY(IArchiveGetRawProps)
- MY_QUERYINTERFACE_ENTRY(IArchiveGetRootProps)
- MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword2)
- MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
- MY_QUERYINTERFACE_ENTRY(ICompressProgressInfo)
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
-
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
-
- INTERFACE_IArchiveUpdateCallback2(;)
- INTERFACE_IArchiveUpdateCallbackFile(;)
- // INTERFACE_IArchiveUpdateCallbackArcProp(;)
- INTERFACE_IArchiveExtractCallbackMessage(;)
- INTERFACE_IArchiveGetRawProps(;)
- INTERFACE_IArchiveGetRootProps(;)
-
- STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password);
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
+ bool PreserveATime;
+ bool ShareForWrite;
+ bool StopAfterOpenError;
+ bool StdInMode;
+
+ bool KeepOriginalItemNames;
+ bool StoreNtSecurity;
+ bool StoreHardLinks;
+ bool StoreSymLinks;
+
+ bool StoreOwnerId;
+ bool StoreOwnerName;
+
+ bool Need_LatestMTime;
+ bool LatestMTime_Defined;
+
+ /*
+ bool Need_ArcMTime_Report;
+ bool ArcMTime_WasReported;
+ */
CRecordVector<UInt32> _openFiles_Indexes;
FStringVector _openFiles_Paths;
// CRecordVector< CInFileStream* > _openFiles_Streams;
bool AreAllFilesClosed() const { return _openFiles_Indexes.IsEmpty(); }
- virtual HRESULT InFileStream_On_Error(UINT_PTR val, DWORD error);
- virtual void InFileStream_On_Destroy(CInFileStream *stream, UINT_PTR val);
-
- CRecordVector<UInt64> VolumesSizes;
- FString VolName;
- FString VolExt;
- UString ArcFileName; // without path prefix
+ virtual HRESULT InFileStream_On_Error(UINT_PTR val, DWORD error) Z7_override;
+ virtual void InFileStream_On_Destroy(CInFileStream *stream, UINT_PTR val) Z7_override;
IUpdateCallbackUI *Callback;
@@ -145,36 +155,24 @@ public:
CMyComPtr<IInArchive> Archive;
const CObjectVector<CArcItem> *ArcItems;
const CRecordVector<CUpdatePair2> *UpdatePairs;
- const UStringVector *NewNames;
- int CommentIndex;
- const UString *Comment;
- bool PreserveATime;
- bool ShareForWrite;
- bool StopAfterOpenError;
- bool StdInMode;
-
- bool KeepOriginalItemNames;
- bool StoreNtSecurity;
- bool StoreHardLinks;
- bool StoreSymLinks;
+ CRecordVector<UInt64> VolumesSizes;
+ FString VolName;
+ FString VolExt;
+ UString ArcFileName; // without path prefix
- bool StoreOwnerId;
- bool StoreOwnerName;
+ const UStringVector *NewNames;
+ const UString *Comment;
+ int CommentIndex;
/*
- bool Need_ArcMTime_Report;
- bool ArcMTime_WasReported;
CArcTime Reported_ArcMTime;
*/
- bool Need_LatestMTime;
- bool LatestMTime_Defined;
CFiTime LatestMTime;
Byte *ProcessedItemsStatuses;
-
CArchiveUpdateCallback();
bool IsDir(const CUpdatePair2 &up) const
@@ -185,6 +183,15 @@ public:
return (*ArcItems)[(unsigned)up.ArcIndex].IsDir;
return false;
}
+
+private:
+ #if defined(_WIN32) && !defined(UNDER_CE)
+ bool _saclEnabled;
+ #endif
+ CRecordVector<CKeyKeyValPair> _map;
+
+ UInt32 _hardIndex_From;
+ UInt32 _hardIndex_To;
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.cpp
index e9a16444bad..99b0aafb281 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.cpp
@@ -103,7 +103,7 @@ static const char * const k_Duplicate_inArc_Message = "Duplicate filename in arc
static const char * const k_Duplicate_inDir_Message = "Duplicate filename on disk:";
static const char * const k_NotCensoredCollision_Message = "Internal file name collision (file on disk, file in archive):";
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static
void ThrowError(const char *message, const UString &s1, const UString &s2)
{
@@ -115,7 +115,7 @@ void ThrowError(const char *message, const UString &s1, const UString &s2)
static int CompareArcItemsBase(const CArcItem &ai1, const CArcItem &ai2)
{
- int res = CompareFileNames(ai1.Name, ai2.Name);
+ const int res = CompareFileNames(ai1.Name, ai2.Name);
if (res != 0)
return res;
if (ai1.IsDir != ai2.IsDir)
@@ -128,7 +128,7 @@ static int CompareArcItems(const unsigned *p1, const unsigned *p2, void *param)
const unsigned i1 = *p1;
const unsigned i2 = *p2;
const CObjectVector<CArcItem> &arcItems = *(const CObjectVector<CArcItem> *)param;
- int res = CompareArcItemsBase(arcItems[i1], arcItems[i2]);
+ const int res = CompareArcItemsBase(arcItems[i1], arcItems[i2]);
if (res != 0)
return res;
return MyCompare(i1, i2);
@@ -259,7 +259,7 @@ void GetUpdatePairInfoList(
int compResult = 0;
if (ai->MTime.Def)
{
- compResult = MyCompareTime(fileTimeType, di->MTime, ai->MTime);
+ compResult = MyCompareTime((unsigned)fileTimeType, di->MTime, ai->MTime);
}
switch (compResult)
{
@@ -283,7 +283,7 @@ void GetUpdatePairInfoList(
{
if (prevHostName)
{
- unsigned hostLen = prevHostName->Len();
+ const unsigned hostLen = prevHostName->Len();
if (name->Len() > hostLen)
if ((*name)[hostLen] == ':' && CompareFileNames(*prevHostName, name->Left(hostLen)) == 0)
pair.HostIndex = prevHostFile;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.h b/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.h
index 296d3b09745..13228b0e012 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/UpdatePair.h
@@ -1,7 +1,7 @@
// UpdatePair.h
-#ifndef __UPDATE_PAIR_H
-#define __UPDATE_PAIR_H
+#ifndef ZIP7_INC_UPDATE_PAIR_H
+#define ZIP7_INC_UPDATE_PAIR_H
#include "DirItem.h"
#include "UpdateAction.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.h b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.h
index 24bb32ec06f..9db6c1e44b2 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.h
@@ -1,7 +1,7 @@
// UpdateProduce.h
-#ifndef __UPDATE_PRODUCE_H
-#define __UPDATE_PRODUCE_H
+#ifndef ZIP7_INC_UPDATE_PRODUCE_H
+#define ZIP7_INC_UPDATE_PRODUCE_H
#include "UpdatePair.h"
@@ -43,10 +43,13 @@ struct CUpdatePair2
{}
};
-struct IUpdateProduceCallback
+Z7_PURE_INTERFACES_BEGIN
+
+DECLARE_INTERFACE(IUpdateProduceCallback)
{
virtual HRESULT ShowDeleteFile(unsigned arcIndex) = 0;
};
+Z7_PURE_INTERFACES_END
void UpdateProduce(
const CRecordVector<CUpdatePair> &updatePairs,
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.cpp
index 1307ceebb9b..cfec63507af 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.cpp
@@ -2,11 +2,8 @@
#include "StdAfx.h"
-#include "../../../Common/StringConvert.h"
-#include "../../../Common/Wildcard.h"
-
-#include "../../../Windows/FileFind.h"
#include "../../../Windows/FileName.h"
+#include "../../../Windows/FileSystem.h"
#include "WorkDir.h"
@@ -22,10 +19,10 @@ FString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const FString &path, FStr
if (workDirInfo.ForRemovableOnly)
{
mode = NWorkDir::NMode::kCurrent;
- FString prefix = path.Left(3);
- if (prefix[1] == FTEXT(':') && prefix[2] == FTEXT('\\'))
+ const FString prefix = path.Left(3);
+ if (NName::IsDrivePath(prefix))
{
- UINT driveType = GetDriveType(GetSystemString(prefix, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP));
+ const UINT driveType = NSystem::MyGetDriveType(prefix);
if (driveType == DRIVE_CDROM || driveType == DRIVE_REMOVABLE)
mode = workDirInfo.Mode;
}
@@ -39,29 +36,26 @@ FString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const FString &path, FStr
}
#endif
- int pos = path.ReverseFind_PathSepar() + 1;
+ const int pos = path.ReverseFind_PathSepar() + 1;
fileName = path.Ptr((unsigned)pos);
- switch (mode)
+ FString tempDir;
+ switch ((int)mode)
{
case NWorkDir::NMode::kCurrent:
- {
- return path.Left((unsigned)pos);
- }
+ tempDir = path.Left((unsigned)pos);
+ break;
case NWorkDir::NMode::kSpecified:
- {
- FString tempDir = workDirInfo.Path;
- NName::NormalizeDirPathPrefix(tempDir);
- return tempDir;
- }
+ tempDir = workDirInfo.Path;
+ break;
+ // case NWorkDir::NMode::kSystem:
default:
- {
- FString tempDir;
if (!MyGetTempPath(tempDir))
throw 141717;
- return tempDir;
- }
+ break;
}
+ NName::NormalizeDirPathPrefix(tempDir);
+ return tempDir;
}
HRESULT CWorkDirTempFile::CreateTempFile(const FString &originalPath)
@@ -69,9 +63,8 @@ HRESULT CWorkDirTempFile::CreateTempFile(const FString &originalPath)
NWorkDir::CInfo workDirInfo;
workDirInfo.Load();
FString namePart;
- FString workDir = GetWorkDir(workDirInfo, originalPath, namePart);
+ const FString workDir = GetWorkDir(workDirInfo, originalPath, namePart);
CreateComplexDir(workDir);
- CTempFile tempFile;
_outStreamSpec = new COutFileStream;
OutStream = _outStreamSpec;
if (!_tempFile.Create(workDir + namePart, &_outStreamSpec->File))
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.h b/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.h
index 75850a92b1c..d32ab9d3d2b 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/WorkDir.h
@@ -1,7 +1,7 @@
// WorkDir.h
-#ifndef __WORK_DIR_H
-#define __WORK_DIR_H
+#ifndef ZIP7_INC_WORK_DIR_H
+#define ZIP7_INC_WORK_DIR_H
#include "../../../Windows/FileDir.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/ZipRegistry.h b/3rdparty/lzma/CPP/7zip/UI/Common/ZipRegistry.h
index b7075e67780..6bc6977b611 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Common/ZipRegistry.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Common/ZipRegistry.h
@@ -1,7 +1,7 @@
// ZipRegistry.h
-#ifndef __ZIP_REGISTRY_H
-#define __ZIP_REGISTRY_H
+#ifndef ZIP7_INC_ZIP_REGISTRY_H
+#define ZIP7_INC_ZIP_REGISTRY_H
#include "../../../Common/MyTypes.h"
#include "../../../Common/MyString.h"
@@ -81,6 +81,7 @@ namespace NCompression
{
UInt32 Level;
UInt32 Dictionary;
+ // UInt32 DictionaryChain;
UInt32 Order;
UInt32 BlockLogSize;
UInt32 NumThreads;
@@ -116,6 +117,7 @@ namespace NCompression
void ResetForLevelChange()
{
BlockLogSize = NumThreads = Level = Dictionary = Order = (UInt32)(Int32)-1;
+ // DictionaryChain = (UInt32)(Int32)-1;
Method.Empty();
// Options.Empty();
// EncryptionMethod.Empty();
@@ -133,10 +135,6 @@ namespace NCompression
UInt32 Level;
bool ShowPassword;
bool EncryptHeaders;
- UString ArcType;
- UStringVector ArcPaths;
-
- CObjectVector<CFormatOptions> Formats;
CBoolPair NtSecurity;
CBoolPair AltStreams;
@@ -145,6 +143,11 @@ namespace NCompression
CBoolPair PreserveATime;
+ UString ArcType;
+ UStringVector ArcPaths;
+
+ CObjectVector<CFormatOptions> Formats;
+
void Save() const;
void Load();
};
@@ -164,8 +167,8 @@ namespace NWorkDir
struct CInfo
{
NMode::EEnum Mode;
- FString Path;
bool ForRemovableOnly;
+ FString Path;
void SetForRemovableOnlyDefault() { ForRemovableOnly = true; }
void SetDefault()
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.cpp
index a7c9e6762c8..113f584a2ef 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.cpp
@@ -7,13 +7,13 @@
#include "BenchCon.h"
#include "ConsoleClose.h"
-struct CPrintBenchCallback: public IBenchPrintCallback
+struct CPrintBenchCallback Z7_final: public IBenchPrintCallback
{
FILE *_file;
- void Print(const char *s);
- void NewLine();
- HRESULT CheckBreak();
+ void Print(const char *s) Z7_override;
+ void NewLine() Z7_override;
+ HRESULT CheckBreak() Z7_override;
};
void CPrintBenchCallback::Print(const char *s)
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.h b/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.h
index c9da1de399c..844cc2a799c 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/BenchCon.h
@@ -1,7 +1,7 @@
// BenchCon.h
-#ifndef __BENCH_CON_H
-#define __BENCH_CON_H
+#ifndef ZIP7_INC_BENCH_CON_H
+#define ZIP7_INC_BENCH_CON_H
#include <stdio.h>
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/Console.mak b/3rdparty/lzma/CPP/7zip/UI/Console/Console.mak
index bd4c1da4f3f..1a47bfa7ccb 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/Console.mak
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/Console.mak
@@ -1,7 +1,7 @@
MY_CONSOLE = 1
!IFNDEF UNDER_CE
-CFLAGS = $(CFLAGS) -DWIN_LONG_PATH -D_7ZIP_LARGE_PAGES -DSUPPORT_DEVICE_FILE
+CFLAGS = $(CFLAGS) -DZ7_LONG_PATH -DZ7_LARGE_PAGES -DZ7_DEVICE_FILE
!ENDIF
CONSOLE_OBJS = \
@@ -41,3 +41,5 @@ UI_COMMON_OBJS = \
C_OBJS = $(C_OBJS) \
$O\DllSecur.obj \
+
+# we need empty line after last line above
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/Console.manifest b/3rdparty/lzma/CPP/7zip/UI/Console/Console.manifest
index 58b68ced854..c932b28cec5 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/Console.manifest
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/Console.manifest
@@ -10,4 +10,7 @@
<!-- Win 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Win 10 --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application></compatibility>
+<application xmlns="urn:schemas-microsoft-com:asm.v3">
+<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
+<ws2:longPathAware>true</ws2:longPathAware></windowsSettings></application>
</assembly> \ No newline at end of file
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/ConsoleClose.h b/3rdparty/lzma/CPP/7zip/UI/Console/ConsoleClose.h
index 9c9e035c6f3..25c5d0ca668 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/ConsoleClose.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/ConsoleClose.h
@@ -1,7 +1,7 @@
// ConsoleClose.h
-#ifndef __CONSOLE_CLOSE_H
-#define __CONSOLE_CLOSE_H
+#ifndef ZIP7_INC_CONSOLE_CLOSE_H
+#define ZIP7_INC_CONSOLE_CLOSE_H
namespace NConsoleClose {
@@ -21,7 +21,7 @@ inline bool TestBreakSignal()
return (g_BreakCounter != 0);
}
-class CCtrlHandlerSetter
+class CCtrlHandlerSetter Z7_final
{
#ifndef _WIN32
void (*memo_sig_int)(int);
@@ -29,7 +29,7 @@ class CCtrlHandlerSetter
#endif
public:
CCtrlHandlerSetter();
- virtual ~CCtrlHandlerSetter();
+ ~CCtrlHandlerSetter();
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp
index 7f791b00bfa..dd7a2145ae8 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp
@@ -11,7 +11,7 @@
#include "../../../Windows/ErrorMsg.h"
#include "../../../Windows/PropVariantConv.h"
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
#include "../../../Windows/Synchronization.h"
#endif
@@ -183,7 +183,7 @@ void CExtractScanConsole::PrintStat(const CDirItemsStat &st)
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static NSynchronization::CCriticalSection g_CriticalSection;
#define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection);
#else
@@ -235,7 +235,7 @@ static const char * const k_ErrorFlagsMessages[] =
, "CRC Error"
};
-STDMETHODIMP CExtractCallbackConsole::SetTotal(UInt64 size)
+Z7_COM7F_IMF(CExtractCallbackConsole::SetTotal(UInt64 size))
{
MT_LOCK
@@ -247,7 +247,7 @@ STDMETHODIMP CExtractCallbackConsole::SetTotal(UInt64 size)
return CheckBreak2();
}
-STDMETHODIMP CExtractCallbackConsole::SetCompleted(const UInt64 *completeValue)
+Z7_COM7F_IMF(CExtractCallbackConsole::SetCompleted(const UInt64 *completeValue))
{
MT_LOCK
@@ -281,14 +281,14 @@ static void PrintFileInfo(CStdOutStream *_so, const wchar_t *path, const FILETIM
}
}
-STDMETHODIMP CExtractCallbackConsole::AskOverwrite(
+Z7_COM7F_IMF(CExtractCallbackConsole::AskOverwrite(
const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize,
const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize,
- Int32 *answer)
+ Int32 *answer))
{
MT_LOCK
- RINOK(CheckBreak2());
+ RINOK(CheckBreak2())
ClosePercentsAndFlush();
@@ -302,7 +302,7 @@ STDMETHODIMP CExtractCallbackConsole::AskOverwrite(
NUserAnswerMode::EEnum overwriteAnswer = ScanUserYesNoAllQuit(_so);
- switch (overwriteAnswer)
+ switch ((int)overwriteAnswer)
{
case NUserAnswerMode::kQuit: return E_ABORT;
case NUserAnswerMode::kNo: *answer = NOverwriteAnswer::kNo; break;
@@ -325,7 +325,7 @@ STDMETHODIMP CExtractCallbackConsole::AskOverwrite(
return CheckBreak2();
}
-STDMETHODIMP CExtractCallbackConsole::PrepareOperation(const wchar_t *name, Int32 isFolder, Int32 askExtractMode, const UInt64 *position)
+Z7_COM7F_IMF(CExtractCallbackConsole::PrepareOperation(const wchar_t *name, Int32 isFolder, Int32 askExtractMode, const UInt64 *position))
{
MT_LOCK
@@ -341,7 +341,7 @@ STDMETHODIMP CExtractCallbackConsole::PrepareOperation(const wchar_t *name, Int3
case NArchive::NExtract::NAskMode::kSkip: s = kSkipString; requiredLevel = 2; break;
case NArchive::NExtract::NAskMode::kReadExternal: s = kReadString; requiredLevel = 0; break;
default: s = "???"; requiredLevel = 2;
- };
+ }
bool show2 = (LogLevel >= requiredLevel && _so);
@@ -394,11 +394,11 @@ STDMETHODIMP CExtractCallbackConsole::PrepareOperation(const wchar_t *name, Int3
return CheckBreak2();
}
-STDMETHODIMP CExtractCallbackConsole::MessageError(const wchar_t *message)
+Z7_COM7F_IMF(CExtractCallbackConsole::MessageError(const wchar_t *message))
{
MT_LOCK
- RINOK(CheckBreak2());
+ RINOK(CheckBreak2())
NumFileErrors_in_Current++;
NumFileErrors++;
@@ -460,7 +460,7 @@ void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, AString &dest)
}
}
-STDMETHODIMP CExtractCallbackConsole::SetOperationResult(Int32 opRes, Int32 encrypted)
+Z7_COM7F_IMF(CExtractCallbackConsole::SetOperationResult(Int32 opRes, Int32 encrypted))
{
MT_LOCK
@@ -499,7 +499,7 @@ STDMETHODIMP CExtractCallbackConsole::SetOperationResult(Int32 opRes, Int32 encr
return CheckBreak2();
}
-STDMETHODIMP CExtractCallbackConsole::ReportExtractResult(Int32 opRes, Int32 encrypted, const wchar_t *name)
+Z7_COM7F_IMF(CExtractCallbackConsole::ReportExtractResult(Int32 opRes, Int32 encrypted, const wchar_t *name))
{
if (opRes != NArchive::NExtract::NOperationResult::kOK)
{
@@ -512,7 +512,7 @@ STDMETHODIMP CExtractCallbackConsole::ReportExtractResult(Int32 opRes, Int32 enc
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
HRESULT CExtractCallbackConsole::SetPassword(const UString &password)
{
@@ -521,7 +521,7 @@ HRESULT CExtractCallbackConsole::SetPassword(const UString &password)
return S_OK;
}
-STDMETHODIMP CExtractCallbackConsole::CryptoGetTextPassword(BSTR *password)
+Z7_COM7F_IMF(CExtractCallbackConsole::CryptoGetTextPassword(BSTR *password))
{
COM_TRY_BEGIN
MT_LOCK
@@ -533,7 +533,7 @@ STDMETHODIMP CExtractCallbackConsole::CryptoGetTextPassword(BSTR *password)
HRESULT CExtractCallbackConsole::BeforeOpen(const wchar_t *name, bool testMode)
{
- RINOK(CheckBreak2());
+ RINOK(CheckBreak2())
NumTryArcs++;
ThereIsError_in_Current = false;
@@ -560,7 +560,7 @@ static AString GetOpenArcErrorMessage(UInt32 errorFlags)
{
AString s;
- for (unsigned i = 0; i < ARRAY_SIZE(k_ErrorFlagsMessages); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(k_ErrorFlagsMessages); i++)
{
UInt32 f = (1 << i);
if ((errorFlags & f) == 0)
@@ -739,7 +739,7 @@ HRESULT CExtractCallbackConsole::OpenResult(
{
if (_so)
{
- RINOK(Print_OpenArchive_Props(*_so, codecs, arcLink));
+ RINOK(Print_OpenArchive_Props(*_so, codecs, arcLink))
*_so << endl;
}
}
@@ -753,8 +753,8 @@ HRESULT CExtractCallbackConsole::OpenResult(
*_se << kError;
_se->NormalizePrint_wstr(name);
*_se << endl;
- HRESULT res = Print_OpenArchive_Error(*_se, codecs, arcLink);
- RINOK(res);
+ const HRESULT res = Print_OpenArchive_Error(*_se, codecs, arcLink);
+ RINOK(res)
if (result == S_FALSE)
{
}
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h b/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h
index 7964813d60f..478b293e6ac 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h
@@ -1,7 +1,7 @@
// ExtractCallbackConsole.h
-#ifndef __EXTRACT_CALLBACK_CONSOLE_H
-#define __EXTRACT_CALLBACK_CONSOLE_H
+#ifndef ZIP7_INC_EXTRACT_CALLBACK_CONSOLE_H
+#define ZIP7_INC_EXTRACT_CALLBACK_CONSOLE_H
#include "../../../Common/StdOutStream.h"
@@ -34,8 +34,10 @@ struct CErrorPathCodes2
};
*/
-class CExtractScanConsole: public IDirItemsCallback
+class CExtractScanConsole Z7_final: public IDirItemsCallback
{
+ Z7_IFACE_IMP(IDirItemsCallback)
+
CStdOutStream *_so;
CStdOutStream *_se;
CPercentPrinter _percent;
@@ -54,8 +56,6 @@ class CExtractScanConsole: public IDirItemsCallback
public:
- virtual ~CExtractScanConsole() {}
-
void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
{
_so = outStream;
@@ -67,8 +67,6 @@ public:
void StartScanning();
- INTERFACE_IDirItemsCallback(;)
-
void CloseScanning()
{
if (NeedPercents())
@@ -81,16 +79,36 @@ public:
-class CExtractCallbackConsole:
+class CExtractCallbackConsole Z7_final:
+ public IFolderArchiveExtractCallback,
public IExtractCallbackUI,
// public IArchiveExtractCallbackMessage,
public IFolderArchiveExtractCallback2,
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
public ICryptoGetTextPassword,
- #endif
+ #endif
public COpenCallbackConsole,
public CMyUnknownImp
{
+ Z7_COM_QI_BEGIN2(IFolderArchiveExtractCallback)
+ // Z7_COM_QI_ENTRY(IArchiveExtractCallbackMessage)
+ Z7_COM_QI_ENTRY(IFolderArchiveExtractCallback2)
+ #ifndef Z7_NO_CRYPTO
+ Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(IProgress)
+ Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback)
+ Z7_IFACE_IMP(IExtractCallbackUI)
+ // Z7_IFACE_COM7_IMP(IArchiveExtractCallbackMessage)
+ Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback2)
+ #ifndef Z7_NO_CRYPTO
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
+ #endif
+
+
AString _tempA;
UString _tempU;
@@ -109,32 +127,7 @@ class CExtractCallbackConsole:
if (_so)
_so->Flush();
}
-
public:
- MY_QUERYINTERFACE_BEGIN2(IFolderArchiveExtractCallback)
- // MY_QUERYINTERFACE_ENTRY(IArchiveExtractCallbackMessage)
- MY_QUERYINTERFACE_ENTRY(IFolderArchiveExtractCallback2)
- #ifndef _NO_CRYPTO
- MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- STDMETHOD(SetTotal)(UInt64 total);
- STDMETHOD(SetCompleted)(const UInt64 *completeValue);
-
- INTERFACE_IFolderArchiveExtractCallback(;)
-
- INTERFACE_IExtractCallbackUI(;)
- // INTERFACE_IArchiveExtractCallbackMessage(;)
- INTERFACE_IFolderArchiveExtractCallback2(;)
-
- #ifndef _NO_CRYPTO
-
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
-
- #endif
-
UInt64 NumTryArcs;
bool ThereIsError_in_Current;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.cpp
index 5a34976502b..c0e69e26231 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.cpp
@@ -99,7 +99,7 @@ HRESULT CHashCallbackConsole::SetCompleted(const UInt64 *completeValue)
static void AddMinuses(AString &s, unsigned num)
{
for (unsigned i = 0; i < num; i++)
- s += '-';
+ s.Add_Minus();
}
static void AddSpaces_if_Positive(AString &s, int num)
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.h b/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.h
index f926d4d33e0..ebccb6ff353 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/HashCon.h
@@ -1,14 +1,19 @@
// HashCon.h
-#ifndef __HASH_CON_H
-#define __HASH_CON_H
+#ifndef ZIP7_INC_HASH_CON_H
+#define ZIP7_INC_HASH_CON_H
#include "../Common/HashCalc.h"
#include "UpdateCallbackConsole.h"
-class CHashCallbackConsole: public IHashCallbackUI, public CCallbackConsoleBase
+class CHashCallbackConsole Z7_final:
+ public IHashCallbackUI,
+ public CCallbackConsoleBase
{
+ Z7_IFACE_IMP(IDirItemsCallback)
+ Z7_IFACE_IMP(IHashCallbackUI)
+
UString _fileName;
AString _s;
@@ -33,9 +38,7 @@ class CHashCallbackConsole: public IHashCallbackUI, public CCallbackConsoleBase
public:
bool PrintNameInPercents;
-
bool PrintHeaders;
-
// bool PrintSize;
// bool PrintNewLine; // set it too (false), if you need only hash for single file without LF char.
AString PrintFields;
@@ -48,10 +51,6 @@ public:
// , PrintSize(true),
// , PrintNewLine(true)
{}
-
- virtual ~CHashCallbackConsole() {}
-
- INTERFACE_IHashCallbackUI(;)
};
void PrintHashStat(CStdOutStream &so, const CHashBundle &hb);
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/List.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/List.cpp
index f764f07e428..46819f18bb0 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/List.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/List.cpp
@@ -131,6 +131,8 @@ static const char * const kPropIdToName[] =
, "Group ID"
, "Device Major"
, "Device Minor"
+ , "Dev Major"
+ , "Dev Minor"
};
static const char kEmptyAttribChar = '.';
@@ -405,13 +407,13 @@ void CFieldPrinter::Init(const CFieldInfoInit *standardFieldTable, unsigned numI
for (k = 0; k < fii.PrefixSpacesWidth; k++)
LinesString.Add_Space();
for (k = 0; k < fii.Width; k++)
- LinesString += '-';
+ LinesString.Add_Minus();
}
}
static void GetPropName(PROPID propID, const wchar_t *name, AString &nameA, UString &nameU)
{
- if (propID < ARRAY_SIZE(kPropIdToName))
+ if (propID < Z7_ARRAY_SIZE(kPropIdToName))
{
nameA = kPropIdToName[propID];
return;
@@ -455,13 +457,13 @@ void CFieldPrinter::AddProp(const wchar_t *name, PROPID propID, bool isRawProp)
HRESULT CFieldPrinter::AddMainProps(IInArchive *archive)
{
UInt32 numProps;
- RINOK(archive->GetNumberOfProperties(&numProps));
+ RINOK(archive->GetNumberOfProperties(&numProps))
for (UInt32 i = 0; i < numProps; i++)
{
CMyComBSTR name;
PROPID propID;
VARTYPE vt;
- RINOK(archive->GetPropertyInfo(i, &name, &propID, &vt));
+ RINOK(archive->GetPropertyInfo(i, &name, &propID, &vt))
AddProp(name, propID, false);
}
return S_OK;
@@ -470,12 +472,12 @@ HRESULT CFieldPrinter::AddMainProps(IInArchive *archive)
HRESULT CFieldPrinter::AddRawProps(IArchiveGetRawProps *getRawProps)
{
UInt32 numProps;
- RINOK(getRawProps->GetNumRawProps(&numProps));
+ RINOK(getRawProps->GetNumRawProps(&numProps))
for (UInt32 i = 0; i < numProps; i++)
{
CMyComBSTR name;
PROPID propID;
- RINOK(getRawProps->GetRawPropInfo(i, &name, &propID));
+ RINOK(getRawProps->GetRawPropInfo(i, &name, &propID))
AddProp(name, propID, true);
}
return S_OK;
@@ -516,7 +518,7 @@ static void PrintTime(char *dest, const CListFileTimeDef &t, bool showNS)
ConvertUtcFileTimeToString2(t.FT, t.Ns100, dest, prec);
}
-#ifndef _SFX
+#ifndef Z7_SFX
static inline char GetHex(Byte value)
{
@@ -585,12 +587,12 @@ HRESULT CFieldPrinter::PrintItemInfo(UInt32 index, const CListStat &st)
if (f.IsRawProp)
{
- #ifndef _SFX
+ #ifndef Z7_SFX
const void *data;
UInt32 dataSize;
UInt32 propType;
- RINOK(Arc->GetRawProps->GetRawProp(index, f.PropID, &data, &dataSize, &propType));
+ RINOK(Arc->GetRawProps->GetRawProp(index, f.PropID, &data, &dataSize, &propType))
if (dataSize != 0)
{
@@ -600,7 +602,7 @@ HRESULT CFieldPrinter::PrintItemInfo(UInt32 index, const CListStat &st)
{
if (propType != NPropDataType::kRaw)
return E_FAIL;
- #ifndef _SFX
+ #ifndef Z7_SFX
ConvertNtSecureToString((const Byte *)data, dataSize, TempAString);
g_StdOut << TempAString;
needPrint = false;
@@ -654,7 +656,7 @@ HRESULT CFieldPrinter::PrintItemInfo(UInt32 index, const CListStat &st)
break;
}
default:
- RINOK(Arc->Archive->GetProperty(index, f.PropID, &prop));
+ RINOK(Arc->Archive->GetProperty(index, f.PropID, &prop))
}
if (f.PropID == kpidAttrib && (prop.vt == VT_EMPTY || prop.vt == VT_UI4))
{
@@ -786,7 +788,7 @@ static HRESULT GetUInt64Value(IInArchive *archive, UInt32 index, PROPID propID,
value.Val = 0;
value.Def = false;
CPropVariant prop;
- RINOK(archive->GetProperty(index, propID, &prop));
+ RINOK(archive->GetProperty(index, propID, &prop))
value.Def = ConvertPropVariantToUInt64(prop, value.Val);
return S_OK;
}
@@ -798,7 +800,7 @@ static HRESULT GetItemMTime(IInArchive *archive, UInt32 index, CListFileTimeDef
t.Clear();
// t.Def = false;
CPropVariant prop;
- RINOK(archive->GetProperty(index, kpidMTime, &prop));
+ RINOK(archive->GetProperty(index, kpidMTime, &prop))
if (prop.vt == VT_FILETIME)
t.Set_From_Prop(prop);
else if (prop.vt != VT_EMPTY)
@@ -815,7 +817,7 @@ static void PrintPropName_and_Eq(CStdOutStream &so, PROPID propID)
{
const char *s;
char temp[16];
- if (propID < ARRAY_SIZE(kPropIdToName))
+ if (propID < Z7_ARRAY_SIZE(kPropIdToName))
s = kPropIdToName[propID];
else
{
@@ -868,7 +870,7 @@ static void PrintPropVal_MultiLine(CStdOutStream &so, const wchar_t *val)
so << "{";
so << endl;
UString_Replace_CRLF_to_LF(s);
- so.Normalize_UString__LF_Allowed(s);
+ so.Normalize_UString_LF_Allowed(s);
so << s;
so << endl;
so << "}";
@@ -919,7 +921,7 @@ static void PrintPropertyPair2(CStdOutStream &so, PROPID propID, const wchar_t *
static HRESULT PrintArcProp(CStdOutStream &so, IInArchive *archive, PROPID propID, const wchar_t *name)
{
CPropVariant prop;
- RINOK(archive->GetArchiveProperty(propID, &prop));
+ RINOK(archive->GetArchiveProperty(propID, &prop))
PrintPropertyPair2(so, propID, name, prop);
return S_OK;
}
@@ -973,20 +975,20 @@ HRESULT Print_OpenArchive_Props(CStdOutStream &so, const CCodecs *codecs, const
if (offset != 0)
PrintPropNameAndNumber_Signed(so, kpidOffset, offset);
IInArchive *archive = arc.Archive;
- RINOK(PrintArcProp(so, archive, kpidPhySize, NULL));
+ RINOK(PrintArcProp(so, archive, kpidPhySize, NULL))
if (er.TailSize != 0)
PrintPropNameAndNumber(so, kpidTailSize, er.TailSize);
{
UInt32 numProps;
- RINOK(archive->GetNumberOfArchiveProperties(&numProps));
+ RINOK(archive->GetNumberOfArchiveProperties(&numProps))
for (UInt32 j = 0; j < numProps; j++)
{
CMyComBSTR name;
PROPID propID;
VARTYPE vt;
- RINOK(archive->GetArchivePropertyInfo(j, &name, &propID, &vt));
- RINOK(PrintArcProp(so, archive, propID, name));
+ RINOK(archive->GetArchivePropertyInfo(j, &name, &propID, &vt))
+ RINOK(PrintArcProp(so, archive, propID, name))
}
}
@@ -1002,9 +1004,9 @@ HRESULT Print_OpenArchive_Props(CStdOutStream &so, const CCodecs *codecs, const
CMyComBSTR name;
PROPID propID;
VARTYPE vt;
- RINOK(archive->GetPropertyInfo(j, &name, &propID, &vt));
+ RINOK(archive->GetPropertyInfo(j, &name, &propID, &vt))
CPropVariant prop;
- RINOK(archive->GetProperty(mainIndex, propID, &prop));
+ RINOK(archive->GetProperty(mainIndex, propID, &prop))
PrintPropertyPair2(so, propID, name, prop);
}
}
@@ -1016,7 +1018,7 @@ HRESULT Print_OpenArchive_Props(CStdOutStream &so, const CCodecs *codecs, const
HRESULT Print_OpenArchive_Error(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink);
HRESULT Print_OpenArchive_Error(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink)
{
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
if (arcLink.PasswordWasAsked)
so << "Cannot open encrypted archive. Wrong password?";
else
@@ -1051,10 +1053,10 @@ HRESULT ListArchives(
bool processAltStreams, bool showAltStreams,
const NWildcard::CCensorNode &wildcardCensor,
bool enableHeaders, bool techMode,
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool &passwordEnabled, UString &password,
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
const CObjectVector<CProperty> *props,
#endif
UInt64 &numErrors,
@@ -1067,7 +1069,7 @@ HRESULT ListArchives(
CFieldPrinter fp;
if (!techMode)
- fp.Init(kStandardFieldTable, ARRAY_SIZE(kStandardFieldTable));
+ fp.Init(kStandardFieldTable, Z7_ARRAY_SIZE(kStandardFieldTable));
CListStat2 stat2total;
@@ -1128,7 +1130,7 @@ HRESULT ListArchives(
COpenCallbackConsole openCallback;
openCallback.Init(&g_StdOut, g_ErrStream, NULL);
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
openCallback.PasswordIsDefined = passwordEnabled;
openCallback.Password = password;
@@ -1142,7 +1144,7 @@ HRESULT ListArchives(
*/
COpenOptions options;
- #ifndef _SFX
+ #ifndef Z7_SFX
options.props = props;
#endif
options.codecs = codecs;
@@ -1229,7 +1231,7 @@ HRESULT ListArchives(
if (enableHeaders)
{
- RINOK(Print_OpenArchive_Props(g_StdOut, codecs, arcLink));
+ RINOK(Print_OpenArchive_Props(g_StdOut, codecs, arcLink))
g_StdOut << endl;
if (techMode)
@@ -1251,17 +1253,17 @@ HRESULT ListArchives(
if (techMode)
{
fp.Clear();
- RINOK(fp.AddMainProps(archive));
+ RINOK(fp.AddMainProps(archive))
if (arc.GetRawProps)
{
- RINOK(fp.AddRawProps(arc.GetRawProps));
+ RINOK(fp.AddRawProps(arc.GetRawProps))
}
}
CListStat2 stat2;
UInt32 numItems;
- RINOK(archive->GetNumberOfItems(&numItems));
+ RINOK(archive->GetNumberOfItems(&numItems))
CReadArcItem item;
UStringVector pathParts;
@@ -1275,12 +1277,12 @@ HRESULT ListArchives(
if (stdInMode && res == E_INVALIDARG)
break;
- RINOK(res);
+ RINOK(res)
if (arc.Ask_Aux)
{
bool isAux;
- RINOK(Archive_IsItem_Aux(archive, i, isAux));
+ RINOK(Archive_IsItem_Aux(archive, i, isAux))
if (isAux)
continue;
}
@@ -1288,12 +1290,12 @@ HRESULT ListArchives(
bool isAltStream = false;
if (arc.Ask_AltStream)
{
- RINOK(Archive_IsItem_AltStream(archive, i, isAltStream));
+ RINOK(Archive_IsItem_AltStream(archive, i, isAltStream))
if (isAltStream && !processAltStreams)
continue;
}
- RINOK(Archive_IsItem_Dir(archive, i, fp.IsDir));
+ RINOK(Archive_IsItem_Dir(archive, i, fp.IsDir))
if (fp.IsDir ? listOptions.ExcludeDirItems : listOptions.ExcludeFileItems)
continue;
@@ -1302,7 +1304,7 @@ HRESULT ListArchives(
{
if (isAltStream)
{
- RINOK(arc.GetItem(i, item));
+ RINOK(arc.GetItem(i, item))
if (!CensorNode_CheckPath(wildcardCensor, item))
continue;
}
@@ -1319,9 +1321,9 @@ HRESULT ListArchives(
CListStat st;
- RINOK(GetUInt64Value(archive, i, kpidSize, st.Size));
- RINOK(GetUInt64Value(archive, i, kpidPackSize, st.PackSize));
- RINOK(GetItemMTime(archive, i, st.MTime));
+ RINOK(GetUInt64Value(archive, i, kpidSize, st.Size))
+ RINOK(GetUInt64Value(archive, i, kpidPackSize, st.PackSize))
+ RINOK(GetItemMTime(archive, i, st.MTime))
if (fp.IsDir)
stat2.NumDirs++;
@@ -1331,7 +1333,7 @@ HRESULT ListArchives(
if (isAltStream && !showAltStreams)
continue;
- RINOK(fp.PrintItemInfo(i, st));
+ RINOK(fp.PrintItemInfo(i, st))
}
UInt64 numStreams = stat2.GetNumStreams();
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/List.h b/3rdparty/lzma/CPP/7zip/UI/Console/List.h
index 79d2ed482d5..4969c3e23bb 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/List.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/List.h
@@ -1,7 +1,7 @@
// List.h
-#ifndef __LIST_H
-#define __LIST_H
+#ifndef ZIP7_INC_LIST_H
+#define ZIP7_INC_LIST_H
#include "../../../Common/Wildcard.h"
@@ -28,10 +28,10 @@ HRESULT ListArchives(
bool processAltStreams, bool showAltStreams,
const NWildcard::CCensorNode &wildcardCensor,
bool enableHeaders, bool techMode,
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool &passwordEnabled, UString &password,
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
const CObjectVector<CProperty> *props,
#endif
UInt64 &errors,
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/Main.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/Main.cpp
index d01aa4d0523..eb9e2a80042 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/Main.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/Main.cpp
@@ -5,13 +5,39 @@
#include "../../../Common/MyWindows.h"
#ifdef _WIN32
-#include <Psapi.h>
+
+#ifndef Z7_OLD_WIN_SDK
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <psapi.h>
#else
+#include <Psapi.h>
+#endif
+
+#else // Z7_OLD_WIN_SDK
+
+typedef struct _PROCESS_MEMORY_COUNTERS {
+ DWORD cb;
+ DWORD PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+} PROCESS_MEMORY_COUNTERS;
+typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
+
+#endif // Z7_OLD_WIN_SDK
+
+#else // _WIN32
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/times.h>
-#endif
+#endif // _WIN32
#include "../../../../C/CpuArch.h"
@@ -28,13 +54,14 @@
#include "../../../Windows/ErrorMsg.h"
#include "../../../Windows/TimeUtils.h"
+#include "../../../Windows/FileDir.h"
#include "../Common/ArchiveCommandLine.h"
#include "../Common/Bench.h"
#include "../Common/ExitCode.h"
#include "../Common/Extract.h"
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
#include "../Common/LoadCodecs.h"
#endif
@@ -48,7 +75,7 @@
#include "OpenCallbackConsole.h"
#include "UpdateCallbackConsole.h"
-#ifdef PROG_VARIANT_R
+#ifdef Z7_PROG_VARIANT_R
#include "../../../../C/7zVersion.h"
#else
#include "../../MyVersion.h"
@@ -59,7 +86,9 @@ using namespace NFile;
using namespace NCommandLineParser;
#ifdef _WIN32
-HINSTANCE g_hInstance = 0;
+extern
+HINSTANCE g_hInstance;
+HINSTANCE g_hInstance = NULL;
#endif
extern CStdOutStream *g_StdStream;
@@ -71,19 +100,21 @@ extern const CCodecInfo *g_Codecs[];
extern unsigned g_NumHashers;
extern const CHasherInfo *g_Hashers[];
-#ifdef EXTERNAL_CODECS
+#ifdef Z7_EXTERNAL_CODECS
+extern
+const CExternalCodecs *g_ExternalCodecs_Ptr;
const CExternalCodecs *g_ExternalCodecs_Ptr;
#endif
DECLARE_AND_SET_CLIENT_VERSION_VAR
-#if defined(PROG_VARIANT_Z)
+#if defined(Z7_PROG_VARIANT_Z)
#define PROG_POSTFIX "z"
#define PROG_POSTFIX_2 " (z)"
-#elif defined(PROG_VARIANT_R)
+#elif defined(Z7_PROG_VARIANT_R)
#define PROG_POSTFIX "r"
#define PROG_POSTFIX_2 " (r)"
-#elif !defined(EXTERNAL_CODECS)
+#elif !defined(Z7_EXTERNAL_CODECS)
#define PROG_POSTFIX "a"
#define PROG_POSTFIX_2 " (a)"
#else
@@ -130,12 +161,12 @@ static const char * const kHelpString =
" -mmt[N] : set number of CPU threads\n"
" -mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)\n"
" -o{Directory} : set Output directory\n"
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
" -p{Password} : set Password\n"
#endif
" -r[-|0] : Recurse subdirectories for name search\n"
" -sa{a|e|s} : set Archive name mode\n"
- " -scc{UTF-8|WIN|DOS} : set charset for for console input/output\n"
+ " -scc{UTF-8|WIN|DOS} : set charset for console input/output\n"
" -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files\n"
" -scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands\n"
" -sdel : delete files after compression\n"
@@ -151,7 +182,7 @@ static const char * const kHelpString =
" -so : write data to stdout\n"
" -spd : disable wildcard matching for file names\n"
" -spe : eliminate duplication of root folder for extract command\n"
- " -spf : use fully qualified file paths\n"
+ " -spf[2] : use fully qualified file paths\n"
" -ssc[-] : set sensitive case mode\n"
" -sse : stop archive creating, if it can't open some input file\n"
" -ssp : do not change Last Access Time of source files while archiving\n"
@@ -177,7 +208,7 @@ static const char * const kUnsupportedArcTypeMessage = "Unsupported archive type
#define kDefaultSfxModule "7zCon.sfx"
-MY_ATTR_NORETURN
+Z7_ATTR_NORETURN
static void ShowMessageAndThrowException(LPCSTR message, NExitCode::EEnum code)
{
if (g_ErrStream)
@@ -247,9 +278,17 @@ static void ShowProgInfo(CStdOutStream *so)
{
const UInt32 numCpus = NWindows::NSystem::GetNumberOfProcessors();
*so << " Threads:" << numCpus;
+ const UInt64 openMAX= NWindows::NSystem::Get_File_OPEN_MAX();
+ *so << " OPEN_MAX:" << openMAX;
+ {
+ FString temp;
+ NDir::MyGetTempPath(temp);
+ if (!temp.IsEqualTo(STRING_PATH_SEPARATOR "tmp" STRING_PATH_SEPARATOR))
+ *so << " temp_path:" << temp;
+ }
}
- #ifdef _7ZIP_ASM
+ #ifdef Z7_7ZIP_ASM
*so << ", ASM";
#endif
@@ -313,6 +352,17 @@ static void PrintUInt32(CStdOutStream &so, UInt32 val, unsigned size)
PrintStringRight(so, s, size);
}
+#ifdef Z7_EXTERNAL_CODECS
+static void PrintNumber(CStdOutStream &so, UInt32 val, unsigned numDigits)
+{
+ AString s;
+ s.Add_UInt32(val);
+ while (s.Len() < numDigits)
+ s.InsertAtFront('0');
+ so << s;
+}
+#endif
+
static void PrintLibIndex(CStdOutStream &so, int libIndex)
{
if (libIndex >= 0)
@@ -480,8 +530,12 @@ static void PrintMemUsage(const char *s, UInt64 val)
*g_StdStream << " " << s << " Memory =";
PrintNum(SHIFT_SIZE_VALUE(val, 20), 7);
*g_StdStream << " MB";
-
- #ifdef _7ZIP_LARGE_PAGES
+ /*
+ *g_StdStream << " =";
+ PrintNum(SHIFT_SIZE_VALUE(val, 10), 9);
+ *g_StdStream << " KB";
+ */
+ #ifdef Z7_LARGE_PAGES
AString lp;
Add_LargePages_String(lp);
if (!lp.IsEmpty())
@@ -530,22 +584,27 @@ static void PrintStat()
The program with K32GetProcessMemoryInfo will not work on systems before Win7
// memDefined = GetProcessMemoryInfo(GetCurrentProcess(), &m, sizeof(m));
*/
-
- HMODULE kern = ::GetModuleHandleW(L"kernel32.dll");
- Func_GetProcessMemoryInfo my_GetProcessMemoryInfo = (Func_GetProcessMemoryInfo)
- (void *)::GetProcAddress(kern, "K32GetProcessMemoryInfo");
+ const HMODULE kern = ::GetModuleHandleW(L"kernel32.dll");
+ Func_GetProcessMemoryInfo
+ my_GetProcessMemoryInfo = Z7_GET_PROC_ADDRESS(
+ Func_GetProcessMemoryInfo, kern,
+ "K32GetProcessMemoryInfo");
if (!my_GetProcessMemoryInfo)
{
- HMODULE lib = LoadLibraryW(L"Psapi.dll");
+ const HMODULE lib = LoadLibraryW(L"Psapi.dll");
if (lib)
- my_GetProcessMemoryInfo = (Func_GetProcessMemoryInfo)(void *)::GetProcAddress(lib, "GetProcessMemoryInfo");
+ my_GetProcessMemoryInfo = Z7_GET_PROC_ADDRESS(
+ Func_GetProcessMemoryInfo, lib,
+ "GetProcessMemoryInfo");
}
if (my_GetProcessMemoryInfo)
memDefined = my_GetProcessMemoryInfo(GetCurrentProcess(), &m, sizeof(m));
// FreeLibrary(lib);
-
- Func_QueryProcessCycleTime my_QueryProcessCycleTime = (Func_QueryProcessCycleTime)
- (void *)::GetProcAddress(kern, "QueryProcessCycleTime");
+ const
+ Func_QueryProcessCycleTime
+ my_QueryProcessCycleTime = Z7_GET_PROC_ADDRESS(
+ Func_QueryProcessCycleTime, kern,
+ "QueryProcessCycleTime");
if (my_QueryProcessCycleTime)
cycleDefined = my_QueryProcessCycleTime(GetCurrentProcess(), &cycleTime);
}
@@ -595,6 +654,7 @@ static void PrintStat()
#ifndef UNDER_CE
if (memDefined) PrintMemUsage("Physical", m.PeakWorkingSetSize);
#endif
+ *g_StdStream << endl;
}
@@ -603,7 +663,7 @@ static void PrintStat()
static UInt64 Get_timeofday_us()
{
struct timeval now;
- if (gettimeofday(&now, 0 ) == 0)
+ if (gettimeofday(&now, NULL) == 0)
return (UInt64)now.tv_sec * 1000000 + (UInt64)now.tv_usec;
return 0;
}
@@ -666,7 +726,7 @@ static void PrintTime(const char *s, UInt64 val, UInt64 total_us, UInt64 kFreq)
*g_StdStream << '%';
}
-static void PrintStat(UInt64 startTime)
+static void PrintStat(const UInt64 startTime)
{
tms t;
/* clock_t res = */ times(&t);
@@ -722,9 +782,23 @@ int Main2(
#endif
#ifndef _WIN32
- UInt64 startTime = Get_timeofday_us();
+ const UInt64 startTime = Get_timeofday_us();
#endif
+ /*
+ {
+ g_StdOut << "DWORD:" << (unsigned)sizeof(DWORD);
+ g_StdOut << " LONG:" << (unsigned)sizeof(LONG);
+ g_StdOut << " long:" << (unsigned)sizeof(long);
+ #ifdef _WIN64
+ // g_StdOut << " long long:" << (unsigned)sizeof(long long);
+ #endif
+ g_StdOut << " int:" << (unsigned)sizeof(int);
+ g_StdOut << " void*:" << (unsigned)sizeof(void *);
+ g_StdOut << endl;
+ }
+ */
+
UStringVector commandStrings;
#ifdef _WIN32
@@ -778,7 +852,7 @@ int Main2(
CStdOutStream *percentsStream = NULL;
if (options.Number_for_Percents != k_OutStream_disabled)
- percentsStream = (options.Number_for_Percents == k_OutStream_stderr) ? &g_StdErr : &g_StdOut;;
+ percentsStream = (options.Number_for_Percents == k_OutStream_stderr) ? &g_StdErr : &g_StdOut;
if (options.HelpMode)
{
@@ -866,9 +940,9 @@ int Main2(
ThrowException_if_Error(codecs->Load());
Codecs_AddHashArcHandler(codecs);
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
{
- g_ExternalCodecs_Ptr = &__externalCodecs;
+ g_ExternalCodecs_Ptr = &_externalCodecs;
UString s;
codecs->GetCodecsErrorMessage(s);
if (!s.IsEmpty())
@@ -886,7 +960,7 @@ int Main2(
|| options.Command.CommandType == NCommandType::kList
|| options.Command.IsFromUpdateGroup()))
{
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
if (!codecs->MainDll_ErrorPath.IsEmpty())
{
UString s ("Can't load module: ");
@@ -918,12 +992,12 @@ int Main2(
// excludedFormats.Sort();
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
if (isExtractGroupCommand
|| options.Command.IsFromUpdateGroup()
|| options.Command.CommandType == NCommandType::kHash
|| options.Command.CommandType == NCommandType::kBenchmark)
- ThrowException_if_Error(__externalCodecs.Load());
+ ThrowException_if_Error(_externalCodecs.Load());
#endif
int retCode = NExitCode::kSuccess;
@@ -943,12 +1017,16 @@ int Main2(
CStdOutStream &so = (g_StdStream ? *g_StdStream : g_StdOut);
unsigned i;
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
so << endl << "Libs:" << endl;
for (i = 0; i < codecs->Libs.Size(); i++)
{
PrintLibIndex(so, (int)i);
- so << ' ' << codecs->Libs[i].Path << endl;
+ const CCodecLib &lib = codecs->Libs[i];
+ // if (lib.Version != 0)
+ so << ": " << (lib.Version >> 16) << ".";
+ PrintNumber(so, lib.Version & 0xffff, 2);
+ so << " : " << lib.Path << endl;
}
#endif
@@ -963,7 +1041,7 @@ int Main2(
{
const CArcInfoEx &arc = codecs->Formats[i];
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
PrintLibIndex(so, arc.LibIndex);
#else
so << " ";
@@ -1063,10 +1141,10 @@ int Main2(
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
UInt32 numMethods;
- if (codecs->GetNumMethods(&numMethods) == S_OK)
+ if (_externalCodecs.GetCodecs->GetNumMethods(&numMethods) == S_OK)
for (UInt32 j = 0; j < numMethods; j++)
{
PrintLibIndex(so, codecs->GetCodec_LibIndex(j));
@@ -1110,9 +1188,9 @@ int Main2(
so << ' ' << codec.Name << endl;
}
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
- numMethods = codecs->GetNumHashers();
+ numMethods = _externalCodecs.GetHashers->GetNumHashers();
for (UInt32 j = 0; j < numMethods; j++)
{
PrintLibIndex(so, codecs->GetHasherLibIndex(j));
@@ -1198,7 +1276,7 @@ int Main2(
CExtractCallbackConsole *ecs = new CExtractCallbackConsole;
CMyComPtr<IFolderArchiveExtractCallback> extractCallback = ecs;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
ecs->PasswordIsDefined = options.PasswordEnabled;
ecs->Password = options.Password;
#endif
@@ -1216,7 +1294,7 @@ int Main2(
COpenCallbackConsole openCallback;
openCallback.Init(g_StdStream, g_ErrStream);
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
openCallback.PasswordIsDefined = options.PasswordEnabled;
openCallback.Password = options.Password;
#endif
@@ -1230,7 +1308,7 @@ int Main2(
eo.YesToAll = options.YesToAll;
eo.TestMode = options.Command.IsTestCommand();
- #ifndef _SFX
+ #ifndef Z7_SFX
eo.Properties = options.Properties;
#endif
@@ -1254,7 +1332,9 @@ int Main2(
ArchivePathsSorted,
ArchivePathsFullSorted,
options.Censor.Pairs.Front().Head,
- eo, ecs, ecs, hashCalc, errorMessage, stat);
+ eo,
+ ecs, ecs, ecs,
+ hashCalc, errorMessage, stat);
ecs->ClosePercents();
@@ -1379,7 +1459,7 @@ int Main2(
options.Censor.Pairs.Front().Head,
options.EnableHeaders,
options.TechMode,
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
options.PasswordEnabled,
options.Password,
#endif
@@ -1408,7 +1488,7 @@ int Main2(
COpenCallbackConsole openCallback;
openCallback.Init(g_StdStream, g_ErrStream, percentsStream);
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool passwordIsDefined =
(options.PasswordEnabled && !options.Password.IsEmpty());
openCallback.PasswordIsDefined = passwordIsDefined;
@@ -1422,7 +1502,7 @@ int Main2(
if (percentsStream)
callback.SetWindowWidth(consoleWidth);
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
callback.PasswordIsDefined = passwordIsDefined;
callback.AskPassword = (options.PasswordEnabled && options.Password.IsEmpty());
callback.Password = options.Password;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/MainAr.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/MainAr.cpp
index 0e45312c2e6..80f84f5e657 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/MainAr.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/MainAr.cpp
@@ -5,6 +5,7 @@
#ifdef _WIN32
#include "../../../../C/DllSecur.h"
#endif
+#include "../../../../C/CpuArch.h"
#include "../../../Common/MyException.h"
#include "../../../Common/StdOutStream.h"
@@ -56,7 +57,44 @@ static void PrintError(const char *message)
#define NT_CHECK_FAIL_ACTION *g_StdStream << "Unsupported Windows version"; return NExitCode::kFatalError;
#endif
-int MY_CDECL main
+static inline bool CheckIsa()
+{
+ // __try
+ {
+ #if defined(__AVX2__)
+ if (!CPU_IsSupported_AVX2())
+ return false;
+ #elif defined(__AVX__)
+ if (!CPU_IsSupported_AVX())
+ return false;
+ #elif defined(__SSE2__) && !defined(MY_CPU_AMD64) || defined(_M_IX86_FP) && (_M_IX86_FP >= 2)
+ if (!CPU_IsSupported_SSE2())
+ return false;
+ #elif defined(__SSE__) && !defined(MY_CPU_AMD64) || defined(_M_IX86_FP) && (_M_IX86_FP >= 1)
+ if (!CPU_IsSupported_SSE() ||
+ !CPU_IsSupported_CMOV())
+ return false;
+ #endif
+ /*
+ __asm
+ {
+ _emit 0fH
+ _emit 038H
+ _emit 0cbH
+ _emit (0c0H + 0 * 8 + 0)
+ }
+ */
+ return true;
+ }
+ /*
+ __except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ return false;
+ }
+ */
+}
+
+int Z7_CDECL main
(
#ifndef _WIN32
int numArgs, char *args[]
@@ -66,6 +104,14 @@ int MY_CDECL main
g_ErrStream = &g_StdErr;
g_StdStream = &g_StdOut;
+ // #if (defined(_MSC_VER) && defined(_M_IX86))
+ if (!CheckIsa())
+ {
+ PrintError("ERROR: processor doesn't support required ISA extension");
+ return NExitCode::kFatalError;
+ }
+ // #endif
+
NT_CHECK
NConsoleClose::CCtrlHandlerSetter ctrlHandlerSetter;
@@ -119,7 +165,7 @@ int MY_CDECL main
}
return (NExitCode::kFatalError);
}
- catch(NExitCode::EEnum &exitCode)
+ catch(NExitCode::EEnum exitCode)
{
FlushStreams();
if (g_ErrStream)
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp
index a074fa1fb64..1e7adf5d427 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp
@@ -77,17 +77,17 @@ HRESULT COpenCallbackConsole::Open_Finished()
}
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
HRESULT COpenCallbackConsole::Open_CryptoGetTextPassword(BSTR *password)
{
*password = NULL;
- RINOK(CheckBreak2());
+ RINOK(CheckBreak2())
if (!PasswordIsDefined)
{
ClosePercents();
- RINOK(GetPassword_HRESULT(_so, Password));
+ RINOK(GetPassword_HRESULT(_so, Password))
PasswordIsDefined = true;
}
return StringToBstr(Password, password);
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h b/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h
index 075d37413d6..c5b4b45fc0e 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h
@@ -1,7 +1,7 @@
// OpenCallbackConsole.h
-#ifndef __OPEN_CALLBACK_CONSOLE_H
-#define __OPEN_CALLBACK_CONSOLE_H
+#ifndef ZIP7_INC_OPEN_CALLBACK_CONSOLE_H
+#define ZIP7_INC_OPEN_CALLBACK_CONSOLE_H
#include "../../../Common/StdOutStream.h"
@@ -17,10 +17,10 @@ protected:
CStdOutStream *_so;
CStdOutStream *_se;
- bool _totalFilesDefined;
- // bool _totalBytesDefined;
// UInt64 _totalFiles;
UInt64 _totalBytes;
+ bool _totalFilesDefined;
+ // bool _totalBytesDefined;
bool NeedPercents() const { return _percent._so != NULL; }
@@ -35,12 +35,12 @@ public:
}
COpenCallbackConsole():
+ _totalBytes(0),
_totalFilesDefined(false),
// _totalBytesDefined(false),
- _totalBytes(0),
MultiArcMode(false)
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
, PasswordIsDefined(false)
// , PasswordWasAsked(false)
#endif
@@ -56,9 +56,9 @@ public:
_percent._so = percentStream;
}
- INTERFACE_IOpenCallbackUI(;)
+ Z7_IFACE_IMP(IOpenCallbackUI)
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool PasswordIsDefined;
// bool PasswordWasAsked;
UString Password;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp
index 49d039329ba..9d392abe559 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp
@@ -79,7 +79,7 @@ void CPercentPrinter::GetPercents()
while (size < kPercentsSize)
{
- _s += ' ';
+ _s.Add_Space();
size++;
}
@@ -125,8 +125,8 @@ void CPercentPrinter::Print()
char s[32];
ConvertUInt64ToString(Files, s);
// unsigned size = (unsigned)strlen(s);
- // for (; size < 3; size++) _s += ' ';
- _s += ' ';
+ // for (; size < 3; size++) _s.Add_Space();
+ _s.Add_Space();
_s += s;
// _s += "f";
}
@@ -134,13 +134,13 @@ void CPercentPrinter::Print()
if (!Command.IsEmpty())
{
- _s += ' ';
+ _s.Add_Space();
_s += Command;
}
if (!FileName.IsEmpty() && _s.Len() < MaxLen)
{
- _s += ' ';
+ _s.Add_Space();
_tempU = FileName;
_so->Normalize_UString(_tempU);
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.h b/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.h
index 95290b37e9c..4debb3b60ee 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/PercentPrinter.h
@@ -1,7 +1,7 @@
// PercentPrinter.h
-#ifndef __PERCENT_PRINTER_H
-#define __PERCENT_PRINTER_H
+#ifndef ZIP7_INC_PERCENT_PRINTER_H
+#define ZIP7_INC_PERCENT_PRINTER_H
#include "../../../Common/StdOutStream.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/StdAfx.h b/3rdparty/lzma/CPP/7zip/UI/Console/StdAfx.h
index 2854ff3e935..035267ccd02 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/StdAfx.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp
index 1a6b820c431..85496f5b16c 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp
@@ -7,7 +7,7 @@
#include "../../../Windows/ErrorMsg.h"
#include "../../../Windows/FileName.h"
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
#include "../../../Windows/Synchronization.h"
#endif
@@ -19,7 +19,7 @@
using namespace NWindows;
-#ifndef _7ZIP_ST
+#ifndef Z7_ST
static NSynchronization::CCriticalSection g_CriticalSection;
#define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection);
#else
@@ -136,7 +136,7 @@ HRESULT CUpdateCallbackConsole::OpenResult(
{
if (_so)
{
- RINOK(Print_OpenArchive_Props(*_so, codecs, arcLink));
+ RINOK(Print_OpenArchive_Props(*_so, codecs, arcLink))
*_so << endl;
}
}
@@ -150,7 +150,7 @@ HRESULT CUpdateCallbackConsole::OpenResult(
_se->NormalizePrint_wstr(name);
*_se << endl;
HRESULT res = Print_OpenArchive_Error(*_se, codecs, arcLink);
- RINOK(res);
+ RINOK(res)
_se->Flush();
}
}
@@ -333,6 +333,12 @@ HRESULT CUpdateCallbackConsole::FinishArchive(const CFinishArchiveStat &st)
s += "Archive size: ";
PrintSize_bytes_Smart(s, st.OutArcFileSize);
s.Add_LF();
+ if (st.IsMultiVolMode)
+ {
+ s += "Volumes: ";
+ s.Add_UInt32(st.NumVolumes);
+ s.Add_LF();
+ }
*_so << endl;
*_so << s;
// *_so << endl;
@@ -681,12 +687,12 @@ HRESULT CUpdateCallbackConsole::ReportUpdateOperation(UInt32 op, const wchar_t *
/*
HRESULT CUpdateCallbackConsole::SetPassword(const UString &
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
password
#endif
)
{
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
PasswordIsDefined = true;
Password = password;
#endif
@@ -700,7 +706,7 @@ HRESULT CUpdateCallbackConsole::CryptoGetTextPassword2(Int32 *passwordIsDefined,
*password = NULL;
- #ifdef _NO_CRYPTO
+ #ifdef Z7_NO_CRYPTO
*passwordIsDefined = false;
return S_OK;
@@ -711,7 +717,7 @@ HRESULT CUpdateCallbackConsole::CryptoGetTextPassword2(Int32 *passwordIsDefined,
{
if (AskPassword)
{
- RINOK(GetPassword_HRESULT(_so, Password));
+ RINOK(GetPassword_HRESULT(_so, Password))
PasswordIsDefined = true;
}
}
@@ -729,7 +735,7 @@ HRESULT CUpdateCallbackConsole::CryptoGetTextPassword(BSTR *password)
*password = NULL;
- #ifdef _NO_CRYPTO
+ #ifdef Z7_NO_CRYPTO
return E_NOTIMPL;
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h b/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h
index b7ffef036ae..b6c1be4b749 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h
@@ -1,7 +1,7 @@
// UpdateCallbackConsole.h
-#ifndef __UPDATE_CALLBACK_CONSOLE_H
-#define __UPDATE_CALLBACK_CONSOLE_H
+#ifndef ZIP7_INC_UPDATE_CALLBACK_CONSOLE_H
+#define ZIP7_INC_UPDATE_CALLBACK_CONSOLE_H
#include "../../../Common/StdOutStream.h"
@@ -26,6 +26,7 @@ struct CErrorPathCodes
}
};
+
class CCallbackConsoleBase
{
protected:
@@ -42,7 +43,7 @@ protected:
HRESULT ReadingFileError_Base(const FString &name, DWORD systemError);
public:
- bool NeedPercents() const { return _percent._so != NULL; };
+ bool NeedPercents() const { return _percent._so != NULL; }
bool StdOutMode;
@@ -94,29 +95,32 @@ public:
// void PrintPropInfo(UString &s, PROPID propID, const PROPVARIANT *value);
};
-class CUpdateCallbackConsole: public IUpdateCallbackUI2, public CCallbackConsoleBase
+
+class CUpdateCallbackConsole Z7_final:
+ public IUpdateCallbackUI2,
+ public CCallbackConsoleBase
{
// void PrintPropPair(const char *name, const wchar_t *val);
-
+ Z7_IFACE_IMP(IUpdateCallbackUI)
+ Z7_IFACE_IMP(IDirItemsCallback)
+ Z7_IFACE_IMP(IUpdateCallbackUI2)
public:
bool DeleteMessageWasShown;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool PasswordIsDefined;
- UString Password;
bool AskPassword;
+ UString Password;
#endif
CUpdateCallbackConsole():
DeleteMessageWasShown(false)
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
, PasswordIsDefined(false)
, AskPassword(false)
#endif
{}
- virtual ~CUpdateCallbackConsole() {}
-
/*
void Init(CStdOutStream *outStream)
{
@@ -124,7 +128,6 @@ public:
}
*/
// ~CUpdateCallbackConsole() { if (NeedPercents()) _percent.ClosePrint(); }
- INTERFACE_IUpdateCallbackUI2(;)
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp b/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp
index 93f60eb291a..04d675e6f83 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp
@@ -73,19 +73,26 @@ static bool GetPassword(CStdOutStream *outStream, UString &psw)
#ifdef MY_DISABLE_ECHO
- HANDLE console = GetStdHandle(STD_INPUT_HANDLE);
+ const HANDLE console = GetStdHandle(STD_INPUT_HANDLE);
+
+ /*
+ GetStdHandle() returns
+ INVALID_HANDLE_VALUE: If the function fails.
+ NULL : If an application does not have associated standard handles,
+ such as a service running on an interactive desktop,
+ and has not redirected them. */
bool wasChanged = false;
DWORD mode = 0;
- if (console != INVALID_HANDLE_VALUE && console != 0)
+ if (console != INVALID_HANDLE_VALUE && console != NULL)
if (GetConsoleMode(console, &mode))
wasChanged = (SetConsoleMode(console, mode & ~(DWORD)ENABLE_ECHO_INPUT) != 0);
- bool res = g_StdIn.ScanUStringUntilNewLine(psw);
+ const bool res = g_StdIn.ScanUStringUntilNewLine(psw);
if (wasChanged)
SetConsoleMode(console, mode);
#else
- bool res = g_StdIn.ScanUStringUntilNewLine(psw);
+ const bool res = g_StdIn.ScanUStringUntilNewLine(psw);
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.h b/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.h
index 256feafef75..695a3e66da7 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/UserInputUtils.h
@@ -1,7 +1,7 @@
// UserInputUtils.h
-#ifndef __USER_INPUT_UTILS_H
-#define __USER_INPUT_UTILS_H
+#ifndef ZIP7_INC_USER_INPUT_UTILS_H
+#define ZIP7_INC_USER_INPUT_UTILS_H
#include "../../../Common/StdOutStream.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/makefile b/3rdparty/lzma/CPP/7zip/UI/Console/makefile
index acc3f107cb5..a20b0cc0b5c 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/makefile
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/makefile
@@ -1,6 +1,6 @@
PROG = 7z.exe
CFLAGS = $(CFLAGS) \
- -DEXTERNAL_CODECS \
+ -DZ7_EXTERNAL_CODECS \
COMMON_OBJS = \
$O\CommandLineParser.obj \
@@ -42,6 +42,7 @@ WIN_OBJS = \
$O\FilterCoder.obj \
$O\LimitedStreams.obj \
$O\MethodProps.obj \
+ $O\MultiOutStream.obj \
$O\ProgressUtils.obj \
$O\PropId.obj \
$O\StreamObjects.obj \
diff --git a/3rdparty/lzma/CPP/7zip/UI/Console/makefile.gcc b/3rdparty/lzma/CPP/7zip/UI/Console/makefile.gcc
index d7e444780ac..8a293d8ac91 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Console/makefile.gcc
+++ b/3rdparty/lzma/CPP/7zip/UI/Console/makefile.gcc
@@ -20,7 +20,7 @@ endif
ifdef ST_MODE
-LOCAL_FLAGS_ST = -D_7ZIP_ST
+LOCAL_FLAGS_ST = -DZ7_ST
ifdef IS_MINGW
MT_OBJS = \
@@ -43,9 +43,9 @@ LOCAL_FLAGS_WIN=
ifdef IS_MINGW
LOCAL_FLAGS_WIN = \
- -D_7ZIP_LARGE_PAGES \
- -DWIN_LONG_PATH \
- -DSUPPORT_DEVICE_FILE \
+ -DZ7_LARGE_PAGES \
+ -DZ7_LONG_PATH \
+ -DZ7_DEVICE_FILE \
SYS_OBJS = \
$O/FileSystem.o \
@@ -66,7 +66,7 @@ endif
LOCAL_FLAGS = \
$(LOCAL_FLAGS_WIN) \
$(LOCAL_FLAGS_ST) \
- -DEXTERNAL_CODECS \
+ -DZ7_EXTERNAL_CODECS \
@@ -147,6 +147,7 @@ WIN_OBJS = \
$O/LimitedStreams.o \
$O/MethodId.o \
$O/MethodProps.o \
+ $O/MultiOutStream.o \
$O/OffsetStream.o \
$O/OutBuffer.o \
$O/ProgressUtils.o \
diff --git a/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp b/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp
index c912504ca2a..daff7dedbcf 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp
@@ -18,12 +18,15 @@ void ShowErrorMessage(HWND window, LPCWSTR message)
void ShowErrorMessageHwndRes(HWND window, UINT resID)
{
- ShowErrorMessage(window, LangString(resID));
+ UString s = LangString(resID);
+ if (s.IsEmpty())
+ s.Add_UInt32(resID);
+ ShowErrorMessage(window, s);
}
void ShowErrorMessageRes(UINT resID)
{
- ShowErrorMessageHwndRes(0, resID);
+ ShowErrorMessageHwndRes(NULL, resID);
}
static void ShowErrorMessageDWORD(HWND window, DWORD errorCode)
diff --git a/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.h b/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.h
index d5822f45f1c..47d10db71c8 100644
--- a/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.h
+++ b/3rdparty/lzma/CPP/7zip/UI/Explorer/MyMessages.h
@@ -1,16 +1,16 @@
// MyMessages.h
-#ifndef __MY_MESSAGES_H
-#define __MY_MESSAGES_H
+#ifndef ZIP7_INC_MY_MESSAGES_H
+#define ZIP7_INC_MY_MESSAGES_H
#include "../../../Common/MyString.h"
void ShowErrorMessage(HWND window, LPCWSTR message);
-inline void ShowErrorMessage(LPCWSTR message) { ShowErrorMessage(0, message); }
+inline void ShowErrorMessage(LPCWSTR message) { ShowErrorMessage(NULL, message); }
void ShowErrorMessageHwndRes(HWND window, UInt32 langID);
void ShowErrorMessageRes(UInt32 langID);
-void ShowLastErrorMessage(HWND window = 0);
+void ShowLastErrorMessage(HWND window = NULL);
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp
index 6d2b6b55e24..5170302c332 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp
@@ -4,7 +4,7 @@
#include "../../../Common/MyWindows.h"
-#include <CommCtrl.h>
+#include "../../../Common/IntToString.h"
#ifndef UNDER_CE
#include "../../../Windows/CommonDialog.h"
@@ -25,7 +25,6 @@
#ifdef USE_MY_BROWSE_DIALOG
#include "../../../Common/Defs.h"
-#include "../../../Common/IntToString.h"
#include "../../../Common/Wildcard.h"
#include "../../../Windows/FileDir.h"
@@ -40,11 +39,11 @@
#include "PropertyNameRes.h"
#include "SysIconUtils.h"
-#ifndef _SFX
+#ifndef Z7_SFX
#include "RegistryUtils.h"
#endif
-#endif
+#endif // USE_MY_BROWSE_DIALOG
#include "ComboDialog.h"
#include "LangUtils.h"
@@ -56,6 +55,11 @@ using namespace NFile;
using namespace NName;
using namespace NFind;
+static void MessageBox_Error_Global(HWND wnd, const wchar_t *message)
+{
+ ::MessageBoxW(wnd, message, L"7-Zip", MB_ICONERROR);
+}
+
#ifdef USE_MY_BROWSE_DIALOG
extern bool g_LVN_ITEMACTIVATE_Support;
@@ -63,19 +67,8 @@ extern bool g_LVN_ITEMACTIVATE_Support;
static const int kParentIndex = -1;
static const UINT k_Message_RefreshPathEdit = WM_APP + 1;
-static HRESULT GetNormalizedError()
-{
- DWORD errorCode = GetLastError();
- return errorCode == 0 ? E_FAIL : errorCode;
-}
-
extern UString HResultToMessage(HRESULT errorCode);
-static void MessageBox_Error_Global(HWND wnd, const wchar_t *message)
-{
- ::MessageBoxW(wnd, message, L"7-Zip", MB_ICONERROR);
-}
-
static void MessageBox_HResError(HWND wnd, HRESULT errorCode, const wchar_t *name)
{
UString s = HResultToMessage(errorCode);
@@ -98,17 +91,21 @@ class CBrowseDialog: public NControl::CModalDialog
CExtToIconMap _extToIconMap;
int _sortIndex;
bool _ascending;
+ #ifndef Z7_SFX
bool _showDots;
+ #endif
UString _topDirPrefix; // we don't open parent of that folder
UString DirPrefix;
- virtual bool OnInit();
- virtual bool OnSize(WPARAM wParam, int xSize, int ySize);
- virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
- virtual bool OnNotify(UINT controlID, LPNMHDR header);
- virtual bool OnKeyDown(LPNMLVKEYDOWN keyDownInfo);
- virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
- virtual void OnOK();
+ virtual bool OnInit() Z7_override;
+ virtual bool OnSize(WPARAM wParam, int xSize, int ySize) Z7_override;
+ virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam) Z7_override;
+ virtual bool OnNotify(UINT controlID, LPNMHDR header) Z7_override;
+ virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam) Z7_override;
+ virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
+ virtual void OnOK() Z7_override;
+
+ bool OnKeyDown(LPNMLVKEYDOWN keyDownInfo);
void Post_RefreshPathEdit() { PostMsg(k_Message_RefreshPathEdit); }
@@ -126,59 +123,37 @@ class CBrowseDialog: public NControl::CModalDialog
int GetRealItemIndex(int indexInListView) const
{
LPARAM param;
- if (!_list.GetItemParam(indexInListView, param))
+ if (!_list.GetItemParam((unsigned)indexInListView, param))
return (int)-1;
return (int)param;
}
public:
+
+ bool SaveMode;
bool FolderMode;
+ int FilterIndex; // [in / out]
+ CObjectVector<CBrowseFilterInfo> Filters;
+
+ UString FilePath; // [in / out]
UString Title;
- UString FilePath; // input/ result path
- bool ShowAllFiles;
- UStringVector Filters;
- UString FilterDescription;
-
- CBrowseDialog(): _showDots(false), FolderMode(false), ShowAllFiles(true) {}
- void SetFilter(const UString &s);
- INT_PTR Create(HWND parent = 0) { return CModalDialog::Create(IDD_BROWSE, parent); }
- int CompareItems(LPARAM lParam1, LPARAM lParam2);
+
+ CBrowseDialog():
+ #ifndef Z7_SFX
+ _showDots(false),
+ #endif
+ SaveMode(false)
+ , FolderMode(false)
+ , FilterIndex(-1)
+ {}
+ INT_PTR Create(HWND parent = NULL) { return CModalDialog::Create(IDD_BROWSE, parent); }
+ int CompareItems(LPARAM lParam1, LPARAM lParam2) const;
};
-void CBrowseDialog::SetFilter(const UString &s)
-{
- Filters.Clear();
- UString mask;
- unsigned i;
- for (i = 0; i < s.Len(); i++)
- {
- wchar_t c = s[i];
- if (c == ';')
- {
- if (!mask.IsEmpty())
- Filters.Add(mask);
- mask.Empty();
- }
- else
- mask += c;
- }
- if (!mask.IsEmpty())
- Filters.Add(mask);
- ShowAllFiles = Filters.IsEmpty();
- for (i = 0; i < Filters.Size(); i++)
- {
- const UString &f = Filters[i];
- if (f == L"*.*" || f == L"*")
- {
- ShowAllFiles = true;
- break;
- }
- }
-}
bool CBrowseDialog::OnInit()
{
- #ifdef LANG
+ #ifdef Z7_LANG
LangSetDlgItems(*this, NULL, 0);
#endif
if (!Title.IsEmpty())
@@ -187,16 +162,11 @@ bool CBrowseDialog::OnInit()
_filterCombo.Attach(GetItem(IDC_BROWSE_FILTER));
_pathEdit.Attach(GetItem(IDE_BROWSE_PATH));
- if (FolderMode)
- HideItem(IDC_BROWSE_FILTER);
- else
- EnableItem(IDC_BROWSE_FILTER, false);
-
#ifndef UNDER_CE
_list.SetUnicodeFormat();
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
CFmSettings st;
st.Load();
if (st.SingleClick)
@@ -205,22 +175,34 @@ bool CBrowseDialog::OnInit()
#endif
{
- UString s;
- if (!FilterDescription.IsEmpty())
- s = FilterDescription;
- else if (ShowAllFiles)
- s = "*.*";
- else
+ /*
+ Filters.Clear(); // for debug
+ if (Filters.IsEmpty() && !FolderMode)
{
- FOR_VECTOR (i, Filters)
- {
- if (i != 0)
- s.Add_Space();
- s += Filters[i];
- }
+ CBrowseFilterInfo &f = Filters.AddNew();
+ const UString mask("*.*");
+ f.Masks.Add(mask);
+ // f.Description = "(";
+ f.Description += mask;
+ // f.Description += ")";
+ }
+ */
+
+ FOR_VECTOR (i, Filters)
+ {
+ _filterCombo.AddString(Filters[i].Description);
+ }
+
+ if (Filters.Size() <= 1)
+ {
+ if (FolderMode)
+ HideItem(IDC_BROWSE_FILTER);
+ else
+ EnableItem(IDC_BROWSE_FILTER, false);
}
- _filterCombo.AddString(s);
- _filterCombo.SetCurSel(0);
+
+ if (/* FilterIndex >= 0 && */ (unsigned)FilterIndex < Filters.Size())
+ _filterCombo.SetCurSel(FilterIndex);
}
_list.SetImageList(GetSysImageList(true), LVSIL_SMALL);
@@ -261,7 +243,7 @@ bool CBrowseDialog::OnInit()
_topDirPrefix.Empty();
{
- int rootSize = GetRootPrefixSize(FilePath);
+ unsigned rootSize = GetRootPrefixSize(FilePath);
#if defined(_WIN32) && !defined(UNDER_CE)
// We can go up from root folder to drives list
if (IsDrivePath(FilePath))
@@ -301,7 +283,7 @@ bool CBrowseDialog::OnInit()
#ifndef UNDER_CE
/* If we clear UISF_HIDEFOCUS, the focus rectangle in ListView will be visible,
even if we use mouse for pressing the button to open this dialog. */
- PostMsg(MY__WM_UPDATEUISTATE, MAKEWPARAM(MY__UIS_CLEAR, MY__UISF_HIDEFOCUS));
+ PostMsg(Z7_WIN_WM_UPDATEUISTATE, MAKEWPARAM(Z7_WIN_UIS_CLEAR, Z7_WIN_UISF_HIDEFOCUS));
#endif
return CModalDialog::OnInit();
@@ -368,6 +350,24 @@ bool CBrowseDialog::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
return CModalDialog::OnMessage(message, wParam, lParam);
}
+
+bool CBrowseDialog::OnCommand(unsigned code, unsigned itemID, LPARAM lParam)
+{
+ if (code == CBN_SELCHANGE)
+ {
+ switch (itemID)
+ {
+ case IDC_BROWSE_FILTER:
+ {
+ Reload();
+ return true;
+ }
+ }
+ }
+ return CModalDialog::OnCommand(code, itemID, lParam);
+}
+
+
bool CBrowseDialog::OnNotify(UINT /* controlID */, LPNMHDR header)
{
if (header->hwndFrom != _list)
@@ -385,7 +385,7 @@ bool CBrowseDialog::OnNotify(UINT /* controlID */, LPNMHDR header)
break;
case LVN_COLUMNCLICK:
{
- int index = LPNMLISTVIEW(header)->iSubItem;
+ const int index = LPNMLISTVIEW(header)->iSubItem;
if (index == _sortIndex)
_ascending = !_ascending;
else
@@ -413,7 +413,7 @@ bool CBrowseDialog::OnNotify(UINT /* controlID */, LPNMHDR header)
bool CBrowseDialog::OnKeyDown(LPNMLVKEYDOWN keyDownInfo)
{
- bool ctrl = IsKeyDown(VK_CONTROL);
+ const bool ctrl = IsKeyDown(VK_CONTROL);
switch (keyDownInfo->wVKey)
{
@@ -434,7 +434,8 @@ bool CBrowseDialog::OnKeyDown(LPNMLVKEYDOWN keyDownInfo)
return false;
}
-bool CBrowseDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+
+bool CBrowseDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
switch (buttonID)
{
@@ -474,21 +475,21 @@ bool CBrowseDialog::GetParentPath(const UString &path, UString &parentPrefix, US
return false;
if (IS_PATH_SEPAR(s.Back()))
return false;
- int pos = s.ReverseFind_PathSepar();
- parentPrefix.SetFrom(s, pos + 1);
- name = s.Ptr((unsigned)(pos + 1));
+ const unsigned pos1 = (unsigned)(s.ReverseFind_PathSepar() + 1);
+ parentPrefix.SetFrom(s, pos1);
+ name = s.Ptr(pos1);
return true;
}
-int CBrowseDialog::CompareItems(LPARAM lParam1, LPARAM lParam2)
+int CBrowseDialog::CompareItems(LPARAM lParam1, LPARAM lParam2) const
{
if (lParam1 == kParentIndex) return -1;
if (lParam2 == kParentIndex) return 1;
const CFileInfo &f1 = _files[(int)lParam1];
const CFileInfo &f2 = _files[(int)lParam2];
- bool isDir1 = f1.IsDir();
- bool isDir2 = f2.IsDir();
+ const bool isDir1 = f1.IsDir();
+ const bool isDir2 = f2.IsDir();
if (isDir1 && !isDir2) return -1;
if (isDir2 && !isDir1) return 1;
@@ -509,16 +510,16 @@ static int CALLBACK CompareItems2(LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
static void ConvertSizeToString(UInt64 v, wchar_t *s)
{
- Byte c = 0;
+ char c = 0;
if (v >= ((UInt64)10000 << 20)) { v >>= 30; c = 'G'; }
else if (v >= ((UInt64)10000 << 10)) { v >>= 20; c = 'M'; }
else if (v >= ((UInt64)10000 << 0)) { v >>= 10; c = 'K'; }
- ConvertUInt64ToString(v, s);
+ s = ConvertUInt64ToString(v, s);
if (c != 0)
{
- s += MyStringLen(s);
*s++ = ' ';
- *s++ = c;
+ *s++ = (wchar_t)c;
+ *s++ = 'B';
*s++ = 0;
}
}
@@ -536,42 +537,57 @@ HRESULT CBrowseDialog::Reload(const UString &pathPrefix, const UString &selected
isDrive = true;
FStringVector drives;
if (!MyGetLogicalDriveStrings(drives))
- return GetNormalizedError();
+ return GetLastError_noZero_HRESULT();
FOR_VECTOR (i, drives)
{
- FString d = drives[i];
- if (d.Len() < 3 || d.Back() != '\\')
+ const FString &d = drives[i];
+ if (d.Len() < 2 || d.Back() != '\\')
return E_FAIL;
- d.DeleteBack();
CFileInfo &fi = files.AddNew();
fi.SetAsDir();
fi.Name = d;
+ fi.Name.DeleteBack();
}
}
else
#endif
{
+ const UStringVector *masks = NULL;
+ if (!Filters.IsEmpty() && _filterCombo.GetCount() > 0)
+ {
+ const int selected = _filterCombo.GetCurSel();
+ // GetItemData_of_CurSel(); // we don't use data field
+ if (/* selected >= 0 && */ (unsigned)selected < Filters.Size())
+ {
+ const UStringVector &m = Filters[selected].Masks;
+ if (m.Size() > 1 || (m.Size() == 1
+ && !m[0].IsEqualTo("*.*")
+ && !m[0].IsEqualTo("*")))
+ masks = &m;
+ }
+ }
CEnumerator enumerator;
enumerator.SetDirPrefix(us2fs(pathPrefix));
+ CFileInfo fi;
for (;;)
{
bool found;
- CFileInfo fi;
if (!enumerator.Next(fi, found))
- return GetNormalizedError();
+ return GetLastError_noZero_HRESULT();
if (!found)
break;
if (!fi.IsDir())
{
if (FolderMode)
continue;
- if (!ShowAllFiles)
+ if (masks)
{
unsigned i;
- for (i = 0; i < Filters.Size(); i++)
- if (DoesWildcardMatchName(Filters[i], fs2us(fi.Name)))
+ const unsigned numMasks = masks->Size();
+ for (i = 0; i < numMasks; i++)
+ if (DoesWildcardMatchName((*masks)[i], fs2us(fi.Name)))
break;
- if (i == Filters.Size())
+ if (i == numMasks)
continue;
}
}
@@ -590,19 +606,19 @@ HRESULT CBrowseDialog::Reload(const UString &pathPrefix, const UString &selected
LVITEMW item;
- int index = 0;
+ unsigned index = 0;
int cursorIndex = -1;
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_showDots && _topDirPrefix != DirPrefix)
{
- item.iItem = index;
+ item.iItem = (int)index;
const UString itemName ("..");
if (selectedName.IsEmpty())
- cursorIndex = index;
+ cursorIndex = (int)index;
item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
- int subItem = 0;
- item.iSubItem = subItem++;
+ unsigned subItem = 0;
+ item.iSubItem = (int)(subItem++);
item.lParam = kParentIndex;
item.pszText = itemName.Ptr_non_const();
item.iImage = _extToIconMap.GetIconIndex(FILE_ATTRIBUTE_DIRECTORY, DirPrefix);
@@ -617,15 +633,15 @@ HRESULT CBrowseDialog::Reload(const UString &pathPrefix, const UString &selected
for (unsigned i = 0; i < _files.Size(); i++, index++)
{
- item.iItem = index;
+ item.iItem = (int)index;
const CFileInfo &fi = _files[i];
const UString name = fs2us(fi.Name);
if (!selectedName.IsEmpty() && CompareFileNames(name, selectedName) == 0)
- cursorIndex = index;
+ cursorIndex = (int)index;
item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
- int subItem = 0;
- item.iSubItem = subItem++;
- item.lParam = i;
+ unsigned subItem = 0;
+ item.iSubItem = (int)(subItem++);
+ item.lParam = (LPARAM)i;
item.pszText = name.Ptr_non_const();
const UString fullPath = DirPrefix + name;
@@ -675,14 +691,14 @@ HRESULT CBrowseDialog::Reload(const UString &pathPrefix, const UString &selected
HRESULT CBrowseDialog::Reload()
{
UString selected;
- int index = _list.GetNextSelectedItem(-1);
+ const int index = _list.GetNextSelectedItem(-1);
if (index >= 0)
{
- int fileIndex = GetRealItemIndex(index);
+ const int fileIndex = GetRealItemIndex(index);
if (fileIndex != kParentIndex)
selected = fs2us(_files[fileIndex].Name);
}
- UString dirPathTemp = DirPrefix;
+ const UString dirPathTemp = DirPrefix;
return Reload(dirPathTemp, selected);
}
@@ -698,14 +714,14 @@ void CBrowseDialog::OpenParentFolder()
void CBrowseDialog::SetPathEditText()
{
- int index = _list.GetNextSelectedItem(-1);
+ const int index = _list.GetNextSelectedItem(-1);
if (index < 0)
{
if (FolderMode)
_pathEdit.SetText(DirPrefix);
return;
}
- int fileIndex = GetRealItemIndex(index);
+ const int fileIndex = GetRealItemIndex(index);
if (fileIndex == kParentIndex)
{
if (FolderMode)
@@ -745,7 +761,7 @@ void CBrowseDialog::OnCreateDir()
{
if (!NDir::CreateComplexDir(destPath))
{
- MessageBox_HResError((HWND)*this, GetNormalizedError(), fs2us(destPath));
+ MessageBox_HResError((HWND)*this, GetLastError_noZero_HRESULT(), fs2us(destPath));
}
else
{
@@ -759,10 +775,10 @@ void CBrowseDialog::OnCreateDir()
void CBrowseDialog::OnItemEnter()
{
- int index = _list.GetNextSelectedItem(-1);
+ const int index = _list.GetNextSelectedItem(-1);
if (index < 0)
return;
- int fileIndex = GetRealItemIndex(index);
+ const int fileIndex = GetRealItemIndex(index);
if (fileIndex == kParentIndex)
OpenParentFolder();
else
@@ -782,7 +798,7 @@ void CBrowseDialog::OnItemEnter()
UString s = DirPrefix;
s += fs2us(file.Name);
s.Add_PathSepar();
- HRESULT res = Reload(s, UString());
+ const HRESULT res = Reload(s, UString());
if (res != S_OK)
MessageBox_HResError(*this, res, s);
SetPathEditText();
@@ -802,10 +818,13 @@ void CBrowseDialog::FinishOnOK()
FilePath = fs2us(destPath);
if (FolderMode)
NormalizeDirPathPrefix(FilePath);
+ FilterIndex = _filterCombo.GetCurSel();
End(IDOK);
}
-#endif
+#endif // USE_MY_BROWSE_DIALOG
+
+
bool MyBrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR path, UString &resultPath)
{
@@ -813,12 +832,13 @@ bool MyBrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR path, UString &resultP
#ifndef UNDER_CE
- #ifdef USE_MY_BROWSE_DIALOG
+#ifdef USE_MY_BROWSE_DIALOG
if (!IsSuperOrDevicePath(path))
- #endif
+ if (MyStringLen(path) < MAX_PATH)
+#endif
return NShell::BrowseForFolder(owner, title, path, resultPath);
- #endif
+ #endif // UNDER_CE
#ifdef USE_MY_BROWSE_DIALOG
@@ -831,64 +851,107 @@ bool MyBrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR path, UString &resultP
if (dialog.Create(owner) != IDOK)
return false;
resultPath = dialog.FilePath;
- #endif
-
return true;
+
+ #endif
}
-bool MyBrowseForFile(HWND owner, LPCWSTR title, LPCWSTR path,
- LPCWSTR filterDescription, LPCWSTR filter, UString &resultPath)
-{
- resultPath.Empty();
- #ifndef UNDER_CE
+// LPCWSTR filterDescription, LPCWSTR filter,
- #ifdef USE_MY_BROWSE_DIALOG
- if (!IsSuperOrDevicePath(path))
- #endif
+bool CBrowseInfo::BrowseForFile(const CObjectVector<CBrowseFilterInfo> &filters)
+{
+#ifndef UNDER_CE
+#ifdef USE_MY_BROWSE_DIALOG
+ /* win10:
+ GetOpenFileName() for FilePath doesn't support super prefix "\\\\?\\"
+ GetOpenFileName() for FilePath doesn't support long path
+ */
+ if (!IsSuperOrDevicePath(FilePath))
+ // if (filters.Size() > 100) // for debug
+#endif
{
- if (MyGetOpenFileName(owner, title, NULL, path, filterDescription, filter, resultPath))
+ const UString filePath_Store = FilePath;
+ UString dirPrefix;
+ {
+ FString prefix, name;
+ if (NDir::GetFullPathAndSplit(us2fs(FilePath), prefix, name))
+ {
+ dirPrefix = fs2us(prefix);
+ FilePath = fs2us(name);
+ }
+ }
+ UStringVector filters2;
+ FOR_VECTOR (i, filters)
+ {
+ const CBrowseFilterInfo &fi = filters[i];
+ filters2.Add(fi.Description);
+ UString s;
+ FOR_VECTOR (k, fi.Masks)
+ {
+ if (k != 0)
+ s += ";";
+ s += fi.Masks[k];
+ }
+ filters2.Add(s);
+ }
+ if (CommonDlg_BrowseForFile(!dirPrefix.IsEmpty() ? dirPrefix.Ptr(): NULL, filters2))
return true;
- #ifdef UNDER_CE
+ FilePath = filePath_Store;
+
+ #ifdef UNDER_CE
return false;
- #else
+ #else
// maybe we must use GetLastError in WinCE.
- DWORD errorCode = CommDlgExtendedError();
- const char *errorMessage = NULL;
- switch (errorCode)
- {
- case 0: return false; // cancel or close obn dialog
- case FNERR_INVALIDFILENAME: errorMessage = "Invalid File Name"; break;
- default: errorMessage = "Open Dialog Error";
- }
- if (!errorMessage)
- return false;
+ const DWORD errorCode = CommDlgExtendedError();
+ #ifdef USE_MY_BROWSE_DIALOG
+ // FNERR_INVALIDFILENAME is expected error, if long path was used
+ if (errorCode != FNERR_INVALIDFILENAME
+ || FilePath.Len() < MAX_PATH)
+ #endif
{
- UString s (errorMessage);
+ if (errorCode == 0) // cancel or close on dialog
+ return false;
+ const char *message = NULL;
+ if (errorCode == FNERR_INVALIDFILENAME)
+ message = "Invalid file name";
+ UString s ("Open Dialog Error:");
+ s.Add_LF();
+ if (message)
+ s += message;
+ else
+ {
+ char temp[16];
+ ConvertUInt32ToHex8Digits(errorCode, temp);
+ s += "Error #";
+ s += temp;
+ }
s.Add_LF();
- s += path;
- MessageBox_Error_Global(owner, s);
+ s += FilePath;
+ MessageBox_Error_Global(hwndOwner, s);
}
- #endif
+ #endif // UNDER_CE
}
- #endif
+#endif // UNDER_CE
- #ifdef USE_MY_BROWSE_DIALOG
+#ifdef USE_MY_BROWSE_DIALOG
+
CBrowseDialog dialog;
- if (title)
- dialog.Title = title;
- if (path)
- dialog.FilePath = path;
+
dialog.FolderMode = false;
- if (filter)
- dialog.SetFilter(filter);
- if (filterDescription)
- dialog.FilterDescription = filterDescription;
- if (dialog.Create(owner) != IDOK)
+ dialog.SaveMode = SaveMode;
+ dialog.FilterIndex = FilterIndex;
+ dialog.Filters = filters;
+
+ if (lpstrTitle)
+ dialog.Title = lpstrTitle;
+ dialog.FilePath = FilePath;
+ if (dialog.Create(hwndOwner) != IDOK)
return false;
- resultPath = dialog.FilePath;
- #endif
+ FilePath = dialog.FilePath;
+ FilterIndex = dialog.FilterIndex;
+#endif
return true;
}
@@ -913,7 +976,9 @@ bool CorrectFsPath(const UString &relBase, const UString &path2, UString &result
result.Empty();
UString path = path2;
+ #ifdef _WIN32
path.Replace(L'/', WCHAR_PATH_SEPARATOR);
+ #endif
unsigned start = 0;
UString base;
@@ -926,9 +991,7 @@ bool CorrectFsPath(const UString &relBase, const UString &path2, UString &result
return true;
}
#endif
- int pos = GetRootPrefixSize(path);
- if (pos > 0)
- start = pos;
+ start = GetRootPrefixSize(path);
}
else
{
@@ -973,8 +1036,8 @@ bool CorrectFsPath(const UString &relBase, const UString &path2, UString &result
{
if (start == path.Len())
break;
- int slashPos = path.Find(WCHAR_PATH_SEPARATOR, start);
- cur.SetFrom(path.Ptr(start), (slashPos < 0 ? path.Len() : slashPos) - start);
+ const int slashPos = path.Find(WCHAR_PATH_SEPARATOR, start);
+ cur.SetFrom(path.Ptr(start), (slashPos < 0 ? path.Len() : (unsigned)slashPos) - start);
if (checkExist)
{
CFileInfo fi;
@@ -994,8 +1057,8 @@ bool CorrectFsPath(const UString &relBase, const UString &path2, UString &result
result += cur;
if (slashPos < 0)
break;
+ start = (unsigned)(slashPos + 1);
result.Add_PathSepar();
- start = slashPos + 1;
}
return true;
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h
index 957af2e2577..2ad8d5443a3 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h
@@ -1,12 +1,23 @@
// BrowseDialog.h
-#ifndef __BROWSE_DIALOG_H
-#define __BROWSE_DIALOG_H
+#ifndef ZIP7_INC_BROWSE_DIALOG_H
+#define ZIP7_INC_BROWSE_DIALOG_H
-#include "../../../Common/MyString.h"
+#include "../../../Windows/CommonDialog.h"
bool MyBrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR path, UString &resultPath);
-bool MyBrowseForFile(HWND owner, LPCWSTR title, LPCWSTR path, LPCWSTR filterDescription, LPCWSTR filter, UString &resultPath);
+
+struct CBrowseFilterInfo
+{
+ UStringVector Masks;
+ UString Description;
+};
+
+struct CBrowseInfo: public NWindows::CCommonDialogInfo
+{
+ bool BrowseForFile(const CObjectVector<CBrowseFilterInfo> &filters);
+};
+
/* CorrectFsPath removes undesirable characters in names (dots and spaces at the end of file)
But it doesn't change "bad" name in any of the following cases:
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp
index 729743e8795..921972eab10 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp
@@ -5,7 +5,7 @@
#include "../../../Windows/Control/Static.h"
-#ifdef LANG
+#ifdef Z7_LANG
#include "LangUtils.h"
#endif
@@ -13,7 +13,7 @@ using namespace NWindows;
bool CComboDialog::OnInit()
{
- #ifdef LANG
+ #ifdef Z7_LANG
LangSetDlgItems(*this, NULL, 0);
#endif
_comboBox.Attach(GetItem(IDC_COMBO));
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.h
index 29b28b5b49c..bb0fda80e16 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ComboDialog.h
@@ -1,7 +1,7 @@
// ComboDialog.h
-#ifndef __COMBO_DIALOG_H
-#define __COMBO_DIALOG_H
+#ifndef ZIP7_INC_COMBO_DIALOG_H
+#define ZIP7_INC_COMBO_DIALOG_H
#include "../../../Windows/Control/ComboBox.h"
#include "../../../Windows/Control/Dialog.h"
@@ -11,9 +11,9 @@
class CComboDialog: public NWindows::NControl::CModalDialog
{
NWindows::NControl::CComboBox _comboBox;
- virtual void OnOK();
- virtual bool OnInit();
- virtual bool OnSize(WPARAM wParam, int xSize, int ySize);
+ virtual void OnOK() Z7_override;
+ virtual bool OnInit() Z7_override;
+ virtual bool OnSize(WPARAM wParam, int xSize, int ySize) Z7_override;
public:
// bool Sorted;
UString Title;
@@ -22,7 +22,7 @@ public:
UStringVector Strings;
// CComboDialog(): Sorted(false) {};
- INT_PTR Create(HWND parentWindow = 0) { return CModalDialog::Create(IDD_COMBO, parentWindow); }
+ INT_PTR Create(HWND parentWindow = NULL) { return CModalDialog::Create(IDD_COMBO, parentWindow); }
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/DialogSize.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/DialogSize.h
index 504541bdf3c..9f2270bd40e 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/DialogSize.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/DialogSize.h
@@ -1,7 +1,7 @@
// DialogSize.h
-#ifndef __DIALOG_SIZE_H
-#define __DIALOG_SIZE_H
+#ifndef ZIP7_INC_DIALOG_SIZE_H
+#define ZIP7_INC_DIALOG_SIZE_H
#include "../../../Windows/Control/Dialog.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp
index 232717f89f4..f67404479b0 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp
@@ -17,7 +17,7 @@
#include "../../Common/StreamUtils.h"
#include "../Common/ExtractingFilePath.h"
-#ifndef _SFX
+#ifndef Z7_SFX
#include "../Common/ZipRegistry.h"
#endif
@@ -28,7 +28,7 @@
#include "FormatUtils.h"
#include "LangUtils.h"
#include "OverwriteDialog.h"
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
#include "PasswordDialog.h"
#endif
#include "PropertyName.h"
@@ -48,7 +48,7 @@ void CExtractCallbackImp::Init()
NumArchiveErrors = 0;
ThereAreMessageErrors = false;
- #ifndef _SFX
+ #ifndef Z7_SFX
NumFolders = NumFiles = 0;
NeedAddFile = false;
#endif
@@ -60,29 +60,27 @@ void CExtractCallbackImp::AddError_Message(LPCWSTR s)
ProgressDialog->Sync.AddError_Message(s);
}
-#ifndef _SFX
+#ifndef Z7_SFX
-STDMETHODIMP CExtractCallbackImp::SetNumFiles(UInt64
- #ifndef _SFX
- numFiles
- #endif
- )
+Z7_COM7F_IMF(CExtractCallbackImp::SetNumFiles(UInt64 numFiles))
{
- #ifndef _SFX
+ #ifdef Z7_SFX
+ UNUSED_VAR(numFiles)
+ #else
ProgressDialog->Sync.Set_NumFilesTotal(numFiles);
- #endif
+ #endif
return S_OK;
}
#endif
-STDMETHODIMP CExtractCallbackImp::SetTotal(UInt64 total)
+Z7_COM7F_IMF(CExtractCallbackImp::SetTotal(UInt64 total))
{
ProgressDialog->Sync.Set_NumBytesTotal(total);
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::SetCompleted(const UInt64 *value)
+Z7_COM7F_IMF(CExtractCallbackImp::SetCompleted(const UInt64 *value))
{
return ProgressDialog->Sync.Set_NumBytesCur(value);
}
@@ -139,7 +137,7 @@ HRESULT CExtractCallbackImp::Open_Finished()
return ProgressDialog->Sync.CheckStop();
}
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
HRESULT CExtractCallbackImp::Open_CryptoGetTextPassword(BSTR *password)
{
@@ -168,8 +166,8 @@ void CExtractCallbackImp::Open_Clear_PasswordWasAsked_Flag()
#endif
-#ifndef _SFX
-STDMETHODIMP CExtractCallbackImp::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
+#ifndef Z7_SFX
+Z7_COM7F_IMF(CExtractCallbackImp::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
{
ProgressDialog->Sync.Set_Ratio(inSize, outSize);
return S_OK;
@@ -177,13 +175,13 @@ STDMETHODIMP CExtractCallbackImp::SetRatioInfo(const UInt64 *inSize, const UInt6
#endif
/*
-STDMETHODIMP CExtractCallbackImp::SetTotalFiles(UInt64 total)
+Z7_COM7F_IMF(CExtractCallbackImp::SetTotalFiles(UInt64 total)
{
ProgressDialog->Sync.SetNumFilesTotal(total);
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::SetCompletedFiles(const UInt64 *value)
+Z7_COM7F_IMF(CExtractCallbackImp::SetCompletedFiles(const UInt64 *value)
{
if (value != NULL)
ProgressDialog->Sync.SetNumFilesCur(*value);
@@ -191,10 +189,10 @@ STDMETHODIMP CExtractCallbackImp::SetCompletedFiles(const UInt64 *value)
}
*/
-STDMETHODIMP CExtractCallbackImp::AskOverwrite(
+Z7_COM7F_IMF(CExtractCallbackImp::AskOverwrite(
const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize,
const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize,
- Int32 *answer)
+ Int32 *answer))
{
COverwriteDialog dialog;
@@ -223,7 +221,7 @@ STDMETHODIMP CExtractCallbackImp::AskOverwrite(
}
-STDMETHODIMP CExtractCallbackImp::PrepareOperation(const wchar_t *name, Int32 isFolder, Int32 askExtractMode, const UInt64 * /* position */)
+Z7_COM7F_IMF(CExtractCallbackImp::PrepareOperation(const wchar_t *name, Int32 isFolder, Int32 askExtractMode, const UInt64 * /* position */))
{
_isFolder = IntToBool(isFolder);
_currentFilePath = name;
@@ -241,7 +239,7 @@ STDMETHODIMP CExtractCallbackImp::PrepareOperation(const wchar_t *name, Int32 is
return ProgressDialog->Sync.Set_Status2(*msg, name, IntToBool(isFolder));
}
-STDMETHODIMP CExtractCallbackImp::MessageError(const wchar_t *s)
+Z7_COM7F_IMF(CExtractCallbackImp::MessageError(const wchar_t *s))
{
AddError_Message(s);
return S_OK;
@@ -254,9 +252,9 @@ HRESULT CExtractCallbackImp::MessageError(const char *message, const FString &pa
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
-STDMETHODIMP CExtractCallbackImp::ShowMessage(const wchar_t *s)
+Z7_COM7F_IMF(CExtractCallbackImp::ShowMessage(const wchar_t *s))
{
AddError_Message(s);
return S_OK;
@@ -272,25 +270,33 @@ void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, const wchar_t *fileNam
if (opRes == NArchive::NExtract::NOperationResult::kOK)
return;
+ #ifndef Z7_SFX
UINT messageID = 0;
+ #endif
UINT id = 0;
switch (opRes)
{
case NArchive::NExtract::NOperationResult::kUnsupportedMethod:
+ #ifndef Z7_SFX
messageID = IDS_EXTRACT_MESSAGE_UNSUPPORTED_METHOD;
+ #endif
id = IDS_EXTRACT_MSG_UNSUPPORTED_METHOD;
break;
case NArchive::NExtract::NOperationResult::kDataError:
+ #ifndef Z7_SFX
messageID = encrypted ?
IDS_EXTRACT_MESSAGE_DATA_ERROR_ENCRYPTED:
IDS_EXTRACT_MESSAGE_DATA_ERROR;
+ #endif
id = IDS_EXTRACT_MSG_DATA_ERROR;
break;
case NArchive::NExtract::NOperationResult::kCRCError:
+ #ifndef Z7_SFX
messageID = encrypted ?
IDS_EXTRACT_MESSAGE_CRC_ERROR_ENCRYPTED:
IDS_EXTRACT_MESSAGE_CRC_ERROR;
+ #endif
id = IDS_EXTRACT_MSG_CRC_ERROR;
break;
case NArchive::NExtract::NOperationResult::kUnavailable:
@@ -319,18 +325,19 @@ void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, const wchar_t *fileNam
}
UString msg;
- UString msgOld;
- #ifndef _SFX
+ #ifndef Z7_SFX
+ UString msgOld;
+ #ifdef Z7_LANG
if (id != 0)
LangString_OnlyFromLangFile(id, msg);
if (messageID != 0 && msg.IsEmpty())
LangString_OnlyFromLangFile(messageID, msgOld);
- #endif
-
+ #endif
if (msg.IsEmpty() && !msgOld.IsEmpty())
s = MyFormatNew(msgOld, fileName);
else
+ #endif
{
if (msg.IsEmpty() && id != 0)
LangString(id, msg);
@@ -339,7 +346,7 @@ void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, const wchar_t *fileNam
else
{
s += "Error #";
- s.Add_UInt32(opRes);
+ s.Add_UInt32((UInt32)opRes);
}
if (encrypted && opRes != NArchive::NExtract::NOperationResult::kWrongPassword)
@@ -354,7 +361,7 @@ void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, const wchar_t *fileNam
}
}
-STDMETHODIMP CExtractCallbackImp::SetOperationResult(Int32 opRes, Int32 encrypted)
+Z7_COM7F_IMF(CExtractCallbackImp::SetOperationResult(Int32 opRes, Int32 encrypted))
{
switch (opRes)
{
@@ -369,7 +376,7 @@ STDMETHODIMP CExtractCallbackImp::SetOperationResult(Int32 opRes, Int32 encrypte
}
}
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_isFolder)
NumFolders++;
else
@@ -380,7 +387,7 @@ STDMETHODIMP CExtractCallbackImp::SetOperationResult(Int32 opRes, Int32 encrypte
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::ReportExtractResult(Int32 opRes, Int32 encrypted, const wchar_t *name)
+Z7_COM7F_IMF(CExtractCallbackImp::ReportExtractResult(Int32 opRes, Int32 encrypted, const wchar_t *name))
{
if (opRes != NArchive::NExtract::NOperationResult::kOK)
{
@@ -397,8 +404,8 @@ STDMETHODIMP CExtractCallbackImp::ReportExtractResult(Int32 opRes, Int32 encrypt
HRESULT CExtractCallbackImp::BeforeOpen(const wchar_t *name, bool /* testMode */)
{
- #ifndef _SFX
- RINOK(ProgressDialog->Sync.CheckStop());
+ #ifndef Z7_SFX
+ RINOK(ProgressDialog->Sync.CheckStop())
ProgressDialog->Sync.Set_TitleFileName(name);
#endif
_currentArchivePath = name;
@@ -408,17 +415,17 @@ HRESULT CExtractCallbackImp::BeforeOpen(const wchar_t *name, bool /* testMode */
HRESULT CExtractCallbackImp::SetCurrentFilePath2(const wchar_t *path)
{
_currentFilePath = path;
- #ifndef _SFX
+ #ifndef Z7_SFX
ProgressDialog->Sync.Set_FilePath(path);
#endif
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
-HRESULT CExtractCallbackImp::SetCurrentFilePath(const wchar_t *path)
+Z7_COM7F_IMF(CExtractCallbackImp::SetCurrentFilePath(const wchar_t *path))
{
- #ifndef _SFX
+ #ifndef Z7_SFX
if (NeedAddFile)
NumFiles++;
NeedAddFile = true;
@@ -457,7 +464,7 @@ UString GetOpenArcErrorMessage(UInt32 errorFlags)
{
UString s;
- for (unsigned i = 0; i < ARRAY_SIZE(k_ErrorFlagsIds); i++)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(k_ErrorFlagsIds); i++)
{
UInt32 f = ((UInt32)1 << i);
if ((errorFlags & f) == 0)
@@ -649,7 +656,7 @@ HRESULT CExtractCallbackImp::ExtractResult(HRESULT result)
return S_OK;
}
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
HRESULT CExtractCallbackImp::SetPassword(const UString &password)
{
@@ -658,14 +665,14 @@ HRESULT CExtractCallbackImp::SetPassword(const UString &password)
return S_OK;
}
-STDMETHODIMP CExtractCallbackImp::CryptoGetTextPassword(BSTR *password)
+Z7_COM7F_IMF(CExtractCallbackImp::CryptoGetTextPassword(BSTR *password))
{
PasswordWasAsked = true;
if (!PasswordIsDefined)
{
CPasswordDialog dialog;
- #ifndef _SFX
- bool showPassword = NExtract::Read_ShowPassword();
+ #ifndef Z7_SFX
+ const bool showPassword = NExtract::Read_ShowPassword();
dialog.ShowPassword = showPassword;
#endif
ProgressDialog->WaitCreating();
@@ -673,7 +680,7 @@ STDMETHODIMP CExtractCallbackImp::CryptoGetTextPassword(BSTR *password)
return E_ABORT;
Password = dialog.Password;
PasswordIsDefined = true;
- #ifndef _SFX
+ #ifndef Z7_SFX
if (dialog.ShowPassword != showPassword)
NExtract::Save_ShowPassword(dialog.ShowPassword);
#endif
@@ -683,24 +690,24 @@ STDMETHODIMP CExtractCallbackImp::CryptoGetTextPassword(BSTR *password)
#endif
-#ifndef _SFX
+#ifndef Z7_SFX
-STDMETHODIMP CExtractCallbackImp::AskWrite(
+Z7_COM7F_IMF(CExtractCallbackImp::AskWrite(
const wchar_t *srcPath, Int32 srcIsFolder,
const FILETIME *srcTime, const UInt64 *srcSize,
const wchar_t *destPath,
BSTR *destPathResult,
- Int32 *writeAnswer)
+ Int32 *writeAnswer))
{
UString destPathResultTemp = destPath;
// RINOK(StringToBstr(destPath, destPathResult));
- *destPathResult = 0;
+ *destPathResult = NULL;
*writeAnswer = BoolToInt(false);
FString destPathSys = us2fs(destPath);
- bool srcIsFolderSpec = IntToBool(srcIsFolder);
+ const bool srcIsFolderSpec = IntToBool(srcIsFolder);
CFileInfo destFileInfo;
if (destFileInfo.Find(destPathSys))
@@ -709,7 +716,7 @@ STDMETHODIMP CExtractCallbackImp::AskWrite(
{
if (!destFileInfo.IsDir())
{
- RINOK(MessageError("Cannot replace file with folder with same name", destPathSys));
+ RINOK(MessageError("Cannot replace file with folder with same name", destPathSys))
return E_ABORT;
}
*writeAnswer = BoolToInt(false);
@@ -718,12 +725,12 @@ STDMETHODIMP CExtractCallbackImp::AskWrite(
if (destFileInfo.IsDir())
{
- RINOK(MessageError("Cannot replace folder with file with same name", destPathSys));
+ RINOK(MessageError("Cannot replace folder with file with same name", destPathSys))
*writeAnswer = BoolToInt(false);
return S_OK;
}
- switch (OverwriteMode)
+ switch ((int)OverwriteMode)
{
case NExtract::NOverwriteMode::kSkip:
return S_OK;
@@ -731,7 +738,7 @@ STDMETHODIMP CExtractCallbackImp::AskWrite(
{
Int32 overwriteResult;
UString destPathSpec = destPath;
- int slashPos = destPathSpec.ReverseFind_PathSepar();
+ const int slashPos = destPathSpec.ReverseFind_PathSepar();
destPathSpec.DeleteFrom((unsigned)(slashPos + 1));
destPathSpec += fs2us(destFileInfo.Name);
@@ -740,7 +747,7 @@ STDMETHODIMP CExtractCallbackImp::AskWrite(
&destFileInfo.MTime, &destFileInfo.Size,
srcPath,
srcTime, srcSize,
- &overwriteResult));
+ &overwriteResult))
switch (overwriteResult)
{
@@ -763,7 +770,7 @@ STDMETHODIMP CExtractCallbackImp::AskWrite(
{
if (!AutoRenamePath(destPathSys))
{
- RINOK(MessageError("Cannot create name for file", destPathSys));
+ RINOK(MessageError("Cannot create name for file", destPathSys))
return E_ABORT;
}
destPathResultTemp = fs2us(destPathSys);
@@ -774,7 +781,7 @@ STDMETHODIMP CExtractCallbackImp::AskWrite(
if (!NDir::DeleteFileAlways(destPathSys))
if (GetLastError() != ERROR_FILE_NOT_FOUND)
{
- RINOK(MessageError("Cannot delete output file", destPathSys));
+ RINOK(MessageError("Cannot delete output file", destPathSys))
return E_ABORT;
}
}
@@ -784,7 +791,7 @@ STDMETHODIMP CExtractCallbackImp::AskWrite(
}
-STDMETHODIMP CExtractCallbackImp::UseExtractToStream(Int32 *res)
+Z7_COM7F_IMF(CExtractCallbackImp::UseExtractToStream(Int32 *res))
{
*res = BoolToInt(StreamMode);
return S_OK;
@@ -794,7 +801,7 @@ static HRESULT GetTime(IGetProp *getProp, PROPID propID, FILETIME &ft, bool &ftD
{
ftDefined = false;
NCOM::CPropVariant prop;
- RINOK(getProp->GetProp(propID, &prop));
+ RINOK(getProp->GetProp(propID, &prop))
if (prop.vt == VT_FILETIME)
{
ft = prop.filetime;
@@ -810,7 +817,7 @@ static HRESULT GetItemBoolProp(IGetProp *getProp, PROPID propID, bool &result)
{
NCOM::CPropVariant prop;
result = false;
- RINOK(getProp->GetProp(propID, &prop));
+ RINOK(getProp->GetProp(propID, &prop))
if (prop.vt == VT_BOOL)
result = VARIANT_BOOLToBool(prop.boolVal);
else if (prop.vt != VT_EMPTY)
@@ -819,13 +826,13 @@ static HRESULT GetItemBoolProp(IGetProp *getProp, PROPID propID, bool &result)
}
-STDMETHODIMP CExtractCallbackImp::GetStream7(const wchar_t *name,
+Z7_COM7F_IMF(CExtractCallbackImp::GetStream7(const wchar_t *name,
Int32 isDir,
ISequentialOutStream **outStream, Int32 askExtractMode,
- IGetProp *getProp)
+ IGetProp *getProp))
{
COM_TRY_BEGIN
- *outStream = 0;
+ *outStream = NULL;
_newVirtFileWasAdded = false;
_hashStreamWasUsed = false;
_needUpdateStat = false;
@@ -841,20 +848,20 @@ STDMETHODIMP CExtractCallbackImp::GetStream7(const wchar_t *name,
_filePath = name;
_isFolder = IntToBool(isDir);
_curSize = 0;
- _curSizeDefined = false;
+ _curSize_Defined = false;
UInt64 size = 0;
bool sizeDefined;
{
NCOM::CPropVariant prop;
- RINOK(getProp->GetProp(kpidSize, &prop));
+ RINOK(getProp->GetProp(kpidSize, &prop))
sizeDefined = ConvertPropVariantToUInt64(prop, size);
}
if (sizeDefined)
{
_curSize = size;
- _curSizeDefined = true;
+ _curSize_Defined = true;
}
if (askExtractMode != NArchive::NExtract::NAskMode::kExtract &&
@@ -874,12 +881,12 @@ STDMETHODIMP CExtractCallbackImp::GetStream7(const wchar_t *name,
file.IsAltStream = _isAltStream;
file.Size = 0;
- RINOK(GetTime(getProp, kpidCTime, file.CTime, file.CTimeDefined));
- RINOK(GetTime(getProp, kpidATime, file.ATime, file.ATimeDefined));
- RINOK(GetTime(getProp, kpidMTime, file.MTime, file.MTimeDefined));
+ RINOK(GetTime(getProp, kpidCTime, file.CTime, file.CTimeDefined))
+ RINOK(GetTime(getProp, kpidATime, file.ATime, file.ATimeDefined))
+ RINOK(GetTime(getProp, kpidMTime, file.MTime, file.MTimeDefined))
NCOM::CPropVariant prop;
- RINOK(getProp->GetProp(kpidAttrib, &prop));
+ RINOK(getProp->GetProp(kpidAttrib, &prop))
if (prop.vt == VT_UI4)
{
file.Attrib = prop.ulVal;
@@ -909,7 +916,7 @@ STDMETHODIMP CExtractCallbackImp::GetStream7(const wchar_t *name,
COM_TRY_END
}
-STDMETHODIMP CExtractCallbackImp::PrepareOperation7(Int32 askExtractMode)
+Z7_COM7F_IMF(CExtractCallbackImp::PrepareOperation7(Int32 askExtractMode))
{
COM_TRY_BEGIN
_needUpdateStat = (
@@ -934,21 +941,21 @@ STDMETHODIMP CExtractCallbackImp::PrepareOperation7(Int32 askExtractMode)
COM_TRY_END
}
-STDMETHODIMP CExtractCallbackImp::SetOperationResult8(Int32 opRes, Int32 encrypted, UInt64 size)
+Z7_COM7F_IMF(CExtractCallbackImp::SetOperationResult8(Int32 opRes, Int32 encrypted, UInt64 size))
{
COM_TRY_BEGIN
if (VirtFileSystem && _newVirtFileWasAdded)
{
// FIXME: probably we must request file size from VirtFileSystem
// _curSize = VirtFileSystem->GetLastFileSize()
- // _curSizeDefined = true;
- RINOK(VirtFileSystemSpec->CloseMemFile());
+ // _curSize_Defined = true;
+ RINOK(VirtFileSystemSpec->CloseMemFile())
}
if (_hashStream && _hashStreamWasUsed)
{
_hashStreamSpec->_hash->Final(_isFolder, _isAltStream, _filePath);
_curSize = _hashStreamSpec->GetSize();
- _curSizeDefined = true;
+ _curSize_Defined = true;
_hashStreamSpec->ReleaseStream();
_hashStreamWasUsed = false;
}
@@ -965,7 +972,7 @@ STDMETHODIMP CExtractCallbackImp::SetOperationResult8(Int32 opRes, Int32 encrypt
// static const UInt32 kBlockSize = ((UInt32)1 << 31);
-STDMETHODIMP CVirtFileSystem::Write(const void *data, UInt32 size, UInt32 *processedSize)
+Z7_COM7F_IMF(CVirtFileSystem::Write(const void *data, UInt32 size, UInt32 *processedSize))
{
if (processedSize)
*processedSize = 0;
@@ -1002,7 +1009,7 @@ STDMETHODIMP CVirtFileSystem::Write(const void *data, UInt32 size, UInt32 *proce
}
_fileMode = true;
}
- RINOK(FlushToDisk(false));
+ RINOK(FlushToDisk(false))
return _outFileStream->Write(data, size, processedSize);
}
@@ -1026,7 +1033,7 @@ HRESULT CVirtFileSystem::FlushToDisk(bool closeLast)
// MessageBoxMyError(UString("Can't create file ") + fs2us(tempFilePath));
}
_fileIsOpen = true;
- RINOK(WriteStream(_outFileStream, file.Data, (size_t)file.Size));
+ RINOK(WriteStream(_outFileStream, file.Data, (size_t)file.Size))
}
if (_numFlushed == Files.Size() - 1 && !closeLast)
break;
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h
index 02578bb421c..c2aa4700c85 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h
@@ -1,42 +1,42 @@
// ExtractCallback.h
-#ifndef __EXTRACT_CALLBACK_H
-#define __EXTRACT_CALLBACK_H
+#ifndef ZIP7_INC_EXTRACT_CALLBACK_H
+#define ZIP7_INC_EXTRACT_CALLBACK_H
#include "../../../../C/Alloc.h"
#include "../../../Common/MyCom.h"
#include "../../../Common/StringConvert.h"
-#ifndef _SFX
+#ifndef Z7_SFX
#include "../Agent/IFolderArchive.h"
#endif
#include "../Common/ArchiveExtractCallback.h"
#include "../Common/ArchiveOpenCallback.h"
-#ifndef _NO_CRYPTO
+#ifndef Z7_NO_CRYPTO
#include "../../IPassword.h"
#endif
-#ifndef _SFX
+#ifndef Z7_SFX
#include "IFolder.h"
#endif
#include "ProgressDialog2.h"
-#ifdef LANG
-#include "LangUtils.h"
+#ifdef Z7_LANG
+// #include "LangUtils.h"
#endif
-#ifndef _SFX
+#ifndef Z7_SFX
class CGrowBuf
{
Byte *_items;
size_t _size;
- CLASS_NO_COPY(CGrowBuf);
+ Z7_CLASS_NO_COPY(CGrowBuf)
public:
bool ReAlloc_KeepData(size_t newSize, size_t keepSize)
@@ -52,7 +52,7 @@ public:
return true;
}
- CGrowBuf(): _items(0), _size(0) {}
+ CGrowBuf(): _items(NULL), _size(0) {}
~CGrowBuf() { MyFree(_items); }
operator Byte *() { return _items; }
@@ -92,10 +92,11 @@ struct CVirtFile
IsAltStream(false) {}
};
-class CVirtFileSystem:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_NOQIB_1(
+ CVirtFileSystem,
+ ISequentialOutStream
+)
UInt64 _totalAllocSize;
size_t _pos;
@@ -156,104 +157,86 @@ public:
HRESULT CloseFile(const FString &path);
HRESULT FlushToDisk(bool closeLast);
size_t GetPos() const { return _pos; }
-
- MY_UNKNOWN_IMP
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
};
#endif
-class CExtractCallbackImp:
- public IExtractCallbackUI, // it includes IFolderArchiveExtractCallback
- public IOpenCallbackUI,
+class CExtractCallbackImp Z7_final:
+ public IFolderArchiveExtractCallback,
+ /* IExtractCallbackUI:
+ before v23.00 : it included IFolderArchiveExtractCallback
+ since v23.00 : it doesn't include IFolderArchiveExtractCallback
+ */
+ public IExtractCallbackUI, // NON-COM interface since 23.00
+ public IOpenCallbackUI, // NON-COM interface
public IFolderArchiveExtractCallback2,
- #ifndef _SFX
+ #ifndef Z7_SFX
public IFolderOperationsExtractCallback,
public IFolderExtractToStreamCallback,
public ICompressProgressInfo,
- #endif
- #ifndef _NO_CRYPTO
+ #endif
+ #ifndef Z7_NO_CRYPTO
public ICryptoGetTextPassword,
- #endif
+ #endif
public CMyUnknownImp
{
- HRESULT MessageError(const char *message, const FString &path);
- void Add_ArchiveName_Error();
-public:
- MY_QUERYINTERFACE_BEGIN2(IFolderArchiveExtractCallback)
- MY_QUERYINTERFACE_ENTRY(IFolderArchiveExtractCallback2)
- #ifndef _SFX
- MY_QUERYINTERFACE_ENTRY(IFolderOperationsExtractCallback)
- MY_QUERYINTERFACE_ENTRY(IFolderExtractToStreamCallback)
- MY_QUERYINTERFACE_ENTRY(ICompressProgressInfo)
- #endif
- #ifndef _NO_CRYPTO
- MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- INTERFACE_IProgress(;)
- INTERFACE_IOpenCallbackUI(;)
- INTERFACE_IFolderArchiveExtractCallback(;)
- INTERFACE_IFolderArchiveExtractCallback2(;)
- // STDMETHOD(SetTotalFiles)(UInt64 total);
- // STDMETHOD(SetCompletedFiles)(const UInt64 *value);
-
- INTERFACE_IExtractCallbackUI(;)
-
- #ifndef _SFX
- // IFolderOperationsExtractCallback
- STDMETHOD(AskWrite)(
- const wchar_t *srcPath,
- Int32 srcIsFolder,
- const FILETIME *srcTime,
- const UInt64 *srcSize,
- const wchar_t *destPathRequest,
- BSTR *destPathResult,
- Int32 *writeAnswer);
- STDMETHOD(ShowMessage)(const wchar_t *message);
- STDMETHOD(SetCurrentFilePath)(const wchar_t *filePath);
- STDMETHOD(SetNumFiles)(UInt64 numFiles);
- INTERFACE_IFolderExtractToStreamCallback(;)
- STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
- #endif
+ Z7_COM_QI_BEGIN2(IFolderArchiveExtractCallback)
+ Z7_COM_QI_ENTRY(IFolderArchiveExtractCallback2)
+ #ifndef Z7_SFX
+ Z7_COM_QI_ENTRY(IFolderOperationsExtractCallback)
+ Z7_COM_QI_ENTRY(IFolderExtractToStreamCallback)
+ Z7_COM_QI_ENTRY(ICompressProgressInfo)
+ #endif
+ #ifndef Z7_NO_CRYPTO
+ Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_IMP(IExtractCallbackUI)
+ Z7_IFACE_IMP(IOpenCallbackUI)
+ Z7_IFACE_COM7_IMP(IProgress)
+ Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback)
+ Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback2)
+ #ifndef Z7_SFX
+ Z7_IFACE_COM7_IMP(IFolderOperationsExtractCallback)
+ Z7_IFACE_COM7_IMP(IFolderExtractToStreamCallback)
+ Z7_IFACE_COM7_IMP(ICompressProgressInfo)
+ #endif
+ #ifndef Z7_NO_CRYPTO
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
+ #endif
- // ICryptoGetTextPassword
- #ifndef _NO_CRYPTO
- STDMETHOD(CryptoGetTextPassword)(BSTR *password);
- #endif
-private:
UString _currentArchivePath;
bool _needWriteArchivePath;
- UString _currentFilePath;
bool _isFolder;
+ UString _currentFilePath;
+ UString _filePath;
+ #ifndef Z7_SFX
+ bool _needUpdateStat;
+ bool _newVirtFileWasAdded;
bool _isAltStream;
+ bool _curSize_Defined;
UInt64 _curSize;
- bool _curSizeDefined;
- UString _filePath;
// bool _extractMode;
// bool _testMode;
- bool _newVirtFileWasAdded;
- bool _needUpdateStat;
-
-
- HRESULT SetCurrentFilePath2(const wchar_t *filePath);
- void AddError_Message(LPCWSTR message);
-
- #ifndef _SFX
bool _hashStreamWasUsed;
COutStreamWithHash *_hashStreamSpec;
CMyComPtr<ISequentialOutStream> _hashStream;
IHashCalc *_hashCalc; // it's for stat in Test operation
- #endif
+ #endif
+
+ HRESULT SetCurrentFilePath2(const wchar_t *filePath);
+ void AddError_Message(LPCWSTR message);
+ HRESULT MessageError(const char *message, const FString &path);
+ void Add_ArchiveName_Error();
public:
- #ifndef _SFX
+ #ifndef Z7_SFX
CVirtFileSystem *VirtFileSystemSpec;
CMyComPtr<ISequentialOutStream> VirtFileSystem;
#endif
@@ -263,7 +246,7 @@ public:
bool StreamMode;
CProgressDialog *ProgressDialog;
- #ifndef _SFX
+ #ifndef Z7_SFX
UInt64 NumFolders;
UInt64 NumFiles;
bool NeedAddFile;
@@ -272,7 +255,7 @@ public:
bool ThereAreMessageErrors;
NExtract::NOverwriteMode::EEnum OverwriteMode;
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
bool PasswordIsDefined;
bool PasswordWasAsked;
UString Password;
@@ -290,13 +273,13 @@ public:
bool MultiArcMode;
CExtractCallbackImp():
- #ifndef _SFX
+ #ifndef Z7_SFX
_hashCalc(NULL),
#endif
ProcessAltStreams(true),
StreamMode(false),
OverwriteMode(NExtract::NOverwriteMode::kAsk),
- #ifndef _NO_CRYPTO
+ #ifndef Z7_NO_CRYPTO
PasswordIsDefined(false),
PasswordWasAsked(false),
#endif
@@ -308,7 +291,7 @@ public:
~CExtractCallbackImp();
void Init();
- #ifndef _SFX
+ #ifndef Z7_SFX
void SetHashCalc(IHashCalc *hashCalc) { _hashCalc = hashCalc; }
void SetHashMethods(IHashCalc *hash)
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/FormatUtils.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/FormatUtils.h
index 993e803390f..1db08eff323 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/FormatUtils.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/FormatUtils.h
@@ -1,7 +1,7 @@
// FormatUtils.h
-#ifndef __FORMAT_UTILS_H
-#define __FORMAT_UTILS_H
+#ifndef ZIP7_INC_FORMAT_UTILS_H
+#define ZIP7_INC_FORMAT_UTILS_H
#include "../../../Common/MyTypes.h"
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/LangUtils.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/LangUtils.h
index d63a443c6d3..d53d270eade 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/LangUtils.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/LangUtils.h
@@ -1,13 +1,16 @@
// LangUtils.h
-#ifndef __LANG_UTILS_H
-#define __LANG_UTILS_H
+#ifndef ZIP7_INC_LANG_UTILS_H
+#define ZIP7_INC_LANG_UTILS_H
-#include "../../../Windows/ResourceString.h"
+#include "../../../Common/Lang.h"
-#ifdef LANG
+#include "../../../Windows/ResourceString.h"
extern UString g_LangID;
+extern CLang g_Lang;
+
+#ifdef Z7_LANG
struct CIDLangPair
{
@@ -17,11 +20,11 @@ struct CIDLangPair
void ReloadLang();
void LoadLangOneTime();
-FString GetLangDirPrefix();
void LangSetDlgItemText(HWND dialog, UInt32 controlID, UInt32 langID);
void LangSetDlgItems(HWND dialog, const UInt32 *ids, unsigned numItems);
void LangSetDlgItems_Colon(HWND dialog, const UInt32 *ids, unsigned numItems);
+void LangSetDlgItems_RemoveColon(HWND dialog, const UInt32 *ids, unsigned numItems);
void LangSetWindowText(HWND window, UInt32 langID);
UString LangString(UInt32 langID);
@@ -37,4 +40,9 @@ inline void AddLangString(UString &s, UInt32 langID) { s += NWindows::MyLoadStri
#endif
+FString GetLangDirPrefix();
+// bool LangOpen(CLang &lang, CFSTR fileName);
+
+void Lang_GetShortNames_for_DefaultLang(AStringVector &names, unsigned &subLang);
+
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h
index 48a95359e6f..325babcd492 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h
@@ -1,11 +1,54 @@
// MyWindowsNew.h
-#ifndef __MY_WINDOWS_NEW_H
-#define __MY_WINDOWS_NEW_H
+#ifndef ZIP7_INC_MY_WINDOWS_NEW_H
+#define ZIP7_INC_MY_WINDOWS_NEW_H
-#ifdef _MSC_VER
+#if defined(__MINGW32__) || defined(__MINGW64__) || defined(__MINGW32_VERSION)
+#include <shobjidl.h>
+#if defined(__MINGW32_VERSION) && !defined(__ITaskbarList3_INTERFACE_DEFINED__)
+// for old mingw
+extern "C" {
+DEFINE_GUID(IID_ITaskbarList3, 0xEA1AFB91, 0x9E28, 0x4B86, 0x90, 0xE9, 0x9E, 0x9F, 0x8A, 0x5E, 0xEF, 0xAF);
+DEFINE_GUID(CLSID_TaskbarList, 0x56fdf344, 0xfd6d, 0x11d0, 0x95,0x8a, 0x00,0x60,0x97,0xc9,0xa0,0x90);
+}
+#endif
+
+#else // is not __MINGW*
+
+#ifndef Z7_OLD_WIN_SDK
#include <ShObjIdl.h>
+#else
+
+#ifndef HIMAGELIST
+struct _IMAGELIST;
+typedef struct _IMAGELIST* HIMAGELIST;
+#endif
+
+#ifndef __ITaskbarList_INTERFACE_DEFINED__
+#define __ITaskbarList_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ITaskbarList, 0x56FDF342, 0xFD6D, 0x11d0, 0x95, 0x8A, 0x00, 0x60, 0x97, 0xC9, 0xA0, 0x90);
+struct ITaskbarList: public IUnknown
+{
+ STDMETHOD(HrInit)(void) = 0;
+ STDMETHOD(AddTab)(HWND hwnd) = 0;
+ STDMETHOD(DeleteTab)(HWND hwnd) = 0;
+ STDMETHOD(ActivateTab)(HWND hwnd) = 0;
+ STDMETHOD(SetActiveAlt)(HWND hwnd) = 0;
+};
+#endif // __ITaskbarList_INTERFACE_DEFINED__
+
+#ifndef __ITaskbarList2_INTERFACE_DEFINED__
+#define __ITaskbarList2_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ITaskbarList2, 0x602D4995, 0xB13A, 0x429b, 0xA6, 0x6E, 0x19, 0x35, 0xE4, 0x4F, 0x43, 0x17);
+struct ITaskbarList2: public ITaskbarList
+{
+ STDMETHOD(MarkFullscreenWindow)(HWND hwnd, BOOL fFullscreen) = 0;
+};
+#endif // __ITaskbarList2_INTERFACE_DEFINED__
+
+#endif // Z7_OLD_WIN_SDK
+
#ifndef __ITaskbarList3_INTERFACE_DEFINED__
#define __ITaskbarList3_INTERFACE_DEFINED__
@@ -69,8 +112,8 @@ struct ITaskbarList3: public ITaskbarList2
STDMETHOD(SetThumbnailClip)(HWND hwnd, RECT *prcClip) = 0;
};
-#endif
+#endif // __ITaskbarList3_INTERFACE_DEFINED__
-#endif
+#endif // __MINGW*
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp
index b455b14a3ca..096527ccf96 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp
@@ -17,7 +17,7 @@
using namespace NWindows;
-#ifdef LANG
+#ifdef Z7_LANG
static const UInt32 kLangIDs[] =
{
IDT_OVERWRITE_HEADER,
@@ -48,7 +48,7 @@ void COverwriteDialog::ReduceString(UString &s)
}
}
-void COverwriteDialog::SetFileInfoControl(int textID, int iconID,
+void COverwriteDialog::SetFileInfoControl(unsigned textID, unsigned iconID,
const NOverwriteDialog::CFileInfo &fileInfo)
{
UString sizeString;
@@ -96,9 +96,9 @@ void COverwriteDialog::SetFileInfoControl(int textID, int iconID,
bool COverwriteDialog::OnInit()
{
- #ifdef LANG
+ #ifdef Z7_LANG
LangSetWindowText(*this, IDD_OVERWRITE);
- LangSetDlgItems(*this, kLangIDs, ARRAY_SIZE(kLangIDs));
+ LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
#endif
SetFileInfoControl(IDT_OVERWRITE_OLD_FILE_SIZE_TIME, IDI_OVERWRITE_OLD_FILE, OldFileInfo);
SetFileInfoControl(IDT_OVERWRITE_NEW_FILE_SIZE_TIME, IDI_OVERWRITE_NEW_FILE, NewFileInfo);
@@ -122,7 +122,7 @@ bool COverwriteDialog::OnInit()
return CModalDialog::OnInit();
}
-bool COverwriteDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+bool COverwriteDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
switch (buttonID)
{
@@ -131,7 +131,7 @@ bool COverwriteDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
case IDB_YES_TO_ALL:
case IDB_NO_TO_ALL:
case IDB_AUTO_RENAME:
- End(buttonID);
+ End((INT_PTR)buttonID);
return true;
}
return CModalDialog::OnButtonClicked(buttonID, buttonHWND);
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h
index 24e56cac987..a9ca99158ee 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h
@@ -1,7 +1,7 @@
// OverwriteDialog.h
-#ifndef __OVERWRITE_DIALOG_H
-#define __OVERWRITE_DIALOG_H
+#ifndef ZIP7_INC_OVERWRITE_DIALOG_H
+#define ZIP7_INC_OVERWRITE_DIALOG_H
#include "../../../Windows/Control/Dialog.h"
@@ -49,9 +49,9 @@ class COverwriteDialog: public NWindows::NControl::CModalDialog
{
bool _isBig;
- void SetFileInfoControl(int textID, int iconID, const NOverwriteDialog::CFileInfo &fileInfo);
- virtual bool OnInit();
- bool OnButtonClicked(int buttonID, HWND buttonHWND);
+ void SetFileInfoControl(unsigned textID, unsigned iconID, const NOverwriteDialog::CFileInfo &fileInfo);
+ virtual bool OnInit() Z7_override;
+ virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
void ReduceString(UString &s);
public:
@@ -61,7 +61,7 @@ public:
COverwriteDialog(): ShowExtraButtons(true), DefaultButton_is_NO(false) {}
- INT_PTR Create(HWND parent = 0)
+ INT_PTR Create(HWND parent = NULL)
{
BIG_DIALOG_SIZE(280, 200);
#ifdef UNDER_CE
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp
index 6ead39c3764..bf995802aba 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp
@@ -4,11 +4,11 @@
#include "PasswordDialog.h"
-#ifdef LANG
+#ifdef Z7_LANG
#include "LangUtils.h"
#endif
-#ifdef LANG
+#ifdef Z7_LANG
static const UInt32 kLangIDs[] =
{
IDT_PASSWORD_ENTER,
@@ -30,9 +30,9 @@ void CPasswordDialog::SetTextSpec()
bool CPasswordDialog::OnInit()
{
- #ifdef LANG
+ #ifdef Z7_LANG
LangSetWindowText(*this, IDD_PASSWORD);
- LangSetDlgItems(*this, kLangIDs, ARRAY_SIZE(kLangIDs));
+ LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
#endif
_passwordEdit.Attach(GetItem(IDE_PASSWORD_PASSWORD));
CheckButton(IDX_PASSWORD_SHOW, ShowPassword);
@@ -40,7 +40,7 @@ bool CPasswordDialog::OnInit()
return CModalDialog::OnInit();
}
-bool CPasswordDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+bool CPasswordDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
if (buttonID == IDX_PASSWORD_SHOW)
{
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h
index 339ebdaf072..e05c4adf7e5 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h
@@ -1,7 +1,7 @@
// PasswordDialog.h
-#ifndef __PASSWORD_DIALOG_H
-#define __PASSWORD_DIALOG_H
+#ifndef ZIP7_INC_PASSWORD_DIALOG_H
+#define ZIP7_INC_PASSWORD_DIALOG_H
#include "../../../Windows/Control/Dialog.h"
#include "../../../Windows/Control/Edit.h"
@@ -12,9 +12,9 @@ class CPasswordDialog: public NWindows::NControl::CModalDialog
{
NWindows::NControl::CEdit _passwordEdit;
- virtual void OnOK();
- virtual bool OnInit();
- virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
+ virtual void OnOK() Z7_override;
+ virtual bool OnInit() Z7_override;
+ virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
void SetTextSpec();
void ReadControls();
public:
@@ -22,7 +22,7 @@ public:
bool ShowPassword;
CPasswordDialog(): ShowPassword(false) {}
- INT_PTR Create(HWND parentWindow = 0) { return CModalDialog::Create(IDD_PASSWORD, parentWindow); }
+ INT_PTR Create(HWND parentWindow = NULL) { return CModalDialog::Create(IDD_PASSWORD, parentWindow); }
};
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp
index b688a901506..fc6f559923f 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp
@@ -15,7 +15,7 @@ extern HINSTANCE g_hInstance;
static const UINT_PTR kTimerID = 3;
static const UINT kTimerElapse = 100;
-#ifdef LANG
+#ifdef Z7_LANG
#include "LangUtils.h"
#endif
@@ -32,7 +32,7 @@ HRESULT CProgressSync::ProcessStopAndPause()
return S_OK;
}
-#ifndef _SFX
+#ifndef Z7_SFX
CProgressDialog::~CProgressDialog()
{
AddToTitle(L"");
@@ -45,15 +45,17 @@ void CProgressDialog::AddToTitle(LPCWSTR s)
#endif
+#define UNDEFINED_VAL ((UInt64)(Int64)-1)
+
bool CProgressDialog::OnInit()
{
- _range = (UInt64)(Int64)-1;
- _prevPercentValue = -1;
+ _range = UNDEFINED_VAL;
+ _prevPercentValue = UNDEFINED_VAL;
_wasCreated = true;
_dialogCreatedEvent.Set();
- #ifdef LANG
+ #ifdef Z7_LANG
LangSetDlgItems(*this, NULL, 0);
#endif
@@ -114,7 +116,7 @@ bool CProgressDialog::OnTimer(WPARAM /* timerID */, LPARAM /* callback */)
if (total == 0)
total = 1;
- int percentValue = (int)(completed * 100 / total);
+ const UInt64 percentValue = completed * 100 / total;
if (percentValue != _prevPercentValue)
{
wchar_t s[64];
@@ -122,7 +124,7 @@ bool CProgressDialog::OnTimer(WPARAM /* timerID */, LPARAM /* callback */)
UString title = s;
title += "% ";
SetText(title + _title);
- #ifndef _SFX
+ #ifndef Z7_SFX
AddToTitle(title + MainAddTitle);
#endif
_prevPercentValue = percentValue;
@@ -159,7 +161,7 @@ bool CProgressDialog::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
return CModalDialog::OnMessage(message, wParam, lParam);
}
-bool CProgressDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+bool CProgressDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
switch (buttonID)
{
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h
index 35c182a8121..1fe9587a541 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h
@@ -1,7 +1,7 @@
// ProgressDialog.h
-#ifndef __PROGRESS_DIALOG_H
-#define __PROGRESS_DIALOG_H
+#ifndef ZIP7_INC_PROGRESS_DIALOG_H
+#define ZIP7_INC_PROGRESS_DIALOG_H
#include "../../../Windows/Synchronization.h"
#include "../../../Windows/Thread.h"
@@ -85,24 +85,27 @@ private:
UInt64 _range;
NWindows::NControl::CProgressBar m_ProgressBar;
- int _prevPercentValue;
+ UInt64 _prevPercentValue;
bool _wasCreated;
bool _needClose;
bool _inCancelMessageBox;
bool _externalCloseMessageWasReceived;
- bool OnTimer(WPARAM timerID, LPARAM callback);
+ virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
+ virtual bool OnTimer(WPARAM timerID, LPARAM callback) Z7_override;
+ virtual bool OnInit() Z7_override;
+ virtual void OnCancel() Z7_override;
+ virtual void OnOK() Z7_override;
+ virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam) Z7_override;
+
void SetRange(UInt64 range);
void SetPos(UInt64 pos);
- virtual bool OnInit();
- virtual void OnCancel();
- virtual void OnOK();
+
NWindows::NSynchronization::CManualResetEvent _dialogCreatedEvent;
- #ifndef _SFX
+ #ifndef Z7_SFX
void AddToTitle(LPCWSTR string);
#endif
- bool OnButtonClicked(int buttonID, HWND buttonHWND);
void WaitCreating() { _dialogCreatedEvent.Lock(); }
void CheckNeedClose();
@@ -111,7 +114,7 @@ public:
CProgressSync Sync;
int IconID;
- #ifndef _SFX
+ #ifndef Z7_SFX
HWND MainWindow;
UString MainTitle;
UString MainAddTitle;
@@ -119,8 +122,8 @@ public:
#endif
CProgressDialog(): _timer(0)
- #ifndef _SFX
- ,MainWindow(0)
+ #ifndef Z7_SFX
+ ,MainWindow(NULL)
#endif
{
IconID = -1;
@@ -133,7 +136,7 @@ public:
throw 1334987;
}
- INT_PTR Create(const UString &title, NWindows::CThread &thread, HWND wndParent = 0)
+ INT_PTR Create(const UString &title, NWindows::CThread &thread, HWND wndParent = NULL)
{
_title = title;
INT_PTR res = CModalDialog::Create(IDD_PROGRESS, wndParent);
@@ -146,8 +149,6 @@ public:
kCloseMessage = WM_APP + 1
};
- virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
-
void ProcessWasFinished()
{
WaitCreating();
@@ -155,7 +156,7 @@ public:
PostMsg(kCloseMessage);
else
_needClose = true;
- };
+ }
};
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp
index 54273d0ce12..1521d83ceca 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp
@@ -2,6 +2,10 @@
#include "StdAfx.h"
+#ifdef Z7_OLD_WIN_SDK
+#include <ShlGuid.h>
+#endif
+
#include "../../../Common/IntToString.h"
#include "../../../Common/StringConvert.h"
@@ -43,7 +47,7 @@ static const UINT kCreateDelay =
static const DWORD kPauseSleepTime = 100;
-#ifdef LANG
+#ifdef Z7_LANG
static const UInt32 kLangIDs[] =
{
@@ -67,19 +71,19 @@ static const UInt32 kLangIDs_Colon[] =
#endif
-#define UNDEFINED_VAL ((UInt64)(Int64)-1)
-#define INIT_AS_UNDEFINED(v) v = UNDEFINED_VAL;
-#define IS_UNDEFINED_VAL(v) ((v) == UNDEFINED_VAL)
-#define IS_DEFINED_VAL(v) ((v) != UNDEFINED_VAL)
+#define UNDEFINED_VAL ((UInt64)(Int64)-1)
+#define INIT_AS_UNDEFINED(v) v = UNDEFINED_VAL;
+#define IS_UNDEFINED_VAL(v) ((v) == UNDEFINED_VAL)
+#define IS_DEFINED_VAL(v) ((v) != UNDEFINED_VAL)
CProgressSync::CProgressSync():
_stopped(false), _paused(false),
_bytesProgressMode(true),
+ _isDir(false),
_totalBytes(UNDEFINED_VAL), _completedBytes(0),
_totalFiles(UNDEFINED_VAL), _curFiles(0),
_inSize(UNDEFINED_VAL),
- _outSize(UNDEFINED_VAL),
- _isDir(false)
+ _outSize(UNDEFINED_VAL)
{}
#define CHECK_STOP if (_stopped) return E_ABORT; if (!_paused) return S_OK;
@@ -228,7 +232,7 @@ void CProgressSync::AddError_Message_Name(const wchar_t *message, const wchar_t
AddError_Message(s);
}
-void CProgressSync::AddError_Code_Name(DWORD systemError, const wchar_t *name)
+void CProgressSync::AddError_Code_Name(HRESULT systemError, const wchar_t *name)
{
UString s = NError::MyFormatMessage(systemError);
if (systemError == 0)
@@ -262,20 +266,20 @@ CProgressDialog::CProgressDialog():
throw 1334987;
if (_createDialogEvent.Create() != S_OK)
throw 1334987;
- #ifdef __ITaskbarList3_INTERFACE_DEFINED__
+ // #ifdef __ITaskbarList3_INTERFACE_DEFINED__
CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, (void**)&_taskbarList);
if (_taskbarList)
_taskbarList->HrInit();
- #endif
+ // #endif
}
-#ifndef _SFX
+#ifndef Z7_SFX
CProgressDialog::~CProgressDialog()
{
- #ifdef __ITaskbarList3_INTERFACE_DEFINED__
+ // #ifdef __ITaskbarList3_INTERFACE_DEFINED__
SetTaskbarProgressState(TBPF_NOPROGRESS);
- #endif
+ // #endif
AddToTitle(L"");
}
void CProgressDialog::AddToTitle(LPCWSTR s)
@@ -292,7 +296,7 @@ void CProgressDialog::AddToTitle(LPCWSTR s)
void CProgressDialog::SetTaskbarProgressState()
{
- #ifdef __ITaskbarList3_INTERFACE_DEFINED__
+ // #ifdef __ITaskbarList3_INTERFACE_DEFINED__
if (_taskbarList && _hwndForTaskbar)
{
TBPFLAG tbpFlags;
@@ -302,7 +306,7 @@ void CProgressDialog::SetTaskbarProgressState()
tbpFlags = _errorsWereDisplayed ? TBPF_ERROR: TBPF_NORMAL;
SetTaskbarProgressState(tbpFlags);
}
- #endif
+ // #endif
}
static const unsigned kTitleFileNameSizeLimit = 36;
@@ -331,23 +335,23 @@ bool CProgressDialog::OnInit()
if (!_hwndForTaskbar)
_hwndForTaskbar = *this;
- INIT_AS_UNDEFINED(_progressBar_Range);
- INIT_AS_UNDEFINED(_progressBar_Pos);
+ INIT_AS_UNDEFINED(_progressBar_Range)
+ INIT_AS_UNDEFINED(_progressBar_Pos)
- INIT_AS_UNDEFINED(_prevPercentValue);
- INIT_AS_UNDEFINED(_prevElapsedSec);
- INIT_AS_UNDEFINED(_prevRemainingSec);
+ INIT_AS_UNDEFINED(_prevPercentValue)
+ INIT_AS_UNDEFINED(_prevElapsedSec)
+ INIT_AS_UNDEFINED(_prevRemainingSec)
- INIT_AS_UNDEFINED(_prevSpeed);
+ INIT_AS_UNDEFINED(_prevSpeed)
_prevSpeed_MoveBits = 0;
_prevTime = ::GetTickCount();
_elapsedTime = 0;
- INIT_AS_UNDEFINED(_totalBytes_Prev);
- INIT_AS_UNDEFINED(_processed_Prev);
- INIT_AS_UNDEFINED(_packed_Prev);
- INIT_AS_UNDEFINED(_ratio_Prev);
+ INIT_AS_UNDEFINED(_totalBytes_Prev)
+ INIT_AS_UNDEFINED(_processed_Prev)
+ INIT_AS_UNDEFINED(_packed_Prev)
+ INIT_AS_UNDEFINED(_ratio_Prev)
_filesStr_Prev.Empty();
_filesTotStr_Prev.Empty();
@@ -362,9 +366,9 @@ bool CProgressDialog::OnInit()
_wasCreated = true;
_dialogCreatedEvent.Set();
- #ifdef LANG
- LangSetDlgItems(*this, kLangIDs, ARRAY_SIZE(kLangIDs));
- LangSetDlgItems_Colon(*this, kLangIDs_Colon, ARRAY_SIZE(kLangIDs_Colon));
+ #ifdef Z7_LANG
+ LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
+ LangSetDlgItems_Colon(*this, kLangIDs_Colon, Z7_ARRAY_SIZE(kLangIDs_Colon));
#endif
CWindow window(GetItem(IDB_PROGRESS_BACKGROUND));
@@ -453,12 +457,12 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
InvalidateRect(NULL);
- int xSizeClient = xSize - mx * 2;
+ const int xSizeClient = xSize - mx * 2;
{
- int i;
+ unsigned i;
for (i = 800; i > 40; i = i * 9 / 10)
- if (Units_To_Pixels_X(i) <= xSizeClient)
+ if (Units_To_Pixels_X((int)i) <= xSizeClient)
break;
_numReduceSymbols = i / 4;
}
@@ -473,7 +477,7 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
int mx2 = mx;
for (;; mx2--)
{
- int bSize2 = bSizeX * 3 + mx2 * 2;
+ const int bSize2 = bSizeX * 3 + mx2 * 2;
if (bSize2 <= xSizeClient)
break;
if (mx2 < 5)
@@ -488,7 +492,7 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
{
RECT r;
GetClientRectOfItem(IDL_PROGRESS_MESSAGES, r);
- int y = r.top;
+ const int y = r.top;
int ySize2 = yPos - my - y;
const int kMinYSize = _buttonSizeY + _buttonSizeY * 3 / 4;
int xx = xSize - mx * 2;
@@ -519,13 +523,13 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
labelSize = Units_To_Pixels_X(MY_PROGRESS_LABEL_UNITS_MIN);
valueSize = Units_To_Pixels_X(MY_PROGRESS_VAL_UNITS);
padSize = Units_To_Pixels_X(MY_PROGRESS_PAD_UNITS);
- int requiredSize = (labelSize + valueSize) * 2 + padSize;
+ const int requiredSize = (labelSize + valueSize) * 2 + padSize;
int gSize;
{
if (requiredSize < xSizeClient)
{
- int incr = (xSizeClient - requiredSize) / 3;
+ const int incr = (xSizeClient - requiredSize) / 3;
labelSize += incr;
}
else
@@ -540,7 +544,7 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
labelSize = gSize - valueSize;
yPos = my;
- for (unsigned i = 0; i < ARRAY_SIZE(kIDs); i += 2)
+ for (unsigned i = 0; i < Z7_ARRAY_SIZE(kIDs); i += 2)
{
int x = mx;
const unsigned kNumColumn1Items = 5 * 2;
@@ -566,7 +570,7 @@ void CProgressDialog::SetProgressRange(UInt64 range)
if (range == _progressBar_Range)
return;
_progressBar_Range = range;
- INIT_AS_UNDEFINED(_progressBar_Pos);
+ INIT_AS_UNDEFINED(_progressBar_Pos)
_progressConv.Init(range);
m_ProgressBar.SetRange32(0, _progressConv.Count(range));
}
@@ -578,10 +582,10 @@ void CProgressDialog::SetProgressPos(UInt64 pos)
pos - _progressBar_Pos >= (_progressBar_Range >> 10))
{
m_ProgressBar.SetPos(_progressConv.Count(pos));
- #ifdef __ITaskbarList3_INTERFACE_DEFINED__
+ // #ifdef __ITaskbarList3_INTERFACE_DEFINED__
if (_taskbarList && _hwndForTaskbar)
_taskbarList->SetProgressValue(_hwndForTaskbar, pos, _progressBar_Range);
- #endif
+ // #endif
_progressBar_Pos = pos;
}
}
@@ -603,10 +607,10 @@ void GetTimeString(UInt64 timeValue, wchar_t *s)
else
{
UInt32 hours32 = (UInt32)hours;
- UINT_TO_STR_2(hours32);
+ UINT_TO_STR_2(hours32)
}
- *s++ = ':'; UINT_TO_STR_2(minutes);
- *s++ = ':'; UINT_TO_STR_2(seconds);
+ *s++ = ':'; UINT_TO_STR_2(minutes)
+ *s++ = ':'; UINT_TO_STR_2(seconds)
*s = 0;
}
@@ -627,7 +631,7 @@ static void ConvertSizeToString(UInt64 v, wchar_t *s)
}
}
-void CProgressDialog::ShowSize(int id, UInt64 val, UInt64 &prev)
+void CProgressDialog::ShowSize(unsigned id, UInt64 val, UInt64 &prev)
{
if (val == prev)
return;
@@ -771,7 +775,7 @@ void CProgressDialog::UpdateStatInfo(bool showAll)
{
if (IS_DEFINED_VAL(_prevRemainingSec))
{
- INIT_AS_UNDEFINED(_prevRemainingSec);
+ INIT_AS_UNDEFINED(_prevRemainingSec)
SetItemText(IDT_PROGRESS_REMAINING_VAL, L"");
}
}
@@ -790,8 +794,9 @@ void CProgressDialog::UpdateStatInfo(bool showAll)
}
}
{
- UInt64 elapsedTime = (_elapsedTime == 0) ? 1 : _elapsedTime;
- UInt64 v = (progressCompleted * 1000) / elapsedTime;
+ const UInt64 elapsedTime = (_elapsedTime == 0) ? 1 : _elapsedTime;
+ // 22.02: progressCompleted can be for number of files
+ UInt64 v = (completed * 1000) / elapsedTime;
Byte c = 0;
unsigned moveBits = 0;
if (v >= ((UInt64)10000 << 10)) { moveBits = 20; c = 'M'; }
@@ -957,7 +962,7 @@ INT_PTR CProgressDialog::Create(const UString &title, NWindows::CThread &thread,
CWaitCursor waitCursor;
HANDLE h[] = { thread, _createDialogEvent };
- DWORD res2 = WaitForMultipleObjects(ARRAY_SIZE(h), h, FALSE, kCreateDelay);
+ const DWORD res2 = WaitForMultipleObjects(Z7_ARRAY_SIZE(h), h, FALSE, kCreateDelay);
if (res2 == WAIT_OBJECT_0 && !Sync.ThereIsMessage())
return 0;
}
@@ -979,9 +984,9 @@ INT_PTR CProgressDialog::Create(const UString &title, NWindows::CThread &thread,
bool CProgressDialog::OnExternalCloseMessage()
{
// it doesn't work if there is MessageBox.
- #ifdef __ITaskbarList3_INTERFACE_DEFINED__
+ // #ifdef __ITaskbarList3_INTERFACE_DEFINED__
SetTaskbarProgressState(TBPF_NOPROGRESS);
- #endif
+ // #endif
// AddToTitle(L"Finished ");
// SetText(L"Finished2 ");
@@ -1088,7 +1093,7 @@ void CProgressDialog::SetTitleText()
}
s.Add_Space();
- #ifndef _SFX
+ #ifndef Z7_SFX
{
unsigned len = s.Len();
s += MainAddTitle;
@@ -1150,9 +1155,9 @@ void CProgressDialog::AddMessageDirect(LPCWSTR message, bool needNumber)
if (needNumber)
ConvertUInt32ToString(_numMessages + 1, sz);
const unsigned itemIndex = _messageStrings.Size(); // _messageList.GetItemCount();
- if (_messageList.InsertItem((int)itemIndex, sz) == (int)itemIndex)
+ if (_messageList.InsertItem(itemIndex, sz) == (int)itemIndex)
{
- _messageList.SetSubItem((int)itemIndex, 1, message);
+ _messageList.SetSubItem(itemIndex, 1, message);
_messageStrings.Add(message);
}
}
@@ -1163,12 +1168,12 @@ void CProgressDialog::AddMessage(LPCWSTR message)
bool needNumber = true;
while (!s.IsEmpty())
{
- int pos = s.Find(L'\n');
+ const int pos = s.Find(L'\n');
if (pos < 0)
break;
- AddMessageDirect(s.Left(pos), needNumber);
+ AddMessageDirect(s.Left((unsigned)pos), needNumber);
needNumber = false;
- s.DeleteFrontal(pos + 1);
+ s.DeleteFrontal((unsigned)pos + 1);
}
AddMessageDirect(s, needNumber);
_numMessages++;
@@ -1210,7 +1215,7 @@ void CProgressDialog::UpdateMessagesDialog()
}
-bool CProgressDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+bool CProgressDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
switch (buttonID)
{
@@ -1340,7 +1345,7 @@ static void ListView_GetSelected(NControl::CListView &listView, CUIntVector &vec
index = listView.GetNextSelectedItem(index);
if (index < 0)
break;
- vector.Add(index);
+ vector.Add((unsigned)index);
}
}
@@ -1352,7 +1357,7 @@ void CProgressDialog::CopyToClipboard()
UString s;
unsigned numIndexes = indexes.Size();
if (numIndexes == 0)
- numIndexes = _messageList.GetItemCount();
+ numIndexes = (unsigned)_messageList.GetItemCount();
for (unsigned i = 0; i < numIndexes; i++)
{
@@ -1391,7 +1396,9 @@ static THREAD_FUNC_DECL MyThreadFunction(void *param)
HRESULT CProgressThreadVirt::Create(const UString &title, HWND parentWindow)
{
NWindows::CThread thread;
- RINOK(thread.Create(MyThreadFunction, this));
+ const WRes wres = thread.Create(MyThreadFunction, this);
+ if (wres != 0)
+ return HRESULT_FROM_WIN32(wres);
CProgressDialog::Create(title, thread, parentWindow);
return S_OK;
}
@@ -1417,7 +1424,7 @@ void CProgressThreadVirt::Process()
catch(int v)
{
m = "Error #";
- m.Add_UInt32(v);
+ m.Add_UInt32((unsigned)v);
}
catch(...) { m = "Error"; }
if (Result != E_ABORT)
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h
index d8259d6aff1..4ca9be7a40c 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h
@@ -1,7 +1,7 @@
// ProgressDialog2.h
-#ifndef __PROGRESS_DIALOG_2_H
-#define __PROGRESS_DIALOG_2_H
+#ifndef ZIP7_INC_PROGRESS_DIALOG_2_H
+#define ZIP7_INC_PROGRESS_DIALOG_2_H
#include "../../../Common/MyCom.h"
@@ -36,6 +36,7 @@ class CProgressSync
public:
bool _bytesProgressMode;
+ bool _isDir;
UInt64 _totalBytes;
UInt64 _completedBytes;
UInt64 _totalFiles;
@@ -46,7 +47,6 @@ public:
UString _titleFileName;
UString _status;
UString _filePath;
- bool _isDir;
UStringVector Messages;
CProgressFinalMessage FinalMessage;
@@ -96,7 +96,8 @@ public:
void AddError_Message(const wchar_t *message);
void AddError_Message_Name(const wchar_t *message, const wchar_t *name);
- void AddError_Code_Name(DWORD systemError, const wchar_t *name);
+ // void AddError_Code_Name(DWORD systemError, const wchar_t *name);
+ void AddError_Code_Name(HRESULT systemError, const wchar_t *name);
bool ThereIsMessage() const { return !Messages.IsEmpty() || FinalMessage.ThereIsMessage(); }
};
@@ -151,12 +152,12 @@ class CProgressDialog: public NWindows::NControl::CModalDialog
NWindows::NControl::CProgressBar m_ProgressBar;
NWindows::NControl::CListView _messageList;
- int _numMessages;
+ unsigned _numMessages;
UStringVector _messageStrings;
- #ifdef __ITaskbarList3_INTERFACE_DEFINED__
+ // #ifdef __ITaskbarList3_INTERFACE_DEFINED__
CMyComPtr<ITaskbarList3> _taskbarList;
- #endif
+ // #endif
HWND _hwndForTaskbar;
UInt32 _prevTime;
@@ -196,29 +197,29 @@ class CProgressDialog: public NWindows::NControl::CModalDialog
bool _externalCloseMessageWasReceived;
- #ifdef __ITaskbarList3_INTERFACE_DEFINED__
+ // #ifdef __ITaskbarList3_INTERFACE_DEFINED__
void SetTaskbarProgressState(TBPFLAG tbpFlags)
{
if (_taskbarList && _hwndForTaskbar)
_taskbarList->SetProgressState(_hwndForTaskbar, tbpFlags);
}
- #endif
+ // #endif
void SetTaskbarProgressState();
void UpdateStatInfo(bool showAll);
- bool OnTimer(WPARAM timerID, LPARAM callback);
void SetProgressRange(UInt64 range);
void SetProgressPos(UInt64 pos);
- virtual bool OnInit();
- virtual bool OnSize(WPARAM wParam, int xSize, int ySize);
- virtual void OnCancel();
- virtual void OnOK();
- virtual bool OnNotify(UINT /* controlID */, LPNMHDR header);
+ virtual bool OnTimer(WPARAM timerID, LPARAM callback) Z7_override;
+ virtual bool OnInit() Z7_override;
+ virtual bool OnSize(WPARAM wParam, int xSize, int ySize) Z7_override;
+ virtual void OnCancel() Z7_override;
+ virtual void OnOK() Z7_override;
+ virtual bool OnNotify(UINT /* controlID */, LPNMHDR header) Z7_override;
void CopyToClipboard();
NWindows::NSynchronization::CManualResetEvent _createDialogEvent;
NWindows::NSynchronization::CManualResetEvent _dialogCreatedEvent;
- #ifndef _SFX
+ #ifndef Z7_SFX
void AddToTitle(LPCWSTR string);
#endif
@@ -226,11 +227,11 @@ class CProgressDialog: public NWindows::NControl::CModalDialog
void SetPriorityText();
void OnPauseButton();
void OnPriorityButton();
- bool OnButtonClicked(int buttonID, HWND buttonHWND);
- bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
+ bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
+ bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam) Z7_override;
void SetTitleText();
- void ShowSize(int id, UInt64 val, UInt64 &prev);
+ void ShowSize(unsigned id, UInt64 val, UInt64 &prev);
void UpdateMessagesDialog();
@@ -252,10 +253,10 @@ public:
int IconID;
HWND MainWindow;
- #ifndef _SFX
+ #ifndef Z7_SFX
UString MainTitle;
UString MainAddTitle;
- ~CProgressDialog();
+ ~CProgressDialog() Z7_DESTRUCTOR_override;
#endif
CProgressDialog();
@@ -265,7 +266,7 @@ public:
_dialogCreatedEvent.Lock();
}
- INT_PTR Create(const UString &title, NWindows::CThread &thread, HWND wndParent = 0);
+ INT_PTR Create(const UString &title, NWindows::CThread &thread, HWND wndParent = NULL);
/* how it works:
@@ -306,7 +307,7 @@ public:
void Process();
void AddErrorPath(const FString &path) { ErrorPaths.Add(path); }
- HRESULT Create(const UString &title, HWND parentWindow = 0);
+ HRESULT Create(const UString &title, HWND parentWindow = NULL);
CProgressThreadVirt(): Result(E_FAIL), ThreadFinishedOK(false) {}
CProgressMessageBoxPair &GetMessagePair(bool isError) { return isError ? FinalMessage.ErrorMessage : FinalMessage.OkMessage; }
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyName.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyName.h
index 4f0d6dc11d9..fa6e5c54050 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyName.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyName.h
@@ -1,7 +1,7 @@
// PropertyName.h
-#ifndef __PROPERTY_NAME_H
-#define __PROPERTY_NAME_H
+#ifndef ZIP7_INC_PROPERTY_NAME_H
+#define ZIP7_INC_PROPERTY_NAME_H
#include "../../../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h
index e3d08db97cc..913887e4a42 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h
@@ -100,3 +100,5 @@
#define IDS_PROP_GROUP_ID 1100
#define IDS_PROP_DEVICE_MAJOR 1101
#define IDS_PROP_DEVICE_MINOR 1102
+#define IDS_PROP_DEV_MAJOR 1103
+#define IDS_PROP_DEV_MINOR 1104
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/StdAfx.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/StdAfx.h
new file mode 100644
index 00000000000..789cc6e7403
--- /dev/null
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/StdAfx.h
@@ -0,0 +1,83 @@
+// StdAfx.h
+
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
+
+#include "../../../../C/Compiler.h"
+
+Z7_DIAGNOSCTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER
+#ifndef _WIN32_WINNT
+// #define _WIN32_WINNT 0x0400
+#define _WIN32_WINNT 0x0500
+// #define _WIN32_WINNT 0x0600
+// #define _WIN32_WINNT 0x0A00
+#endif
+#ifndef WINVER
+#define WINVER _WIN32_WINNT
+#endif
+// #define _WIN32_IE 0x400 // for debug
+Z7_DIAGNOSCTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER
+
+#include "../../../Common/Common.h"
+#include "../../../Common/MyWindows.h"
+
+#endif
+
+/*
+WINVER and _WIN32_WINNT
+
+MSVC6 / 2003sdk:
+{
+ <windows.h> doesn't set _WIN32_WINNT
+ if WINVER is not set <windows.h> sets WINVER to value:
+ 0x0400 : MSVC6
+ 0x0501 : Windows Server 2003 PSDK / 2003 R2 PSDK
+}
+
+SDK for Win7 (and later)
+{
+ <windows.h> sets _WIN32_WINNT if it's not set.
+ <windows.h> sets WINVER if it's not set.
+<windows.h> includes <sdkddkver.h> that does:
+#if !defined(_WIN32_WINNT) && !defined(_CHICAGO_)
+ #define _WIN32_WINNT 0x0601 // in win7 sdk
+ #define _WIN32_WINNT 0x0A00 // in win10 sdk
+#endif
+#ifndef WINVER
+ #ifdef _WIN32_WINNT
+ #define WINVER _WIN32_WINNT
+ else
+ #define WINVER 0x0601 // in win7 sdk
+ #define WINVER 0x0A00 // in win10 sdk
+ endif
+#endif
+}
+
+Some GUI structures defined by windows will be larger,
+If (_WIN32_WINNT) value is larger.
+
+Also if we send sizeof(win_gui_struct) to some windows function,
+and we compile that code with big (_WIN32_WINNT) value,
+the window function in old Windows can fail, if that old Windows
+doesn't understand new big version of (win_gui_struct) compiled
+with big (_WIN32_WINNT) value.
+
+So it's better to define smallest (_WIN32_WINNT) value here.
+In 7-Zip FM we use some functions that require (_WIN32_WINNT == 0x0500).
+So it's simpler to define (_WIN32_WINNT == 0x0500) here.
+If we define (_WIN32_WINNT == 0x0400) here, we need some manual
+declarations for functions and macros that require (0x0500) functions.
+Also libs must contain these (0x0500+) functions.
+
+Some code in 7-zip FM uses also CommCtrl.h structures
+that depend from (_WIN32_IE) value. But default
+(_WIN32_IE) value from <windows.h> probably is OK for us.
+So we don't set _WIN32_IE here.
+default _WIN32_IE value set by <windows.h>:
+ 0x501 2003sdk
+ 0xa00 win10 sdk
+*/
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp b/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp
index d8e0f8b1f84..1c7cab00faf 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp
@@ -10,10 +10,11 @@
#include "SysIconUtils.h"
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <shlobj.h>
+#else
#include <ShlObj.h>
-
-#define MY_CAST_FUNC (void(*)())
-// #define MY_CAST_FUNC
+#endif
#ifndef _UNICODE
extern bool g_IsNT;
@@ -21,49 +22,55 @@ extern bool g_IsNT;
int GetIconIndexForCSIDL(int csidl)
{
- LPITEMIDLIST pidl = 0;
+ LPITEMIDLIST pidl = NULL;
SHGetSpecialFolderLocation(NULL, csidl, &pidl);
if (pidl)
{
SHFILEINFO shellInfo;
- SHGetFileInfo((LPCTSTR)(const void *)(pidl), FILE_ATTRIBUTE_NORMAL,
- &shellInfo, sizeof(shellInfo),
- SHGFI_PIDL | SHGFI_SYSICONINDEX);
- IMalloc *pMalloc;
+ shellInfo.iIcon = 0;
+ const DWORD_PTR res = SHGetFileInfo((LPCTSTR)(const void *)(pidl), FILE_ATTRIBUTE_NORMAL,
+ &shellInfo, sizeof(shellInfo),
+ SHGFI_PIDL | SHGFI_SYSICONINDEX);
+ /*
+ IMalloc *pMalloc;
SHGetMalloc(&pMalloc);
if (pMalloc)
{
pMalloc->Free(pidl);
pMalloc->Release();
}
- return shellInfo.iIcon;
+ */
+ // we use OLE2.dll function here
+ CoTaskMemFree(pidl);
+ if (res)
+ return shellInfo.iIcon;
}
return 0;
}
#ifndef _UNICODE
-typedef int (WINAPI * Func_SHGetFileInfoW)(LPCWSTR pszPath, DWORD attrib, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags);
+typedef DWORD_PTR (WINAPI * Func_SHGetFileInfoW)(LPCWSTR pszPath, DWORD attrib, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags);
-static struct CSHGetFileInfoInit
+static struct C_SHGetFileInfo_Init
{
- Func_SHGetFileInfoW shGetFileInfoW;
- CSHGetFileInfoInit()
+ Func_SHGetFileInfoW f_SHGetFileInfoW;
+ C_SHGetFileInfo_Init()
{
- shGetFileInfoW = (Func_SHGetFileInfoW)
- MY_CAST_FUNC
- ::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHGetFileInfoW");
+ f_SHGetFileInfoW = Z7_GET_PROC_ADDRESS(
+ Func_SHGetFileInfoW, ::GetModuleHandleW(L"shell32.dll"),
+ "SHGetFileInfoW");
}
-} g_SHGetFileInfoInit;
+} g_SHGetFileInfo_Init;
#endif
-static DWORD_PTR MySHGetFileInfoW(LPCWSTR pszPath, DWORD attrib, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags)
+static DWORD_PTR My_SHGetFileInfoW(LPCWSTR pszPath, DWORD attrib, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags)
{
#ifdef _UNICODE
return SHGetFileInfo
#else
- if (g_SHGetFileInfoInit.shGetFileInfoW == 0)
+ if (!g_SHGetFileInfo_Init.f_SHGetFileInfoW)
return 0;
- return g_SHGetFileInfoInit.shGetFileInfoW
+ return g_SHGetFileInfo_Init.f_SHGetFileInfoW
#endif
(pszPath, attrib, psfi, cbFileInfo, uFlags);
}
@@ -74,7 +81,7 @@ DWORD_PTR GetRealIconIndex(CFSTR path, DWORD attrib, int &iconIndex)
if (!g_IsNT)
{
SHFILEINFO shellInfo;
- DWORD_PTR res = ::SHGetFileInfo(fs2fas(path), FILE_ATTRIBUTE_NORMAL | attrib, &shellInfo,
+ const DWORD_PTR res = ::SHGetFileInfo(fs2fas(path), FILE_ATTRIBUTE_NORMAL | attrib, &shellInfo,
sizeof(shellInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX);
iconIndex = shellInfo.iIcon;
return res;
@@ -83,7 +90,7 @@ DWORD_PTR GetRealIconIndex(CFSTR path, DWORD attrib, int &iconIndex)
#endif
{
SHFILEINFOW shellInfo;
- DWORD_PTR res = ::MySHGetFileInfoW(fs2us(path), FILE_ATTRIBUTE_NORMAL | attrib, &shellInfo,
+ const DWORD_PTR res = ::My_SHGetFileInfoW(fs2us(path), FILE_ATTRIBUTE_NORMAL | attrib, &shellInfo,
sizeof(shellInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX);
iconIndex = shellInfo.iIcon;
return res;
@@ -110,7 +117,7 @@ DWORD_PTR GetRealIconIndex(const UString &fileName, DWORD attrib, int &iconIndex
{
SHFILEINFOW shellInfo;
shellInfo.szTypeName[0] = 0;
- DWORD_PTR res = ::MySHGetFileInfoW(fileName, FILE_ATTRIBUTE_NORMAL | attrib, &shellInfo,
+ DWORD_PTR res = ::My_SHGetFileInfoW(fileName, FILE_ATTRIBUTE_NORMAL | attrib, &shellInfo,
sizeof(shellInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_TYPENAME);
if (typeName)
*typeName = shellInfo.szTypeName;
@@ -120,15 +127,15 @@ DWORD_PTR GetRealIconIndex(const UString &fileName, DWORD attrib, int &iconIndex
}
*/
-static int FindInSorted_Attrib(const CRecordVector<CAttribIconPair> &vect, DWORD attrib, int &insertPos)
+static int FindInSorted_Attrib(const CRecordVector<CAttribIconPair> &vect, DWORD attrib, unsigned &insertPos)
{
unsigned left = 0, right = vect.Size();
while (left != right)
{
- unsigned mid = (left + right) / 2;
- DWORD midAttrib = vect[mid].Attrib;
+ const unsigned mid = (left + right) / 2;
+ const DWORD midAttrib = vect[mid].Attrib;
if (attrib == midAttrib)
- return mid;
+ return (int)mid;
if (attrib < midAttrib)
right = mid;
else
@@ -138,15 +145,15 @@ static int FindInSorted_Attrib(const CRecordVector<CAttribIconPair> &vect, DWORD
return -1;
}
-static int FindInSorted_Ext(const CObjectVector<CExtIconPair> &vect, const wchar_t *ext, int &insertPos)
+static int FindInSorted_Ext(const CObjectVector<CExtIconPair> &vect, const wchar_t *ext, unsigned &insertPos)
{
unsigned left = 0, right = vect.Size();
while (left != right)
{
- unsigned mid = (left + right) / 2;
- int compare = MyStringCompareNoCase(ext, vect[mid].Ext);
+ const unsigned mid = (left + right) / 2;
+ const int compare = MyStringCompareNoCase(ext, vect[mid].Ext);
if (compare == 0)
- return mid;
+ return (int)mid;
if (compare < 0)
right = mid;
else
@@ -162,11 +169,11 @@ int CExtToIconMap::GetIconIndex(DWORD attrib, const wchar_t *fileName /*, UStrin
unsigned i;
for (i = 0;; i++)
{
- wchar_t c = fileName[i];
+ const wchar_t c = fileName[i];
if (c == 0)
break;
if (c == '.')
- dotPos = i;
+ dotPos = (int)i;
}
/*
@@ -181,12 +188,12 @@ int CExtToIconMap::GetIconIndex(DWORD attrib, const wchar_t *fileName /*, UStrin
if ((attrib & FILE_ATTRIBUTE_DIRECTORY) != 0 || dotPos < 0)
{
- int insertPos = 0;
- int index = FindInSorted_Attrib(_attribMap, attrib, insertPos);
+ unsigned insertPos = 0;
+ const int index = FindInSorted_Attrib(_attribMap, attrib, insertPos);
if (index >= 0)
{
// if (typeName) *typeName = _attribMap[index].TypeName;
- return _attribMap[index].IconIndex;
+ return _attribMap[(unsigned)index].IconIndex;
}
CAttribIconPair pair;
GetRealIconIndex(
@@ -211,8 +218,8 @@ int CExtToIconMap::GetIconIndex(DWORD attrib, const wchar_t *fileName /*, UStrin
}
const wchar_t *ext = fileName + dotPos + 1;
- int insertPos = 0;
- int index = FindInSorted_Ext(_extMap, ext, insertPos);
+ unsigned insertPos = 0;
+ const int index = FindInSorted_Ext(_extMap, ext, insertPos);
if (index >= 0)
{
const CExtIconPair &pa = _extMap[index];
@@ -222,7 +229,7 @@ int CExtToIconMap::GetIconIndex(DWORD attrib, const wchar_t *fileName /*, UStrin
for (i = 0;; i++)
{
- wchar_t c = ext[i];
+ const wchar_t c = ext[i];
if (c == 0)
break;
if (c < L'0' || c > L'9')
@@ -257,3 +264,15 @@ int CExtToIconMap::GetIconIndex(DWORD attrib, const UString &fileName)
return GetIconIndex(attrib, fileName, NULL);
}
*/
+
+HIMAGELIST GetSysImageList(bool smallIcons)
+{
+ SHFILEINFO shellInfo;
+ return (HIMAGELIST)SHGetFileInfo(TEXT(""),
+ FILE_ATTRIBUTE_NORMAL |
+ FILE_ATTRIBUTE_DIRECTORY,
+ &shellInfo, sizeof(shellInfo),
+ SHGFI_USEFILEATTRIBUTES |
+ SHGFI_SYSICONINDEX |
+ (smallIcons ? SHGFI_SMALLICON : SHGFI_ICON));
+}
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h
index fde16e46ebc..1d34ef6818f 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h
@@ -1,7 +1,7 @@
// SysIconUtils.h
-#ifndef __SYS_ICON_UTILS_H
-#define __SYS_ICON_UTILS_H
+#ifndef ZIP7_INC_SYS_ICON_UTILS_H
+#define ZIP7_INC_SYS_ICON_UTILS_H
#include "../../../Common/MyWindows.h"
@@ -50,13 +50,6 @@ public:
DWORD_PTR GetRealIconIndex(CFSTR path, DWORD attrib, int &iconIndex);
int GetIconIndexForCSIDL(int csidl);
-inline HIMAGELIST GetSysImageList(bool smallIcons)
-{
- SHFILEINFO shellInfo;
- return (HIMAGELIST)SHGetFileInfo(TEXT(""),
- FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_DIRECTORY,
- &shellInfo, sizeof(shellInfo),
- SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | (smallIcons ? SHGFI_SMALLICON : SHGFI_ICON));
-}
+HIMAGELIST GetSysImageList(bool smallIcons);
#endif
diff --git a/3rdparty/lzma/CPP/7zip/UI/FileManager/resource.h b/3rdparty/lzma/CPP/7zip/UI/FileManager/resource.h
index 98cb4fd44e8..9d605c6d43a 100644
--- a/3rdparty/lzma/CPP/7zip/UI/FileManager/resource.h
+++ b/3rdparty/lzma/CPP/7zip/UI/FileManager/resource.h
@@ -26,6 +26,14 @@
#define IDM_SHA1 104
#define IDM_SHA256 105
+
+#define IDM_FILE 500
+#define IDM_EDIT 501
+#define IDM_VIEW 502
+#define IDM_FAVORITES 503
+#define IDM_TOOLS 504
+#define IDM_HELP 505
+
#define IDM_OPEN 540
#define IDM_OPEN_INSIDE 541
#define IDM_OPEN_OUTSIDE 542
@@ -90,8 +98,10 @@
#define IDM_VIEW_TOOLBARS_LARGE_BUTTONS 752
#define IDM_VIEW_TOOLBARS_SHOW_BUTTONS_TEXT 753
+#define IDM_VIEW_TIME_POPUP 760
#define IDM_VIEW_TIME 761
+#define IDM_ADD_TO_FAVORITES 800
#define IDS_BOOKMARK 801
#define IDM_OPTIONS 900
diff --git a/3rdparty/lzma/CPP/7zip/UI/GUI/7zG.exe.manifest b/3rdparty/lzma/CPP/7zip/UI/GUI/7zG.exe.manifest
new file mode 100644
index 00000000000..ae964d82036
--- /dev/null
+++ b/3rdparty/lzma/CPP/7zip/UI/GUI/7zG.exe.manifest
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
+ <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="7-Zip.7-Zip.7zG" type="win32"/>
+ <description>7-Zip GUI.</description>
+ <dependency>
+ <dependentAssembly><assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/></dependentAssembly>
+ </dependency>
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"><application>
+<!-- Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+<!-- Win 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+<!-- Win 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+<!-- Win 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+<!-- Win 10 --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+</application></compatibility>
+ <asmv3:application>
+ <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
+ <dpiAware>true</dpiAware>
+ </asmv3:windowsSettings>
+ </asmv3:application>
+<application xmlns="urn:schemas-microsoft-com:asm.v3">
+<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
+<ws2:longPathAware>true</ws2:longPathAware></windowsSettings></application>
+</assembly>
diff --git a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp
index 5132084d6e4..46284820392 100644
--- a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp
@@ -9,7 +9,7 @@
#include "../../../Windows/FileDir.h"
#include "../../../Windows/ResourceString.h"
-#ifndef NO_REGISTRY
+#ifndef Z7_NO_REGISTRY
#include "../FileManager/HelpUtils.h"
#endif
@@ -28,7 +28,7 @@ using namespace NName;
extern HINSTANCE g_hInstance;
-#ifndef _SFX
+#ifndef Z7_SFX
static const UInt32 kPathMode_IDs[] =
{
@@ -70,7 +70,7 @@ static const
#endif
-#ifdef LANG
+#ifdef Z7_LANG
static const UInt32 kLangIDs[] =
{
@@ -87,23 +87,23 @@ static const UInt32 kLangIDs[] =
// static const int kWildcardsButtonIndex = 2;
-#ifndef NO_REGISTRY
+#ifndef Z7_NO_REGISTRY
static const unsigned kHistorySize = 16;
#endif
-#ifndef _SFX
+#ifndef Z7_SFX
// it's used in CompressDialog also
void AddComboItems(NControl::CComboBox &combo, const UInt32 *langIDs, unsigned numItems, const int *values, int curVal);
void AddComboItems(NControl::CComboBox &combo, const UInt32 *langIDs, unsigned numItems, const int *values, int curVal)
{
- int curSel = 0;
+ unsigned curSel = 0;
for (unsigned i = 0; i < numItems; i++)
{
UString s = LangString(langIDs[i]);
s.RemoveChar(L'&');
- int index = (int)combo.AddString(s);
- combo.SetItemData(index, i);
+ const int index = (int)combo.AddString(s);
+ combo.SetItemData(index, (LPARAM)i);
if (values[i] == curVal)
curSel = i;
}
@@ -126,8 +126,8 @@ void CExtractDialog::CheckButton_TwoBools(UINT id, const CBoolPair &b1, const CB
void CExtractDialog::GetButton_Bools(UINT id, CBoolPair &b1, CBoolPair &b2)
{
- bool val = IsButtonCheckedBool(id);
- bool oldVal = GetBoolsVal(b1, b2);
+ const bool val = IsButtonCheckedBool(id);
+ const bool oldVal = GetBoolsVal(b1, b2);
if (val != oldVal)
b1.Def = b2.Def = true;
b1.Val = b2.Val = val;
@@ -137,7 +137,7 @@ void CExtractDialog::GetButton_Bools(UINT id, CBoolPair &b1, CBoolPair &b2)
bool CExtractDialog::OnInit()
{
- #ifdef LANG
+ #ifdef Z7_LANG
{
UString s;
LangString_OnlyFromLangFile(IDD_EXTRACT, s);
@@ -150,18 +150,18 @@ bool CExtractDialog::OnInit()
}
SetText(s);
// LangSetWindowText(*this, IDD_EXTRACT);
- LangSetDlgItems(*this, kLangIDs, ARRAY_SIZE(kLangIDs));
+ LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
}
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
_passwordControl.Attach(GetItem(IDE_EXTRACT_PASSWORD));
_passwordControl.SetText(Password);
_passwordControl.SetPasswordChar(TEXT('*'));
_pathName.Attach(GetItem(IDE_EXTRACT_NAME));
#endif
- #ifdef NO_REGISTRY
+ #ifdef Z7_NO_REGISTRY
PathMode = NExtract::NPathMode::kFullPaths;
OverwriteMode = NExtract::NOverwriteMode::kAsk;
@@ -191,7 +191,7 @@ bool CExtractDialog::OnInit()
UString pathPrefix = DirPath;
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_info.SplitDest.Val)
{
@@ -210,7 +210,7 @@ bool CExtractDialog::OnInit()
_path.SetText(pathPrefix);
- #ifndef NO_REGISTRY
+ #ifndef Z7_NO_REGISTRY
for (unsigned i = 0; i < _info.Paths.Size() && i < kHistorySize; i++)
_path.AddString(_info.Paths[i]);
#endif
@@ -222,13 +222,13 @@ bool CExtractDialog::OnInit()
_path.SetCurSel(-1);
*/
- #ifndef _SFX
+ #ifndef Z7_SFX
_pathMode.Attach(GetItem(IDC_EXTRACT_PATH_MODE));
_overwriteMode.Attach(GetItem(IDC_EXTRACT_OVERWRITE_MODE));
- AddComboItems(_pathMode, kPathMode_IDs, ARRAY_SIZE(kPathMode_IDs), kPathModeButtonsVals, PathMode);
- AddComboItems(_overwriteMode, kOverwriteMode_IDs, ARRAY_SIZE(kOverwriteMode_IDs), kOverwriteButtonsVals, OverwriteMode);
+ AddComboItems(_pathMode, kPathMode_IDs, Z7_ARRAY_SIZE(kPathMode_IDs), kPathModeButtonsVals, PathMode);
+ AddComboItems(_overwriteMode, kOverwriteMode_IDs, Z7_ARRAY_SIZE(kOverwriteMode_IDs), kOverwriteButtonsVals, OverwriteMode);
#endif
@@ -243,7 +243,7 @@ bool CExtractDialog::OnInit()
return CModalDialog::OnInit();
}
-#ifndef _SFX
+#ifndef Z7_SFX
void CExtractDialog::UpdatePasswordControl()
{
_passwordControl.SetPasswordChar(IsShowPasswordChecked() ? 0 : TEXT('*'));
@@ -253,14 +253,14 @@ void CExtractDialog::UpdatePasswordControl()
}
#endif
-bool CExtractDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+bool CExtractDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
switch (buttonID)
{
case IDB_EXTRACT_SET_PATH:
OnButtonSetPath();
return true;
- #ifndef _SFX
+ #ifndef Z7_SFX
case IDX_EXTRACT_NAME_ENABLE:
ShowItem_Bool(IDE_EXTRACT_NAME, IsButtonCheckedBool(IDX_EXTRACT_NAME_ENABLE));
return true;
@@ -282,7 +282,7 @@ void CExtractDialog::OnButtonSetPath()
UString resultPath;
if (!MyBrowseForFolder(*this, title, currentPath, resultPath))
return;
- #ifndef NO_REGISTRY
+ #ifndef Z7_NO_REGISTRY
_path.SetCurSel(-1);
#endif
_path.SetText(resultPath);
@@ -299,7 +299,7 @@ void AddUniqueString(UStringVector &list, const UString &s)
void CExtractDialog::OnOK()
{
- #ifndef _SFX
+ #ifndef Z7_SFX
int pathMode2 = kPathModeButtonsVals[_pathMode.GetCurSel()];
if (PathMode != NExtract::NPathMode::kCurPaths ||
pathMode2 != NExtract::NPathMode::kFullPaths)
@@ -313,7 +313,7 @@ void CExtractDialog::OnOK()
#endif
- #ifndef NO_REGISTRY
+ #ifndef Z7_NO_REGISTRY
// GetButton_Bools(IDX_EXTRACT_ALT_STREAMS, AltStreams, _info.AltStreams);
GetButton_Bools(IDX_EXTRACT_NT_SECUR, NtSecurity, _info.NtSecurity);
@@ -350,7 +350,7 @@ void CExtractDialog::OnOK()
UString s;
- #ifdef NO_REGISTRY
+ #ifdef Z7_NO_REGISTRY
_path.GetText(s);
@@ -371,9 +371,9 @@ void CExtractDialog::OnOK()
s.Trim();
NName::NormalizeDirPathPrefix(s);
- #ifndef _SFX
+ #ifndef Z7_SFX
- bool splitDest = IsButtonCheckedBool(IDX_EXTRACT_NAME_ENABLE);
+ const bool splitDest = IsButtonCheckedBool(IDX_EXTRACT_NAME_ENABLE);
if (splitDest)
{
UString pathName;
@@ -392,9 +392,9 @@ void CExtractDialog::OnOK()
DirPath = s;
- #ifndef NO_REGISTRY
+ #ifndef Z7_NO_REGISTRY
_info.Paths.Clear();
- #ifndef _SFX
+ #ifndef Z7_SFX
AddUniqueString(_info.Paths, s);
#endif
for (int i = 0; i < _path.GetCount(); i++)
@@ -411,7 +411,7 @@ void CExtractDialog::OnOK()
CModalDialog::OnOK();
}
-#ifndef NO_REGISTRY
+#ifndef Z7_NO_REGISTRY
#define kHelpTopic "fm/plugins/7-zip/extract.htm"
void CExtractDialog::OnHelp()
{
diff --git a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.h b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.h
index 33349ffc615..1565fb8ab4d 100644
--- a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.h
+++ b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractDialog.h
@@ -1,7 +1,7 @@
// ExtractDialog.h
-#ifndef __EXTRACT_DIALOG_H
-#define __EXTRACT_DIALOG_H
+#ifndef ZIP7_INC_EXTRACT_DIALOG_H
+#define ZIP7_INC_EXTRACT_DIALOG_H
#include "ExtractDialogRes.h"
@@ -12,7 +12,7 @@
#include "../FileManager/DialogSize.h"
-#ifndef NO_REGISTRY
+#ifndef Z7_NO_REGISTRY
#include "../Common/ZipRegistry.h"
#endif
@@ -33,20 +33,20 @@ namespace NExtractionDialog
class CExtractDialog: public NWindows::NControl::CModalDialog
{
- #ifdef NO_REGISTRY
+ #ifdef Z7_NO_REGISTRY
NWindows::NControl::CDialogChildControl _path;
#else
NWindows::NControl::CComboBox _path;
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
NWindows::NControl::CEdit _pathName;
NWindows::NControl::CEdit _passwordControl;
NWindows::NControl::CComboBox _pathMode;
NWindows::NControl::CComboBox _overwriteMode;
#endif
- #ifndef _SFX
+ #ifndef Z7_SFX
// int GetFilesMode() const;
void UpdatePasswordControl();
#endif
@@ -55,13 +55,13 @@ class CExtractDialog: public NWindows::NControl::CModalDialog
void CheckButton_TwoBools(UINT id, const CBoolPair &b1, const CBoolPair &b2);
void GetButton_Bools(UINT id, CBoolPair &b1, CBoolPair &b2);
- virtual bool OnInit();
- virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
- virtual void OnOK();
+ virtual bool OnInit() Z7_override;
+ virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
+ virtual void OnOK() Z7_override;
- #ifndef NO_REGISTRY
+ #ifndef Z7_NO_REGISTRY
- virtual void OnHelp();
+ virtual void OnHelp() Z7_override;
NExtract::CInfo _info;
@@ -76,7 +76,7 @@ public:
UString DirPath;
UString ArcPath;
- #ifndef _SFX
+ #ifndef Z7_SFX
UString Password;
#endif
bool PathMode_Force;
@@ -84,16 +84,16 @@ public:
NExtract::NPathMode::EEnum PathMode;
NExtract::NOverwriteMode::EEnum OverwriteMode;
- #ifndef _SFX
+ #ifndef Z7_SFX
// CBoolPair AltStreams;
CBoolPair NtSecurity;
#endif
CBoolPair ElimDup;
- INT_PTR Create(HWND aWndParent = 0)
+ INT_PTR Create(HWND aWndParent = NULL)
{
- #ifdef _SFX
+ #ifdef Z7_SFX
BIG_DIALOG_SIZE(240, 64);
#else
BIG_DIALOG_SIZE(300, 160);
diff --git a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp
index a9191a8be09..fdf3cc78a50 100644
--- a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp
+++ b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp
@@ -36,7 +36,7 @@ using namespace NDir;
static const wchar_t * const kIncorrectOutDir = L"Incorrect output directory path";
-#ifndef _SFX
+#ifndef Z7_SFX
static void AddValuePair(UString &s, UINT resourceID, UInt64 value, bool addColon = true)
{
@@ -60,10 +60,10 @@ static void AddSizePair(UString &s, UINT resourceID, UInt64 value)
class CThreadExtracting: public CProgressThreadVirt
{
- HRESULT ProcessVirt();
+ HRESULT ProcessVirt() Z7_override;
public:
/*
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
const CExternalCodecs *externalCodecs;
#endif
*/
@@ -78,19 +78,19 @@ public:
const NWildcard::CCensorNode *WildcardCensor;
const CExtractOptions *Options;
- #ifndef _SFX
+ #ifndef Z7_SFX
CHashBundle *HashBundle;
- virtual void ProcessWasFinished_GuiVirt();
+ virtual void ProcessWasFinished_GuiVirt() Z7_override;
#endif
- CMyComPtr<IExtractCallbackUI> ExtractCallback;
+ CMyComPtr<IFolderArchiveExtractCallback> FolderArchiveExtractCallback;
UString Title;
CPropNameValPairs Pairs;
};
-#ifndef _SFX
+#ifndef Z7_SFX
void CThreadExtracting::ProcessWasFinished_GuiVirt()
{
if (HashBundle && !Pairs.IsEmpty())
@@ -102,7 +102,7 @@ HRESULT CThreadExtracting::ProcessVirt()
{
CDecompressStat Stat;
- #ifndef _SFX
+ #ifndef Z7_SFX
/*
if (HashBundle)
HashBundle->Init();
@@ -111,20 +111,21 @@ HRESULT CThreadExtracting::ProcessVirt()
HRESULT res = Extract(
/*
- #ifdef EXTERNAL_CODECS
+ #ifdef Z7_EXTERNAL_CODECS
externalCodecs,
#endif
*/
codecs,
*FormatIndices, *ExcludedFormatIndices,
*ArchivePaths, *ArchivePathsFull,
- *WildcardCensor, *Options, ExtractCallbackSpec, ExtractCallback,
- #ifndef _SFX
+ *WildcardCensor, *Options,
+ ExtractCallbackSpec, ExtractCallbackSpec, FolderArchiveExtractCallback,
+ #ifndef Z7_SFX
HashBundle,
#endif
FinalMessage.ErrorMessage.Message, Stat);
- #ifndef _SFX
+ #ifndef Z7_SFX
if (res == S_OK && ExtractCallbackSpec->IsOK())
{
if (HashBundle)
@@ -172,7 +173,7 @@ HRESULT ExtractGUI(
UStringVector &archivePathsFull,
const NWildcard::CCensorNode &wildcardCensor,
CExtractOptions &options,
- #ifndef _SFX
+ #ifndef Z7_SFX
CHashBundle *hb,
#endif
bool showDialog,
@@ -184,8 +185,8 @@ HRESULT ExtractGUI(
CThreadExtracting extracter;
/*
- #ifdef EXTERNAL_CODECS
- extracter.externalCodecs = __externalCodecs;
+ #ifdef Z7_EXTERNAL_CODECS
+ extracter.externalCodecs = _externalCodecs;
#endif
*/
extracter.codecs = codecs;
@@ -222,7 +223,7 @@ HRESULT ExtractGUI(
if (archivePathsFull.Size() == 1)
dialog.ArcPath = archivePathsFull[0];
- #ifndef _SFX
+ #ifndef Z7_SFX
// dialog.AltStreams = options.NtOptions.AltStreams;
dialog.NtSecurity = options.NtOptions.NtSecurity;
if (extractCallback->PasswordIsDefined)
@@ -238,7 +239,7 @@ HRESULT ExtractGUI(
options.PathMode = dialog.PathMode;
options.ElimDup = dialog.ElimDup;
- #ifndef _SFX
+ #ifndef Z7_SFX
// options.NtOptions.AltStreams = dialog.AltStreams;
options.NtOptions.NtSecurity = dialog.NtSecurity;
extractCallback->Password = dialog.Password;
@@ -258,7 +259,7 @@ HRESULT ExtractGUI(
{
UString s = GetUnicodeString(NError::MyFormatMessage(GetLastError()));
UString s2 = MyFormatNew(IDS_CANNOT_CREATE_FOLDER,
- #ifdef LANG
+ #ifdef Z7_LANG
0x02000603,
#endif
options.OutputDir);
@@ -275,7 +276,7 @@ HRESULT ExtractGUI(
extracter.Title = title;
extracter.ExtractCallbackSpec = extractCallback;
extracter.ExtractCallbackSpec->ProgressDialog = &extracter;
- extracter.ExtractCallback = extractCallback;
+ extracter.FolderArchiveExtractCallback = extractCallback;
extracter.ExtractCallbackSpec->Init();
extracter.CompressingMode = false;
@@ -284,13 +285,13 @@ HRESULT ExtractGUI(
extracter.ArchivePathsFull = &archivePathsFull;
extracter.WildcardCensor = &wildcardCensor;
extracter.Options = &options;
- #ifndef _SFX
+ #ifndef Z7_SFX
extracter.HashBundle = hb;
#endif
extracter.IconID = IDI_ICON;
- RINOK(extracter.Create(title, hwndParent));
+ RINOK(extracter.Create(title, hwndParent))
messageWasDisplayed = extracter.ThreadFinishedOK && extracter.MessagesDisplayed;
return extracter.Result;
}
diff --git a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.h b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.h
index 3b412590977..13ca6abf89f 100644
--- a/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.h
+++ b/3rdparty/lzma/CPP/7zip/UI/GUI/ExtractGUI.h
@@ -1,7 +1,7 @@
// GUI/ExtractGUI.h
-#ifndef __EXTRACT_GUI_H
-#define __EXTRACT_GUI_H
+#ifndef ZIP7_INC_EXTRACT_GUI_H
+#define ZIP7_INC_EXTRACT_GUI_H
#include "../Common/Extract.h"
@@ -28,7 +28,7 @@ HRESULT ExtractGUI(
UStringVector &archivePathsFull,
const NWildcard::CCensorNode &wildcardCensor,
CExtractOptions &options,
- #ifndef _SFX
+ #ifndef Z7_SFX
CHashBundle *hb,
#endif
bool showDialog,
diff --git a/3rdparty/lzma/CPP/7zip/UI/GUI/HashGUI.h b/3rdparty/lzma/CPP/7zip/UI/GUI/HashGUI.h
index 8264453522c..1ec9c47564e 100644
--- a/3rdparty/lzma/CPP/7zip/UI/GUI/HashGUI.h
+++ b/3rdparty/lzma/CPP/7zip/UI/GUI/HashGUI.h
@@ -1,7 +1,7 @@
// HashGUI.h
-#ifndef __HASH_GUI_H
-#define __HASH_GUI_H
+#ifndef ZIP7_INC_HASH_GUI_H
+#define ZIP7_INC_HASH_GUI_H
#include "../Common/HashCalc.h"
#include "../Common/Property.h"
diff --git a/3rdparty/lzma/CPP/7zip/warn_clang.mak b/3rdparty/lzma/CPP/7zip/warn_clang.mak
index ed4f908f607..0d007307071 100644
--- a/3rdparty/lzma/CPP/7zip/warn_clang.mak
+++ b/3rdparty/lzma/CPP/7zip/warn_clang.mak
@@ -1,37 +1,3 @@
-CFLAGS_WARN_CLANG_3_8_UNIQ = \
- -Wno-reserved-id-macro \
- -Wno-old-style-cast \
- -Wno-c++11-long-long \
- -Wno-unused-macros \
-
-CFLAGS_WARN_CLANG_3_8 = \
- $(CFLAGS_WARN_CLANG_3_8_UNIQ) \
- -Weverything \
- -Wno-extra-semi \
- -Wno-sign-conversion \
- -Wno-language-extension-token \
- -Wno-global-constructors \
- -Wno-non-virtual-dtor \
- -Wno-switch-enum \
- -Wno-covered-switch-default \
- -Wno-cast-qual \
- -Wno-padded \
- -Wno-exit-time-destructors \
- -Wno-weak-vtables \
-
-CFLAGS_WARN_CLANG_12= $(CFLAGS_WARN_CLANG_3_8) \
- -Wno-extra-semi-stmt \
- -Wno-zero-as-null-pointer-constant \
- -Wno-deprecated-dynamic-exception-spec \
- -Wno-c++98-compat-pedantic \
- -Wno-atomic-implicit-seq-cst \
- -Wconversion \
- -Wno-sign-conversion \
-
-CFLAGS_WARN_1 = \
- -Wno-deprecated-copy-dtor \
-
-
-
-
-CFLAGS_WARN = $(CFLAGS_WARN_CLANG_12) $(CFLAGS_WARN_1)
+CFLAGS_WARN = -Weverything -Wfatal-errors
+# CXX_STD_FLAGS = -std=c++11
+# CXX_STD_FLAGS =
diff --git a/3rdparty/lzma/CPP/7zip/warn_clang_mac.mak b/3rdparty/lzma/CPP/7zip/warn_clang_mac.mak
index aadf14f77c1..ed936c588a2 100644
--- a/3rdparty/lzma/CPP/7zip/warn_clang_mac.mak
+++ b/3rdparty/lzma/CPP/7zip/warn_clang_mac.mak
@@ -1,39 +1,9 @@
-CFLAGS_WARN_CLANG_3_8_UNIQ = \
- -Wno-reserved-id-macro \
- -Wno-old-style-cast \
- -Wno-c++11-long-long \
- -Wno-unused-macros \
-
-CFLAGS_WARN_CLANG_3_8 = \
- $(CFLAGS_WARN_CLANG_3_8_UNIQ) \
- -Weverything \
- -Wno-extra-semi \
- -Wno-sign-conversion \
- -Wno-language-extension-token \
- -Wno-global-constructors \
- -Wno-non-virtual-dtor \
- -Wno-switch-enum \
- -Wno-covered-switch-default \
- -Wno-cast-qual \
- -Wno-padded \
- -Wno-exit-time-destructors \
- -Wno-weak-vtables \
-
-CFLAGS_WARN_CLANG_12= $(CFLAGS_WARN_CLANG_3_8) \
- -Wno-extra-semi-stmt \
- -Wno-zero-as-null-pointer-constant \
- -Wno-deprecated-dynamic-exception-spec \
- -Wno-c++98-compat-pedantic \
- -Wno-atomic-implicit-seq-cst \
- -Wconversion \
- -Wno-sign-conversion \
- -Wno-suggest-override \
- -Wno-suggest-destructor-override \
-
-CFLAGS_WARN_MAC = \
- -Wno-poison-system-directories \
- -Wno-c++11-long-long \
- -Wno-atomic-implicit-seq-cst \
-
-
-CFLAGS_WARN = $(CFLAGS_WARN_CLANG_12) $(CFLAGS_WARN_MAC)
+CFLAGS_WARN = -Weverything -Wfatal-errors -Wno-poison-system-directories
+CXX_STD_FLAGS = -std=c++98
+CXX_STD_FLAGS = -std=c++11
+CXX_STD_FLAGS = -std=c++14
+CXX_STD_FLAGS = -std=c++17
+CXX_STD_FLAGS = -std=c++20
+CXX_STD_FLAGS = -std=c++23
+
+CXX_STD_FLAGS = -std=c++11
diff --git a/3rdparty/lzma/CPP/7zip/warn_gcc.mak b/3rdparty/lzma/CPP/7zip/warn_gcc.mak
index 3185326a3af..7eb1f570bde 100644
--- a/3rdparty/lzma/CPP/7zip/warn_gcc.mak
+++ b/3rdparty/lzma/CPP/7zip/warn_gcc.mak
@@ -1,57 +1,45 @@
-CFLAGS_WARN_GCC_4_5 = \
-
-CFLAGS_WARN_GCC_6 = \
+CFLAGS_WARN_GCC_4_8 = \
-Waddress \
-Waggressive-loop-optimizations \
-Wattributes \
- -Wbool-compare \
-Wcast-align \
-Wcomment \
-Wdiv-by-zero \
- -Wduplicated-cond \
-Wformat-contains-nul \
-Winit-self \
-Wint-to-pointer-cast \
-Wunused \
-Wunused-macros \
+CFLAGS_WARN_GCC_6 = $(CFLAGS_WARN_GCC_4_8)\
+ -Wbool-compare \
+ -Wduplicated-cond \
+
# -Wno-strict-aliasing
-CFLAGS_WARN_GCC_9 = \
- -Waddress \
+CFLAGS_WARN_GCC_9 = $(CFLAGS_WARN_GCC_6)\
-Waddress-of-packed-member \
- -Waggressive-loop-optimizations \
- -Wattributes \
- -Wbool-compare \
-Wbool-operation \
- -Wcast-align \
-Wcast-align=strict \
- -Wcomment \
+ -Wconversion \
-Wdangling-else \
- -Wdiv-by-zero \
-Wduplicated-branches \
- -Wduplicated-cond \
- -Wformat-contains-nul \
-Wimplicit-fallthrough=5 \
- -Winit-self \
-Wint-in-bool-context \
- -Wint-to-pointer-cast \
- -Wunused \
- -Wunused-macros \
- -Wconversion \
+ -Wmaybe-uninitialized \
+ -Wmisleading-indentation \
+ -Wmissing-attributes
+# In C: -Wsign-conversion enabled also by -Wconversion
# -Wno-sign-conversion \
-CFLAGS_WARN_GCC_10 = $(CFLAGS_WARN_GCC_9) \
- -Wmaybe-uninitialized \
- -Wmisleading-indentation \
CFLAGS_WARN_GCC_PPMD_UNALIGNED = \
-Wno-strict-aliasing \
-CFLAGS_WARN = $(CFLAGS_WARN_GCC_9) \
-
-# $(CFLAGS_WARN_GCC_PPMD_UNALIGNED)
+# CFLAGS_WARN = $(CFLAGS_WARN_GCC_4_8)
+CFLAGS_WARN = $(CFLAGS_WARN_GCC_9)
- \ No newline at end of file
+# CXX_STD_FLAGS = -std=c++11
+# CXX_STD_FLAGS =
diff --git a/3rdparty/lzma/CPP/Build.mak b/3rdparty/lzma/CPP/Build.mak
index 1ef676e063f..393fa2c9444 100644
--- a/3rdparty/lzma/CPP/Build.mak
+++ b/3rdparty/lzma/CPP/Build.mak
@@ -4,6 +4,11 @@ LIBS = $(LIBS) oleaut32.lib ole32.lib
CFLAGS = $(CFLAGS) -DUNICODE -D_UNICODE
!ENDIF
+!IF "$(CC)" != "clang-cl"
+# for link time code generation:
+# CFLAGS = $(CFLAGS) -GL
+!ENDIF
+
!IFNDEF O
!IFDEF PLATFORM
O=$(PLATFORM)
@@ -51,33 +56,22 @@ COMPL_ASM = $(MY_ML) $** $O/$(*B).obj
COMPL_ASM = $(MY_ML) -c -Fo$O/ $**
!ENDIF
-CFLAGS = $(CFLAGS) -nologo -c -Fo$O/ -W4 -WX -EHsc -Gy -GR- -GF
+!IFDEF OLD_COMPILER
+CFLAGS_WARN_LEVEL = -W4
+!ELSE
+CFLAGS_WARN_LEVEL = -Wall
+!ENDIF
+
+CFLAGS = $(CFLAGS) -nologo -c -Fo$O/ $(CFLAGS_WARN_LEVEL) -WX -EHsc -Gy -GR- -GF
!IF "$(CC)" == "clang-cl"
CFLAGS = $(CFLAGS) \
-Werror \
- -Wextra \
-Wall \
+ -Wextra \
-Weverything \
- -Wno-extra-semi-stmt \
- -Wno-extra-semi \
- -Wno-zero-as-null-pointer-constant \
- -Wno-sign-conversion \
- -Wno-old-style-cast \
- -Wno-reserved-id-macro \
- -Wno-deprecated-dynamic-exception-spec \
- -Wno-language-extension-token \
- -Wno-global-constructors \
- -Wno-non-virtual-dtor \
- -Wno-deprecated-copy-dtor \
- -Wno-exit-time-destructors \
- -Wno-switch-enum \
- -Wno-covered-switch-default \
- -Wno-nonportable-system-include-path \
- -Wno-c++98-compat-pedantic \
- -Wno-cast-qual \
- -Wc++11-extensions \
+ -Wfatal-errors \
!ENDIF
@@ -92,8 +86,21 @@ CFLAGS = $(CFLAGS) -MT
CFLAGS = $(CFLAGS_COMMON) $(CFLAGS)
+
!IFNDEF OLD_COMPILER
-CFLAGS = $(CFLAGS) -GS- -Zc:forScope -Zc:wchar_t
+
+CFLAGS = $(CFLAGS) -GS- -Zc:wchar_t
+!IFDEF VCTOOLSVERSION
+!IF "$(VCTOOLSVERSION)" >= "14.00"
+!IF "$(CC)" != "clang-cl"
+CFLAGS = $(CFLAGS) -Zc:throwingNew
+!ENDIF
+!ENDIF
+!ELSE
+# -Zc:forScope is default in VS2010. so we need it only for older versions
+CFLAGS = $(CFLAGS) -Zc:forScope
+!ENDIF
+
!IFNDEF UNDER_CE
!IF "$(CC)" != "clang-cl"
CFLAGS = $(CFLAGS) -MP4
@@ -102,10 +109,10 @@ CFLAGS = $(CFLAGS) -MP4
# CFLAGS = $(CFLAGS) -arch:IA32
!ENDIF
!ENDIF
-!ELSE
-CFLAGS = $(CFLAGS)
+
!ENDIF
+
!IFDEF MY_CONSOLE
CFLAGS = $(CFLAGS) -D_CONSOLE
!ENDIF
@@ -123,7 +130,7 @@ CFLAGS_O1 = $(CFLAGS) -O1
!ENDIF
CFLAGS_O2 = $(CFLAGS) -O2
-LFLAGS = $(LFLAGS) -nologo -OPT:REF -OPT:ICF
+LFLAGS = $(LFLAGS) -nologo -OPT:REF -OPT:ICF -INCREMENTAL:NO
!IFNDEF UNDER_CE
LFLAGS = $(LFLAGS) /LARGEADDRESSAWARE
@@ -140,6 +147,12 @@ LFLAGS = $(LFLAGS) /FIXED:NO
# /BASE:0x400000
!ENDIF
+!IF "$(PLATFORM)" == "arm64"
+# we can get better compression ratio with ARM64 filter if we change alignment to 4096
+# LFLAGS = $(LFLAGS) /FILEALIGN:4096
+!ENDIF
+
+
# !IF "$(PLATFORM)" == "x64"
@@ -162,21 +175,23 @@ COMPL_O1 = $(CC) $(CFLAGS_O1) $**
COMPL_O2 = $(CC) $(CFLAGS_O2) $**
COMPL_PCH = $(CC) $(CFLAGS_O1) -Yc"StdAfx.h" -Fp$O/a.pch $**
COMPL = $(CC) $(CFLAGS_O1) -Yu"StdAfx.h" -Fp$O/a.pch $**
-
-COMPLB = $(CC) $(CFLAGS_O1) -Yu"StdAfx.h" -Fp$O/a.pch $<
-# COMPLB_O2 = $(CC) $(CFLAGS_O2) -Yu"StdAfx.h" -Fp$O/a.pch $<
-COMPLB_O2 = $(CC) $(CFLAGS_O2) $<
+COMPLB = $(CC) $(CFLAGS_O1) -Yu"StdAfx.h" -Fp$O/a.pch $<
+COMPLB_O2 = $(CC) $(CFLAGS_O2) $<
+# COMPLB_O2 = $(CC) $(CFLAGS_O2) -Yu"StdAfx.h" -Fp$O/a.pch $<
CFLAGS_C_ALL = $(CFLAGS_O2) $(CFLAGS_C_SPEC)
+
CCOMPL_PCH = $(CC) $(CFLAGS_C_ALL) -Yc"Precomp.h" -Fp$O/a.pch $**
CCOMPL_USE = $(CC) $(CFLAGS_C_ALL) -Yu"Precomp.h" -Fp$O/a.pch $**
+CCOMPLB_USE = $(CC) $(CFLAGS_C_ALL) -Yu"Precomp.h" -Fp$O/a.pch $<
CCOMPL = $(CC) $(CFLAGS_C_ALL) $**
CCOMPLB = $(CC) $(CFLAGS_C_ALL) $<
!IF "$(CC)" == "clang-cl"
COMPL = $(COMPL) -FI StdAfx.h
COMPLB = $(COMPLB) -FI StdAfx.h
-CCOMPL_USE = $(CCOMPL_USE) -FI Precomp.h
+CCOMPL_USE = $(CCOMPL_USE) -FI Precomp.h
+CCOMPLB_USE = $(CCOMPLB_USE) -FI Precomp.h
!ENDIF
all: $(PROGPATH)
@@ -189,6 +204,11 @@ $O:
$O/asm:
if not exist "$O/asm" mkdir "$O/asm"
+!IF "$(CC)" != "clang-cl"
+# for link time code generation:
+# LFLAGS = $(LFLAGS) -LTCG
+!ENDIF
+
$(PROGPATH): $O $O/asm $(OBJS) $(DEF_FILE)
link $(LFLAGS) -out:$(PROGPATH) $(OBJS) $(LIBS)
@@ -198,3 +218,12 @@ $O\resource.res: $(*B).rc
!ENDIF
$O\StdAfx.obj: $(*B).cpp
$(COMPL_PCH)
+
+predef: empty.c
+ $(CCOMPL) /EP /Zc:preprocessor /PD
+predef2: A.cpp
+ $(COMPL) -EP -Zc:preprocessor -PD
+predef3: A.cpp
+ $(COMPL) -E -dM
+predef4: A.cpp
+ $(COMPL_O2) -E
diff --git a/3rdparty/lzma/CPP/Common/AutoPtr.h b/3rdparty/lzma/CPP/Common/AutoPtr.h
index 006d315512b..0be8a7a41d2 100644
--- a/3rdparty/lzma/CPP/Common/AutoPtr.h
+++ b/3rdparty/lzma/CPP/Common/AutoPtr.h
@@ -1,13 +1,13 @@
// Common/AutoPtr.h
-#ifndef __COMMON_AUTOPTR_H
-#define __COMMON_AUTOPTR_H
+#ifndef ZIP7_INC_COMMON_AUTOPTR_H
+#define ZIP7_INC_COMMON_AUTOPTR_H
template<class T> class CMyAutoPtr
{
T *_p;
public:
- CMyAutoPtr(T *p = 0) : _p(p) {}
+ CMyAutoPtr(T *p = NULL) : _p(p) {}
CMyAutoPtr(CMyAutoPtr<T>& p): _p(p.release()) {}
CMyAutoPtr<T>& operator=(CMyAutoPtr<T>& p)
{
@@ -21,10 +21,10 @@ public:
T* release()
{
T *tmp = _p;
- _p = 0;
+ _p = NULL;
return tmp;
}
- void reset(T* p = 0)
+ void reset(T* p = NULL)
{
if (p != _p)
delete _p;
diff --git a/3rdparty/lzma/CPP/Common/C_FileIO.h b/3rdparty/lzma/CPP/Common/C_FileIO.h
index 6818558b253..12d94391016 100644
--- a/3rdparty/lzma/CPP/Common/C_FileIO.h
+++ b/3rdparty/lzma/CPP/Common/C_FileIO.h
@@ -1,6 +1,6 @@
// Common/C_FileIO.h
-#ifndef __COMMON_C_FILEIO_H
-#define __COMMON_C_FILEIO_H
+#ifndef ZIP7_INC_COMMON_C_FILEIO_H
+#define ZIP7_INC_COMMON_C_FILEIO_H
#endif
diff --git a/3rdparty/lzma/CPP/Common/ComTry.h b/3rdparty/lzma/CPP/Common/ComTry.h
index 297c407ba46..84746a7d084 100644
--- a/3rdparty/lzma/CPP/Common/ComTry.h
+++ b/3rdparty/lzma/CPP/Common/ComTry.h
@@ -1,7 +1,7 @@
// ComTry.h
-#ifndef __COM_TRY_H
-#define __COM_TRY_H
+#ifndef ZIP7_INC_COM_TRY_H
+#define ZIP7_INC_COM_TRY_H
#include "MyWindows.h"
// #include "Exception.h"
diff --git a/3rdparty/lzma/CPP/Common/CommandLineParser.h b/3rdparty/lzma/CPP/Common/CommandLineParser.h
index fbd4fa58bc7..fc6f028e6d5 100644
--- a/3rdparty/lzma/CPP/Common/CommandLineParser.h
+++ b/3rdparty/lzma/CPP/Common/CommandLineParser.h
@@ -1,7 +1,7 @@
// Common/CommandLineParser.h
-#ifndef __COMMON_COMMAND_LINE_PARSER_H
-#define __COMMON_COMMAND_LINE_PARSER_H
+#ifndef ZIP7_INC_COMMON_COMMAND_LINE_PARSER_H
+#define ZIP7_INC_COMMON_COMMAND_LINE_PARSER_H
#include "MyString.h"
diff --git a/3rdparty/lzma/CPP/Common/Common.h b/3rdparty/lzma/CPP/Common/Common.h
index 72db7a8bf44..0c77ab439f2 100644
--- a/3rdparty/lzma/CPP/Common/Common.h
+++ b/3rdparty/lzma/CPP/Common/Common.h
@@ -1,7 +1,13 @@
// Common.h
-#ifndef __COMMON_COMMON_H
-#define __COMMON_COMMON_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
+
+#ifndef ZIP7_INC_COMMON_H
+#define ZIP7_INC_COMMON_H
+
+#include "../../C/Compiler.h"
/*
This file is included to all cpp files in 7-Zip.
@@ -16,42 +22,292 @@ If you don't need some things that are used in 7-Zip,
you can change this h file or h files included in this file.
*/
-// compiler pragmas to disable some warnings
-#include "../../C/Compiler.h"
+#ifdef _MSC_VER
+ #pragma warning(disable : 4710) // function not inlined
+ // 'CUncopyable::CUncopyable':
+ #pragma warning(disable : 4514) // unreferenced inline function has been removed
+ #if _MSC_VER < 1300
+ #pragma warning(disable : 4702) // unreachable code
+ #pragma warning(disable : 4714) // function marked as __forceinline not inlined
+ #pragma warning(disable : 4786) // identifier was truncated to '255' characters in the debug information
+ #endif
+ #if _MSC_VER < 1400
+ #pragma warning(disable : 4511) // copy constructor could not be generated // #pragma warning(disable : 4512) // assignment operator could not be generated
+ #pragma warning(disable : 4512) // assignment operator could not be generated
+ #endif
+ #if _MSC_VER > 1400 && _MSC_VER <= 1900
+ // #pragma warning(disable : 4996)
+ // strcat: This function or variable may be unsafe
+ // GetVersion was declared deprecated
+ #endif
-// it's <windows.h> or code that defines windows things, if it's not _WIN32
-#include "MyWindows.h"
+#if _MSC_VER > 1200
+// -Wall warnings
-// NewHandler.h and NewHandler.cpp redefine operator new() to throw exceptions, if compiled with old MSVC compilers
-#include "NewHandler.h"
+#if _MSC_VER <= 1600
+#pragma warning(disable : 4917) // 'OLE_HANDLE' : a GUID can only be associated with a class, interface or namespace
+#endif
+// #pragma warning(disable : 4061) // enumerator '' in switch of enum '' is not explicitly handled by a case label
+// #pragma warning(disable : 4266) // no override available for virtual member function from base ''; function is hidden
+#pragma warning(disable : 4625) // copy constructor was implicitly defined as deleted
+#pragma warning(disable : 4626) // assignment operator was implicitly defined as deleted
+#if _MSC_VER >= 1600 && _MSC_VER < 1920
+#pragma warning(disable : 4571) // Informational: catch(...) semantics changed since Visual C++ 7.1; structured exceptions (SEH) are no longer caught
+#endif
+#if _MSC_VER >= 1600
+#pragma warning(disable : 4365) // 'initializing' : conversion from 'int' to 'unsigned int', signed / unsigned mismatch
+#endif
+#if _MSC_VER < 1800
+// we disable the warning, if we don't use 'final' in class
+#pragma warning(disable : 4265) // class has virtual functions, but destructor is not virtual
+#endif
+
+#if _MSC_VER >= 1900
+#pragma warning(disable : 5026) // move constructor was implicitly defined as deleted
+#pragma warning(disable : 5027) // move assignment operator was implicitly defined as deleted
+#endif
+#if _MSC_VER >= 1912
+#pragma warning(disable : 5039) // pointer or reference to potentially throwing function passed to 'extern "C"' function under - EHc.Undefined behavior may occur if this function throws an exception.
+#endif
+#if _MSC_VER >= 1925
+// #pragma warning(disable : 5204) // 'ISequentialInStream' : class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly
+#endif
+#if _MSC_VER >= 1934
+// #pragma warning(disable : 5264) // const variable is not used
+#endif
+#endif // _MSC_VER > 1200
+#endif // _MSC_VER
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+
+#if defined(_MSC_VER) // && !defined(__clang__)
+#define Z7_DECLSPEC_NOTHROW __declspec(nothrow)
+#elif defined(__clang__) || defined(__GNUC__)
+#define Z7_DECLSPEC_NOTHROW __attribute__((nothrow))
+#else
+#define Z7_DECLSPEC_NOTHROW
+#endif
+
+/*
+#if defined (_MSC_VER) && _MSC_VER >= 1900 \
+ || defined(__clang__) && __clang_major__ >= 6 \
+ || defined(__GNUC__) && __GNUC__ >= 6
+ #define Z7_noexcept noexcept
+#else
+ #define Z7_noexcept throw()
+#endif
+*/
+
+
+#if defined(__clang__)
+
+// noexcept, final, = delete
+#pragma GCC diagnostic ignored "-Wc++98-compat"
+#if __clang_major__ >= 4
+// throw() dynamic exception specifications are deprecated
+#pragma GCC diagnostic ignored "-Wdeprecated-dynamic-exception-spec"
+#endif
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#pragma GCC diagnostic ignored "-Wglobal-constructors"
+#pragma GCC diagnostic ignored "-Wexit-time-destructors"
+
+// #pragma GCC diagnostic ignored "-Wunused-private-field"
+// #pragma GCC diagnostic ignored "-Wnonportable-system-include-path"
+// #pragma GCC diagnostic ignored "-Wsuggest-override"
+// #pragma GCC diagnostic ignored "-Wsign-conversion"
+// #pragma GCC diagnostic ignored "-Winconsistent-missing-override"
+// #pragma GCC diagnostic ignored "-Wsuggest-destructor-override"
+// #pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
+// #pragma GCC diagnostic ignored "-Wdeprecated-copy-with-user-provided-dtor"
+// #pragma GCC diagnostic ignored "-Wdeprecated-copy-dtor"
+// #ifndef _WIN32
+// #pragma GCC diagnostic ignored "-Wweak-vtables"
+// #endif
+/*
+#if defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40400) \
+ || defined(Z7_CLANG_VERSION) && (Z7_CLANG_VERSION >= 30000)
+// enumeration values not explicitly handled in switch
+#pragma GCC diagnostic ignored "-Wswitch-enum"
+#endif
+*/
+#endif // __clang__
+
+
+#ifdef __GNUC__
+// #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor"
+#endif
/* There is BUG in MSVC 6.0 compiler for operator new[]:
It doesn't check overflow, when it calculates size in bytes for allocated array.
- So we can use MY_ARRAY_NEW macro instead of new[] operator. */
+ So we can use Z7_ARRAY_NEW macro instead of new[] operator. */
#if defined(_MSC_VER) && (_MSC_VER == 1200) && !defined(_WIN64)
- #define MY_ARRAY_NEW(p, T, size) p = new T[((size) > (unsigned)0xFFFFFFFF / sizeof(T)) ? (unsigned)0xFFFFFFFF / sizeof(T) : (size)];
+ #define Z7_ARRAY_NEW(p, T, size) p = new T[((size) > (unsigned)0xFFFFFFFF / sizeof(T)) ? (unsigned)0xFFFFFFFF / sizeof(T) : (size)];
#else
- #define MY_ARRAY_NEW(p, T, size) p = new T[size];
+ #define Z7_ARRAY_NEW(p, T, size) p = new T[size];
#endif
#if (defined(__GNUC__) && (__GNUC__ >= 8))
- #define MY_ATTR_NORETURN __attribute__((noreturn))
+ #define Z7_ATTR_NORETURN __attribute__((noreturn))
#elif (defined(__clang__) && (__clang_major__ >= 3))
#if __has_feature(cxx_attributes)
- #define MY_ATTR_NORETURN [[noreturn]]
+ #define Z7_ATTR_NORETURN [[noreturn]]
#else
- #define MY_ATTR_NORETURN __attribute__ ((noreturn))
+ #define Z7_ATTR_NORETURN __attribute__((noreturn))
#endif
#elif (defined(_MSC_VER) && (_MSC_VER >= 1900))
- #define MY_ATTR_NORETURN [[noreturn]]
+ #define Z7_ATTR_NORETURN [[noreturn]]
+#else
+ #define Z7_ATTR_NORETURN
+#endif
+
+
+// final in "GCC 4.7.0"
+// In C++98 and C++03 code the alternative spelling __final can be used instead (this is a GCC extension.)
+
+#if defined (__cplusplus) && __cplusplus >= 201103L \
+ || defined(_MSC_VER) && _MSC_VER >= 1800 \
+ || defined(__clang__) && __clang_major__ >= 4 \
+ /* || defined(__GNUC__) && __GNUC__ >= 9 */
+ #define Z7_final final
+ #if defined(__clang__) && __cplusplus < 201103L
+ #pragma GCC diagnostic ignored "-Wc++11-extensions"
+ #endif
+#elif defined (__cplusplus) && __cplusplus >= 199711L \
+ && defined(__GNUC__) && __GNUC__ >= 4 && !defined(__clang__)
+ #define Z7_final __final
#else
- #define MY_ATTR_NORETURN
+ #define Z7_final
+ #if defined(__clang__) && __clang_major__ >= 4 \
+ || defined(__GNUC__) && __GNUC__ >= 4
+ #pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
+ #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor"
+ #endif
#endif
+#define Z7_class_final(c) class c Z7_final
+
+
+#if defined (__cplusplus) && __cplusplus >= 201103L \
+ || (defined(_MSC_VER) && _MSC_VER >= 1800)
+ #define Z7_CPP_IS_SUPPORTED_default
+ #define Z7_eq_delete = delete
+ // #define Z7_DECL_DEFAULT_COPY_CONSTRUCTOR_IF_SUPPORTED(c) c(const c& k) = default;
+#else
+ #define Z7_eq_delete
+ // #define Z7_DECL_DEFAULT_COPY_CONSTRUCTOR_IF_SUPPORTED(c)
#endif
+
+
+#if defined(__cplusplus) && (__cplusplus >= 201103L) \
+ || defined(_MSC_VER) && (_MSC_VER >= 1400) /* && (_MSC_VER != 1600) */ \
+ || defined(__clang__) && __clang_major__ >= 4
+ #if defined(_MSC_VER) && (_MSC_VER == 1600) /* && (_MSC_VER != 1600) */
+ #pragma warning(disable : 4481) // nonstandard extension used: override specifier 'override'
+ #define Z7_DESTRUCTOR_override
+ #else
+ #define Z7_DESTRUCTOR_override override
+ #endif
+ #define Z7_override override
+#else
+ #define Z7_override
+ #define Z7_DESTRUCTOR_override
+#endif
+
+
+
+#define Z7_CLASS_NO_COPY(cls) \
+ private: \
+ cls(const cls &) Z7_eq_delete; \
+ cls &operator=(const cls &) Z7_eq_delete;
+
+class CUncopyable
+{
+protected:
+ CUncopyable() {} // allow constructor
+ // ~CUncopyable() {}
+ Z7_CLASS_NO_COPY(CUncopyable)
+};
+
+#define MY_UNCOPYABLE :private CUncopyable
+// #define MY_UNCOPYABLE
+
+
+typedef void (*Z7_void_Function)(void);
+
+#if defined(__clang__) || defined(__GNUC__)
+#define Z7_CAST_FUNC(t, e) reinterpret_cast<t>(reinterpret_cast<Z7_void_Function>(e))
+#else
+#define Z7_CAST_FUNC(t, e) reinterpret_cast<t>(reinterpret_cast<void*>(e))
+// #define Z7_CAST_FUNC(t, e) reinterpret_cast<t>(e)
+#endif
+
+#define Z7_GET_PROC_ADDRESS(func_type, hmodule, func_name) \
+ Z7_CAST_FUNC(func_type, GetProcAddress(hmodule, func_name))
+
+// || defined(__clang__)
+// || defined(__GNUC__)
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#define Z7_DECLSPEC_NOVTABLE __declspec(novtable)
+#else
+#define Z7_DECLSPEC_NOVTABLE
+#endif
+
+#ifdef __clang__
+#define Z7_PURE_INTERFACES_BEGIN \
+_Pragma("GCC diagnostic push") \
+_Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"")
+_Pragma("GCC diagnostic ignored \"-Wweak-vtables\"")
+#define Z7_PURE_INTERFACES_END \
+_Pragma("GCC diagnostic pop")
+#else
+#define Z7_PURE_INTERFACES_BEGIN
+#define Z7_PURE_INTERFACES_END
+#endif
+
+// NewHandler.h and NewHandler.cpp redefine operator new() to throw exceptions, if compiled with old MSVC compilers
+#include "NewHandler.h"
+
+/*
+// #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(a) Z7_ARRAY_SIZE(a)
+#endif
+*/
+
+#endif // ZIP7_INC_COMMON_H
+
+
+
+// #define Z7_REDEFINE_NULL
+
+#if defined(Z7_REDEFINE_NULL) /* && (!defined(__clang__) || defined(_MSC_VER)) */
+
+// NULL is defined in <stddef.h>
+#include <stddef.h>
+#undef NULL
+
+#ifdef __cplusplus
+ #if defined (__cplusplus) && __cplusplus >= 201103L \
+ || (defined(_MSC_VER) && _MSC_VER >= 1800)
+ #define NULL nullptr
+ #else
+ #define NULL 0
+ #endif
+#else
+ #define NULL ((void *)0)
+#endif
+
+#else // Z7_REDEFINE_NULL
+
+#if defined(__clang__) && __clang_major__ >= 5
+#pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+
+#endif // Z7_REDEFINE_NULL
+
+// for precompiler:
+#include "MyWindows.h"
diff --git a/3rdparty/lzma/CPP/Common/CrcReg.cpp b/3rdparty/lzma/CPP/Common/CrcReg.cpp
index fdbba77bcab..6cda892f98d 100644
--- a/3rdparty/lzma/CPP/Common/CrcReg.cpp
+++ b/3rdparty/lzma/CPP/Common/CrcReg.cpp
@@ -11,42 +11,39 @@
EXTERN_C_BEGIN
-typedef UInt32 (MY_FAST_CALL *CRC_FUNC)(UInt32 v, const void *data, size_t size, const UInt32 *table);
-
-UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table);
+// UInt32 Z7_FASTCALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table);
extern CRC_FUNC g_CrcUpdate;
-extern CRC_FUNC g_CrcUpdateT4;
+// extern CRC_FUNC g_CrcUpdateT4;
extern CRC_FUNC g_CrcUpdateT8;
extern CRC_FUNC g_CrcUpdateT0_32;
extern CRC_FUNC g_CrcUpdateT0_64;
EXTERN_C_END
-class CCrcHasher:
- public IHasher,
- public ICompressSetCoderProperties,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_2(
+ CCrcHasher
+ , IHasher
+ , ICompressSetCoderProperties
+)
UInt32 _crc;
CRC_FUNC _updateFunc;
- Byte mtDummy[1 << 7];
-
+
+ Z7_CLASS_NO_COPY(CCrcHasher)
+
bool SetFunctions(UInt32 tSize);
public:
- CCrcHasher(): _crc(CRC_INIT_VAL) { SetFunctions(0); }
+ Byte _mtDummy[1 << 7]; // it's public to eliminate clang warning: unused private field
- MY_UNKNOWN_IMP2(IHasher, ICompressSetCoderProperties)
- INTERFACE_IHasher(;)
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
+ CCrcHasher(): _crc(CRC_INIT_VAL) { SetFunctions(0); }
};
bool CCrcHasher::SetFunctions(UInt32 tSize)
{
CRC_FUNC f = NULL;
if (tSize == 0) f = g_CrcUpdate;
- else if (tSize == 1) f = CrcUpdateT1;
- else if (tSize == 4) f = g_CrcUpdateT4;
+ // else if (tSize == 1) f = CrcUpdateT1;
+ // else if (tSize == 4) f = g_CrcUpdateT4;
else if (tSize == 8) f = g_CrcUpdateT8;
else if (tSize == 32) f = g_CrcUpdateT0_32;
else if (tSize == 64) f = g_CrcUpdateT0_64;
@@ -60,13 +57,13 @@ bool CCrcHasher::SetFunctions(UInt32 tSize)
return true;
}
-STDMETHODIMP CCrcHasher::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CCrcHasher::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps))
{
for (UInt32 i = 0; i < numProps; i++)
{
- const PROPVARIANT &prop = coderProps[i];
if (propIDs[i] == NCoderPropID::kDefaultProp)
{
+ const PROPVARIANT &prop = coderProps[i];
if (prop.vt != VT_UI4)
return E_INVALIDARG;
if (!SetFunctions(prop.ulVal))
@@ -76,20 +73,20 @@ STDMETHODIMP CCrcHasher::SetCoderProperties(const PROPID *propIDs, const PROPVAR
return S_OK;
}
-STDMETHODIMP_(void) CCrcHasher::Init() throw()
+Z7_COM7F_IMF2(void, CCrcHasher::Init())
{
_crc = CRC_INIT_VAL;
}
-STDMETHODIMP_(void) CCrcHasher::Update(const void *data, UInt32 size) throw()
+Z7_COM7F_IMF2(void, CCrcHasher::Update(const void *data, UInt32 size))
{
_crc = _updateFunc(_crc, data, size, g_CrcTable);
}
-STDMETHODIMP_(void) CCrcHasher::Final(Byte *digest) throw()
+Z7_COM7F_IMF2(void, CCrcHasher::Final(Byte *digest))
{
- UInt32 val = CRC_GET_DIGEST(_crc);
- SetUi32(digest, val);
+ const UInt32 val = CRC_GET_DIGEST(_crc);
+ SetUi32(digest, val)
}
REGISTER_HASHER(CCrcHasher, 0x1, "CRC32", 4)
diff --git a/3rdparty/lzma/CPP/Common/Defs.h b/3rdparty/lzma/CPP/Common/Defs.h
index 9adb88cfcc6..e302f358722 100644
--- a/3rdparty/lzma/CPP/Common/Defs.h
+++ b/3rdparty/lzma/CPP/Common/Defs.h
@@ -1,7 +1,7 @@
// Common/Defs.h
-#ifndef __COMMON_DEFS_H
-#define __COMMON_DEFS_H
+#ifndef ZIP7_INC_COMMON_DEFS_H
+#define ZIP7_INC_COMMON_DEFS_H
template <class T> inline T MyMin(T a, T b) { return a < b ? a : b; }
template <class T> inline T MyMax(T a, T b) { return a > b ? a : b; }
@@ -10,7 +10,7 @@ template <class T> inline int MyCompare(T a, T b)
{ return a == b ? 0 : (a < b ? -1 : 1); }
inline int BoolToInt(bool v) { return (v ? 1 : 0); }
-inline unsigned BoolToUInt(bool v) { return (v ? (unsigned)1 : (unsigned)0); }
+inline unsigned BoolToUInt(bool v) { return (v ? 1u : 0u); }
inline bool IntToBool(int v) { return (v != 0); }
#endif
diff --git a/3rdparty/lzma/CPP/Common/DynLimBuf.cpp b/3rdparty/lzma/CPP/Common/DynLimBuf.cpp
index 79141040990..1d92af39942 100644
--- a/3rdparty/lzma/CPP/Common/DynLimBuf.cpp
+++ b/3rdparty/lzma/CPP/Common/DynLimBuf.cpp
@@ -7,7 +7,7 @@
CDynLimBuf::CDynLimBuf(size_t limit) throw()
{
- _chars = 0;
+ _chars = NULL;
_pos = 0;
_size = 0;
_sizeLimit = limit;
diff --git a/3rdparty/lzma/CPP/Common/DynLimBuf.h b/3rdparty/lzma/CPP/Common/DynLimBuf.h
index e80a7e7c5e9..af22f076485 100644
--- a/3rdparty/lzma/CPP/Common/DynLimBuf.h
+++ b/3rdparty/lzma/CPP/Common/DynLimBuf.h
@@ -1,7 +1,7 @@
// Common/DynLimBuf.h
-#ifndef __COMMON_DYN_LIM_BUF_H
-#define __COMMON_DYN_LIM_BUF_H
+#ifndef ZIP7_INC_COMMON_DYN_LIM_BUF_H
+#define ZIP7_INC_COMMON_DYN_LIM_BUF_H
#include <string.h>
diff --git a/3rdparty/lzma/CPP/Common/DynamicBuffer.h b/3rdparty/lzma/CPP/Common/DynamicBuffer.h
index f6f6b1572ef..714be4a7e03 100644
--- a/3rdparty/lzma/CPP/Common/DynamicBuffer.h
+++ b/3rdparty/lzma/CPP/Common/DynamicBuffer.h
@@ -1,7 +1,11 @@
// Common/DynamicBuffer.h
-#ifndef __COMMON_DYNAMIC_BUFFER_H
-#define __COMMON_DYNAMIC_BUFFER_H
+#ifndef ZIP7_INC_COMMON_DYNAMIC_BUFFER_H
+#define ZIP7_INC_COMMON_DYNAMIC_BUFFER_H
+
+#include <string.h>
+
+#include "Common.h"
template <class T> class CDynamicBuffer
{
@@ -34,7 +38,7 @@ template <class T> class CDynamicBuffer
}
public:
- CDynamicBuffer(): _items(0), _size(0), _pos(0) {}
+ CDynamicBuffer(): _items(NULL), _size(0), _pos(0) {}
// operator T *() { return _items; }
operator const T *() const { return _items; }
~CDynamicBuffer() { delete []_items; }
diff --git a/3rdparty/lzma/CPP/Common/IntToString.cpp b/3rdparty/lzma/CPP/Common/IntToString.cpp
index c87643c8760..21b068061f0 100644
--- a/3rdparty/lzma/CPP/Common/IntToString.cpp
+++ b/3rdparty/lzma/CPP/Common/IntToString.cpp
@@ -16,7 +16,7 @@
char * ConvertUInt32ToString(UInt32 val, char *s) throw()
{
- CONVERT_INT_TO_STR(char, 16);
+ CONVERT_INT_TO_STR(char, 16)
}
char * ConvertUInt64ToString(UInt64 val, char *s) throw()
@@ -25,7 +25,7 @@ char * ConvertUInt64ToString(UInt64 val, char *s) throw()
{
return ConvertUInt32ToString((UInt32)val, s);
}
- CONVERT_INT_TO_STR(char, 24);
+ CONVERT_INT_TO_STR(char, 24)
}
void ConvertUInt64ToOct(UInt64 val, char *s) throw()
@@ -102,7 +102,7 @@ void ConvertUInt32ToHex8Digits(UInt32 val, char *s) throw()
{
unsigned t = val & 0xF;
val >>= 4;
- s[i] = GET_HEX_CHAR(t);;
+ s[i] = GET_HEX_CHAR(t);
}
}
@@ -121,7 +121,7 @@ void ConvertUInt32ToHex8Digits(UInt32 val, wchar_t *s)
wchar_t * ConvertUInt32ToString(UInt32 val, wchar_t *s) throw()
{
- CONVERT_INT_TO_STR(wchar_t, 16);
+ CONVERT_INT_TO_STR(wchar_t, 16)
}
wchar_t * ConvertUInt64ToString(UInt64 val, wchar_t *s) throw()
@@ -130,7 +130,7 @@ wchar_t * ConvertUInt64ToString(UInt64 val, wchar_t *s) throw()
{
return ConvertUInt32ToString((UInt32)val, s);
}
- CONVERT_INT_TO_STR(wchar_t, 24);
+ CONVERT_INT_TO_STR(wchar_t, 24)
}
void ConvertInt64ToString(Int64 val, char *s) throw()
diff --git a/3rdparty/lzma/CPP/Common/IntToString.h b/3rdparty/lzma/CPP/Common/IntToString.h
index d0a96ef1e32..f4fc662e64a 100644
--- a/3rdparty/lzma/CPP/Common/IntToString.h
+++ b/3rdparty/lzma/CPP/Common/IntToString.h
@@ -1,7 +1,7 @@
// Common/IntToString.h
-#ifndef __COMMON_INT_TO_STRING_H
-#define __COMMON_INT_TO_STRING_H
+#ifndef ZIP7_INC_COMMON_INT_TO_STRING_H
+#define ZIP7_INC_COMMON_INT_TO_STRING_H
#include "MyTypes.h"
diff --git a/3rdparty/lzma/CPP/Common/Lang.h b/3rdparty/lzma/CPP/Common/Lang.h
index cc66677d443..76d5418e6e3 100644
--- a/3rdparty/lzma/CPP/Common/Lang.h
+++ b/3rdparty/lzma/CPP/Common/Lang.h
@@ -1,23 +1,30 @@
// Common/Lang.h
-#ifndef __COMMON_LANG_H
-#define __COMMON_LANG_H
+#ifndef ZIP7_INC_COMMON_LANG_H
+#define ZIP7_INC_COMMON_LANG_H
#include "MyString.h"
class CLang
{
wchar_t *_text;
- CRecordVector<UInt32> _ids;
- CRecordVector<UInt32> _offsets;
bool OpenFromString(const AString &s);
public:
- CLang(): _text(0) {}
+ CRecordVector<UInt32> _ids;
+ CRecordVector<UInt32> _offsets;
+ UStringVector Comments;
+
+ CLang(): _text(NULL) {}
~CLang() { Clear(); }
bool Open(CFSTR fileName, const char *id);
void Clear() throw();
+ bool IsEmpty() const { return _ids.IsEmpty(); }
const wchar_t *Get(UInt32 id) const throw();
+ const wchar_t *Get_by_index(unsigned index) const throw()
+ {
+ return _text + (size_t)_offsets[index];
+ }
};
#endif
diff --git a/3rdparty/lzma/CPP/Common/ListFileUtils.cpp b/3rdparty/lzma/CPP/Common/ListFileUtils.cpp
index b361b378891..e43dbc9c936 100644
--- a/3rdparty/lzma/CPP/Common/ListFileUtils.cpp
+++ b/3rdparty/lzma/CPP/Common/ListFileUtils.cpp
@@ -66,7 +66,7 @@ bool ReadNamesFromListFile2(CFSTR fileName, UStringVector &strings, UINT codePag
if (fileSize >= ((UInt32)1 << 31) - 32)
return false;
UString u;
- if (codePage == MY__CP_UTF16 || codePage == MY__CP_UTF16BE)
+ if (codePage == Z7_WIN_CP_UTF16 || codePage == Z7_WIN_CP_UTF16BE)
{
if ((fileSize & 1) != 0)
return false;
@@ -78,7 +78,7 @@ bool ReadNamesFromListFile2(CFSTR fileName, UStringVector &strings, UINT codePag
file.Close();
const unsigned num = (unsigned)fileSize / 2;
wchar_t *p = u.GetBuf(num);
- if (codePage == MY__CP_UTF16)
+ if (codePage == Z7_WIN_CP_UTF16)
for (unsigned i = 0; i < num; i++)
{
wchar_t c = GetUi16(buf + (size_t)i * 2);
diff --git a/3rdparty/lzma/CPP/Common/ListFileUtils.h b/3rdparty/lzma/CPP/Common/ListFileUtils.h
index a91e4b112ab..d43cc378fbd 100644
--- a/3rdparty/lzma/CPP/Common/ListFileUtils.h
+++ b/3rdparty/lzma/CPP/Common/ListFileUtils.h
@@ -1,13 +1,13 @@
// Common/ListFileUtils.h
-#ifndef __COMMON_LIST_FILE_UTILS_H
-#define __COMMON_LIST_FILE_UTILS_H
+#ifndef ZIP7_INC_COMMON_LIST_FILE_UTILS_H
+#define ZIP7_INC_COMMON_LIST_FILE_UTILS_H
#include "MyString.h"
#include "MyTypes.h"
-#define MY__CP_UTF16 1200
-#define MY__CP_UTF16BE 1201
+#define Z7_WIN_CP_UTF16 1200
+#define Z7_WIN_CP_UTF16BE 1201
// bool ReadNamesFromListFile(CFSTR fileName, UStringVector &strings, UINT codePage = CP_OEMCP);
diff --git a/3rdparty/lzma/CPP/Common/MyBuffer.h b/3rdparty/lzma/CPP/Common/MyBuffer.h
index 18ab6fa4089..bc829f4e09b 100644
--- a/3rdparty/lzma/CPP/Common/MyBuffer.h
+++ b/3rdparty/lzma/CPP/Common/MyBuffer.h
@@ -1,13 +1,15 @@
// Common/MyBuffer.h
-#ifndef __COMMON_MY_BUFFER_H
-#define __COMMON_MY_BUFFER_H
+#ifndef ZIP7_INC_COMMON_MY_BUFFER_H
+#define ZIP7_INC_COMMON_MY_BUFFER_H
+
+#include <string.h>
#include "Defs.h"
#include "MyTypes.h"
/* 7-Zip now uses CBuffer only as CByteBuffer.
- So there is no need to use MY_ARRAY_NEW macro in CBuffer code. */
+ So there is no need to use Z7_ARRAY_NEW macro in CBuffer code. */
template <class T> class CBuffer
{
@@ -20,16 +22,23 @@ public:
if (_items)
{
delete []_items;
- _items = 0;
+ _items = NULL;
}
_size = 0;
}
- CBuffer(): _items(0), _size(0) {};
- CBuffer(size_t size): _items(0), _size(0) { _items = new T[size]; _size = size; }
- CBuffer(const CBuffer &buffer): _items(0), _size(0)
+ CBuffer(): _items(NULL), _size(0) {}
+ CBuffer(size_t size): _items(NULL), _size(0)
+ {
+ if (size != 0)
+ {
+ _items = new T[size];
+ _size = size;
+ }
+ }
+ CBuffer(const CBuffer &buffer): _items(NULL), _size(0)
{
- size_t size = buffer._size;
+ const size_t size = buffer._size;
if (size != 0)
{
_items = new T[size];
@@ -136,7 +145,7 @@ typedef CBuffer<unsigned char> CByteBuffer;
class CByteBuffer_Wipe: public CByteBuffer
{
- CLASS_NO_COPY(CByteBuffer_Wipe)
+ Z7_CLASS_NO_COPY(CByteBuffer_Wipe)
public:
// CByteBuffer_Wipe(): CBuffer<unsigned char>() {}
CByteBuffer_Wipe(size_t size): CBuffer<unsigned char>(size) {}
@@ -157,17 +166,17 @@ public:
void Free()
{
delete []_items;
- _items = 0;
+ _items = NULL;
}
- CObjArray(size_t size): _items(0)
+ CObjArray(size_t size): _items(NULL)
{
if (size != 0)
{
- MY_ARRAY_NEW(_items, T, size)
+ Z7_ARRAY_NEW(_items, T, size)
// _items = new T[size];
}
}
- CObjArray(): _items(0) {};
+ CObjArray(): _items(NULL) {}
~CObjArray() { delete []_items; }
operator T *() { return _items; }
@@ -176,8 +185,8 @@ public:
void Alloc(size_t newSize)
{
delete []_items;
- _items = 0;
- MY_ARRAY_NEW(_items, T, newSize)
+ _items = NULL;
+ Z7_ARRAY_NEW(_items, T, newSize)
// _items = new T[newSize];
}
};
@@ -201,12 +210,12 @@ public:
void Free()
{
delete []_items;
- _items = 0;
+ _items = NULL;
_size = 0;
}
- CObjArray2(): _items(0), _size(0) {};
+ CObjArray2(): _items(NULL), _size(0) {}
/*
- CObjArray2(const CObjArray2 &buffer): _items(0), _size(0)
+ CObjArray2(const CObjArray2 &buffer): _items(NULL), _size(0)
{
size_t newSize = buffer._size;
if (newSize != 0)
@@ -221,7 +230,7 @@ public:
}
*/
/*
- CObjArray2(size_t size): _items(0), _size(0)
+ CObjArray2(size_t size): _items(NULL), _size(0)
{
if (size != 0)
{
@@ -247,7 +256,7 @@ public:
T *newBuffer = NULL;
if (size != 0)
{
- MY_ARRAY_NEW(newBuffer, T, size)
+ Z7_ARRAY_NEW(newBuffer, T, size)
// newBuffer = new T[size];
}
delete []_items;
diff --git a/3rdparty/lzma/CPP/Common/MyBuffer2.h b/3rdparty/lzma/CPP/Common/MyBuffer2.h
index 372d478c436..23394f8a8a5 100644
--- a/3rdparty/lzma/CPP/Common/MyBuffer2.h
+++ b/3rdparty/lzma/CPP/Common/MyBuffer2.h
@@ -1,7 +1,7 @@
// Common/MyBuffer2.h
-#ifndef __COMMON_MY_BUFFER2_H
-#define __COMMON_MY_BUFFER2_H
+#ifndef ZIP7_INC_COMMON_MY_BUFFER2_H
+#define ZIP7_INC_COMMON_MY_BUFFER2_H
#include "../../C/Alloc.h"
@@ -12,7 +12,7 @@ class CMidBuffer
Byte *_data;
size_t _size;
- CLASS_NO_COPY(CMidBuffer)
+ Z7_CLASS_NO_COPY(CMidBuffer)
public:
CMidBuffer(): _data(NULL), _size(0) {}
@@ -56,12 +56,37 @@ public:
};
+class CAlignedBuffer1
+{
+ Byte *_data;
+
+ Z7_CLASS_NO_COPY(CAlignedBuffer1)
+
+public:
+ ~CAlignedBuffer1()
+ {
+ ISzAlloc_Free(&g_AlignedAlloc, _data);
+ }
+
+ CAlignedBuffer1(size_t size)
+ {
+ _data = NULL;
+ _data = (Byte *)ISzAlloc_Alloc(&g_AlignedAlloc, size);
+ if (!_data)
+ throw 1;
+ }
+
+ operator Byte *() { return _data; }
+ operator const Byte *() const { return _data; }
+};
+
+
class CAlignedBuffer
{
Byte *_data;
size_t _size;
- CLASS_NO_COPY(CAlignedBuffer)
+ Z7_CLASS_NO_COPY(CAlignedBuffer)
public:
CAlignedBuffer(): _data(NULL), _size(0) {}
diff --git a/3rdparty/lzma/CPP/Common/MyCom.h b/3rdparty/lzma/CPP/Common/MyCom.h
index ff5427806e7..65c4330ce41 100644
--- a/3rdparty/lzma/CPP/Common/MyCom.h
+++ b/3rdparty/lzma/CPP/Common/MyCom.h
@@ -1,15 +1,11 @@
// MyCom.h
-#ifndef __MY_COM_H
-#define __MY_COM_H
+#ifndef ZIP7_INC_MY_COM_H
+#define ZIP7_INC_MY_COM_H
#include "MyWindows.h"
#include "MyTypes.h"
-#ifndef RINOK
-#define RINOK(x) { HRESULT __result_ = (x); if (__result_ != S_OK) return __result_; }
-#endif
-
template <class T>
class CMyComPtr
{
@@ -72,6 +68,10 @@ public:
}
};
+#define Z7_DECL_CMyComPtr_QI_FROM(i, v, unk) \
+ CMyComPtr<i> v; (unk)->QueryInterface(IID_ ## i, (void **)&v);
+
+
//////////////////////////////////////////////////////////
inline HRESULT StringToBstr(LPCOLESTR src, BSTR *bstr)
@@ -83,7 +83,7 @@ inline HRESULT StringToBstr(LPCOLESTR src, BSTR *bstr)
class CMyComBSTR
{
BSTR m_str;
- CLASS_NO_COPY(CMyComBSTR)
+ Z7_CLASS_NO_COPY(CMyComBSTR)
public:
CMyComBSTR(): m_str(NULL) {}
~CMyComBSTR() { ::SysFreeString(m_str); }
@@ -174,7 +174,7 @@ private:
class CMyComBSTR_Wipe: public CMyComBSTR
{
- CLASS_NO_COPY(CMyComBSTR_Wipe)
+ Z7_CLASS_NO_COPY(CMyComBSTR_Wipe)
public:
CMyComBSTR_Wipe(): CMyComBSTR() {}
~CMyComBSTR_Wipe() { Wipe_and_Free(); }
@@ -185,123 +185,325 @@ public:
/*
If CMyUnknownImp doesn't use virtual destructor, the code size is smaller.
But if some class_1 derived from CMyUnknownImp
- uses MY_ADDREF_RELEASE and IUnknown::Release()
+ uses Z7_COM_ADDREF_RELEASE and IUnknown::Release()
and some another class_2 is derived from class_1,
then class_1 must use virtual destructor:
virtual ~class_1();
In that case, class_1::Release() calls correct destructor of class_2.
-
- We use virtual ~CMyUnknownImp() to disable warning
+ We can use virtual ~CMyUnknownImp() to disable warning
"class has virtual functions, but destructor is not virtual".
-
- also we can use virtual ~IUnknown() {} in MyWindows.h
+ Also we can use virtual ~IUnknown() {} in MyWindows.h
*/
class CMyUnknownImp
{
- CLASS_NO_COPY(CMyUnknownImp)
-public:
- ULONG __m_RefCount;
- CMyUnknownImp(): __m_RefCount(0) {}
+ Z7_CLASS_NO_COPY(CMyUnknownImp)
+protected:
+ ULONG _m_RefCount;
+ CMyUnknownImp(): _m_RefCount(0) {}
#ifdef _WIN32
#if defined(__GNUC__) || defined(__clang__)
- virtual // to disable GCC/CLANG varnings
+ // virtual ~CMyUnknownImp() {} // to disable GCC/CLANG varnings
#endif
#endif
- ~CMyUnknownImp() {}
};
-#define MY_QUERYINTERFACE_BEGIN STDMETHOD(QueryInterface) \
-(REFGUID iid, void **outObject) throw() { *outObject = NULL;
+#define Z7_COM_QI_BEGIN \
+ private: STDMETHOD(QueryInterface) (REFGUID iid, void **outObject) throw() Z7_override Z7_final \
+ { *outObject = NULL;
+
+#define Z7_COM_QI_ENTRY(i) \
+ else if (iid == IID_ ## i) \
+ { i *ti = this; *outObject = ti; }
+// { *outObject = (void *)(i *)this; }
-#define MY_QUERYINTERFACE_ENTRY(i) else if (iid == IID_ ## i) \
- { *outObject = (void *)(i *)this; }
+#define Z7_COM_QI_ENTRY_UNKNOWN_0 \
+ if (iid == IID_IUnknown) \
+ { IUnknown *tu = this; *outObject = tu; }
-#define MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) if (iid == IID_IUnknown) \
- { *outObject = (void *)(IUnknown *)(i *)this; }
+#define Z7_COM_QI_ENTRY_UNKNOWN(i) \
+ if (iid == IID_IUnknown) \
+ { i *ti = this; IUnknown *tu = ti; *outObject = tu; }
+// { *outObject = (void *)(IUnknown *)(i *)this; }
-#define MY_QUERYINTERFACE_BEGIN2(i) MY_QUERYINTERFACE_BEGIN \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) \
- MY_QUERYINTERFACE_ENTRY(i)
+#define Z7_COM_QI_BEGIN2(i) \
+ Z7_COM_QI_BEGIN \
+ Z7_COM_QI_ENTRY_UNKNOWN(i) \
+ Z7_COM_QI_ENTRY(i)
-#define MY_QUERYINTERFACE_END else return E_NOINTERFACE; ++__m_RefCount; /* AddRef(); */ return S_OK; }
+#define Z7_COM_QI_END \
+ else return E_NOINTERFACE; \
+ ++_m_RefCount; /* AddRef(); */ return S_OK; }
-#define MY_ADDREF_RELEASE \
-STDMETHOD_(ULONG, AddRef)() throw() { return ++__m_RefCount; } \
-STDMETHOD_(ULONG, Release)() { if (--__m_RefCount != 0) return __m_RefCount; \
- delete this; return 0; }
+#define Z7_COM_ADDREF_RELEASE \
+ private: \
+ STDMETHOD_(ULONG, AddRef)() throw() Z7_override Z7_final \
+ { return ++_m_RefCount; } \
+ STDMETHOD_(ULONG, Release)() throw() Z7_override Z7_final \
+ { if (--_m_RefCount != 0) return _m_RefCount; delete this; return 0; } \
-#define MY_UNKNOWN_IMP_SPEC(i) \
- MY_QUERYINTERFACE_BEGIN \
+#define Z7_COM_UNKNOWN_IMP_SPEC(i) \
+ Z7_COM_QI_BEGIN \
i \
- MY_QUERYINTERFACE_END \
- MY_ADDREF_RELEASE
+ Z7_COM_QI_END \
+ Z7_COM_ADDREF_RELEASE
-#define MY_UNKNOWN_IMP MY_QUERYINTERFACE_BEGIN \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(IUnknown) \
- MY_QUERYINTERFACE_END \
- MY_ADDREF_RELEASE
+#define Z7_COM_UNKNOWN_IMP_0 \
+ Z7_COM_QI_BEGIN \
+ Z7_COM_QI_ENTRY_UNKNOWN_0 \
+ Z7_COM_QI_END \
+ Z7_COM_ADDREF_RELEASE
-#define MY_UNKNOWN_IMP1(i) MY_UNKNOWN_IMP_SPEC( \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) \
- MY_QUERYINTERFACE_ENTRY(i) \
+#define Z7_COM_UNKNOWN_IMP_1(i) \
+ Z7_COM_UNKNOWN_IMP_SPEC( \
+ Z7_COM_QI_ENTRY_UNKNOWN(i) \
+ Z7_COM_QI_ENTRY(i) \
)
-#define MY_UNKNOWN_IMP2(i1, i2) MY_UNKNOWN_IMP_SPEC( \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \
- MY_QUERYINTERFACE_ENTRY(i1) \
- MY_QUERYINTERFACE_ENTRY(i2) \
+#define Z7_COM_UNKNOWN_IMP_2(i1, i2) \
+ Z7_COM_UNKNOWN_IMP_SPEC( \
+ Z7_COM_QI_ENTRY_UNKNOWN(i1) \
+ Z7_COM_QI_ENTRY(i1) \
+ Z7_COM_QI_ENTRY(i2) \
)
-#define MY_UNKNOWN_IMP3(i1, i2, i3) MY_UNKNOWN_IMP_SPEC( \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \
- MY_QUERYINTERFACE_ENTRY(i1) \
- MY_QUERYINTERFACE_ENTRY(i2) \
- MY_QUERYINTERFACE_ENTRY(i3) \
+#define Z7_COM_UNKNOWN_IMP_3(i1, i2, i3) \
+ Z7_COM_UNKNOWN_IMP_SPEC( \
+ Z7_COM_QI_ENTRY_UNKNOWN(i1) \
+ Z7_COM_QI_ENTRY(i1) \
+ Z7_COM_QI_ENTRY(i2) \
+ Z7_COM_QI_ENTRY(i3) \
)
-#define MY_UNKNOWN_IMP4(i1, i2, i3, i4) MY_UNKNOWN_IMP_SPEC( \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \
- MY_QUERYINTERFACE_ENTRY(i1) \
- MY_QUERYINTERFACE_ENTRY(i2) \
- MY_QUERYINTERFACE_ENTRY(i3) \
- MY_QUERYINTERFACE_ENTRY(i4) \
+#define Z7_COM_UNKNOWN_IMP_4(i1, i2, i3, i4) \
+ Z7_COM_UNKNOWN_IMP_SPEC( \
+ Z7_COM_QI_ENTRY_UNKNOWN(i1) \
+ Z7_COM_QI_ENTRY(i1) \
+ Z7_COM_QI_ENTRY(i2) \
+ Z7_COM_QI_ENTRY(i3) \
+ Z7_COM_QI_ENTRY(i4) \
)
-#define MY_UNKNOWN_IMP5(i1, i2, i3, i4, i5) MY_UNKNOWN_IMP_SPEC( \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \
- MY_QUERYINTERFACE_ENTRY(i1) \
- MY_QUERYINTERFACE_ENTRY(i2) \
- MY_QUERYINTERFACE_ENTRY(i3) \
- MY_QUERYINTERFACE_ENTRY(i4) \
- MY_QUERYINTERFACE_ENTRY(i5) \
+#define Z7_COM_UNKNOWN_IMP_5(i1, i2, i3, i4, i5) \
+ Z7_COM_UNKNOWN_IMP_SPEC( \
+ Z7_COM_QI_ENTRY_UNKNOWN(i1) \
+ Z7_COM_QI_ENTRY(i1) \
+ Z7_COM_QI_ENTRY(i2) \
+ Z7_COM_QI_ENTRY(i3) \
+ Z7_COM_QI_ENTRY(i4) \
+ Z7_COM_QI_ENTRY(i5) \
)
-#define MY_UNKNOWN_IMP6(i1, i2, i3, i4, i5, i6) MY_UNKNOWN_IMP_SPEC( \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \
- MY_QUERYINTERFACE_ENTRY(i1) \
- MY_QUERYINTERFACE_ENTRY(i2) \
- MY_QUERYINTERFACE_ENTRY(i3) \
- MY_QUERYINTERFACE_ENTRY(i4) \
- MY_QUERYINTERFACE_ENTRY(i5) \
- MY_QUERYINTERFACE_ENTRY(i6) \
+#define Z7_COM_UNKNOWN_IMP_6(i1, i2, i3, i4, i5, i6) \
+ Z7_COM_UNKNOWN_IMP_SPEC( \
+ Z7_COM_QI_ENTRY_UNKNOWN(i1) \
+ Z7_COM_QI_ENTRY(i1) \
+ Z7_COM_QI_ENTRY(i2) \
+ Z7_COM_QI_ENTRY(i3) \
+ Z7_COM_QI_ENTRY(i4) \
+ Z7_COM_QI_ENTRY(i5) \
+ Z7_COM_QI_ENTRY(i6) \
)
-#define MY_UNKNOWN_IMP7(i1, i2, i3, i4, i5, i6, i7) MY_UNKNOWN_IMP_SPEC( \
- MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \
- MY_QUERYINTERFACE_ENTRY(i1) \
- MY_QUERYINTERFACE_ENTRY(i2) \
- MY_QUERYINTERFACE_ENTRY(i3) \
- MY_QUERYINTERFACE_ENTRY(i4) \
- MY_QUERYINTERFACE_ENTRY(i5) \
- MY_QUERYINTERFACE_ENTRY(i6) \
- MY_QUERYINTERFACE_ENTRY(i7) \
+#define Z7_COM_UNKNOWN_IMP_7(i1, i2, i3, i4, i5, i6, i7) \
+ Z7_COM_UNKNOWN_IMP_SPEC( \
+ Z7_COM_QI_ENTRY_UNKNOWN(i1) \
+ Z7_COM_QI_ENTRY(i1) \
+ Z7_COM_QI_ENTRY(i2) \
+ Z7_COM_QI_ENTRY(i3) \
+ Z7_COM_QI_ENTRY(i4) \
+ Z7_COM_QI_ENTRY(i5) \
+ Z7_COM_QI_ENTRY(i6) \
+ Z7_COM_QI_ENTRY(i7) \
)
-const HRESULT k_My_HRESULT_WritingWasCut = 0x20000010;
+
+#define Z7_IFACES_IMP_UNK_1(i1) \
+ Z7_COM_UNKNOWN_IMP_1(i1) \
+ Z7_IFACE_COM7_IMP(i1) \
+
+#define Z7_IFACES_IMP_UNK_2(i1, i2) \
+ Z7_COM_UNKNOWN_IMP_2(i1, i2) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+
+#define Z7_IFACES_IMP_UNK_3(i1, i2, i3) \
+ Z7_COM_UNKNOWN_IMP_3(i1, i2, i3) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ Z7_IFACE_COM7_IMP(i3) \
+
+#define Z7_IFACES_IMP_UNK_4(i1, i2, i3, i4) \
+ Z7_COM_UNKNOWN_IMP_4(i1, i2, i3, i4) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ Z7_IFACE_COM7_IMP(i3) \
+ Z7_IFACE_COM7_IMP(i4) \
+
+#define Z7_IFACES_IMP_UNK_5(i1, i2, i3, i4, i5) \
+ Z7_COM_UNKNOWN_IMP_5(i1, i2, i3, i4, i5) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ Z7_IFACE_COM7_IMP(i3) \
+ Z7_IFACE_COM7_IMP(i4) \
+ Z7_IFACE_COM7_IMP(i5) \
+
+#define Z7_IFACES_IMP_UNK_6(i1, i2, i3, i4, i5, i6) \
+ Z7_COM_UNKNOWN_IMP_6(i1, i2, i3, i4, i5, i6) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ Z7_IFACE_COM7_IMP(i3) \
+ Z7_IFACE_COM7_IMP(i4) \
+ Z7_IFACE_COM7_IMP(i5) \
+ Z7_IFACE_COM7_IMP(i6) \
+
+
+#define Z7_CLASS_IMP_COM_0(c) \
+ Z7_class_final(c) : \
+ public IUnknown, \
+ public CMyUnknownImp { \
+ Z7_COM_UNKNOWN_IMP_0 \
+ private:
+
+#define Z7_CLASS_IMP_COM_1(c, i1) \
+ Z7_class_final(c) : \
+ public i1, \
+ public CMyUnknownImp { \
+ Z7_IFACES_IMP_UNK_1(i1) \
+ private:
+
+#define Z7_CLASS_IMP_COM_2(c, i1, i2) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public CMyUnknownImp { \
+ Z7_IFACES_IMP_UNK_2(i1, i2) \
+ private:
+
+#define Z7_CLASS_IMP_COM_3(c, i1, i2, i3) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public i3, \
+ public CMyUnknownImp { \
+ Z7_IFACES_IMP_UNK_3(i1, i2, i3) \
+ private:
+
+#define Z7_CLASS_IMP_COM_4(c, i1, i2, i3, i4) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public i3, \
+ public i4, \
+ public CMyUnknownImp { \
+ Z7_IFACES_IMP_UNK_4(i1, i2, i3, i4) \
+ private:
+
+#define Z7_CLASS_IMP_COM_5(c, i1, i2, i3, i4, i5) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public i3, \
+ public i4, \
+ public i5, \
+ public CMyUnknownImp { \
+ Z7_IFACES_IMP_UNK_5(i1, i2, i3, i4, i5) \
+ private:
+
+#define Z7_CLASS_IMP_COM_6(c, i1, i2, i3, i4, i5, i6) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public i3, \
+ public i4, \
+ public i5, \
+ public i6, \
+ public CMyUnknownImp { \
+ Z7_IFACES_IMP_UNK_6(i1, i2, i3, i4, i5, i6) \
+ private:
+
+
+/*
+#define Z7_CLASS_IMP_NOQIB_0(c) \
+ Z7_class_final(c) : \
+ public IUnknown, \
+ public CMyUnknownImp { \
+ Z7_COM_UNKNOWN_IMP_0 \
+ private:
+*/
+
+#define Z7_CLASS_IMP_NOQIB_1(c, i1) \
+ Z7_class_final(c) : \
+ public i1, \
+ public CMyUnknownImp { \
+ Z7_COM_UNKNOWN_IMP_0 \
+ Z7_IFACE_COM7_IMP(i1) \
+ private:
+
+#define Z7_CLASS_IMP_NOQIB_2(c, i1, i2) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public CMyUnknownImp { \
+ Z7_COM_UNKNOWN_IMP_1(i2) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ private:
+
+#define Z7_CLASS_IMP_NOQIB_3(c, i1, i2, i3) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public i3, \
+ public CMyUnknownImp { \
+ Z7_COM_UNKNOWN_IMP_2(i2, i3) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ Z7_IFACE_COM7_IMP(i3) \
+ private:
+
+#define Z7_CLASS_IMP_NOQIB_4(c, i1, i2, i3, i4) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public i3, \
+ public i4, \
+ public CMyUnknownImp { \
+ Z7_COM_UNKNOWN_IMP_3(i2, i3, i4) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ Z7_IFACE_COM7_IMP(i3) \
+ Z7_IFACE_COM7_IMP(i4) \
+
+/*
+#define Z7_CLASS_IMP_NOQIB_5(c, i1, i2, i3, i4, i5) \
+ Z7_class_final(c) : \
+ public i1, \
+ public i2, \
+ public i3, \
+ public i4, \
+ public i5, \
+ public CMyUnknownImp { \
+ Z7_COM_UNKNOWN_IMP_4(i2, i3, i4, i5) \
+ Z7_IFACE_COM7_IMP(i1) \
+ Z7_IFACE_COM7_IMP(i2) \
+ Z7_IFACE_COM7_IMP(i3) \
+ Z7_IFACE_COM7_IMP(i4) \
+ Z7_IFACE_COM7_IMP(i5) \
+*/
+
+
+#define Z7_CLASS_IMP_IInStream(c) \
+ class c Z7_final : \
+ public IInStream, \
+ public CMyUnknownImp { \
+ Z7_IFACES_IMP_UNK_2(ISequentialInStream, IInStream) \
+
+
+#define k_My_HRESULT_WritingWasCut 0x20000010
#endif
diff --git a/3rdparty/lzma/CPP/Common/MyException.h b/3rdparty/lzma/CPP/Common/MyException.h
index f0ad111589f..06fbdea15d6 100644
--- a/3rdparty/lzma/CPP/Common/MyException.h
+++ b/3rdparty/lzma/CPP/Common/MyException.h
@@ -1,7 +1,7 @@
// Common/Exception.h
-#ifndef __COMMON_EXCEPTION_H
-#define __COMMON_EXCEPTION_H
+#ifndef ZIP7_INC_COMMON_EXCEPTION_H
+#define ZIP7_INC_COMMON_EXCEPTION_H
#include "MyWindows.h"
diff --git a/3rdparty/lzma/CPP/Common/MyGuidDef.h b/3rdparty/lzma/CPP/Common/MyGuidDef.h
index 38aad6e6d37..ab9993bdeb1 100644
--- a/3rdparty/lzma/CPP/Common/MyGuidDef.h
+++ b/3rdparty/lzma/CPP/Common/MyGuidDef.h
@@ -1,8 +1,12 @@
// Common/MyGuidDef.h
+// #pragma message "Common/MyGuidDef.h"
+
#ifndef GUID_DEFINED
#define GUID_DEFINED
+// #pragma message "GUID_DEFINED"
+
#include "MyTypes.h"
typedef struct {
@@ -27,31 +31,33 @@ typedef GUID CLSID;
#ifdef __cplusplus
inline int operator==(REFGUID g1, REFGUID g2)
{
- for (int i = 0; i < (int)sizeof(g1); i++)
- if (((unsigned char *)&g1)[i] != ((unsigned char *)&g2)[i])
+ for (unsigned i = 0; i < sizeof(g1); i++)
+ if (((const unsigned char *)&g1)[i] != ((const unsigned char *)&g2)[i])
return 0;
return 1;
}
inline int operator!=(REFGUID g1, REFGUID g2) { return !(g1 == g2); }
#endif
+#endif // GUID_DEFINED
+
+#ifndef EXTERN_C
#ifdef __cplusplus
- #define MY_EXTERN_C extern "C"
+ #define EXTERN_C extern "C"
#else
- #define MY_EXTERN_C extern
+ #define EXTERN_C extern
#endif
-
#endif
-
#ifdef DEFINE_GUID
#undef DEFINE_GUID
#endif
#ifdef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
- MY_EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+ EXTERN_C const GUID name; \
+ EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
- MY_EXTERN_C const GUID name
+ EXTERN_C const GUID name
#endif
diff --git a/3rdparty/lzma/CPP/Common/MyInitGuid.h b/3rdparty/lzma/CPP/Common/MyInitGuid.h
index 04d77e21c10..3745c79a091 100644
--- a/3rdparty/lzma/CPP/Common/MyInitGuid.h
+++ b/3rdparty/lzma/CPP/Common/MyInitGuid.h
@@ -1,7 +1,7 @@
// Common/MyInitGuid.h
-#ifndef __COMMON_MY_INITGUID_H
-#define __COMMON_MY_INITGUID_H
+#ifndef ZIP7_INC_COMMON_MY_INITGUID_H
+#define ZIP7_INC_COMMON_MY_INITGUID_H
/*
This file must be included only to one C++ file in project before
@@ -19,31 +19,39 @@ Also we need IID_IUnknown that is initialized in some file for linking:
Other: we define IID_IUnknown in this file
*/
-#ifdef __clang__
- #pragma clang diagnostic ignored "-Wmissing-variable-declarations"
-#endif
+// #include "Common.h"
+/* vc6 without sdk needs <objbase.h> before <initguid.h>,
+ but it doesn't work in new msvc.
+ So we include full "MyWindows.h" instead of <objbase.h> */
+// #include <objbase.h>
+#include "MyWindows.h"
#ifdef _WIN32
+#ifdef __clang__
+ // #pragma GCC diagnostic ignored "-Wmissing-variable-declarations"
+#endif
+
#ifdef UNDER_CE
#include <basetyps.h>
#endif
-#include <InitGuid.h>
+// for vc6 without sdk we must define INITGUID here
+#define INITGUID
+#include <initguid.h>
#ifdef UNDER_CE
DEFINE_GUID(IID_IUnknown,
0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
#endif
-#else
+#else // _WIN32
#define INITGUID
#include "MyGuidDef.h"
DEFINE_GUID(IID_IUnknown,
0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
-#endif
-
+#endif // _WIN32
#endif
diff --git a/3rdparty/lzma/CPP/Common/MyLinux.h b/3rdparty/lzma/CPP/Common/MyLinux.h
index 98b453c11d3..a8454d7f58e 100644
--- a/3rdparty/lzma/CPP/Common/MyLinux.h
+++ b/3rdparty/lzma/CPP/Common/MyLinux.h
@@ -1,7 +1,7 @@
// MyLinux.h
-#ifndef __MY_LIN_LINUX_H
-#define __MY_LIN_LINUX_H
+#ifndef ZIP7_INC_COMMON_MY_LINUX_H
+#define ZIP7_INC_COMMON_MY_LINUX_H
// #include "../../C/7zTypes.h"
diff --git a/3rdparty/lzma/CPP/Common/MyString.cpp b/3rdparty/lzma/CPP/Common/MyString.cpp
index bf1638ebe10..51c1c3be0fc 100644
--- a/3rdparty/lzma/CPP/Common/MyString.cpp
+++ b/3rdparty/lzma/CPP/Common/MyString.cpp
@@ -408,7 +408,7 @@ void AString::ReAlloc(unsigned newLimit)
// MY_STRING_REALLOC(_chars, char, (size_t)newLimit + 1, (size_t)_len + 1);
char *newBuf = MY_STRING_NEW_char((size_t)newLimit + 1);
memcpy(newBuf, _chars, (size_t)_len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = newLimit;
}
@@ -419,9 +419,10 @@ void AString::ReAlloc2(unsigned newLimit)
// MY_STRING_REALLOC(_chars, char, (size_t)newLimit + 1, 0);
char *newBuf = MY_STRING_NEW_char((size_t)newLimit + 1);
newBuf[0] = 0;
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = newLimit;
+ _len = 0;
}
void AString::SetStartLen(unsigned len)
@@ -541,7 +542,7 @@ AString &AString::operator=(char c)
if (1 > _limit)
{
char *newBuf = MY_STRING_NEW_char(1 + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = 1;
}
@@ -558,7 +559,7 @@ AString &AString::operator=(const char *s)
if (len > _limit)
{
char *newBuf = MY_STRING_NEW_char((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -575,7 +576,7 @@ AString &AString::operator=(const AString &s)
if (len > _limit)
{
char *newBuf = MY_STRING_NEW_char((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -600,7 +601,7 @@ void AString::SetFromWStr_if_Ascii(const wchar_t *s)
if (len > _limit)
{
char *newBuf = MY_STRING_NEW_char((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -624,7 +625,7 @@ void AString::SetFromBstr_if_Ascii(BSTR s)
if (len > _limit)
{
char *newBuf = MY_STRING_NEW_char((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -641,6 +642,8 @@ void AString::Add_Space() { operator+=(' '); }
void AString::Add_Space_if_NotEmpty() { if (!IsEmpty()) Add_Space(); }
void AString::Add_LF() { operator+=('\n'); }
void AString::Add_Slash() { operator+=('/'); }
+void AString::Add_Dot() { operator+=('.'); }
+void AString::Add_Minus() { operator+=('-'); }
AString &AString::operator+=(const char *s)
{
@@ -694,7 +697,7 @@ void AString::SetFrom(const char *s, unsigned len) // no check
if (len > _limit)
{
char *newBuf = MY_STRING_NEW_char((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -766,7 +769,7 @@ int AString::ReverseFind_PathSepar() const throw()
const char *p = _chars + _len - 1;
for (;;)
{
- char c = *p;
+ const char c = *p;
if (IS_PATH_SEPAR(c))
return (int)(p - _chars);
if (p == _chars)
@@ -1001,7 +1004,7 @@ void UString::ReAlloc(unsigned newLimit)
// MY_STRING_REALLOC(_chars, wchar_t, (size_t)newLimit + 1, (size_t)_len + 1);
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)newLimit + 1);
wmemcpy(newBuf, _chars, _len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = newLimit;
}
@@ -1012,14 +1015,15 @@ void UString::ReAlloc2(unsigned newLimit)
// MY_STRING_REALLOC(_chars, wchar_t, newLimit + 1, 0);
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)newLimit + 1);
newBuf[0] = 0;
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = newLimit;
+ _len = 0;
}
void UString::SetStartLen(unsigned len)
{
- _chars = 0;
+ _chars = NULL;
_chars = MY_STRING_NEW_wchar_t((size_t)len + 1);
_len = len;
_limit = len;
@@ -1101,7 +1105,7 @@ UString operator+(const wchar_t *s1, const UString &s2) { return UString(s1, MyS
UString::UString()
{
- _chars = 0;
+ _chars = NULL;
_chars = MY_STRING_NEW_wchar_t(kStartStringCapacity);
_len = 0;
_limit = kStartStringCapacity - 1;
@@ -1163,7 +1167,7 @@ UString &UString::operator=(wchar_t c)
if (1 > _limit)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t(1 + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = 1;
}
@@ -1180,7 +1184,7 @@ UString &UString::operator=(const wchar_t *s)
if (len > _limit)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -1197,7 +1201,7 @@ UString &UString::operator=(const UString &s)
if (len > _limit)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -1211,7 +1215,7 @@ void UString::SetFrom(const wchar_t *s, unsigned len) // no check
if (len > _limit)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -1249,7 +1253,7 @@ void UString::SetFromBstr(LPCOLESTR s)
if (len > _limit)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -1289,7 +1293,7 @@ UString &UString::operator=(const char *s)
if (len > _limit)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
_limit = len;
}
@@ -1301,6 +1305,7 @@ UString &UString::operator=(const char *s)
return *this;
}
+void UString::Add_Dot() { operator+=(L'.'); }
void UString::Add_Space() { operator+=(L' '); }
void UString::Add_Space_if_NotEmpty() { if (!IsEmpty()) Add_Space(); }
@@ -1393,31 +1398,26 @@ int UString::ReverseFind(wchar_t c) const throw()
{
if (_len == 0)
return -1;
- const wchar_t *p = _chars + _len - 1;
- for (;;)
+ const wchar_t *p = _chars + _len;
+ do
{
- if (*p == c)
+ if (*(--p) == c)
return (int)(p - _chars);
- if (p == _chars)
- return -1;
- p--;
}
+ while (p != _chars);
+ return -1;
}
int UString::ReverseFind_PathSepar() const throw()
{
- if (_len == 0)
- return -1;
- const wchar_t *p = _chars + _len - 1;
- for (;;)
+ const wchar_t *p = _chars + _len;
+ while (p != _chars)
{
- wchar_t c = *p;
+ const wchar_t c = *(--p);
if (IS_PATH_SEPAR(c))
return (int)(p - _chars);
- if (p == _chars)
- return -1;
- p--;
}
+ return -1;
}
void UString::TrimLeft() throw()
@@ -1601,7 +1601,7 @@ void UString2::ReAlloc2(unsigned newLimit)
// MY_STRING_REALLOC(_chars, wchar_t, newLimit + 1, 0);
if (_chars)
{
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = NULL;
// _len = 0;
}
@@ -1651,7 +1651,7 @@ UString2 &UString2::operator=(wchar_t c)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t(1 + 1);
if (_chars)
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
}
_len = 1;
@@ -1669,7 +1669,7 @@ UString2 &UString2::operator=(const wchar_t *s)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
if (_chars)
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
}
_len = len;
@@ -1684,7 +1684,7 @@ void UString2::SetFromAscii(const char *s)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
if (_chars)
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
}
wchar_t *chars = _chars;
@@ -1703,7 +1703,7 @@ UString2 &UString2::operator=(const UString2 &s)
{
wchar_t *newBuf = MY_STRING_NEW_wchar_t((size_t)len + 1);
if (_chars)
- MY_STRING_DELETE(_chars);
+ MY_STRING_DELETE(_chars)
_chars = newBuf;
}
_len = len;
@@ -1793,3 +1793,67 @@ FString us2fs(const wchar_t *s)
}
#endif // USE_UNICODE_FSTRING
+
+
+bool CStringFinder::FindWord_In_LowCaseAsciiList_NoCase(const char *p, const wchar_t *str)
+{
+ _temp.Empty();
+ for (;;)
+ {
+ const wchar_t c = *str++;
+ if (c == 0)
+ break;
+ if (c <= 0x20 || c > 0x7f)
+ return false;
+ _temp += (char)MyCharLower_Ascii((char)c);
+ }
+
+ while (*p != 0)
+ {
+ const char *s2 = _temp.Ptr();
+ char c, c2;
+ do
+ {
+ c = *p++;
+ c2 = *s2++;
+ }
+ while (c == c2);
+
+ if (c == ' ')
+ {
+ if (c2 == 0)
+ return true;
+ continue;
+ }
+
+ while (*p++ != ' ');
+ }
+
+ return false;
+}
+
+
+void SplitString(const UString &srcString, UStringVector &destStrings)
+{
+ destStrings.Clear();
+ unsigned len = srcString.Len();
+ if (len == 0)
+ return;
+ UString s;
+ for (unsigned i = 0; i < len; i++)
+ {
+ const wchar_t c = srcString[i];
+ if (c == ' ')
+ {
+ if (!s.IsEmpty())
+ {
+ destStrings.Add(s);
+ s.Empty();
+ }
+ }
+ else
+ s += c;
+ }
+ if (!s.IsEmpty())
+ destStrings.Add(s);
+}
diff --git a/3rdparty/lzma/CPP/Common/MyString.h b/3rdparty/lzma/CPP/Common/MyString.h
index c777c8c3ebc..e5ce18ae385 100644
--- a/3rdparty/lzma/CPP/Common/MyString.h
+++ b/3rdparty/lzma/CPP/Common/MyString.h
@@ -1,7 +1,7 @@
// Common/MyString.h
-#ifndef __COMMON_MY_STRING_H
-#define __COMMON_MY_STRING_H
+#ifndef ZIP7_INC_COMMON_MY_STRING_H
+#define ZIP7_INC_COMMON_MY_STRING_H
#include <string.h>
@@ -10,6 +10,7 @@
#include <wchar.h>
#endif
+#include "Common.h"
#include "MyWindows.h"
#include "MyTypes.h"
#include "MyVector.h"
@@ -70,7 +71,7 @@ inline char *MyStpCpy(char *dest, const char *src)
{
for (;;)
{
- char c = *src;
+ const char c = *src;
*dest = c;
if (c == 0)
return dest;
@@ -79,6 +80,13 @@ inline char *MyStpCpy(char *dest, const char *src)
}
}
+inline void MyStringCat(char *dest, const char *src)
+{
+ for (; *dest != 0; dest++);
+ while ((*dest++ = *src++) != 0);
+ // MyStringCopy(dest + MyStringLen(dest), src);
+}
+
inline unsigned MyStringLen(const wchar_t *s)
{
unsigned i;
@@ -93,7 +101,9 @@ inline void MyStringCopy(wchar_t *dest, const wchar_t *src)
inline void MyStringCat(wchar_t *dest, const wchar_t *src)
{
- MyStringCopy(dest + MyStringLen(dest), src);
+ for (; *dest != 0; dest++);
+ while ((*dest++ = *src++) != 0);
+ // MyStringCopy(dest + MyStringLen(dest), src);
}
@@ -102,7 +112,7 @@ inline wchar_t *MyWcpCpy(wchar_t *dest, const wchar_t *src)
{
for (;;)
{
- wchar_t c = *src;
+ const wchar_t c = *src;
*dest = c;
if (c == 0)
return dest;
@@ -225,7 +235,7 @@ bool StringsAreEqualNoCase_Ascii(const char *s1, const char *s2) throw();
bool StringsAreEqualNoCase_Ascii(const wchar_t *s1, const char *s2) throw();
bool StringsAreEqualNoCase_Ascii(const wchar_t *s1, const wchar_t *s2) throw();
-#define MY_STRING_DELETE(_p_) delete []_p_;
+#define MY_STRING_DELETE(_p_) { delete [](_p_); }
// #define MY_STRING_DELETE(_p_) my_delete(_p_);
@@ -312,7 +322,7 @@ public:
explicit AString(char c);
explicit AString(const char *s);
AString(const AString &s);
- ~AString() { MY_STRING_DELETE(_chars); }
+ ~AString() { MY_STRING_DELETE(_chars) }
unsigned Len() const { return _len; }
bool IsEmpty() const { return _len == 0; }
@@ -322,6 +332,7 @@ public:
char *Ptr_non_const() const { return _chars; }
const char *Ptr() const { return _chars; }
const char *Ptr(unsigned pos) const { return _chars + pos; }
+ const char *Ptr(int pos) const { return _chars + (unsigned)pos; }
const char *RightPtr(unsigned num) const { return _chars + _len - num; }
char Back() const { return _chars[(size_t)_len - 1]; }
@@ -379,6 +390,8 @@ public:
void Add_OptSpaced(const char *s);
void Add_LF();
void Add_Slash();
+ void Add_Dot();
+ void Add_Minus();
void Add_PathSepar() { operator+=(CHAR_PATH_SEPARATOR); }
AString &operator+=(const char *s);
@@ -389,6 +402,10 @@ public:
void AddFrom(const char *s, unsigned len); // no check
void SetFrom(const char *s, unsigned len); // no check
+ void SetFrom(const char* s, int len) // no check
+ {
+ SetFrom(s, (unsigned)len); // no check
+ }
void SetFrom_CalcLen(const char *s, unsigned len);
AString Mid(unsigned startIndex, unsigned count) const { return AString(count, _chars + startIndex); }
@@ -419,9 +436,13 @@ public:
int Find(char c) const { return FindCharPosInString(_chars, c); }
int Find(char c, unsigned startIndex) const
{
- int pos = FindCharPosInString(_chars + startIndex, c);
+ const int pos = FindCharPosInString(_chars + startIndex, c);
return pos < 0 ? -1 : (int)startIndex + pos;
}
+ int Find(char c, int startIndex) const
+ {
+ return Find(c, (unsigned)startIndex);
+ }
int ReverseFind(char c) const throw();
int ReverseFind_Dot() const throw() { return ReverseFind('.'); }
@@ -460,6 +481,11 @@ public:
_chars[index] = 0;
}
}
+ void DeleteFrom(int index)
+ {
+ DeleteFrom((unsigned)index);
+ }
+
void Wipe_and_Empty()
{
@@ -474,7 +500,7 @@ public:
class AString_Wipe: public AString
{
- CLASS_NO_COPY(AString_Wipe)
+ Z7_CLASS_NO_COPY(AString_Wipe)
public:
AString_Wipe(): AString() {}
// AString_Wipe(const AString &s): AString(s) {}
@@ -582,7 +608,7 @@ public:
explicit UString(const AString &s);
UString(const wchar_t *s);
UString(const UString &s);
- ~UString() { MY_STRING_DELETE(_chars); }
+ ~UString() { MY_STRING_DELETE(_chars) }
unsigned Len() const { return _len; }
bool IsEmpty() const { return _len == 0; }
@@ -591,6 +617,7 @@ public:
operator const wchar_t *() const { return _chars; }
wchar_t *Ptr_non_const() const { return _chars; }
const wchar_t *Ptr() const { return _chars; }
+ const wchar_t *Ptr(int pos) const { return _chars + (unsigned)pos; }
const wchar_t *Ptr(unsigned pos) const { return _chars + pos; }
const wchar_t *RightPtr(unsigned num) const { return _chars + _len - num; }
wchar_t Back() const { return _chars[(size_t)_len - 1]; }
@@ -599,6 +626,14 @@ public:
wchar_t *GetBuf() { return _chars; }
+ /*
+ wchar_t *GetBuf_GetMaxAvail(unsigned &availBufLen)
+ {
+ availBufLen = _limit;
+ return _chars;
+ }
+ */
+
wchar_t *GetBuf(unsigned minLen)
{
if (minLen > _limit)
@@ -650,6 +685,7 @@ public:
void Add_Space();
void Add_Space_if_NotEmpty();
void Add_LF();
+ void Add_Dot();
void Add_PathSepar() { operator+=(WCHAR_PATH_SEPARATOR); }
UString &operator+=(const wchar_t *s);
@@ -662,6 +698,7 @@ public:
UString Mid(unsigned startIndex, unsigned count) const { return UString(count, _chars + startIndex); }
UString Left(unsigned count) const { return UString(count, *this); }
+ UString Left(int count) const { return Left((unsigned)count); }
// void MakeUpper() { MyStringUpper(_chars); }
// void MakeUpper() { MyStringUpper_Ascii(_chars); }
@@ -720,10 +757,12 @@ public:
void Replace(wchar_t oldChar, wchar_t newChar) throw();
void Replace(const UString &oldString, const UString &newString);
+ void Delete(int index) throw() { Delete((unsigned)index); }
void Delete(unsigned index) throw();
void Delete(unsigned index, unsigned count) throw();
void DeleteFrontal(unsigned num) throw();
void DeleteBack() { _chars[--_len] = 0; }
+ void DeleteFrom(int index) { DeleteFrom((unsigned)index); }
void DeleteFrom(unsigned index)
{
if (index < _len)
@@ -746,7 +785,7 @@ public:
class UString_Wipe: public UString
{
- CLASS_NO_COPY(UString_Wipe)
+ Z7_CLASS_NO_COPY(UString_Wipe)
public:
UString_Wipe(): UString() {}
// UString_Wipe(const UString &s): UString(s) {}
@@ -834,7 +873,7 @@ public:
UString2(): _chars(NULL), _len(0) {}
UString2(const wchar_t *s);
UString2(const UString2 &s);
- ~UString2() { if (_chars) MY_STRING_DELETE(_chars); }
+ ~UString2() { if (_chars) { MY_STRING_DELETE(_chars) } }
unsigned Len() const { return _len; }
bool IsEmpty() const { return _len == 0; }
@@ -912,7 +951,7 @@ typedef CObjectVector<CSysString> CSysStringVector;
#ifdef USE_UNICODE_FSTRING
- #define __FTEXT(quote) L##quote
+ #define MY_FTEXT(quote) L##quote
typedef wchar_t FChar;
typedef UString FString;
@@ -923,9 +962,9 @@ typedef CObjectVector<CSysString> CSysStringVector;
FString fas2fs(const AString &s);
AString fs2fas(const FChar *s);
-#else
+#else // USE_UNICODE_FSTRING
- #define __FTEXT(quote) quote
+ #define MY_FTEXT(quote) quote
typedef char FChar;
@@ -979,9 +1018,9 @@ typedef CObjectVector<CSysString> CSysStringVector;
FString us2fs(const wchar_t *s);
#define fs2fas(_x_) (_x_)
-#endif
+#endif // USE_UNICODE_FSTRING
-#define FTEXT(quote) __FTEXT(quote)
+#define FTEXT(quote) MY_FTEXT(quote)
#define FCHAR_PATH_SEPARATOR FTEXT(CHAR_PATH_SEPARATOR)
#define FSTRING_PATH_SEPARATOR FTEXT(STRING_PATH_SEPARATOR)
@@ -993,6 +1032,18 @@ typedef const FChar *CFSTR;
typedef CObjectVector<FString> FStringVector;
+
+class CStringFinder
+{
+ AString _temp;
+public:
+ // list - is list of low case Ascii strings separated by space " ".
+ // the function returns true, if it can find exact word (str) in (list).
+ bool FindWord_In_LowCaseAsciiList_NoCase(const char *list, const wchar_t *str);
+};
+
+void SplitString(const UString &srcString, UStringVector &destStrings);
+
#endif
@@ -1000,10 +1051,10 @@ typedef CObjectVector<FString> FStringVector;
#if defined(_WIN32)
// #include <wchar.h>
// WCHAR_MAX is defined as ((wchar_t)-1)
- #define _WCHART_IS_16BIT 1
+ #define Z7_WCHART_IS_16BIT 1
#elif (defined(WCHAR_MAX) && (WCHAR_MAX <= 0xffff)) \
|| (defined(__SIZEOF_WCHAR_T__) && (__SIZEOF_WCHAR_T__ == 2))
- #define _WCHART_IS_16BIT 1
+ #define Z7_WCHART_IS_16BIT 1
#endif
#if WCHAR_PATH_SEPARATOR == L'\\'
diff --git a/3rdparty/lzma/CPP/Common/MyTypes.h b/3rdparty/lzma/CPP/Common/MyTypes.h
index 71b8e7fa199..8f44f672090 100644
--- a/3rdparty/lzma/CPP/Common/MyTypes.h
+++ b/3rdparty/lzma/CPP/Common/MyTypes.h
@@ -1,9 +1,10 @@
// Common/MyTypes.h
-#ifndef __COMMON_MY_TYPES_H
-#define __COMMON_MY_TYPES_H
+#ifndef ZIP7_INC_COMMON_MY_TYPES_H
+#define ZIP7_INC_COMMON_MY_TYPES_H
#include "../../C/7zTypes.h"
+#include "Common.h"
typedef int HRes;
@@ -33,20 +34,4 @@ struct CBoolPair
}
};
-#define CLASS_NO_COPY(cls) \
- private: \
- cls(const cls &); \
- cls &operator=(const cls &);
-
-class CUncopyable
-{
-protected:
- CUncopyable() {} // allow constructor
- // ~CUncopyable() {}
-CLASS_NO_COPY(CUncopyable)
-};
-
-#define MY_UNCOPYABLE :private CUncopyable
-// #define MY_UNCOPYABLE
-
#endif
diff --git a/3rdparty/lzma/CPP/Common/MyUnknown.h b/3rdparty/lzma/CPP/Common/MyUnknown.h
index ff025cb538d..75ee96fa5a0 100644
--- a/3rdparty/lzma/CPP/Common/MyUnknown.h
+++ b/3rdparty/lzma/CPP/Common/MyUnknown.h
@@ -1,17 +1,8 @@
// MyUnknown.h
-#ifndef __MY_UNKNOWN_H
-#define __MY_UNKNOWN_H
+#ifndef ZIP7_INC_MY_UNKNOWN_H
+#define ZIP7_INC_MY_UNKNOWN_H
#include "MyWindows.h"
-/*
-#ifdef _WIN32
-#include <basetyps.h>
-#include <unknwn.h>
-#else
-#include "MyWindows.h"
-#endif
-*/
-
#endif
diff --git a/3rdparty/lzma/CPP/Common/MyVector.h b/3rdparty/lzma/CPP/Common/MyVector.h
index 3417a176bec..9ee71058ec6 100644
--- a/3rdparty/lzma/CPP/Common/MyVector.h
+++ b/3rdparty/lzma/CPP/Common/MyVector.h
@@ -1,10 +1,12 @@
// Common/MyVector.h
-#ifndef __COMMON_MY_VECTOR_H
-#define __COMMON_MY_VECTOR_H
+#ifndef ZIP7_INC_COMMON_MY_VECTOR_H
+#define ZIP7_INC_COMMON_MY_VECTOR_H
#include <string.h>
+#include "Common.h"
+
const unsigned k_VectorSizeMax = ((unsigned)1 << 31) - 1;
template <class T>
@@ -22,7 +24,7 @@ class CRecordVector
void ReAllocForNewCapacity(const unsigned newCapacity)
{
T *p;
- MY_ARRAY_NEW(p, T, newCapacity);
+ Z7_ARRAY_NEW(p, T, newCapacity)
// p = new T[newCapacity];
if (_size != 0)
memcpy(p, _items, (size_t)_size * sizeof(T));
@@ -53,7 +55,7 @@ public:
const unsigned size = v.Size();
if (size != 0)
{
- // MY_ARRAY_NEW(_items, T, size)
+ // Z7_ARRAY_NEW(_items, T, size)
_items = new T[size];
_size = size;
_capacity = size;
@@ -68,7 +70,7 @@ public:
{
if (size != 0)
{
- MY_ARRAY_NEW(_items, T, size)
+ Z7_ARRAY_NEW(_items, T, size)
// _items = new T[size];
_capacity = size;
}
@@ -100,7 +102,7 @@ public:
delete []_items;
_items = NULL;
_capacity = 0;
- MY_ARRAY_NEW(_items, T, newCapacity)
+ Z7_ARRAY_NEW(_items, T, newCapacity)
// _items = new T[newCapacity];
_capacity = newCapacity;
}
@@ -119,7 +121,7 @@ public:
T *p = NULL;
if (_size != 0)
{
- // MY_ARRAY_NEW(p, T, _size)
+ // Z7_ARRAY_NEW(p, T, _size)
p = new T[_size];
memcpy(p, _items, (size_t)_size * sizeof(T));
}
@@ -264,6 +266,8 @@ public:
const T& operator[](unsigned index) const { return _items[index]; }
T& operator[](unsigned index) { return _items[index]; }
+ const T& operator[](int index) const { return _items[(unsigned)index]; }
+ T& operator[](int index) { return _items[(unsigned)index]; }
const T& Front() const { return _items[0]; }
T& Front() { return _items[0]; }
const T& Back() const { return _items[(size_t)_size - 1]; }
@@ -497,6 +501,8 @@ public:
const T& operator[](unsigned index) const { return *((T *)_v[index]); }
T& operator[](unsigned index) { return *((T *)_v[index]); }
+ const T& operator[](int index) const { return *((T *)_v[(unsigned)index]); }
+ T& operator[](int index) { return *((T *)_v[(unsigned)index]); }
const T& Front() const { return operator[](0); }
T& Front() { return operator[](0); }
const T& Back() const { return *(T *)_v.Back(); }
@@ -604,6 +610,7 @@ public:
delete (T *)_v[index];
_v.Delete(index);
}
+ // void Delete(int index) { Delete((unsigned)index); }
/*
void Delete(unsigned index, unsigned num)
diff --git a/3rdparty/lzma/CPP/Common/MyWindows.cpp b/3rdparty/lzma/CPP/Common/MyWindows.cpp
index 88f312fb4ce..ae284ebcb4e 100644
--- a/3rdparty/lzma/CPP/Common/MyWindows.cpp
+++ b/3rdparty/lzma/CPP/Common/MyWindows.cpp
@@ -78,7 +78,7 @@ BSTR SysAllocStringLen(const OLECHAR *s, UINT len)
BSTR SysAllocString(const OLECHAR *s)
{
if (!s)
- return 0;
+ return NULL;
const OLECHAR *s2 = s;
while (*s2 != 0)
s2++;
@@ -181,7 +181,7 @@ BOOL WINAPI FileTimeToLocalFileTime(const FILETIME *fileTime, FILETIME *localFil
{
UInt64 v = GET_TIME_64(fileTime);
v = (UInt64)((Int64)v - (Int64)TIME_GetBias() * TICKS_PER_SEC);
- SET_FILETIME(localFileTime, v);
+ SET_FILETIME(localFileTime, v)
return TRUE;
}
@@ -189,7 +189,7 @@ BOOL WINAPI LocalFileTimeToFileTime(const FILETIME *localFileTime, FILETIME *fil
{
UInt64 v = GET_TIME_64(localFileTime);
v = (UInt64)((Int64)v + (Int64)TIME_GetBias() * TICKS_PER_SEC);
- SET_FILETIME(fileTime, v);
+ SET_FILETIME(fileTime, v)
return TRUE;
}
@@ -203,7 +203,7 @@ VOID WINAPI GetSystemTimeAsFileTime(FILETIME *ft)
t = tv.tv_sec * (UInt64)TICKS_PER_SEC + TICKS_1601_TO_1970;
t += tv.tv_usec * 10;
}
- SET_FILETIME(ft, t);
+ SET_FILETIME(ft, t)
}
*/
diff --git a/3rdparty/lzma/CPP/Common/MyWindows.h b/3rdparty/lzma/CPP/Common/MyWindows.h
index 15db52434f7..a76e14b749f 100644
--- a/3rdparty/lzma/CPP/Common/MyWindows.h
+++ b/3rdparty/lzma/CPP/Common/MyWindows.h
@@ -1,16 +1,25 @@
// MyWindows.h
-#ifndef __MY_WINDOWS_H
-#define __MY_WINDOWS_H
+#ifdef Z7_DEFINE_GUID
+#undef Z7_DEFINE_GUID
+#endif
-#ifdef _WIN32
+#ifdef INITGUID
+ #define Z7_DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name; \
+ EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#else
+ #define Z7_DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name
+#endif
-#include <Windows.h>
-#ifdef UNDER_CE
- #undef VARIANT_TRUE
- #define VARIANT_TRUE ((VARIANT_BOOL)-1)
-#endif
+#ifndef ZIP7_INC_MY_WINDOWS_H
+#define ZIP7_INC_MY_WINDOWS_H
+
+#ifdef _WIN32
+
+#include "../../C/7zWindows.h"
#else // _WIN32
@@ -18,11 +27,11 @@
#include <string.h>
// #include <stdint.h> // for uintptr_t
+#include "../../C/7zTypes.h"
#include "MyGuidDef.h"
// WINAPI is __stdcall in Windows-MSVC in windef.h
#define WINAPI
-#define EXTERN_C MY_EXTERN_C
typedef char CHAR;
typedef unsigned char UCHAR;
@@ -103,31 +112,78 @@ typedef LONG SCODE;
#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
-#define STDMETHOD_(t, f) virtual t STDMETHODCALLTYPE f
-#define STDMETHOD(f) STDMETHOD_(HRESULT, f)
-#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
-#define STDMETHODIMP STDMETHODIMP_(HRESULT)
+#ifndef DECLSPEC_NOTHROW
+#define DECLSPEC_NOTHROW Z7_DECLSPEC_NOTHROW
+#endif
+
+#ifndef DECLSPEC_NOVTABLE
+#define DECLSPEC_NOVTABLE Z7_DECLSPEC_NOVTABLE
+#endif
+
+#ifndef COM_DECLSPEC_NOTHROW
+#ifdef COM_STDMETHOD_CAN_THROW
+ #define COM_DECLSPEC_NOTHROW
+#else
+ #define COM_DECLSPEC_NOTHROW DECLSPEC_NOTHROW
+#endif
+#endif
+
+#define DECLARE_INTERFACE(iface) struct DECLSPEC_NOVTABLE iface
+#define DECLARE_INTERFACE_(iface, baseiface) struct DECLSPEC_NOVTABLE iface : public baseiface
+
+#define STDMETHOD_(t, f) virtual COM_DECLSPEC_NOTHROW t STDMETHODCALLTYPE f
+#define STDMETHOD(f) STDMETHOD_(HRESULT, f)
+#define STDMETHODIMP_(t) COM_DECLSPEC_NOTHROW t STDMETHODCALLTYPE
+#define STDMETHODIMP STDMETHODIMP_(HRESULT)
+
#define PURE = 0
-#define MIDL_INTERFACE(x) struct
+// #define MIDL_INTERFACE(x) struct
+
#ifdef __cplusplus
+/*
+ p7zip and 7-Zip before v23 used virtual destructor in IUnknown,
+ if _WIN32 is not defined.
+ It used virtual destructor, because some compilers don't like virtual
+ interfaces without virtual destructor.
+ IUnknown in Windows (_WIN32) doesn't use virtual destructor in IUnknown.
+ We still can define Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN here,
+ if we want to be compatible with old plugin interface of p7zip and 7-Zip before v23.
+
+v23:
+ In new 7-Zip v23 we try to be more compatible with original IUnknown from _WIN32.
+ So we do not define Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN here,
+*/
+// #define Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN
+
+#ifdef Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN
+#if defined(__clang__)
+#pragma GCC diagnostic ignored "-Winconsistent-missing-destructor-override"
+#endif
+#endif
+
+Z7_PURE_INTERFACES_BEGIN
+
DEFINE_GUID(IID_IUnknown,
0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
struct IUnknown
{
- STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE;
- STDMETHOD_(ULONG, AddRef)() PURE;
- STDMETHOD_(ULONG, Release)() PURE;
+ STDMETHOD(QueryInterface) (REFIID iid, void **outObject) =0;
+ STDMETHOD_(ULONG, AddRef)() =0;
+ STDMETHOD_(ULONG, Release)() =0;
+ #ifdef Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN
virtual ~IUnknown() {}
- // We use virtual ~IUnknown() here for binary compatibility with 7z.so from p7zip
+ #endif
};
typedef IUnknown *LPUNKNOWN;
-#endif
+Z7_PURE_INTERFACES_END
+
+#endif // __cplusplus
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
@@ -197,8 +253,8 @@ typedef PROPVARIANT tagVARIANT;
typedef tagVARIANT VARIANT;
typedef VARIANT VARIANTARG;
-MY_EXTERN_C HRESULT VariantClear(VARIANTARG *prop);
-MY_EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, const VARIANTARG *src);
+EXTERN_C HRESULT VariantClear(VARIANTARG *prop);
+EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, const VARIANTARG *src);
typedef struct tagSTATPROPSTG
{
@@ -207,19 +263,19 @@ typedef struct tagSTATPROPSTG
VARTYPE vt;
} STATPROPSTG;
-MY_EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len);
-MY_EXTERN_C BSTR SysAllocStringLen(const OLECHAR *sz, UINT len);
-MY_EXTERN_C BSTR SysAllocString(const OLECHAR *sz);
-MY_EXTERN_C void SysFreeString(BSTR bstr);
-MY_EXTERN_C UINT SysStringByteLen(BSTR bstr);
-MY_EXTERN_C UINT SysStringLen(BSTR bstr);
+EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len);
+EXTERN_C BSTR SysAllocStringLen(const OLECHAR *sz, UINT len);
+EXTERN_C BSTR SysAllocString(const OLECHAR *sz);
+EXTERN_C void SysFreeString(BSTR bstr);
+EXTERN_C UINT SysStringByteLen(BSTR bstr);
+EXTERN_C UINT SysStringLen(BSTR bstr);
-MY_EXTERN_C DWORD GetLastError();
-MY_EXTERN_C void SetLastError(DWORD dwCode);
-MY_EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2);
+EXTERN_C DWORD GetLastError();
+EXTERN_C void SetLastError(DWORD dwCode);
+EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2);
-MY_EXTERN_C DWORD GetCurrentThreadId();
-MY_EXTERN_C DWORD GetCurrentProcessId();
+EXTERN_C DWORD GetCurrentThreadId();
+EXTERN_C DWORD GetCurrentProcessId();
#define MAX_PATH 1024
diff --git a/3rdparty/lzma/CPP/Common/NewHandler.cpp b/3rdparty/lzma/CPP/Common/NewHandler.cpp
index 65ef41d4f5c..c95833e5f2e 100644
--- a/3rdparty/lzma/CPP/Common/NewHandler.cpp
+++ b/3rdparty/lzma/CPP/Common/NewHandler.cpp
@@ -10,21 +10,23 @@
#ifndef DEBUG_MEMORY_LEAK
-#ifdef _7ZIP_REDEFINE_OPERATOR_NEW
+#ifdef Z7_REDEFINE_OPERATOR_NEW
/*
void * my_new(size_t size)
{
// void *p = ::HeapAlloc(::GetProcessHeap(), 0, size);
+ if (size == 0)
+ size = 1;
void *p = ::malloc(size);
- if (p == 0)
+ if (!p)
throw CNewException();
return p;
}
void my_delete(void *p) throw()
{
- // if (p == 0) return; ::HeapFree(::GetProcessHeap(), 0, p);
+ // if (!p) return; ::HeapFree(::GetProcessHeap(), 0, p);
::free(p);
}
@@ -44,9 +46,21 @@ __cdecl
#endif
operator new(size_t size)
{
+ /* by C++ specification:
+ if (size == 0), operator new(size) returns non_NULL pointer.
+ If (operator new(0) returns NULL), it's out of specification.
+ but some calling code can work correctly even in this case too. */
+ // if (size == 0) return NULL; // for debug only. don't use it
+
+ /* malloc(0) returns non_NULL in main compilers, as we need here.
+ But specification also allows malloc(0) to return NULL.
+ So we change (size=0) to (size=1) here to get real non_NULL pointer */
+ if (size == 0)
+ size = 1;
// void *p = ::HeapAlloc(::GetProcessHeap(), 0, size);
+ // void *p = ::MyAlloc(size); // note: MyAlloc(0) returns NULL
void *p = ::malloc(size);
- if (p == 0)
+ if (!p)
throw CNewException();
return p;
}
@@ -57,7 +71,8 @@ __cdecl
#endif
operator delete(void *p) throw()
{
- // if (p == 0) return; ::HeapFree(::GetProcessHeap(), 0, p);
+ // if (!p) return; ::HeapFree(::GetProcessHeap(), 0, p);
+ // MyFree(p);
::free(p);
}
@@ -69,8 +84,10 @@ __cdecl
operator new[](size_t size)
{
// void *p = ::HeapAlloc(::GetProcessHeap(), 0, size);
+ if (size == 0)
+ size = 1;
void *p = ::malloc(size);
- if (p == 0)
+ if (!p)
throw CNewException();
return p;
}
@@ -81,7 +98,7 @@ __cdecl
#endif
operator delete[](void *p) throw()
{
- // if (p == 0) return; ::HeapFree(::GetProcessHeap(), 0, p);
+ // if (!p) return; ::HeapFree(::GetProcessHeap(), 0, p);
::free(p);
}
*/
@@ -93,16 +110,43 @@ operator delete[](void *p) throw()
#include <stdio.h>
// #pragma init_seg(lib)
+/*
const int kDebugSize = 1000000;
static void *a[kDebugSize];
-static int index = 0;
+static int g_index = 0;
+
+class CC
+{
+public:
+ CC()
+ {
+ for (int i = 0; i < kDebugSize; i++)
+ a[i] = 0;
+ }
+ ~CC()
+ {
+ printf("\nDestructor: %d\n", numAllocs);
+ for (int i = 0; i < kDebugSize; i++)
+ if (a[i] != 0)
+ return;
+ }
+} g_CC;
+*/
+#ifdef _WIN32
static bool wasInit = false;
static CRITICAL_SECTION cs;
+#endif
static int numAllocs = 0;
-void * __cdecl operator new(size_t size)
+
+void *
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator new(size_t size)
{
+ #ifdef _WIN32
if (!wasInit)
{
InitializeCriticalSection(&cs);
@@ -114,52 +158,126 @@ void * __cdecl operator new(size_t size)
int loc = numAllocs;
void *p = HeapAlloc(GetProcessHeap(), 0, size);
/*
- if (index < kDebugSize)
+ if (g_index < kDebugSize)
{
- a[index] = p;
- index++;
+ a[g_index] = p;
+ g_index++;
}
*/
printf("Alloc %6d, size = %8u\n", loc, (unsigned)size);
LeaveCriticalSection(&cs);
- if (p == 0)
+ if (!p)
throw CNewException();
return p;
-}
-
-class CC
-{
-public:
- CC()
- {
- for (int i = 0; i < kDebugSize; i++)
- a[i] = 0;
- }
- ~CC()
+ #else
+ numAllocs++;
+ int loc = numAllocs;
+ if (size == 0)
+ size = 1;
+ void *p = malloc(size);
+ /*
+ if (g_index < kDebugSize)
{
- printf("\nDestructor: %d\n", numAllocs);
- for (int i = 0; i < kDebugSize; i++)
- if (a[i] != 0)
- return;
+ a[g_index] = p;
+ g_index++;
}
-} g_CC;
-
+ */
+ printf("Alloc %6d, size = %8u\n", loc, (unsigned)size);
+ if (!p)
+ throw CNewException();
+ return p;
+ #endif
+}
-void __cdecl operator delete(void *p)
+void
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator delete(void *p) throw()
{
- if (p == 0)
+ if (!p)
return;
+ #ifdef _WIN32
EnterCriticalSection(&cs);
/*
- for (int i = 0; i < index; i++)
+ for (int i = 0; i < g_index; i++)
if (a[i] == p)
a[i] = 0;
*/
HeapFree(GetProcessHeap(), 0, p);
+ if (numAllocs == 0)
+ numAllocs = numAllocs; // ERROR
numAllocs--;
+ if (numAllocs == 0)
+ numAllocs = numAllocs; // OK: all objects were deleted
printf("Free %d\n", numAllocs);
LeaveCriticalSection(&cs);
+ #else
+ free(p);
+ numAllocs--;
+ printf("Free %d\n", numAllocs);
+ #endif
+}
+
+/*
+void *
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator new[](size_t size)
+{
+ printf("operator_new[] : ");
+ return operator new(size);
+}
+
+void
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator delete(void *p, size_t sz) throw();
+
+void
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator delete(void *p, size_t sz) throw()
+{
+ if (!p)
+ return;
+ printf("operator_delete_size : size=%d : ", (unsigned)sz);
+ operator delete(p);
+}
+
+void
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator delete[](void *p) throw()
+{
+ if (!p)
+ return;
+ printf("operator_delete[] : ");
+ operator delete(p);
+}
+
+void
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator delete[](void *p, size_t sz) throw();
+
+void
+#ifdef _MSC_VER
+__cdecl
+#endif
+operator delete[](void *p, size_t sz) throw()
+{
+ if (!p)
+ return;
+ printf("operator_delete_size[] : size=%d : ", (unsigned)sz);
+ operator delete(p);
}
+*/
#endif
diff --git a/3rdparty/lzma/CPP/Common/NewHandler.h b/3rdparty/lzma/CPP/Common/NewHandler.h
index aedeca64e30..50f6d0a8fc8 100644
--- a/3rdparty/lzma/CPP/Common/NewHandler.h
+++ b/3rdparty/lzma/CPP/Common/NewHandler.h
@@ -1,7 +1,7 @@
// Common/NewHandler.h
-#ifndef __COMMON_NEW_HANDLER_H
-#define __COMMON_NEW_HANDLER_H
+#ifndef ZIP7_INC_COMMON_NEW_HANDLER_H
+#define ZIP7_INC_COMMON_NEW_HANDLER_H
/*
NewHandler.h and NewHandler.cpp allows to solve problem with compilers that
@@ -10,6 +10,16 @@ don't throw exception in operator new().
This file must be included before any code that uses operators new() or delete()
and you must compile and link "NewHandler.cpp", if you use some old MSVC compiler.
+DOCs:
+ Since ISO C++98, operator new throws std::bad_alloc when memory allocation fails.
+ MSVC 6.0 returned a null pointer on an allocation failure.
+ Beginning in VS2002, operator new conforms to the standard and throws on failure.
+
+ By default, the compiler also generates defensive null checks to prevent
+ these older-style allocators from causing an immediate crash on failure.
+ The /Zc:throwingNew option tells the compiler to leave out these null checks,
+ on the assumption that all linked memory allocators conform to the standard.
+
The operator new() in some MSVC versions doesn't throw exception std::bad_alloc.
MSVC 6.0 (_MSC_VER == 1200) doesn't throw exception.
The code produced by some another MSVC compilers also can be linked
@@ -36,13 +46,13 @@ void my_delete(void *p) throw();
#endif
-#if defined(_MSC_VER) && (_MSC_VER < 1900)
+#if defined(_MSC_VER) && (_MSC_VER < 1600)
// If you want to use default operator new(), you can disable the following line
- #define _7ZIP_REDEFINE_OPERATOR_NEW
+ #define Z7_REDEFINE_OPERATOR_NEW
#endif
-#ifdef _7ZIP_REDEFINE_OPERATOR_NEW
+#ifdef Z7_REDEFINE_OPERATOR_NEW
// std::bad_alloc can require additional DLL dependency.
// So we don't define CNewException as std::bad_alloc here.
diff --git a/3rdparty/lzma/CPP/Common/Sha256Reg.cpp b/3rdparty/lzma/CPP/Common/Sha256Reg.cpp
index 5f3a35b081c..b5689c42d49 100644
--- a/3rdparty/lzma/CPP/Common/Sha256Reg.cpp
+++ b/3rdparty/lzma/CPP/Common/Sha256Reg.cpp
@@ -9,13 +9,14 @@
#include "../7zip/Common/RegisterCodec.h"
-class CSha256Hasher:
- public IHasher,
- public ICompressSetCoderProperties,
- public CMyUnknownImp
-{
- CAlignedBuffer _buf;
- Byte mtDummy[1 << 7];
+Z7_CLASS_IMP_COM_2(
+ CSha256Hasher
+ , IHasher
+ , ICompressSetCoderProperties
+)
+ CAlignedBuffer1 _buf;
+public:
+ Byte _mtDummy[1 << 7];
CSha256 *Sha() { return (CSha256 *)(void *)(Byte *)_buf; }
public:
@@ -25,36 +26,32 @@ public:
Sha256_SetFunction(Sha(), 0);
Sha256_InitState(Sha());
}
-
- MY_UNKNOWN_IMP2(IHasher, ICompressSetCoderProperties)
- INTERFACE_IHasher(;)
- STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
};
-STDMETHODIMP_(void) CSha256Hasher::Init() throw()
+Z7_COM7F_IMF2(void, CSha256Hasher::Init())
{
Sha256_InitState(Sha());
}
-STDMETHODIMP_(void) CSha256Hasher::Update(const void *data, UInt32 size) throw()
+Z7_COM7F_IMF2(void, CSha256Hasher::Update(const void *data, UInt32 size))
{
Sha256_Update(Sha(), (const Byte *)data, size);
}
-STDMETHODIMP_(void) CSha256Hasher::Final(Byte *digest) throw()
+Z7_COM7F_IMF2(void, CSha256Hasher::Final(Byte *digest))
{
Sha256_Final(Sha(), digest);
}
-STDMETHODIMP CSha256Hasher::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps)
+Z7_COM7F_IMF(CSha256Hasher::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps))
{
unsigned algo = 0;
for (UInt32 i = 0; i < numProps; i++)
{
- const PROPVARIANT &prop = coderProps[i];
if (propIDs[i] == NCoderPropID::kDefaultProp)
{
+ const PROPVARIANT &prop = coderProps[i];
if (prop.vt != VT_UI4)
return E_INVALIDARG;
if (prop.ulVal > 2)
diff --git a/3rdparty/lzma/CPP/Common/StdAfx.h b/3rdparty/lzma/CPP/Common/StdAfx.h
index 420f5c3267f..a5228b0a669 100644
--- a/3rdparty/lzma/CPP/Common/StdAfx.h
+++ b/3rdparty/lzma/CPP/Common/StdAfx.h
@@ -1,7 +1,7 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
#include "Common.h"
diff --git a/3rdparty/lzma/CPP/Common/StdInStream.cpp b/3rdparty/lzma/CPP/Common/StdInStream.cpp
index abad34b683e..7b209f1ca75 100644
--- a/3rdparty/lzma/CPP/Common/StdInStream.cpp
+++ b/3rdparty/lzma/CPP/Common/StdInStream.cpp
@@ -14,10 +14,12 @@
// #define kReadErrorMessage "Error reading input stream"
// #define kIllegalCharMessage "Illegal zero character in input stream"
-#define kFileOpenMode TEXT("r")
CStdInStream g_StdIn(stdin);
+/*
+#define kFileOpenMode TEXT("r")
+
bool CStdInStream::Open(LPCTSTR fileName) throw()
{
Close();
@@ -39,6 +41,7 @@ bool CStdInStream::Close() throw()
_streamIsOpen = (fclose(_stream) != 0);
return !_streamIsOpen;
}
+*/
bool CStdInStream::ScanAStringUntilNewLine(AString &s)
{
diff --git a/3rdparty/lzma/CPP/Common/StdInStream.h b/3rdparty/lzma/CPP/Common/StdInStream.h
index 71578eb4d76..81ca3bf6f5d 100644
--- a/3rdparty/lzma/CPP/Common/StdInStream.h
+++ b/3rdparty/lzma/CPP/Common/StdInStream.h
@@ -1,7 +1,7 @@
// Common/StdInStream.h
-#ifndef __COMMON_STD_IN_STREAM_H
-#define __COMMON_STD_IN_STREAM_H
+#ifndef ZIP7_INC_COMMON_STD_IN_STREAM_H
+#define ZIP7_INC_COMMON_STD_IN_STREAM_H
#include <stdio.h>
@@ -11,20 +11,22 @@
class CStdInStream
{
FILE *_stream;
- bool _streamIsOpen;
+ // bool _streamIsOpen;
public:
int CodePage;
CStdInStream(FILE *stream = NULL):
_stream(stream),
- _streamIsOpen(false),
+ // _streamIsOpen(false),
CodePage(-1)
- {};
+ {}
+ /*
~CStdInStream() { Close(); }
bool Open(LPCTSTR fileName) throw();
bool Close() throw();
+ */
// returns:
// false, if ZERO character in stream
diff --git a/3rdparty/lzma/CPP/Common/StdOutStream.cpp b/3rdparty/lzma/CPP/Common/StdOutStream.cpp
index 40799e22642..cfa5fdec678 100644
--- a/3rdparty/lzma/CPP/Common/StdOutStream.cpp
+++ b/3rdparty/lzma/CPP/Common/StdOutStream.cpp
@@ -11,11 +11,12 @@
#include "StringConvert.h"
#include "UTFConvert.h"
-#define kFileOpenMode "wt"
-
CStdOutStream g_StdOut(stdout);
CStdOutStream g_StdErr(stderr);
+/*
+// #define kFileOpenMode "wt"
+
bool CStdOutStream::Open(const char *fileName) throw()
{
Close();
@@ -34,6 +35,7 @@ bool CStdOutStream::Close() throw()
_streamIsOpen = false;
return true;
}
+*/
bool CStdOutStream::Flush() throw()
{
@@ -73,7 +75,7 @@ void CStdOutStream::Convert_UString_to_AString(const UString &src, AString &dest
static const wchar_t kReplaceChar = '_';
-void CStdOutStream::Normalize_UString__LF_Allowed(UString &s)
+void CStdOutStream::Normalize_UString_LF_Allowed(UString &s)
{
unsigned len = s.Len();
wchar_t *d = s.GetBuf();
diff --git a/3rdparty/lzma/CPP/Common/StdOutStream.h b/3rdparty/lzma/CPP/Common/StdOutStream.h
index 93f1dfa4e55..bd15d7cb208 100644
--- a/3rdparty/lzma/CPP/Common/StdOutStream.h
+++ b/3rdparty/lzma/CPP/Common/StdOutStream.h
@@ -1,7 +1,7 @@
// Common/StdOutStream.h
-#ifndef __COMMON_STD_OUT_STREAM_H
-#define __COMMON_STD_OUT_STREAM_H
+#ifndef ZIP7_INC_COMMON_STD_OUT_STREAM_H
+#define ZIP7_INC_COMMON_STD_OUT_STREAM_H
#include <stdio.h>
@@ -11,26 +11,28 @@
class CStdOutStream
{
FILE *_stream;
- bool _streamIsOpen;
+ // bool _streamIsOpen;
public:
bool IsTerminalMode;
int CodePage;
- CStdOutStream(FILE *stream = 0):
+ CStdOutStream(FILE *stream = NULL):
_stream(stream),
- _streamIsOpen(false),
+ // _streamIsOpen(false),
IsTerminalMode(false),
CodePage(-1)
- {};
+ {}
- ~CStdOutStream() { Close(); }
+ // ~CStdOutStream() { Close(); }
// void AttachStdStream(FILE *stream) { _stream = stream; _streamIsOpen = false; }
// bool IsDefined() const { return _stream != NULL; }
operator FILE *() { return _stream; }
+ /*
bool Open(const char *fileName) throw();
bool Close() throw();
+ */
bool Flush() throw();
CStdOutStream & operator<<(CStdOutStream & (* func)(CStdOutStream &))
@@ -60,7 +62,7 @@ public:
void PrintUString(const UString &s, AString &temp);
void Convert_UString_to_AString(const UString &src, AString &dest);
- void Normalize_UString__LF_Allowed(UString &s);
+ void Normalize_UString_LF_Allowed(UString &s);
void Normalize_UString(UString &s);
void NormalizePrint_UString(const UString &s, UString &tempU, AString &tempA);
diff --git a/3rdparty/lzma/CPP/Common/StringConvert.cpp b/3rdparty/lzma/CPP/Common/StringConvert.cpp
index c0bde0fa121..f25396a6ab0 100644
--- a/3rdparty/lzma/CPP/Common/StringConvert.cpp
+++ b/3rdparty/lzma/CPP/Common/StringConvert.cpp
@@ -534,6 +534,7 @@ AString UnicodeStringToMultiByte(const UString &src, UINT codePage)
+#if !defined(_WIN32) || defined(ENV_HAVE_LOCALE)
#ifdef _WIN32
#define U_to_A(a, b, c) UnicodeStringToMultiByte2
@@ -544,8 +545,6 @@ AString UnicodeStringToMultiByte(const UString &src, UINT codePage)
// #define A_to_U(a, b, c) MultiByteToUnicodeString2_Native(a, b)
#endif
-#if !defined(_WIN32) || defined(ENV_HAVE_LOCALE)
-
bool IsNativeUTF8()
{
UString u;
diff --git a/3rdparty/lzma/CPP/Common/StringConvert.h b/3rdparty/lzma/CPP/Common/StringConvert.h
index 865c02543c4..2092a2da03b 100644
--- a/3rdparty/lzma/CPP/Common/StringConvert.h
+++ b/3rdparty/lzma/CPP/Common/StringConvert.h
@@ -1,7 +1,7 @@
// Common/StringConvert.h
-#ifndef __COMMON_STRING_CONVERT_H
-#define __COMMON_STRING_CONVERT_H
+#ifndef ZIP7_INC_COMMON_STRING_CONVERT_H
+#define ZIP7_INC_COMMON_STRING_CONVERT_H
#include "MyString.h"
#include "MyWindows.h"
diff --git a/3rdparty/lzma/CPP/Common/StringToInt.h b/3rdparty/lzma/CPP/Common/StringToInt.h
index 4057e494e98..c9dce7d1b75 100644
--- a/3rdparty/lzma/CPP/Common/StringToInt.h
+++ b/3rdparty/lzma/CPP/Common/StringToInt.h
@@ -1,7 +1,7 @@
// Common/StringToInt.h
-#ifndef __COMMON_STRING_TO_INT_H
-#define __COMMON_STRING_TO_INT_H
+#ifndef ZIP7_INC_COMMON_STRING_TO_INT_H
+#define ZIP7_INC_COMMON_STRING_TO_INT_H
#include "MyTypes.h"
diff --git a/3rdparty/lzma/CPP/Common/TextConfig.cpp b/3rdparty/lzma/CPP/Common/TextConfig.cpp
index 1428aab5c85..d3e561c2d29 100644
--- a/3rdparty/lzma/CPP/Common/TextConfig.cpp
+++ b/3rdparty/lzma/CPP/Common/TextConfig.cpp
@@ -15,7 +15,7 @@ static AString GetIDString(const char *s, unsigned &finishPos)
AString result;
for (finishPos = 0; ; finishPos++)
{
- char c = s[finishPos];
+ const char c = s[finishPos];
if (IsDelimitChar(c) || c == '=')
break;
result += c;
@@ -35,7 +35,7 @@ static bool SkipSpaces(const AString &s, unsigned &pos)
{
for (; pos < s.Len(); pos++)
{
- char c = s[pos];
+ const char c = s[pos];
if (!IsDelimitChar(c))
{
if (c != ';')
@@ -111,13 +111,13 @@ int FindTextConfigItem(const CObjectVector<CTextConfigPair> &pairs, const char *
{
FOR_VECTOR (i, pairs)
if (pairs[i].ID.IsEqualTo(id))
- return i;
+ return (int)i;
return -1;
}
UString GetTextConfigValue(const CObjectVector<CTextConfigPair> &pairs, const char *id)
{
- int index = FindTextConfigItem(pairs, id);
+ const int index = FindTextConfigItem(pairs, id);
if (index < 0)
return UString();
return pairs[index].String;
diff --git a/3rdparty/lzma/CPP/Common/TextConfig.h b/3rdparty/lzma/CPP/Common/TextConfig.h
index cc7ce412776..2263a442509 100644
--- a/3rdparty/lzma/CPP/Common/TextConfig.h
+++ b/3rdparty/lzma/CPP/Common/TextConfig.h
@@ -1,7 +1,7 @@
// Common/TextConfig.h
-#ifndef __COMMON_TEXT_CONFIG_H
-#define __COMMON_TEXT_CONFIG_H
+#ifndef ZIP7_INC_COMMON_TEXT_CONFIG_H
+#define ZIP7_INC_COMMON_TEXT_CONFIG_H
#include "MyString.h"
diff --git a/3rdparty/lzma/CPP/Common/UTFConvert.cpp b/3rdparty/lzma/CPP/Common/UTFConvert.cpp
index ac069dbadb9..fb166b7f356 100644
--- a/3rdparty/lzma/CPP/Common/UTFConvert.cpp
+++ b/3rdparty/lzma/CPP/Common/UTFConvert.cpp
@@ -8,17 +8,17 @@
#include "UTFConvert.h"
-#ifndef _WCHART_IS_16BIT
+#ifndef Z7_WCHART_IS_16BIT
#ifndef __APPLE__
// we define it if the system supports files with non-utf8 symbols:
- #define _UTF8_RAW_NON_UTF8_SUPPORTED
+ #define MY_UTF8_RAW_NON_UTF8_SUPPORTED
#endif
#endif
/*
- _UTF8_START(n) - is a base value for start byte (head), if there are (n) additional bytes after start byte
+ MY_UTF8_START(n) - is a base value for start byte (head), if there are (n) additional bytes after start byte
- n : _UTF8_START(n) : Bits of code point
+ n : MY_UTF8_START(n) : Bits of code point
0 : 0x80 : : unused
1 : 0xC0 : 11 :
@@ -30,13 +30,13 @@
7 : 0xFF :
*/
-#define _UTF8_START(n) (0x100 - (1 << (7 - (n))))
+#define MY_UTF8_START(n) (0x100 - (1 << (7 - (n))))
-#define _UTF8_HEAD_PARSE2(n) \
- if (c < _UTF8_START((n) + 1)) \
- { numBytes = (n); val -= _UTF8_START(n); }
+#define MY_UTF8_HEAD_PARSE2(n) \
+ if (c < MY_UTF8_START((n) + 1)) \
+ { numBytes = (n); val -= MY_UTF8_START(n); }
-#ifndef _WCHART_IS_16BIT
+#ifndef Z7_WCHART_IS_16BIT
/*
if (wchar_t is 32-bit), we can support large points in long UTF-8 sequence,
@@ -46,30 +46,30 @@
(_UTF8_NUM_TAIL_BYTES_MAX == 6) : (36-bit hack)
*/
-#define _UTF8_NUM_TAIL_BYTES_MAX 5
+#define MY_UTF8_NUM_TAIL_BYTES_MAX 5
#endif
/*
-#define _UTF8_HEAD_PARSE \
+#define MY_UTF8_HEAD_PARSE \
UInt32 val = c; \
- _UTF8_HEAD_PARSE2(1) \
- else _UTF8_HEAD_PARSE2(2) \
- else _UTF8_HEAD_PARSE2(3) \
- else _UTF8_HEAD_PARSE2(4) \
- else _UTF8_HEAD_PARSE2(5) \
- #if _UTF8_NUM_TAIL_BYTES_MAX >= 6
- else _UTF8_HEAD_PARSE2(6)
+ MY_UTF8_HEAD_PARSE2(1) \
+ else MY_UTF8_HEAD_PARSE2(2) \
+ else MY_UTF8_HEAD_PARSE2(3) \
+ else MY_UTF8_HEAD_PARSE2(4) \
+ else MY_UTF8_HEAD_PARSE2(5) \
+ #if MY_UTF8_NUM_TAIL_BYTES_MAX >= 6
+ else MY_UTF8_HEAD_PARSE2(6)
#endif
*/
-#define _UTF8_HEAD_PARSE_MAX_3_BYTES \
+#define MY_UTF8_HEAD_PARSE_MAX_3_BYTES \
UInt32 val = c; \
- _UTF8_HEAD_PARSE2(1) \
- else _UTF8_HEAD_PARSE2(2) \
- else { numBytes = 3; val -= _UTF8_START(3); }
+ MY_UTF8_HEAD_PARSE2(1) \
+ else MY_UTF8_HEAD_PARSE2(2) \
+ else { numBytes = 3; val -= MY_UTF8_START(3); }
-#define _UTF8_RANGE(n) (((UInt32)1) << ((n) * 5 + 6))
+#define MY_UTF8_RANGE(n) (((UInt32)1) << ((n) * 5 + 6))
#define START_POINT_FOR_SURROGATE 0x10000
@@ -82,7 +82,7 @@
*/
-#if defined(_WCHART_IS_16BIT)
+#if defined(Z7_WCHART_IS_16BIT)
#define UTF_ESCAPE_PLANE 0
@@ -102,7 +102,7 @@ we can place 128 ESCAPE chars to
#define UTF_ESCAPE_PLANE 0
/*
- if (UTF_FLAG__FROM_UTF8__USE_ESCAPE is set)
+ if (Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE is set)
{
if (UTF_ESCAPE_PLANE is UTF_ESCAPE_PLANE_HIGH)
{
@@ -111,13 +111,13 @@ we can place 128 ESCAPE chars to
So we still need a way to extract 8-bit Escapes and BMP-Escapes-8
from same BMP-Escapes-16 stored in 7z.
And if we want to restore any 8-bit from 7z archive,
- we still must use UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT for (utf-8 -> utf-16)
+ we still must use Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT for (utf-8 -> utf-16)
Also we need additional Conversions to tranform from utf-16 to utf-16-With-Escapes-21
}
else (UTF_ESCAPE_PLANE == 0)
{
we must convert original 3-bytes utf-8 BMP-Escape point to sequence
- of 3 BMP-Escape-16 points with UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT
+ of 3 BMP-Escape-16 points with Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT
so we can extract original RAW-UTF-8 from UTFD-16 later.
}
}
@@ -138,7 +138,7 @@ we can place 128 ESCAPE chars to
#define IS_LOW_SURROGATE_POINT(v) (((v) & (UInt32)0xfffffC00) == 0xdc00)
-#define _ERROR_UTF8_CHECK \
+#define UTF_ERROR_UTF8_CHECK \
{ NonUtf = true; continue; }
void CUtf8Check::Check_Buf(const char *src, size_t size) throw()
@@ -168,19 +168,19 @@ void CUtf8Check::Check_Buf(const char *src, size_t size) throw()
if (c < 0x80)
continue;
- if (c < 0xc0 + 2)// it's limit for 0x140000 unicode codes : win32 compatibility
- _ERROR_UTF8_CHECK
+ if (c < 0xc0 + 2) // it's limit for 0x140000 unicode codes : win32 compatibility
+ UTF_ERROR_UTF8_CHECK
unsigned numBytes;
UInt32 val = c;
- _UTF8_HEAD_PARSE2(1)
- else _UTF8_HEAD_PARSE2(2)
- else _UTF8_HEAD_PARSE2(4)
- else _UTF8_HEAD_PARSE2(5)
+ MY_UTF8_HEAD_PARSE2(1)
+ else MY_UTF8_HEAD_PARSE2(2)
+ else MY_UTF8_HEAD_PARSE2(4)
+ else MY_UTF8_HEAD_PARSE2(5)
else
{
- _ERROR_UTF8_CHECK
+ UTF_ERROR_UTF8_CHECK
}
unsigned pos = 0;
@@ -206,7 +206,7 @@ void CUtf8Check::Check_Buf(const char *src, size_t size) throw()
if (pos == size)
Truncated = true;
else
- _ERROR_UTF8_CHECK
+ UTF_ERROR_UTF8_CHECK
}
#ifdef UTF_ESCAPE_BASE
@@ -268,7 +268,7 @@ bool CheckUTF8(const char *src, bool allowReduced) throw()
return false;
unsigned numBytes;
- _UTF8_HEAD_PARSE
+ MY_UTF8_HEAD_PARSE
else
return false;
@@ -285,7 +285,7 @@ bool CheckUTF8(const char *src, bool allowReduced) throw()
}
while (--numBytes);
- if (val < _UTF8_RANGE(pos - 1))
+ if (val < MY_UTF8_RANGE(pos - 1))
return false;
if (val >= 0x110000)
@@ -303,18 +303,18 @@ bool CheckUTF8(const char *src, bool allowReduced) throw()
#define UTF_ESCAPE(c) \
- ((flags & UTF_FLAG__FROM_UTF8__USE_ESCAPE) ? \
+ ((flags & Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE) ? \
UTF_ESCAPE_PLANE + UTF_ESCAPE_BASE + (c) : UTF_REPLACEMENT_CHAR)
/*
-#define _HARD_ERROR_UTF8
+#define UTF_HARD_ERROR_UTF8
{ if (dest) dest[destPos] = (wchar_t)UTF_ESCAPE(c); \
destPos++; ok = false; continue; }
*/
// we ignore utf errors, and don't change (ok) variable!
-#define _ERROR_UTF8 \
+#define UTF_ERROR_UTF8 \
{ if (dest) dest[destPos] = (wchar_t)UTF_ESCAPE(c); \
destPos++; continue; }
@@ -362,12 +362,12 @@ static bool Utf8_To_Utf16(wchar_t *dest, size_t *destLen, const char *src, const
if (c < 0xc0 + 2
|| c >= 0xf5) // it's limit for 0x140000 unicode codes : win32 compatibility
{
- _ERROR_UTF8
+ UTF_ERROR_UTF8
}
unsigned numBytes;
- _UTF8_HEAD_PARSE_MAX_3_BYTES
+ MY_UTF8_HEAD_PARSE_MAX_3_BYTES
unsigned pos = 0;
do
@@ -387,7 +387,7 @@ static bool Utf8_To_Utf16(wchar_t *dest, size_t *destLen, const char *src, const
break;
if (numBytes == 2)
{
- if (flags & UTF_FLAG__FROM_UTF8__SURROGATE_ERROR)
+ if (flags & Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR)
if ((val & (0xF800 >> 6)) == (0xd800 >> 6))
break;
}
@@ -399,27 +399,27 @@ static bool Utf8_To_Utf16(wchar_t *dest, size_t *destLen, const char *src, const
if (numBytes != 0)
{
- if ((flags & UTF_FLAG__FROM_UTF8__USE_ESCAPE) == 0)
+ if ((flags & Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE) == 0)
{
// the following code to emit the 0xfffd chars as win32 Utf8 function.
// disable the folling line, if you need 0xfffd for each incorrect byte as in Escape mode
src += pos;
}
- _ERROR_UTF8
+ UTF_ERROR_UTF8
}
/*
- if (val < _UTF8_RANGE(pos - 1))
- _ERROR_UTF8
+ if (val < MY_UTF8_RANGE(pos - 1))
+ UTF_ERROR_UTF8
*/
#ifdef UTF_ESCAPE_BASE
- if ((flags & UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT)
+ if ((flags & Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT)
&& IS_ESCAPE_POINT(val, 0))
{
// We will emit 3 utf16-Escape-16-21 points from one Escape-16 point (3 bytes)
- _ERROR_UTF8
+ UTF_ERROR_UTF8
}
#endif
@@ -434,11 +434,11 @@ static bool Utf8_To_Utf16(wchar_t *dest, size_t *destLen, const char *src, const
if (val < START_POINT_FOR_SURROGATE)
{
/*
- if ((flags & UTF_FLAG__FROM_UTF8__SURROGATE_ERROR)
+ if ((flags & Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR)
&& IS_SURROGATE_POINT(val))
{
// We will emit 3 utf16-Escape-16-21 points from one Surrogate-16 point (3 bytes)
- _ERROR_UTF8
+ UTF_ERROR_UTF8
}
*/
if (dest)
@@ -451,7 +451,7 @@ static bool Utf8_To_Utf16(wchar_t *dest, size_t *destLen, const char *src, const
if (val >= 0x110000)
{
// We will emit utf16-Escape-16-21 point from each source byte
- _ERROR_UTF8
+ UTF_ERROR_UTF8
}
*/
if (dest)
@@ -467,8 +467,8 @@ static bool Utf8_To_Utf16(wchar_t *dest, size_t *destLen, const char *src, const
-#define _UTF8_HEAD(n, val) ((char)(_UTF8_START(n) + (val >> (6 * (n)))))
-#define _UTF8_CHAR(n, val) ((char)(0x80 + (((val) >> (6 * (n))) & 0x3F)))
+#define MY_UTF8_HEAD(n, val) ((char)(MY_UTF8_START(n) + (val >> (6 * (n)))))
+#define MY_UTF8_CHAR(n, val) ((char)(0x80 + (((val) >> (6 * (n))) & 0x3F)))
static size_t Utf16_To_Utf8_Calc(const wchar_t *src, const wchar_t *srcLim, unsigned flags)
{
@@ -483,7 +483,7 @@ static size_t Utf16_To_Utf8_Calc(const wchar_t *src, const wchar_t *srcLim, unsi
if (val < 0x80)
continue;
- if (val < _UTF8_RANGE(1))
+ if (val < MY_UTF8_RANGE(1))
{
size++;
continue;
@@ -492,12 +492,12 @@ static size_t Utf16_To_Utf8_Calc(const wchar_t *src, const wchar_t *srcLim, unsi
#ifdef UTF_ESCAPE_BASE
#if UTF_ESCAPE_PLANE != 0
- if (flags & UTF_FLAG__TO_UTF8__PARSE_HIGH_ESCAPE)
+ if (flags & Z7_UTF_FLAG_TO_UTF8_PARSE_HIGH_ESCAPE)
if (IS_ESCAPE_POINT(val, UTF_ESCAPE_PLANE))
continue;
#endif
- if (flags & UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE)
+ if (flags & Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE)
if (IS_ESCAPE_POINT(val, 0))
continue;
@@ -517,18 +517,18 @@ static size_t Utf16_To_Utf8_Calc(const wchar_t *src, const wchar_t *srcLim, unsi
continue;
}
- #ifdef _WCHART_IS_16BIT
+ #ifdef Z7_WCHART_IS_16BIT
size += 2;
#else
- if (val < _UTF8_RANGE(2)) size += 2;
- else if (val < _UTF8_RANGE(3)) size += 3;
- else if (val < _UTF8_RANGE(4)) size += 4;
- else if (val < _UTF8_RANGE(5)) size += 5;
+ if (val < MY_UTF8_RANGE(2)) size += 2;
+ else if (val < MY_UTF8_RANGE(3)) size += 3;
+ else if (val < MY_UTF8_RANGE(4)) size += 4;
+ else if (val < MY_UTF8_RANGE(5)) size += 5;
else
- #if _UTF8_NUM_TAIL_BYTES_MAX >= 6
+ #if MY_UTF8_NUM_TAIL_BYTES_MAX >= 6
size += 6;
#else
size += 3;
@@ -554,10 +554,10 @@ static char *Utf16_To_Utf8(char *dest, const wchar_t *src, const wchar_t *srcLim
continue;
}
- if (val < _UTF8_RANGE(1))
+ if (val < MY_UTF8_RANGE(1))
{
- dest[0] = _UTF8_HEAD(1, val);
- dest[1] = _UTF8_CHAR(0, val);
+ dest[0] = MY_UTF8_HEAD(1, val);
+ dest[1] = MY_UTF8_CHAR(0, val);
dest += 2;
continue;
}
@@ -567,11 +567,11 @@ static char *Utf16_To_Utf8(char *dest, const wchar_t *src, const wchar_t *srcLim
#if UTF_ESCAPE_PLANE != 0
/*
if (wchar_t is 32-bit)
- && (UTF_FLAG__TO_UTF8__PARSE_HIGH_ESCAPE is set)
+ && (Z7_UTF_FLAG_TO_UTF8_PARSE_HIGH_ESCAPE is set)
&& (point is virtual escape plane)
we extract 8-bit byte from virtual HIGH-ESCAPE PLANE.
*/
- if (flags & UTF_FLAG__TO_UTF8__PARSE_HIGH_ESCAPE)
+ if (flags & Z7_UTF_FLAG_TO_UTF8_PARSE_HIGH_ESCAPE)
if (IS_ESCAPE_POINT(val, UTF_ESCAPE_PLANE))
{
*dest++ = (char)(val);
@@ -579,10 +579,10 @@ static char *Utf16_To_Utf8(char *dest, const wchar_t *src, const wchar_t *srcLim
}
#endif // UTF_ESCAPE_PLANE != 0
- /* if (UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE is defined)
+ /* if (Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE is defined)
we extract 8-bit byte from BMP-ESCAPE PLANE. */
- if (flags & UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE)
+ if (flags & Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE)
if (IS_ESCAPE_POINT(val, 0))
{
*dest++ = (char)(val);
@@ -601,46 +601,46 @@ static char *Utf16_To_Utf8(char *dest, const wchar_t *src, const wchar_t *srcLim
{
src++;
val = (((val - 0xd800) << 10) | (c2 - 0xdc00)) + 0x10000;
- dest[0] = _UTF8_HEAD(3, val);
- dest[1] = _UTF8_CHAR(2, val);
- dest[2] = _UTF8_CHAR(1, val);
- dest[3] = _UTF8_CHAR(0, val);
+ dest[0] = MY_UTF8_HEAD(3, val);
+ dest[1] = MY_UTF8_CHAR(2, val);
+ dest[2] = MY_UTF8_CHAR(1, val);
+ dest[3] = MY_UTF8_CHAR(0, val);
dest += 4;
continue;
}
}
- if (flags & UTF_FLAG__TO_UTF8__SURROGATE_ERROR)
+ if (flags & Z7_UTF_FLAG_TO_UTF8_SURROGATE_ERROR)
val = UTF_REPLACEMENT_CHAR; // WIN32 function does it
}
- #ifndef _WCHART_IS_16BIT
- if (val < _UTF8_RANGE(2))
+ #ifndef Z7_WCHART_IS_16BIT
+ if (val < MY_UTF8_RANGE(2))
#endif
{
- dest[0] = _UTF8_HEAD(2, val);
- dest[1] = _UTF8_CHAR(1, val);
- dest[2] = _UTF8_CHAR(0, val);
+ dest[0] = MY_UTF8_HEAD(2, val);
+ dest[1] = MY_UTF8_CHAR(1, val);
+ dest[2] = MY_UTF8_CHAR(0, val);
dest += 3;
continue;
}
- #ifndef _WCHART_IS_16BIT
+ #ifndef Z7_WCHART_IS_16BIT
// we don't expect this case. so we can throw exception
// throw 20210407;
char b;
unsigned numBits;
- if (val < _UTF8_RANGE(3)) { numBits = 6 * 3; b = _UTF8_HEAD(3, val); }
- else if (val < _UTF8_RANGE(4)) { numBits = 6 * 4; b = _UTF8_HEAD(4, val); }
- else if (val < _UTF8_RANGE(5)) { numBits = 6 * 5; b = _UTF8_HEAD(5, val); }
- #if _UTF8_NUM_TAIL_BYTES_MAX >= 6
- else { numBits = 6 * 6; b = (char)_UTF8_START(6); }
+ if (val < MY_UTF8_RANGE(3)) { numBits = 6 * 3; b = MY_UTF8_HEAD(3, val); }
+ else if (val < MY_UTF8_RANGE(4)) { numBits = 6 * 4; b = MY_UTF8_HEAD(4, val); }
+ else if (val < MY_UTF8_RANGE(5)) { numBits = 6 * 5; b = MY_UTF8_HEAD(5, val); }
+ #if MY_UTF8_NUM_TAIL_BYTES_MAX >= 6
+ else { numBits = 6 * 6; b = (char)MY_UTF8_START(6); }
#else
else
{
val = UTF_REPLACEMENT_CHAR;
- { numBits = 6 * 3; b = _UTF8_HEAD(3, val); }
+ { numBits = 6 * 3; b = MY_UTF8_HEAD(3, val); }
}
#endif
@@ -675,11 +675,11 @@ bool ConvertUTF8ToUnicode_Flags(const AString &src, UString &dest, unsigned flag
static
unsigned g_UTF8_To_Unicode_Flags =
- UTF_FLAG__FROM_UTF8__USE_ESCAPE
- #ifndef _WCHART_IS_16BIT
- | UTF_FLAG__FROM_UTF8__SURROGATE_ERROR
- #ifdef _UTF8_RAW_NON_UTF8_SUPPORTED
- | UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT
+ Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE
+ #ifndef Z7_WCHART_IS_16BIT
+ | Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR
+ #ifdef MY_UTF8_RAW_NON_UTF8_SUPPORTED
+ | Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT
#endif
#endif
;
@@ -729,13 +729,13 @@ void ConvertUnicodeToUTF8_Flags(const UString &src, AString &dest, unsigned flag
unsigned g_Unicode_To_UTF8_Flags =
- // UTF_FLAG__TO_UTF8__PARSE_HIGH_ESCAPE
+ // Z7_UTF_FLAG_TO_UTF8_PARSE_HIGH_ESCAPE
0
#ifndef _WIN32
- #ifdef _UTF8_RAW_NON_UTF8_SUPPORTED
- | UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE
+ #ifdef MY_UTF8_RAW_NON_UTF8_SUPPORTED
+ | Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE
#else
- | UTF_FLAG__TO_UTF8__SURROGATE_ERROR;
+ | Z7_UTF_FLAG_TO_UTF8_SURROGATE_ERROR
#endif
#endif
;
@@ -840,7 +840,7 @@ bool Unicode_IsThere_Utf16SurrogateError(const UString &src)
}
*/
-#ifndef _WCHART_IS_16BIT
+#ifndef Z7_WCHART_IS_16BIT
void Convert_UnicodeEsc16_To_UnicodeEscHigh
#if UTF_ESCAPE_PLANE == 0
diff --git a/3rdparty/lzma/CPP/Common/UTFConvert.h b/3rdparty/lzma/CPP/Common/UTFConvert.h
index 37c4975a9dd..94a8024fbf7 100644
--- a/3rdparty/lzma/CPP/Common/UTFConvert.h
+++ b/3rdparty/lzma/CPP/Common/UTFConvert.h
@@ -1,7 +1,7 @@
// Common/UTFConvert.h
-#ifndef __COMMON_UTF_CONVERT_H
-#define __COMMON_UTF_CONVERT_H
+#ifndef ZIP7_INC_COMMON_UTF_CONVERT_H
+#define ZIP7_INC_COMMON_UTF_CONVERT_H
#include "MyBuffer.h"
#include "MyString.h"
@@ -88,12 +88,12 @@ if (allowReduced == true) - it allows truncated last character-Utf8-sequence
bool Check_UTF8_Buf(const char *src, size_t size, bool allowReduced) throw();
bool CheckUTF8_AString(const AString &s) throw();
-#define UTF_FLAG__FROM_UTF8__SURROGATE_ERROR (1 << 0)
-#define UTF_FLAG__FROM_UTF8__USE_ESCAPE (1 << 1)
-#define UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT (1 << 2)
+#define Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR (1 << 0)
+#define Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE (1 << 1)
+#define Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT (1 << 2)
/*
-UTF_FLAG__FROM_UTF8__SURROGATE_ERROR
+Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR
if (flag is NOT set)
{
@@ -108,14 +108,14 @@ UTF_FLAG__FROM_UTF8__SURROGATE_ERROR
if (flag is set)
{
- if (UTF_FLAG__FROM_UTF8__USE_ESCAPE is defined)
+ if (Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE is defined)
it generates ESCAPE for SINGLE-SURROGATE-8,
- if (UTF_FLAG__FROM_UTF8__USE_ESCAPE is not defined)
+ if (Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE is not defined)
it generates U+fffd for SINGLE-SURROGATE-8,
}
-UTF_FLAG__FROM_UTF8__USE_ESCAPE
+Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE
if (flag is NOT set)
it generates (U+fffd) code for non-UTF-8 (invalid) characters
@@ -126,7 +126,7 @@ UTF_FLAG__FROM_UTF8__USE_ESCAPE
And later we can restore original UTF-8-RAW characters from (ESCAPE-16-21) codes.
}
-UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT
+Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT
if (flag is NOT set)
{
@@ -146,9 +146,9 @@ Main USE CASES with UTF-8 <-> UTF-16 conversions:
WIN32: UTF-16-RAW -> UTF-8 (Archive) -> UTF-16-RAW
{
- set UTF_FLAG__FROM_UTF8__USE_ESCAPE
- Do NOT set UTF_FLAG__FROM_UTF8__SURROGATE_ERROR
- Do NOT set UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT
+ set Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE
+ Do NOT set Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR
+ Do NOT set Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT
So we restore original SINGLE-SURROGATE-16 from single SINGLE-SURROGATE-8.
}
@@ -157,17 +157,17 @@ Main USE CASES with UTF-8 <-> UTF-16 conversions:
{
we want restore original UTF-8-RAW sequence later from that ESCAPE-16.
Set the flags:
- UTF_FLAG__FROM_UTF8__SURROGATE_ERROR
- UTF_FLAG__FROM_UTF8__USE_ESCAPE
- UTF_FLAG__FROM_UTF8__BMP_ESCAPE_CONVERT
+ Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR
+ Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE
+ Z7_UTF_FLAG_FROM_UTF8_BMP_ESCAPE_CONVERT
}
MacOS: UTF-8-RAW -> UTF-16 (Intermediate / Archive) -> UTF-8-RAW
{
we want to restore correct UTF-8 without any BMP processing:
Set the flags:
- UTF_FLAG__FROM_UTF8__SURROGATE_ERROR
- UTF_FLAG__FROM_UTF8__USE_ESCAPE
+ Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR
+ Z7_UTF_FLAG_FROM_UTF8_USE_ESCAPE
}
*/
@@ -178,12 +178,12 @@ bool Convert_UTF8_Buf_To_Unicode(const char *src, size_t srcSize, UString &dest,
bool ConvertUTF8ToUnicode_Flags(const AString &src, UString &dest, unsigned flags = 0);
bool ConvertUTF8ToUnicode(const AString &src, UString &dest);
-#define UTF_FLAG__TO_UTF8__SURROGATE_ERROR (1 << 8)
-#define UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE (1 << 9)
-// #define UTF_FLAG__TO_UTF8__PARSE_HIGH_ESCAPE (1 << 10)
+#define Z7_UTF_FLAG_TO_UTF8_SURROGATE_ERROR (1 << 8)
+#define Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE (1 << 9)
+// #define Z7_UTF_FLAG_TO_UTF8_PARSE_HIGH_ESCAPE (1 << 10)
/*
-UTF_FLAG__TO_UTF8__SURROGATE_ERROR
+Z7_UTF_FLAG_TO_UTF8_SURROGATE_ERROR
if (flag is NOT set)
{
@@ -193,7 +193,7 @@ UTF_FLAG__TO_UTF8__SURROGATE_ERROR
In Linux :
use-case-1: UTF-8 -> UTF-16 -> UTF-8 doesn't generate UTF-16 SINGLE-SURROGATE,
- if (UTF_FLAG__FROM_UTF8__SURROGATE_ERROR) is used.
+ if (Z7_UTF_FLAG_FROM_UTF8_SURROGATE_ERROR) is used.
use-case 2: UTF-16-7z (with SINGLE-SURROGATE from Windows) -> UTF-8 (Linux)
will generate SINGLE-SURROGATE-UTF-8 here.
}
@@ -206,17 +206,17 @@ UTF_FLAG__TO_UTF8__SURROGATE_ERROR
}
-UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE
+Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE
if (flag is NOT set) it doesn't extract raw 8-bit symbol from Escape-Plane-16
if (flag is set) it extracts raw 8-bit symbol from Escape-Plane-16
in Linux we need some way to extract NON-UTF8 RAW 8-bits from BMP (UTF-16 7z archive):
if (we use High-Escape-Plane), we can transfer BMP escapes to High-Escape-Plane.
- if (we don't use High-Escape-Plane), we must use UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE.
+ if (we don't use High-Escape-Plane), we must use Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE.
-UTF_FLAG__TO_UTF8__PARSE_HIGH_ESCAPE
+Z7_UTF_FLAG_TO_UTF8_PARSE_HIGH_ESCAPE
// that flag affects the code only if (wchar_t is 32-bit)
// that mode with high-escape can be disabled now in UTFConvert.cpp
if (flag is NOT set)
@@ -228,19 +228,19 @@ Main use cases:
WIN32 : UTF-16-RAW -> UTF-8 (archive) -> UTF-16-RAW
{
- Do NOT set UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE.
- Do NOT set UTF_FLAG__TO_UTF8__SURROGATE_ERROR.
+ Do NOT set Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE.
+ Do NOT set Z7_UTF_FLAG_TO_UTF8_SURROGATE_ERROR.
So we restore original UTF-16-RAW.
}
Linix : UTF-8 with Escapes -> UTF-16 (7z archive) -> UTF-8 with Escapes
- set UTF_FLAG__TO_UTF8__EXTRACT_BMP_ESCAPE to extract non-UTF from 7z archive
- set UTF_FLAG__TO_UTF8__PARSE_HIGH_ESCAPE for intermediate UTF-16.
+ set Z7_UTF_FLAG_TO_UTF8_EXTRACT_BMP_ESCAPE to extract non-UTF from 7z archive
+ set Z7_UTF_FLAG_TO_UTF8_PARSE_HIGH_ESCAPE for intermediate UTF-16.
Note: high esacape mode can be ignored now in UTFConvert.cpp
macOS:
the system doesn't support incorrect UTF-8 in file names.
- set UTF_FLAG__TO_UTF8__SURROGATE_ERROR
+ set Z7_UTF_FLAG_TO_UTF8_SURROGATE_ERROR
*/
extern unsigned g_Unicode_To_UTF8_Flags;
@@ -261,7 +261,7 @@ bool Unicode_IsThere_BmpEscape(const UString &src);
bool Unicode_IsThere_Utf16SurrogateError(const UString &src);
*/
-#ifdef _WCHART_IS_16BIT
+#ifdef Z7_WCHART_IS_16BIT
#define Convert_UnicodeEsc16_To_UnicodeEscHigh(s)
#else
void Convert_UnicodeEsc16_To_UnicodeEscHigh(UString &s);
diff --git a/3rdparty/lzma/CPP/Common/Wildcard.cpp b/3rdparty/lzma/CPP/Common/Wildcard.cpp
index 861f3f71cd3..798cbd957b4 100644
--- a/3rdparty/lzma/CPP/Common/Wildcard.cpp
+++ b/3rdparty/lzma/CPP/Common/Wildcard.cpp
@@ -125,8 +125,8 @@ static bool EnhancedMaskTest(const wchar_t *mask, const wchar_t *name)
{
for (;;)
{
- wchar_t m = *mask;
- wchar_t c = *name;
+ const wchar_t m = *mask;
+ const wchar_t c = *name;
if (m == 0)
return (c == 0);
if (m == '*')
@@ -526,12 +526,10 @@ int CCensor::FindPairForPrefix(const UString &prefix) const
bool IsDriveColonName(const wchar_t *s)
{
- wchar_t c = s[0];
- return c != 0
- && s[1] == ':'
- && s[2] == 0
- && ((c >= 'a' && c <= 'z')
- || (c >= 'A' && c <= 'Z'));
+ unsigned c = s[0];
+ c |= 0x20;
+ c -= 'a';
+ return c <= (unsigned)('z' - 'a') && s[1] == ':' && s[2] == 0;
}
unsigned GetNumPrefixParts_if_DrivePath(UStringVector &pathParts)
diff --git a/3rdparty/lzma/CPP/Common/Wildcard.h b/3rdparty/lzma/CPP/Common/Wildcard.h
index 0fa48873d14..4f81da923a0 100644
--- a/3rdparty/lzma/CPP/Common/Wildcard.h
+++ b/3rdparty/lzma/CPP/Common/Wildcard.h
@@ -1,7 +1,7 @@
// Common/Wildcard.h
-#ifndef __COMMON_WILDCARD_H
-#define __COMMON_WILDCARD_H
+#ifndef ZIP7_INC_COMMON_WILDCARD_H
+#define ZIP7_INC_COMMON_WILDCARD_H
#include "MyString.h"
@@ -83,7 +83,7 @@ public:
CCensorNode():
Parent(NULL)
// , ExcludeDirItems(false)
- {};
+ {}
CCensorNode(const UString &name, CCensorNode *parent):
Parent(parent)
diff --git a/3rdparty/lzma/CPP/Common/XzCrc64Reg.cpp b/3rdparty/lzma/CPP/Common/XzCrc64Reg.cpp
index 33b524932c9..e9e67efcbfc 100644
--- a/3rdparty/lzma/CPP/Common/XzCrc64Reg.cpp
+++ b/3rdparty/lzma/CPP/Common/XzCrc64Reg.cpp
@@ -9,34 +9,31 @@
#include "../7zip/Common/RegisterCodec.h"
-class CXzCrc64Hasher:
- public IHasher,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_COM_1(
+ CXzCrc64Hasher
+ , IHasher
+)
UInt64 _crc;
- Byte mtDummy[1 << 7];
-
public:
- CXzCrc64Hasher(): _crc(CRC64_INIT_VAL) {}
+ Byte _mtDummy[1 << 7]; // it's public to eliminate clang warning: unused private field
- MY_UNKNOWN_IMP1(IHasher)
- INTERFACE_IHasher(;)
+ CXzCrc64Hasher(): _crc(CRC64_INIT_VAL) {}
};
-STDMETHODIMP_(void) CXzCrc64Hasher::Init() throw()
+Z7_COM7F_IMF2(void, CXzCrc64Hasher::Init())
{
_crc = CRC64_INIT_VAL;
}
-STDMETHODIMP_(void) CXzCrc64Hasher::Update(const void *data, UInt32 size) throw()
+Z7_COM7F_IMF2(void, CXzCrc64Hasher::Update(const void *data, UInt32 size))
{
_crc = Crc64Update(_crc, data, size);
}
-STDMETHODIMP_(void) CXzCrc64Hasher::Final(Byte *digest) throw()
+Z7_COM7F_IMF2(void, CXzCrc64Hasher::Final(Byte *digest))
{
- UInt64 val = CRC64_GET_DIGEST(_crc);
- SetUi64(digest, val);
+ const UInt64 val = CRC64_GET_DIGEST(_crc);
+ SetUi64(digest, val)
}
REGISTER_HASHER(CXzCrc64Hasher, 0x4, "CRC64", 8)
diff --git a/3rdparty/lzma/CPP/Windows/COM.h b/3rdparty/lzma/CPP/Windows/COM.h
index cee7f702d6f..a8780cacb30 100644
--- a/3rdparty/lzma/CPP/Windows/COM.h
+++ b/3rdparty/lzma/CPP/Windows/COM.h
@@ -1,9 +1,9 @@
// Windows/COM.h
-#ifndef __WINDOWS_COM_H
-#define __WINDOWS_COM_H
+#ifndef ZIP7_INC_WINDOWS_COM_H
+#define ZIP7_INC_WINDOWS_COM_H
-#include "../Common/MyString.h"
+// #include "../Common/MyString.h"
namespace NWindows {
namespace NCOM {
@@ -21,17 +21,18 @@ public:
// it's single thread. Do we need multithread?
CoInitialize(NULL);
#endif
- };
+ }
~CComInitializer() { CoUninitialize(); }
};
-class CStgMedium
+/*
+class CStgMedium2
{
STGMEDIUM _object;
-public:
bool _mustBeReleased;
- CStgMedium(): _mustBeReleased(false) {}
- ~CStgMedium() { Free(); }
+public:
+ CStgMedium2(): _mustBeReleased(false) {}
+ ~CStgMedium2() { Free(); }
void Free()
{
if (_mustBeReleased)
@@ -42,6 +43,21 @@ public:
STGMEDIUM* operator->() { return &_object;}
STGMEDIUM* operator&() { return &_object; }
};
+*/
+
+struct CStgMedium: public STGMEDIUM
+{
+ CStgMedium()
+ {
+ tymed = TYMED_NULL; // 0
+ hGlobal = NULL;
+ pUnkForRelease = NULL;
+ }
+ ~CStgMedium()
+ {
+ ReleaseStgMedium(this);
+ }
+};
#endif
diff --git a/3rdparty/lzma/CPP/Windows/Clipboard.h b/3rdparty/lzma/CPP/Windows/Clipboard.h
index 60fedc13b14..3b4f2fe5ee3 100644
--- a/3rdparty/lzma/CPP/Windows/Clipboard.h
+++ b/3rdparty/lzma/CPP/Windows/Clipboard.h
@@ -1,7 +1,7 @@
// Windows/Clipboard.h
-#ifndef __CLIPBOARD_H
-#define __CLIPBOARD_H
+#ifndef ZIP7_INC_CLIPBOARD_H
+#define ZIP7_INC_CLIPBOARD_H
#include "../Common/MyString.h"
@@ -11,7 +11,7 @@ class CClipboard
{
bool m_Open;
public:
- CClipboard(): m_Open(false) {};
+ CClipboard(): m_Open(false) {}
~CClipboard() { Close(); }
bool Open(HWND wndNewOwner) throw();
bool Close() throw();
diff --git a/3rdparty/lzma/CPP/Windows/CommonDialog.cpp b/3rdparty/lzma/CPP/Windows/CommonDialog.cpp
index eaaecada727..7a92d5f9b65 100644
--- a/3rdparty/lzma/CPP/Windows/CommonDialog.cpp
+++ b/3rdparty/lzma/CPP/Windows/CommonDialog.cpp
@@ -2,7 +2,7 @@
#include "StdAfx.h"
-#include "../Common/MyWindows.h"
+#include "../Common/MyBuffer.h"
#ifdef UNDER_CE
#include <commdlg.h>
@@ -14,6 +14,7 @@
#include "CommonDialog.h"
#include "Defs.h"
+// #include "FileDir.h"
#ifndef _UNICODE
extern bool g_IsNT;
@@ -21,61 +22,46 @@ extern bool g_IsNT;
namespace NWindows {
-#ifndef _UNICODE
+/*
+ GetSaveFileName()
+ GetOpenFileName()
+ OPENFILENAME
-class CDoubleZeroStringListA
-{
- LPTSTR Buf;
- unsigned Size;
-public:
- CDoubleZeroStringListA(LPSTR buf, unsigned size): Buf(buf), Size(size) {}
- bool Add(LPCSTR s) throw();
- void Finish() { *Buf = 0; }
-};
-
-bool CDoubleZeroStringListA::Add(LPCSTR s) throw()
+(lpstrInitialDir) : the initial directory.
+DOCs: the algorithm for selecting the initial directory varies on different platforms:
{
- unsigned len = MyStringLen(s) + 1;
- if (len >= Size)
- return false;
- MyStringCopy(Buf, s);
- Buf += len;
- Size -= len;
- return true;
+ Win2000/XP/Vista:
+ 1. If lpstrFile contains a path, that path is the initial directory.
+ 2. Otherwise, lpstrInitialDir specifies the initial directory.
+
+ Win7:
+ If lpstrInitialDir has the same value as was passed the first time
+ the application used an Open or Save As dialog box, the path
+ most recently selected by the user is used as the initial directory.
}
-#endif
+Win10:
+ in:
+ function supports (lpstrInitialDir) path with super prefix "\\\\?\\"
+ function supports (lpstrInitialDir) path with long path
+ function doesn't support absolute (lpstrFile) path with super prefix "\\\\?\\"
+ function doesn't support absolute (lpstrFile) path with long path
+ out: the path with super prefix "\\\\?\\" will be returned, if selected path is long
-class CDoubleZeroStringListW
-{
- LPWSTR Buf;
- unsigned Size;
-public:
- CDoubleZeroStringListW(LPWSTR buf, unsigned size): Buf(buf), Size(size) {}
- bool Add(LPCWSTR s) throw();
- void Finish() { *Buf = 0; }
-};
-
-bool CDoubleZeroStringListW::Add(LPCWSTR s) throw()
-{
- unsigned len = MyStringLen(s) + 1;
- if (len >= Size)
- return false;
- MyStringCopy(Buf, s);
- Buf += len;
- Size -= len;
- return true;
-}
+WinXP-64 and Win10: if no filters, the system shows all files.
+ but DOCs say: If all three members are zero or NULL,
+ the system does not use any filters and does not
+ show any files in the file list control of the dialog box.
+in Win7+: GetOpenFileName() and GetSaveFileName()
+ do not support pstrCustomFilter feature anymore
+*/
#ifdef UNDER_CE
-#define MY__OFN_PROJECT 0x00400000
-#define MY__OFN_SHOW_ALL 0x01000000
+#define MY_OFN_PROJECT 0x00400000
+#define MY_OFN_SHOW_ALL 0x01000000
#endif
-/* if (lpstrFilter == NULL && nFilterIndex == 0)
- MSDN : "the system doesn't show any files",
- but WinXP-64 shows all files. Why ??? */
/*
structures
@@ -89,16 +75,16 @@ contain additional members:
#endif
If we compile the source code with (_WIN32_WINNT >= 0x0500), some functions
-will not work at NT 4.0, if we use sizeof(OPENFILENAME*).
-So we use size of old version of structure. */
+will not work at NT 4.0, if we use sizeof(OPENFILENAME).
+We try to use reduced structure OPENFILENAME_NT4.
+*/
-#if defined(UNDER_CE) || defined(_WIN64) || (_WIN32_WINNT < 0x0500)
-// || !defined(WINVER)
+// #if defined(_WIN64) || (defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0500)
+#if defined(__GNUC__) && (__GNUC__ <= 9) || defined(Z7_OLD_WIN_SDK)
#ifndef _UNICODE
- #define my_compatib_OPENFILENAMEA_size sizeof(OPENFILENAMEA)
+ #define my_compatib_OPENFILENAMEA OPENFILENAMEA
#endif
- #define my_compatib_OPENFILENAMEW_size sizeof(OPENFILENAMEW)
-#else
+ #define my_compatib_OPENFILENAMEW OPENFILENAMEW
// MinGW doesn't support some required macros. So we define them here:
#ifndef CDSIZEOF_STRUCT
@@ -117,91 +103,166 @@ So we use size of old version of structure. */
#define my_compatib_OPENFILENAMEA_size OPENFILENAME_SIZE_VERSION_400A
#endif
#define my_compatib_OPENFILENAMEW_size OPENFILENAME_SIZE_VERSION_400W
+#else
+ #ifndef _UNICODE
+ #define my_compatib_OPENFILENAMEA OPENFILENAME_NT4A
+ #define my_compatib_OPENFILENAMEA_size sizeof(my_compatib_OPENFILENAMEA)
+ #endif
+ #define my_compatib_OPENFILENAMEW OPENFILENAME_NT4W
+ #define my_compatib_OPENFILENAMEW_size sizeof(my_compatib_OPENFILENAMEW)
+#endif
+/*
+#elif defined(UNDER_CE) || defined(_WIN64) || (_WIN32_WINNT < 0x0500)
+// || !defined(WINVER)
+ #ifndef _UNICODE
+ #define my_compatib_OPENFILENAMEA OPENFILENAMEA
+ #define my_compatib_OPENFILENAMEA_size sizeof(OPENFILENAMEA)
+ #endif
+ #define my_compatib_OPENFILENAMEW OPENFILENAMEW
+ #define my_compatib_OPENFILENAMEW_size sizeof(OPENFILENAMEW)
+#else
+
#endif
+*/
#ifndef _UNICODE
#define CONV_U_To_A(dest, src, temp) AString temp; if (src) { temp = GetSystemString(src); dest = temp; }
#endif
-bool MyGetOpenFileName(HWND hwnd, LPCWSTR title,
- LPCWSTR initialDir,
- LPCWSTR filePath,
- LPCWSTR filterDescription,
- LPCWSTR filter,
- UString &resPath
- #ifdef UNDER_CE
- , bool openFolder
- #endif
- )
+bool CCommonDialogInfo::CommonDlg_BrowseForFile(LPCWSTR lpstrInitialDir, const UStringVector &filters)
{
- const unsigned kBufSize = MAX_PATH * 2;
- const unsigned kFilterBufSize = MAX_PATH;
- if (!filter)
- filter = L"*.*";
- #ifndef _UNICODE
+ /* GetSaveFileName() and GetOpenFileName() could change current dir,
+ if OFN_NOCHANGEDIR is not used.
+ We can restore current dir manually, if it's required.
+ 22.02: we use OFN_NOCHANGEDIR. So we don't need to restore current dir manually. */
+ // NFile::NDir::CCurrentDirRestorer curDirRestorer;
+
+#ifndef _UNICODE
if (!g_IsNT)
{
- CHAR buf[kBufSize];
- MyStringCopy(buf, (const char *)GetSystemString(filePath));
- // OPENFILENAME_NT4A
- OPENFILENAMEA p;
+ AString tempPath;
+ AStringVector f;
+ unsigned i;
+ for (i = 0; i < filters.Size(); i++)
+ f.Add(GetSystemString(filters[i]));
+ unsigned size = f.Size() + 1;
+ for (i = 0; i < f.Size(); i++)
+ size += f[i].Len();
+ CObjArray<char> filterBuf(size);
+ // memset(filterBuf, 0, size * sizeof(char));
+ {
+ char *dest = filterBuf;
+ for (i = 0; i < f.Size(); i++)
+ {
+ const AString &s = f[i];
+ MyStringCopy(dest, s);
+ dest += s.Len() + 1;
+ }
+ *dest = 0;
+ }
+ my_compatib_OPENFILENAMEA p;
memset(&p, 0, sizeof(p));
p.lStructSize = my_compatib_OPENFILENAMEA_size;
- p.hwndOwner = hwnd;
- CHAR filterBuf[kFilterBufSize];
+ p.hwndOwner = hwndOwner;
+ if (size > 1)
{
- CDoubleZeroStringListA dz(filterBuf, kFilterBufSize);
- dz.Add(GetSystemString(filterDescription ? filterDescription : filter));
- dz.Add(GetSystemString(filter));
- dz.Finish();
p.lpstrFilter = filterBuf;
- p.nFilterIndex = 1;
+ p.nFilterIndex = (DWORD)(FilterIndex + 1);
+ }
+
+ CONV_U_To_A(p.lpstrInitialDir, lpstrInitialDir, initialDir_a)
+ CONV_U_To_A(p.lpstrTitle, lpstrTitle, title_a)
+
+ const AString filePath_a = GetSystemString(FilePath);
+ const unsigned bufSize = MAX_PATH * 8
+ + filePath_a.Len()
+ + initialDir_a.Len();
+ p.nMaxFile = bufSize;
+ p.lpstrFile = tempPath.GetBuf(bufSize);
+ MyStringCopy(p.lpstrFile, filePath_a);
+ p.Flags =
+ OFN_EXPLORER
+ | OFN_HIDEREADONLY
+ | OFN_NOCHANGEDIR;
+ const BOOL b = SaveMode ?
+ ::GetSaveFileNameA((LPOPENFILENAMEA)(void *)&p) :
+ ::GetOpenFileNameA((LPOPENFILENAMEA)(void *)&p);
+ if (!b)
+ return false;
+ {
+ tempPath.ReleaseBuf_CalcLen(bufSize);
+ FilePath = GetUnicodeString(tempPath);
+ FilterIndex = (int)p.nFilterIndex - 1;
+ return true;
}
-
- p.lpstrFile = buf;
- p.nMaxFile = kBufSize;
- CONV_U_To_A(p.lpstrInitialDir, initialDir, initialDirA);
- CONV_U_To_A(p.lpstrTitle, title, titleA);
- p.Flags = OFN_EXPLORER | OFN_HIDEREADONLY;
-
- bool res = BOOLToBool(::GetOpenFileNameA(&p));
- resPath = GetUnicodeString(buf);
- return res;
}
else
- #endif
+#endif
{
- WCHAR buf[kBufSize];
- MyStringCopy(buf, filePath);
- // OPENFILENAME_NT4W
- OPENFILENAMEW p;
+ UString tempPath;
+ unsigned size = filters.Size() + 1;
+ unsigned i;
+ for (i = 0; i < filters.Size(); i++)
+ size += filters[i].Len();
+ CObjArray<wchar_t> filterBuf(size);
+ // memset(filterBuf, 0, size * sizeof(wchar_t));
+ {
+ wchar_t *dest = filterBuf;
+ for (i = 0; i < filters.Size(); i++)
+ {
+ const UString &s = filters[i];
+ MyStringCopy(dest, s);
+ dest += s.Len() + 1;
+ }
+ *dest = 0;
+ // if ((unsigned)(dest + 1 - filterBuf) != size) return false;
+ }
+ my_compatib_OPENFILENAMEW p;
memset(&p, 0, sizeof(p));
p.lStructSize = my_compatib_OPENFILENAMEW_size;
- p.hwndOwner = hwnd;
-
- WCHAR filterBuf[kFilterBufSize];
+ p.hwndOwner = hwndOwner;
+ if (size > 1)
{
- CDoubleZeroStringListW dz(filterBuf, kFilterBufSize);
- dz.Add(filterDescription ? filterDescription : filter);
- dz.Add(filter);
- dz.Finish();
p.lpstrFilter = filterBuf;
- p.nFilterIndex = 1;
+ p.nFilterIndex = (DWORD)(FilterIndex + 1);
}
-
- p.lpstrFile = buf;
- p.nMaxFile = kBufSize;
- p.lpstrInitialDir = initialDir;
- p.lpstrTitle = title;
- p.Flags = OFN_EXPLORER | OFN_HIDEREADONLY
- #ifdef UNDER_CE
- | (openFolder ? (MY__OFN_PROJECT | MY__OFN_SHOW_ALL) : 0)
- #endif
+ unsigned bufSize = MAX_PATH * 8 + FilePath.Len();
+ if (lpstrInitialDir)
+ {
+ p.lpstrInitialDir = lpstrInitialDir;
+ bufSize += MyStringLen(lpstrInitialDir);
+ }
+ p.nMaxFile = bufSize;
+ p.lpstrFile = tempPath.GetBuf(bufSize);
+ MyStringCopy(p.lpstrFile, FilePath);
+ p.lpstrTitle = lpstrTitle;
+ p.Flags =
+ OFN_EXPLORER
+ | OFN_HIDEREADONLY
+ | OFN_NOCHANGEDIR
+ // | OFN_FORCESHOWHIDDEN // Win10 shows hidden items even without this flag
+ // | OFN_PATHMUSTEXIST
+ #ifdef UNDER_CE
+ | (OpenFolderMode ? (MY_OFN_PROJECT | MY_OFN_SHOW_ALL) : 0)
+ #endif
;
-
- bool res = BOOLToBool(::GetOpenFileNameW(&p));
- resPath = buf;
- return res;
+ const BOOL b = SaveMode ?
+ ::GetSaveFileNameW((LPOPENFILENAMEW)(void *)&p) :
+ ::GetOpenFileNameW((LPOPENFILENAMEW)(void *)&p);
+ /* DOCs: lpstrFile :
+ if the buffer is too small, then:
+ - the function returns FALSE
+ - the CommDlgExtendedError() returns FNERR_BUFFERTOOSMALL
+ - the first two bytes of the lpstrFile buffer contain the
+ required size, in bytes or characters. */
+ if (!b)
+ return false;
+ {
+ tempPath.ReleaseBuf_CalcLen(bufSize);
+ FilePath = tempPath;
+ FilterIndex = (int)p.nFilterIndex - 1;
+ return true;
+ }
}
}
diff --git a/3rdparty/lzma/CPP/Windows/CommonDialog.h b/3rdparty/lzma/CPP/Windows/CommonDialog.h
index aaf17ac57ce..85b071f0ce2 100644
--- a/3rdparty/lzma/CPP/Windows/CommonDialog.h
+++ b/3rdparty/lzma/CPP/Windows/CommonDialog.h
@@ -1,22 +1,42 @@
// Windows/CommonDialog.h
-#ifndef __WINDOWS_COMMON_DIALOG_H
-#define __WINDOWS_COMMON_DIALOG_H
+#ifndef ZIP7_INC_WINDOWS_COMMON_DIALOG_H
+#define ZIP7_INC_WINDOWS_COMMON_DIALOG_H
#include "../Common/MyString.h"
namespace NWindows {
-bool MyGetOpenFileName(HWND hwnd, LPCWSTR title,
- LPCWSTR initialDir, // can be NULL, so dir prefix in filePath will be used
- LPCWSTR filePath, // full path
- LPCWSTR filterDescription, // like "All files (*.*)"
- LPCWSTR filter, // like "*.exe"
- UString &resPath
- #ifdef UNDER_CE
- , bool openFolder = false
- #endif
-);
+struct CCommonDialogInfo
+{
+ /* (FilterIndex == -1) means no selected filter.
+ and (-1) also is reserved for unsupported custom filter.
+ if (FilterIndex >= 0), then FilterIndex is index of filter */
+ int FilterIndex; // [in / out]
+ bool SaveMode;
+ #ifdef UNDER_CE
+ bool OpenFolderMode;
+ #endif
+ HWND hwndOwner;
+ // LPCWSTR lpstrInitialDir;
+ LPCWSTR lpstrTitle;
+ UString FilePath; // [in / out]
+
+ CCommonDialogInfo()
+ {
+ FilterIndex = -1;
+ SaveMode = false;
+ #ifdef UNDER_CE
+ OpenFolderMode = false;
+ #endif
+ hwndOwner = NULL;
+ // lpstrInitialDir = NULL;
+ lpstrTitle = NULL;
+ }
+
+ /* (filters) : 2 sequential vector strings (Description, Masks) represent each filter */
+ bool CommonDlg_BrowseForFile(LPCWSTR lpstrInitialDir, const UStringVector &filters);
+};
}
diff --git a/3rdparty/lzma/CPP/Windows/Control/ComboBox.cpp b/3rdparty/lzma/CPP/Windows/Control/ComboBox.cpp
index f6ed8d346e4..8da487d490a 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ComboBox.cpp
+++ b/3rdparty/lzma/CPP/Windows/Control/ComboBox.cpp
@@ -43,10 +43,10 @@ LRESULT CComboBox::GetLBText(int index, UString &s)
s.Empty();
if (g_IsNT)
{
- LRESULT len = SendMsgW(CB_GETLBTEXTLEN, MY__int_TO_WPARAM(index), 0);
+ LRESULT len = SendMsgW(CB_GETLBTEXTLEN, MY_int_TO_WPARAM(index), 0);
if (len == CB_ERR)
return len;
- LRESULT len2 = SendMsgW(CB_GETLBTEXT, MY__int_TO_WPARAM(index), (LPARAM)s.GetBuf((unsigned)len));
+ LRESULT len2 = SendMsgW(CB_GETLBTEXT, MY_int_TO_WPARAM(index), (LPARAM)s.GetBuf((unsigned)len));
if (len2 == CB_ERR)
return len;
if (len > len2)
@@ -55,11 +55,11 @@ LRESULT CComboBox::GetLBText(int index, UString &s)
return len;
}
AString sa;
- LRESULT len = GetLBText(index, sa);
+ const LRESULT len = GetLBText(index, sa);
if (len == CB_ERR)
return len;
s = GetUnicodeString(sa);
- return s.Len();
+ return (LRESULT)s.Len();
}
#endif
diff --git a/3rdparty/lzma/CPP/Windows/Control/ComboBox.h b/3rdparty/lzma/CPP/Windows/Control/ComboBox.h
index f08b1f7ce28..2a60b8aac96 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ComboBox.h
+++ b/3rdparty/lzma/CPP/Windows/Control/ComboBox.h
@@ -1,7 +1,7 @@
// Windows/Control/ComboBox.h
-#ifndef __WINDOWS_CONTROL_COMBOBOX_H
-#define __WINDOWS_CONTROL_COMBOBOX_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_COMBOBOX_H
+#define ZIP7_INC_WINDOWS_CONTROL_COMBOBOX_H
#include "../../Common/MyWindows.h"
@@ -12,8 +12,6 @@
namespace NWindows {
namespace NControl {
-#define MY__int_TO_WPARAM(i) ((WPARAM)(INT_PTR)(i))
-
class CComboBox: public CWindow
{
public:
@@ -24,7 +22,8 @@ public:
#endif
/* If this parameter is -1, any current selection in the list is removed and the edit control is cleared.*/
- LRESULT SetCurSel(int index) { return SendMsg(CB_SETCURSEL, MY__int_TO_WPARAM(index), 0); }
+ LRESULT SetCurSel(int index) { return SendMsg(CB_SETCURSEL, MY_int_TO_WPARAM(index), 0); }
+ LRESULT SetCurSel(unsigned index) { return SendMsg(CB_SETCURSEL, index, 0); }
/* If no item is selected, it returns CB_ERR (-1) */
int GetCurSel() { return (int)SendMsg(CB_GETCURSEL, 0, 0); }
@@ -32,15 +31,16 @@ public:
/* If an error occurs, it is CB_ERR (-1) */
int GetCount() { return (int)SendMsg(CB_GETCOUNT, 0, 0); }
- LRESULT GetLBTextLen(int index) { return SendMsg(CB_GETLBTEXTLEN, MY__int_TO_WPARAM(index), 0); }
- LRESULT GetLBText(int index, LPTSTR s) { return SendMsg(CB_GETLBTEXT, MY__int_TO_WPARAM(index), (LPARAM)s); }
+ LRESULT GetLBTextLen(int index) { return SendMsg(CB_GETLBTEXTLEN, MY_int_TO_WPARAM(index), 0); }
+ LRESULT GetLBText(int index, LPTSTR s) { return SendMsg(CB_GETLBTEXT, MY_int_TO_WPARAM(index), (LPARAM)s); }
LRESULT GetLBText(int index, CSysString &s);
#ifndef _UNICODE
LRESULT GetLBText(int index, UString &s);
#endif
- LRESULT SetItemData(int index, LPARAM lParam) { return SendMsg(CB_SETITEMDATA, MY__int_TO_WPARAM(index), lParam); }
- LRESULT GetItemData(int index) { return SendMsg(CB_GETITEMDATA, MY__int_TO_WPARAM(index), 0); }
+ LRESULT SetItemData(int index, LPARAM lParam) { return SendMsg(CB_SETITEMDATA, MY_int_TO_WPARAM(index), lParam); }
+ LRESULT GetItemData(int index) { return SendMsg(CB_GETITEMDATA, MY_int_TO_WPARAM(index), 0); }
+ LRESULT GetItemData(unsigned index) { return SendMsg(CB_GETITEMDATA, index, 0); }
LRESULT GetItemData_of_CurSel() { return GetItemData(GetCurSel()); }
@@ -57,7 +57,7 @@ public:
/* Returns:
an INT value that represents the number of items remaining in the control.
If (index) is invalid, the message returns CB_ERR. */
- LRESULT DeleteItem(int index) { return SendMsg(CBEM_DELETEITEM, MY__int_TO_WPARAM(index), 0); }
+ LRESULT DeleteItem(int index) { return SendMsg(CBEM_DELETEITEM, MY_int_TO_WPARAM(index), 0); }
LRESULT InsertItem(COMBOBOXEXITEM *item) { return SendMsg(CBEM_INSERTITEM, 0, (LPARAM)item); }
#ifndef _UNICODE
@@ -65,7 +65,7 @@ public:
#endif
LRESULT SetItem(COMBOBOXEXITEM *item) { return SendMsg(CBEM_SETITEM, 0, (LPARAM)item); }
- DWORD SetExtendedStyle(DWORD exMask, DWORD exStyle) { return (DWORD)SendMsg(CBEM_SETEXTENDEDSTYLE, exMask, exStyle); }
+ DWORD SetExtendedStyle(DWORD exMask, DWORD exStyle) { return (DWORD)SendMsg(CBEM_SETEXTENDEDSTYLE, exMask, (LPARAM)exStyle); }
HWND GetEditControl() { return (HWND)SendMsg(CBEM_GETEDITCONTROL, 0, 0); }
HIMAGELIST SetImageList(HIMAGELIST imageList) { return (HIMAGELIST)SendMsg(CBEM_SETIMAGELIST, 0, (LPARAM)imageList); }
};
diff --git a/3rdparty/lzma/CPP/Windows/Control/CommandBar.h b/3rdparty/lzma/CPP/Windows/Control/CommandBar.h
index a6197447a40..d1b2f17861d 100644
--- a/3rdparty/lzma/CPP/Windows/Control/CommandBar.h
+++ b/3rdparty/lzma/CPP/Windows/Control/CommandBar.h
@@ -1,7 +1,7 @@
// Windows/Control/CommandBar.h
-#ifndef __WINDOWS_CONTROL_COMMANDBAR_H
-#define __WINDOWS_CONTROL_COMMANDBAR_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_COMMANDBAR_H
+#define ZIP7_INC_WINDOWS_CONTROL_COMMANDBAR_H
#ifdef UNDER_CE
@@ -26,12 +26,12 @@ public:
// Macros
// void Destroy() { CommandBar_Destroy(_window); }
// bool AddButtons(UINT numButtons, LPTBBUTTON buttons) { return BOOLToBool(SendMsg(TB_ADDBUTTONS, (WPARAM)numButtons, (LPARAM)buttons)); }
- bool InsertButton(int iButton, LPTBBUTTON button) { return BOOLToBool(SendMsg(TB_INSERTBUTTON, (WPARAM)iButton, (LPARAM)button)); }
- BOOL AddToolTips(UINT numToolTips, LPTSTR toolTips) { return BOOLToBool(SendMsg(TB_SETTOOLTIPS, (WPARAM)numToolTips, (LPARAM)toolTips)); }
+ // bool InsertButton(unsigned iButton, LPTBBUTTON button) { return BOOLToBool(SendMsg(TB_INSERTBUTTON, (WPARAM)iButton, (LPARAM)button)); }
+ // BOOL AddToolTips(UINT numToolTips, LPTSTR toolTips) { return BOOLToBool(SendMsg(TB_SETTOOLTIPS, (WPARAM)numToolTips, (LPARAM)toolTips)); }
void AutoSize() { SendMsg(TB_AUTOSIZE, 0, 0); }
- bool AddAdornments(DWORD dwFlags) { return BOOLToBool(::CommandBar_AddAdornments(_window, dwFlags, 0)); }
- int AddBitmap(HINSTANCE hInst, int idBitmap, int iNumImages, int iImageWidth, int iImageHeight) { return ::CommandBar_AddBitmap(_window, hInst, idBitmap, iNumImages, iImageWidth, iImageHeight); }
+ // bool AddAdornments(DWORD dwFlags) { return BOOLToBool(::CommandBar_AddAdornments(_window, dwFlags, 0)); }
+ // int AddBitmap(HINSTANCE hInst, int idBitmap, int iNumImages, int iImageWidth, int iImageHeight) { return ::CommandBar_AddBitmap(_window, hInst, idBitmap, iNumImages, iImageWidth, iImageHeight); }
bool DrawMenuBar(WORD iButton) { return BOOLToBool(::CommandBar_DrawMenuBar(_window, iButton)); }
HMENU GetMenu(WORD iButton) { return ::CommandBar_GetMenu(_window, iButton); }
int Height() { return CommandBar_Height(_window); }
diff --git a/3rdparty/lzma/CPP/Windows/Control/Dialog.cpp b/3rdparty/lzma/CPP/Windows/Control/Dialog.cpp
index 9ddd23427d8..c8f1bd27c79 100644
--- a/3rdparty/lzma/CPP/Windows/Control/Dialog.cpp
+++ b/3rdparty/lzma/CPP/Windows/Control/Dialog.cpp
@@ -18,7 +18,14 @@ extern bool g_IsNT;
namespace NWindows {
namespace NControl {
-static INT_PTR APIENTRY DialogProcedure(HWND dialogHWND, UINT message, WPARAM wParam, LPARAM lParam)
+static
+#ifdef Z7_OLD_WIN_SDK
+ BOOL
+#else
+ INT_PTR
+#endif
+APIENTRY
+DialogProcedure(HWND dialogHWND, UINT message, WPARAM wParam, LPARAM lParam)
{
CWindow tempDialog(dialogHWND);
if (message == WM_INITDIALOG)
@@ -45,7 +52,7 @@ bool CDialog::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
switch (message)
{
case WM_INITDIALOG: return OnInit();
- case WM_COMMAND: return OnCommand(wParam, lParam);
+ case WM_COMMAND: return OnCommand(HIWORD(wParam), LOWORD(wParam), lParam);
case WM_NOTIFY: return OnNotify((UINT)wParam, (LPNMHDR) lParam);
case WM_TIMER: return OnTimer(wParam, lParam);
case WM_SIZE: return OnSize(wParam, LOWORD(lParam), HIWORD(lParam));
@@ -65,19 +72,21 @@ bool CDialog::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
}
}
-bool CDialog::OnCommand(WPARAM wParam, LPARAM lParam)
+/*
+bool CDialog::OnCommand2(WPARAM wParam, LPARAM lParam)
{
return OnCommand(HIWORD(wParam), LOWORD(wParam), lParam);
}
+*/
-bool CDialog::OnCommand(int code, int itemID, LPARAM lParam)
+bool CDialog::OnCommand(unsigned code, unsigned itemID, LPARAM lParam)
{
if (code == BN_CLICKED)
return OnButtonClicked(itemID, (HWND)lParam);
return false;
}
-bool CDialog::OnButtonClicked(int buttonID, HWND /* buttonHWND */)
+bool CDialog::OnButtonClicked(unsigned buttonID, HWND /* buttonHWND */)
{
switch (buttonID)
{
@@ -90,6 +99,28 @@ bool CDialog::OnButtonClicked(int buttonID, HWND /* buttonHWND */)
return true;
}
+#ifndef UNDER_CE
+/* in win2000/win98 : monitor functions are supported.
+ We need dynamic linking, if we want nt4/win95 support in program.
+ Even if we compile the code with low (WINVER) value, we still
+ want to use monitor functions. So we declare missing functions here */
+// #if (WINVER < 0x0500)
+#ifndef MONITOR_DEFAULTTOPRIMARY
+extern "C" {
+DECLARE_HANDLE(HMONITOR);
+#define MONITOR_DEFAULTTOPRIMARY 0x00000001
+typedef struct tagMONITORINFO
+{
+ DWORD cbSize;
+ RECT rcMonitor;
+ RECT rcWork;
+ DWORD dwFlags;
+} MONITORINFO, *LPMONITORINFO;
+WINUSERAPI HMONITOR WINAPI MonitorFromWindow(HWND hwnd, DWORD dwFlags);
+WINUSERAPI BOOL WINAPI GetMonitorInfoA(HMONITOR hMonitor, LPMONITORINFO lpmi);
+}
+#endif
+#endif
static bool GetWorkAreaRect(RECT *rect, HWND hwnd)
{
@@ -172,7 +203,7 @@ int CDialog::Units_To_Pixels_X(int units)
return rect.right - rect.left;
}
-bool CDialog::GetItemSizes(int id, int &x, int &y)
+bool CDialog::GetItemSizes(unsigned id, int &x, int &y)
{
RECT rect;
if (!::GetWindowRect(GetItem(id), &rect))
@@ -182,13 +213,13 @@ bool CDialog::GetItemSizes(int id, int &x, int &y)
return true;
}
-void CDialog::GetClientRectOfItem(int id, RECT &rect)
+void CDialog::GetClientRectOfItem(unsigned id, RECT &rect)
{
::GetWindowRect(GetItem(id), &rect);
ScreenToClient(&rect);
}
-bool CDialog::MoveItem(int id, int x, int y, int width, int height, bool repaint)
+bool CDialog::MoveItem(unsigned id, int x, int y, int width, int height, bool repaint)
{
return BOOLToBool(::MoveWindow(GetItem(id), x, y, width, height, BoolToBOOL(repaint)));
}
@@ -356,8 +387,8 @@ void CDialog::NormalizePosition()
bool CModelessDialog::Create(LPCTSTR templateName, HWND parentWindow)
{
- HWND aHWND = CreateDialogParam(g_hInstance, templateName, parentWindow, DialogProcedure, (LPARAM)this);
- if (aHWND == 0)
+ const HWND aHWND = CreateDialogParam(g_hInstance, templateName, parentWindow, DialogProcedure, (LPARAM)this);
+ if (!aHWND)
return false;
Attach(aHWND);
return true;
diff --git a/3rdparty/lzma/CPP/Windows/Control/Dialog.h b/3rdparty/lzma/CPP/Windows/Control/Dialog.h
index 8a39e996fa0..06be4bf938b 100644
--- a/3rdparty/lzma/CPP/Windows/Control/Dialog.h
+++ b/3rdparty/lzma/CPP/Windows/Control/Dialog.h
@@ -1,7 +1,7 @@
// Windows/Control/Dialog.h
-#ifndef __WINDOWS_CONTROL_DIALOG_H
-#define __WINDOWS_CONTROL_DIALOG_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_DIALOG_H
+#define ZIP7_INC_WINDOWS_CONTROL_DIALOG_H
#include "../Window.h"
@@ -10,65 +10,66 @@ namespace NControl {
class CDialog: public CWindow
{
+ // Z7_CLASS_NO_COPY(CDialog)
public:
- CDialog(HWND wnd = NULL): CWindow(wnd){};
- virtual ~CDialog() {};
+ CDialog(HWND wnd = NULL): CWindow(wnd) {}
+ virtual ~CDialog() {}
- HWND GetItem(int itemID) const
- { return GetDlgItem(_window, itemID); }
+ HWND GetItem(unsigned itemID) const
+ { return GetDlgItem(_window, (int)itemID); }
- bool EnableItem(int itemID, bool enable) const
+ bool EnableItem(unsigned itemID, bool enable) const
{ return BOOLToBool(::EnableWindow(GetItem(itemID), BoolToBOOL(enable))); }
- bool ShowItem(int itemID, int cmdShow) const
+ bool ShowItem(unsigned itemID, int cmdShow) const
{ return BOOLToBool(::ShowWindow(GetItem(itemID), cmdShow)); }
- bool ShowItem_Bool(int itemID, bool show) const
+ bool ShowItem_Bool(unsigned itemID, bool show) const
{ return ShowItem(itemID, show ? SW_SHOW: SW_HIDE); }
- bool HideItem(int itemID) const { return ShowItem(itemID, SW_HIDE); }
+ bool HideItem(unsigned itemID) const { return ShowItem(itemID, SW_HIDE); }
- bool SetItemText(int itemID, LPCTSTR s)
- { return BOOLToBool(SetDlgItemText(_window, itemID, s)); }
+ bool SetItemText(unsigned itemID, LPCTSTR s)
+ { return BOOLToBool(SetDlgItemText(_window, (int)itemID, s)); }
- bool SetItemTextA(int itemID, LPCSTR s)
- { return BOOLToBool(SetDlgItemTextA(_window, itemID, s)); }
+ bool SetItemTextA(unsigned itemID, LPCSTR s)
+ { return BOOLToBool(SetDlgItemTextA(_window, (int)itemID, s)); }
- bool SetItemText_Empty(int itemID)
+ bool SetItemText_Empty(unsigned itemID)
{ return SetItemText(itemID, TEXT("")); }
#ifndef _UNICODE
- bool SetItemText(int itemID, LPCWSTR s)
+ bool SetItemText(unsigned itemID, LPCWSTR s)
{
CWindow window(GetItem(itemID));
return window.SetText(s);
}
#endif
- UINT GetItemText(int itemID, LPTSTR string, int maxCount)
- { return GetDlgItemText(_window, itemID, string, maxCount); }
+ UINT GetItemText(unsigned itemID, LPTSTR string, unsigned maxCount)
+ { return GetDlgItemText(_window, (int)itemID, string, (int)maxCount); }
#ifndef _UNICODE
/*
- bool GetItemText(int itemID, LPWSTR string, int maxCount)
+ bool GetItemText(unsigned itemID, LPWSTR string, int maxCount)
{
- CWindow window(GetItem(itemID));
+ CWindow window(GetItem(unsigned));
return window.GetText(string, maxCount);
}
*/
#endif
- bool GetItemText(int itemID, UString &s)
+ bool GetItemText(unsigned itemID, UString &s)
{
CWindow window(GetItem(itemID));
return window.GetText(s);
}
- bool SetItemInt(int itemID, UINT value, bool isSigned)
- { return BOOLToBool(SetDlgItemInt(_window, itemID, value, BoolToBOOL(isSigned))); }
- bool GetItemInt(int itemID, bool isSigned, UINT &value)
+ bool SetItemInt(unsigned itemID, UINT value, bool isSigned)
+ { return BOOLToBool(SetDlgItemInt(_window, (int)itemID, value, BoolToBOOL(isSigned))); }
+ bool GetItemInt(unsigned itemID, bool isSigned, UINT &value)
{
BOOL result;
- value = GetDlgItemInt(_window, itemID, &result, BoolToBOOL(isSigned));
+ value = GetDlgItemInt(_window, (int)itemID, &result, BoolToBOOL(isSigned));
return BOOLToBool(result);
}
@@ -80,7 +81,7 @@ public:
LRESULT SendMsg_NextDlgCtl(WPARAM wParam, LPARAM lParam)
{ return SendMsg(WM_NEXTDLGCTL, wParam, lParam); }
LRESULT SendMsg_NextDlgCtl_HWND(HWND hwnd) { return SendMsg_NextDlgCtl((WPARAM)hwnd, TRUE); }
- LRESULT SendMsg_NextDlgCtl_CtlId(int id) { return SendMsg_NextDlgCtl_HWND(GetItem(id)); }
+ LRESULT SendMsg_NextDlgCtl_CtlId(unsigned id) { return SendMsg_NextDlgCtl_HWND(GetItem(id)); }
LRESULT SendMsg_NextDlgCtl_Next() { return SendMsg_NextDlgCtl(0, FALSE); }
LRESULT SendMsg_NextDlgCtl_Prev() { return SendMsg_NextDlgCtl(1, FALSE); }
@@ -90,26 +91,27 @@ public:
bool IsMessage(LPMSG message)
{ return BOOLToBool(IsDialogMessage(_window, message)); }
- LRESULT SendItemMessage(int itemID, UINT message, WPARAM wParam, LPARAM lParam)
- { return SendDlgItemMessage(_window, itemID, message, wParam, lParam); }
+ LRESULT SendItemMessage(unsigned itemID, UINT message, WPARAM wParam, LPARAM lParam)
+ { return SendDlgItemMessage(_window, (int)itemID, message, wParam, lParam); }
- bool CheckButton(int buttonID, UINT checkState)
- { return BOOLToBool(CheckDlgButton(_window, buttonID, checkState)); }
- bool CheckButton(int buttonID, bool checkState)
+ bool CheckButton(unsigned buttonID, UINT checkState)
+ { return BOOLToBool(CheckDlgButton(_window, (int)buttonID, checkState)); }
+ bool CheckButton(unsigned buttonID, bool checkState)
{ return CheckButton(buttonID, UINT(checkState ? BST_CHECKED : BST_UNCHECKED)); }
- UINT IsButtonChecked(int buttonID) const
- { return IsDlgButtonChecked(_window, buttonID); }
- bool IsButtonCheckedBool(int buttonID) const
- { return (IsButtonChecked(buttonID) == BST_CHECKED); }
+ UINT IsButtonChecked_BST(unsigned buttonID) const
+ { return IsDlgButtonChecked(_window, (int)buttonID); }
+ bool IsButtonCheckedBool(unsigned buttonID) const
+ { return (IsButtonChecked_BST(buttonID) == BST_CHECKED); }
- bool CheckRadioButton(int firstButtonID, int lastButtonID, int checkButtonID)
- { return BOOLToBool(::CheckRadioButton(_window, firstButtonID, lastButtonID, checkButtonID)); }
+ bool CheckRadioButton(unsigned firstButtonID, unsigned lastButtonID, unsigned checkButtonID)
+ { return BOOLToBool(::CheckRadioButton(_window,
+ (int)firstButtonID, (int)lastButtonID, (int)checkButtonID)); }
virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
virtual bool OnInit() { return true; }
- virtual bool OnCommand(WPARAM wParam, LPARAM lParam);
- virtual bool OnCommand(int code, int itemID, LPARAM lParam);
+ // virtual bool OnCommand2(WPARAM wParam, LPARAM lParam);
+ virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam);
virtual bool OnSize(WPARAM /* wParam */, int /* xSize */, int /* ySize */) { return false; }
virtual bool OnDestroy() { return false; }
@@ -120,11 +122,11 @@ public:
virtual void OnHelp(LPHELPINFO) { OnHelp(); }
#endif
*/
- virtual void OnHelp() {};
+ virtual void OnHelp() {}
- virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
- virtual void OnOK() {};
- virtual void OnCancel() {};
+ virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND);
+ virtual void OnOK() {}
+ virtual void OnCancel() {}
virtual void OnClose() {}
virtual bool OnNotify(UINT /* controlID */, LPNMHDR /* lParam */) { return false; }
virtual bool OnTimer(WPARAM /* timerID */, LPARAM /* callback */) { return false; }
@@ -136,9 +138,11 @@ public:
bool GetMargins(int margin, int &x, int &y);
int Units_To_Pixels_X(int units);
- bool GetItemSizes(int id, int &x, int &y);
- void GetClientRectOfItem(int id, RECT &rect);
- bool MoveItem(int id, int x, int y, int width, int height, bool repaint = true);
+ bool GetItemSizes(unsigned id, int &x, int &y);
+ void GetClientRectOfItem(unsigned id, RECT &rect);
+ bool MoveItem(unsigned id, int x, int y, int width, int height, bool repaint = true);
+ bool MoveItem_RECT(unsigned id, const RECT &r, bool repaint = true)
+ { return MoveItem(id, r.left, r.top, RECT_SIZE_X(r), RECT_SIZE_Y(r), repaint); }
void NormalizeSize(bool fullNormalize = false);
void NormalizePosition();
@@ -152,9 +156,9 @@ public:
#ifndef _UNICODE
bool Create(LPCWSTR templateName, HWND parentWindow);
#endif
- virtual void OnOK() { Destroy(); }
- virtual void OnCancel() { Destroy(); }
- virtual void OnClose() { Destroy(); }
+ virtual void OnOK() Z7_override { Destroy(); }
+ virtual void OnCancel() Z7_override { Destroy(); }
+ virtual void OnClose() Z7_override { Destroy(); }
};
class CModalDialog: public CDialog
@@ -167,18 +171,18 @@ public:
#endif
bool End(INT_PTR result) { return BOOLToBool(::EndDialog(_window, result)); }
- virtual void OnOK() { End(IDOK); }
- virtual void OnCancel() { End(IDCANCEL); }
- virtual void OnClose() { End(IDCLOSE); }
+ virtual void OnOK() Z7_override { End(IDOK); }
+ virtual void OnCancel() Z7_override { End(IDCANCEL); }
+ virtual void OnClose() Z7_override { End(IDCLOSE); }
};
class CDialogChildControl: public NWindows::CWindow
{
- int m_ID;
+ // unsigned m_ID;
public:
- void Init(const NWindows::NControl::CDialog &parentDialog, int id)
+ void Init(const NWindows::NControl::CDialog &parentDialog, unsigned id)
{
- m_ID = id;
+ // m_ID = id;
Attach(parentDialog.GetItem(id));
}
};
diff --git a/3rdparty/lzma/CPP/Windows/Control/Edit.h b/3rdparty/lzma/CPP/Windows/Control/Edit.h
index 51a22c53740..963470d78bc 100644
--- a/3rdparty/lzma/CPP/Windows/Control/Edit.h
+++ b/3rdparty/lzma/CPP/Windows/Control/Edit.h
@@ -1,7 +1,7 @@
// Windows/Control/Edit.h
-#ifndef __WINDOWS_CONTROL_EDIT_H
-#define __WINDOWS_CONTROL_EDIT_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_EDIT_H
+#define ZIP7_INC_WINDOWS_CONTROL_EDIT_H
#include "../Window.h"
diff --git a/3rdparty/lzma/CPP/Windows/Control/ImageList.h b/3rdparty/lzma/CPP/Windows/Control/ImageList.h
index 19feb117d66..688f1777c1c 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ImageList.h
+++ b/3rdparty/lzma/CPP/Windows/Control/ImageList.h
@@ -1,7 +1,7 @@
// Windows/Control/ImageList.h
-#ifndef __WINDOWS_CONTROL_IMAGE_LIST_H
-#define __WINDOWS_CONTROL_IMAGE_LIST_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_IMAGE_LIST_H
+#define ZIP7_INC_WINDOWS_CONTROL_IMAGE_LIST_H
#include <CommCtrl.h>
@@ -56,7 +56,7 @@ public:
bool GetImageInfo(int index, IMAGEINFO* imageInfo) const
{ return BOOLToBool(ImageList_GetImageInfo(m_Object, index, imageInfo)); }
- int Add(HBITMAP hbmImage, HBITMAP hbmMask = 0)
+ int Add(HBITMAP hbmImage, HBITMAP hbmMask = NULL)
{ return ImageList_Add(m_Object, hbmImage, hbmMask); }
int AddMasked(HBITMAP hbmImage, COLORREF mask)
{ return ImageList_AddMasked(m_Object, hbmImage, mask); }
diff --git a/3rdparty/lzma/CPP/Windows/Control/ListView.cpp b/3rdparty/lzma/CPP/Windows/Control/ListView.cpp
index 16cfd396ede..3e8786a1d95 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ListView.cpp
+++ b/3rdparty/lzma/CPP/Windows/Control/ListView.cpp
@@ -20,78 +20,85 @@ bool CListView::CreateEx(DWORD exStyle, DWORD style,
height, parentWindow, idOrHMenu, instance, createParam);
}
-bool CListView::GetItemParam(int index, LPARAM &param) const
+/* note: LVITEM and LVCOLUMN structures contain optional fields
+ depending from preprocessor macros:
+ #if (_WIN32_IE >= 0x0300)
+ #if (_WIN32_WINNT >= 0x0501)
+ #if (_WIN32_WINNT >= 0x0600)
+*/
+
+bool CListView::GetItemParam(unsigned index, LPARAM &param) const
{
LVITEM item;
- item.iItem = index;
+ item.iItem = (int)index;
item.iSubItem = 0;
item.mask = LVIF_PARAM;
- bool aResult = GetItem(&item);
+ const bool res = GetItem(&item);
param = item.lParam;
- return aResult;
+ return res;
}
-int CListView::InsertColumn(int columnIndex, LPCTSTR text, int width)
+int CListView::InsertColumn(unsigned columnIndex, LPCTSTR text, int width)
{
LVCOLUMN ci;
ci.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
ci.pszText = (LPTSTR)(void *)text;
- ci.iSubItem = columnIndex;
+ ci.iSubItem = (int)columnIndex;
ci.cx = width;
return InsertColumn(columnIndex, &ci);
}
-int CListView::InsertItem(int index, LPCTSTR text)
+int CListView::InsertItem(unsigned index, LPCTSTR text)
{
LVITEM item;
item.mask = LVIF_TEXT | LVIF_PARAM;
- item.iItem = index;
- item.lParam = index;
+ item.iItem = (int)index;
+ item.lParam = (LPARAM)index;
item.pszText = (LPTSTR)(void *)text;
item.iSubItem = 0;
return InsertItem(&item);
}
-int CListView::SetSubItem(int index, int subIndex, LPCTSTR text)
+int CListView::SetSubItem(unsigned index, unsigned subIndex, LPCTSTR text)
{
LVITEM item;
item.mask = LVIF_TEXT;
- item.iItem = index;
+ item.iItem = (int)index;
item.pszText = (LPTSTR)(void *)text;
- item.iSubItem = subIndex;
+ item.iSubItem = (int)subIndex;
return SetItem(&item);
}
#ifndef _UNICODE
-int CListView::InsertColumn(int columnIndex, LPCWSTR text, int width)
+int CListView::InsertColumn(unsigned columnIndex, LPCWSTR text, int width)
{
LVCOLUMNW ci;
ci.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
ci.pszText = (LPWSTR)(void *)text;
- ci.iSubItem = columnIndex;
+ ci.iSubItem = (int)columnIndex;
ci.cx = width;
return InsertColumn(columnIndex, &ci);
}
-int CListView::InsertItem(int index, LPCWSTR text)
+int CListView::InsertItem(unsigned index, LPCWSTR text)
{
LVITEMW item;
item.mask = LVIF_TEXT | LVIF_PARAM;
- item.iItem = index;
- item.lParam = index;
+ item.iItem = (int)index;
+ item.lParam = (LPARAM)index;
item.pszText = (LPWSTR)(void *)text;
item.iSubItem = 0;
return InsertItem(&item);
}
-int CListView::SetSubItem(int index, int subIndex, LPCWSTR text)
+int CListView::SetSubItem(unsigned index, unsigned subIndex, LPCWSTR text)
{
LVITEMW item;
item.mask = LVIF_TEXT;
- item.iItem = index;
+ item.iItem = (int)index;
item.pszText = (LPWSTR)(void *)text;
- item.iSubItem = subIndex;
+ item.iSubItem = (int)subIndex;
return SetItem(&item);
}
diff --git a/3rdparty/lzma/CPP/Windows/Control/ListView.h b/3rdparty/lzma/CPP/Windows/Control/ListView.h
index a13b1041fd9..11a33a07d07 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ListView.h
+++ b/3rdparty/lzma/CPP/Windows/Control/ListView.h
@@ -1,7 +1,7 @@
// Windows/Control/ListView.h
-#ifndef __WINDOWS_CONTROL_LISTVIEW_H
-#define __WINDOWS_CONTROL_LISTVIEW_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_LISTVIEW_H
+#define ZIP7_INC_WINDOWS_CONTROL_LISTVIEW_H
#include "../../Common/MyWindows.h"
@@ -28,11 +28,11 @@ public:
}
bool DeleteAllItems() { return BOOLToBool(ListView_DeleteAllItems(_window)); }
- bool DeleteColumn(int columnIndex) { return BOOLToBool(ListView_DeleteColumn(_window, columnIndex)); }
+ bool DeleteColumn(unsigned columnIndex) { return BOOLToBool(ListView_DeleteColumn(_window, columnIndex)); }
- int InsertColumn(int columnIndex, const LVCOLUMN *columnInfo) { return ListView_InsertColumn(_window, columnIndex, columnInfo); }
- int InsertColumn(int columnIndex, LPCTSTR text, int width);
- bool SetColumnOrderArray(int count, const int *columns)
+ int InsertColumn(unsigned columnIndex, const LVCOLUMN *columnInfo) { return ListView_InsertColumn(_window, columnIndex, columnInfo); }
+ int InsertColumn(unsigned columnIndex, LPCTSTR text, int width);
+ bool SetColumnOrderArray(unsigned count, const int *columns)
{ return BOOLToBool(ListView_SetColumnOrderArray(_window, count, (int *)(void *)columns)); }
/*
@@ -46,43 +46,49 @@ public:
*/
int InsertItem(const LVITEM* item) { return ListView_InsertItem(_window, item); }
- int InsertItem(int index, LPCTSTR text);
+ int InsertItem(unsigned index, LPCTSTR text);
bool SetItem(const LVITEM* item) { return BOOLToBool(ListView_SetItem(_window, item)); }
- int SetSubItem(int index, int subIndex, LPCTSTR text);
+ int SetSubItem(unsigned index, unsigned subIndex, LPCTSTR text);
#ifndef _UNICODE
- int InsertColumn(int columnIndex, const LVCOLUMNW *columnInfo) { return (int)SendMsg(LVM_INSERTCOLUMNW, (WPARAM)columnIndex, (LPARAM)columnInfo); }
- int InsertColumn(int columnIndex, LPCWSTR text, int width);
+ int InsertColumn(unsigned columnIndex, const LVCOLUMNW *columnInfo) { return (int)SendMsg(LVM_INSERTCOLUMNW, (WPARAM)columnIndex, (LPARAM)columnInfo); }
+ int InsertColumn(unsigned columnIndex, LPCWSTR text, int width);
int InsertItem(const LV_ITEMW* item) { return (int)SendMsg(LVM_INSERTITEMW, 0, (LPARAM)item); }
- int InsertItem(int index, LPCWSTR text);
+ int InsertItem(unsigned index, LPCWSTR text);
bool SetItem(const LV_ITEMW* item) { return BOOLToBool((BOOL)SendMsg(LVM_SETITEMW, 0, (LPARAM)item)); }
- int SetSubItem(int index, int subIndex, LPCWSTR text);
+ int SetSubItem(unsigned index, unsigned subIndex, LPCWSTR text);
#endif
- bool DeleteItem(int itemIndex) { return BOOLToBool(ListView_DeleteItem(_window, itemIndex)); }
+ bool DeleteItem(unsigned itemIndex) { return BOOLToBool(ListView_DeleteItem(_window, itemIndex)); }
UINT GetSelectedCount() const { return ListView_GetSelectedCount(_window); }
int GetItemCount() const { return ListView_GetItemCount(_window); }
INT GetSelectionMark() const { return ListView_GetSelectionMark(_window); }
- void SetItemCount(int numItems) { ListView_SetItemCount(_window, numItems); }
- void SetItemCountEx(int numItems, DWORD flags) { ListView_SetItemCountEx(_window, numItems, flags); }
+ void SetItemCount(unsigned numItems) { ListView_SetItemCount(_window, numItems); }
+ void SetItemCountEx(unsigned numItems, DWORD flags) { ListView_SetItemCountEx(_window, numItems, flags); }
+ /* startIndex : The index of the item with which to begin the search,
+ or -1 to find the first item that matches the specified flags.
+ The specified item itself is excluded from the search. */
int GetNextItem(int startIndex, UINT flags) const { return ListView_GetNextItem(_window, startIndex, flags); }
int GetNextSelectedItem(int startIndex) const { return GetNextItem(startIndex, LVNI_SELECTED); }
int GetFocusedItem() const { return GetNextItem(-1, LVNI_FOCUSED); }
bool GetItem(LVITEM* item) const { return BOOLToBool(ListView_GetItem(_window, item)); }
- bool GetItemParam(int itemIndex, LPARAM &param) const;
- void GetItemText(int itemIndex, int subItemIndex, LPTSTR text, int textSizeMax) const
- { ListView_GetItemText(_window, itemIndex, subItemIndex, text, textSizeMax); }
+ bool GetItemParam(unsigned itemIndex, LPARAM &param) const;
+ /*
+ void GetItemText(unsigned itemIndex, unsigned subItemIndex, LPTSTR text, unsigned textSizeMax) const
+ { ListView_GetItemText(_window, itemIndex, subItemIndex, text, textSizeMax) }
+ */
bool SortItems(PFNLVCOMPARE compareFunction, LPARAM dataParam)
{ return BOOLToBool(ListView_SortItems(_window, compareFunction, dataParam)); }
- void SetItemState(int index, UINT state, UINT mask) { ListView_SetItemState(_window, index, state, mask); }
+ // If (index == -1), then the state change is applied to all items.
+ void SetItemState(int index, UINT state, UINT mask) { ListView_SetItemState(_window, index, state, mask) }
void SetItemState_Selected(int index, bool select) { SetItemState(index, select ? LVIS_SELECTED : 0, LVIS_SELECTED); }
void SetItemState_Selected(int index) { SetItemState(index, LVIS_SELECTED, LVIS_SELECTED); }
void SelectAll() { SetItemState_Selected(-1); }
@@ -90,7 +96,7 @@ public:
UINT GetItemState(int index, UINT mask) const { return ListView_GetItemState(_window, index, mask); }
bool IsItemSelected(int index) const { return GetItemState(index, LVIS_SELECTED) == LVIS_SELECTED; }
- bool GetColumn(int columnIndex, LVCOLUMN* columnInfo) const
+ bool GetColumn(unsigned columnIndex, LVCOLUMN* columnInfo) const
{ return BOOLToBool(ListView_GetColumn(_window, columnIndex, columnInfo)); }
HIMAGELIST SetImageList(HIMAGELIST imageList, int imageListType)
@@ -101,7 +107,7 @@ public:
void SetExtendedListViewStyle(DWORD exStyle) { ListView_SetExtendedListViewStyle(_window, exStyle); }
void SetExtendedListViewStyle(DWORD exMask, DWORD exStyle) { ListView_SetExtendedListViewStyleEx(_window, exMask, exStyle); }
- void SetCheckState(UINT index, bool checkState) { ListView_SetCheckState(_window, index, BoolToBOOL(checkState)); }
+ void SetCheckState(UINT index, bool checkState) { ListView_SetCheckState(_window, index, BoolToBOOL(checkState)) }
bool GetCheckState(UINT index) { return BOOLToBool(ListView_GetCheckState(_window, index)); }
bool EnsureVisible(int index, bool partialOK) { return BOOLToBool(ListView_EnsureVisible(_window, index, BoolToBOOL(partialOK))); }
@@ -129,7 +135,10 @@ public:
class CListView2: public CListView
{
WNDPROC _origWindowProc;
+ // ~CListView2() ZIP7_eq_delete;
public:
+ virtual ~CListView2() {}
+ CListView2() {}
void SetWindowProc();
virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
};
diff --git a/3rdparty/lzma/CPP/Windows/Control/ProgressBar.h b/3rdparty/lzma/CPP/Windows/Control/ProgressBar.h
index 03743067448..2256aa9e912 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ProgressBar.h
+++ b/3rdparty/lzma/CPP/Windows/Control/ProgressBar.h
@@ -1,7 +1,7 @@
// Windows/Control/ProgressBar.h
-#ifndef __WINDOWS_CONTROL_PROGRESSBAR_H
-#define __WINDOWS_CONTROL_PROGRESSBAR_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_PROGRESSBAR_H
+#define ZIP7_INC_WINDOWS_CONTROL_PROGRESSBAR_H
#include "../../Common/MyWindows.h"
@@ -15,18 +15,18 @@ namespace NControl {
class CProgressBar: public CWindow
{
public:
- LRESULT SetPos(int pos) { return SendMsg(PBM_SETPOS, pos, 0); }
- LRESULT DeltaPos(int increment) { return SendMsg(PBM_DELTAPOS, increment, 0); }
- UINT GetPos() { return (UINT)SendMsg(PBM_GETPOS, 0, 0); }
- LRESULT SetRange(unsigned short minValue, unsigned short maxValue) { return SendMsg(PBM_SETRANGE, 0, MAKELPARAM(minValue, maxValue)); }
- DWORD SetRange32(int minValue, int maxValue) { return (DWORD)SendMsg(PBM_SETRANGE32, minValue, maxValue); }
- int SetStep(int step) { return (int)SendMsg(PBM_SETSTEP, step, 0); }
- LRESULT StepIt() { return SendMsg(PBM_STEPIT, 0, 0); }
- INT GetRange(bool minValue, PPBRANGE range) { return (INT)SendMsg(PBM_GETRANGE, BoolToBOOL(minValue), (LPARAM)range); }
+ LRESULT SetPos(int pos) { return SendMsg(PBM_SETPOS, (unsigned)pos, 0); }
+ // LRESULT DeltaPos(int increment) { return SendMsg(PBM_DELTAPOS, increment, 0); }
+ // UINT GetPos() { return (UINT)SendMsg(PBM_GETPOS, 0, 0); }
+ // LRESULT SetRange(unsigned short minValue, unsigned short maxValue) { return SendMsg(PBM_SETRANGE, 0, MAKELPARAM(minValue, maxValue)); }
+ DWORD SetRange32(int minValue, int maxValue) { return (DWORD)SendMsg(PBM_SETRANGE32, (unsigned)minValue, (LPARAM)(unsigned)maxValue); }
+ // int SetStep(int step) { return (int)SendMsg(PBM_SETSTEP, step, 0); }
+ // LRESULT StepIt() { return SendMsg(PBM_STEPIT, 0, 0); }
+ // INT GetRange(bool minValue, PPBRANGE range) { return (INT)SendMsg(PBM_GETRANGE, BoolToBOOL(minValue), (LPARAM)range); }
#ifndef UNDER_CE
- COLORREF SetBarColor(COLORREF color) { return (COLORREF)SendMsg(PBM_SETBARCOLOR, 0, color); }
- COLORREF SetBackgroundColor(COLORREF color) { return (COLORREF)SendMsg(PBM_SETBKCOLOR, 0, color); }
+ COLORREF SetBarColor(COLORREF color) { return (COLORREF)SendMsg(PBM_SETBARCOLOR, 0, (LPARAM)color); }
+ COLORREF SetBackgroundColor(COLORREF color) { return (COLORREF)SendMsg(PBM_SETBKCOLOR, 0, (LPARAM)color); }
#endif
};
diff --git a/3rdparty/lzma/CPP/Windows/Control/PropertyPage.cpp b/3rdparty/lzma/CPP/Windows/Control/PropertyPage.cpp
index ce8696d4018..f8effe607bb 100644
--- a/3rdparty/lzma/CPP/Windows/Control/PropertyPage.cpp
+++ b/3rdparty/lzma/CPP/Windows/Control/PropertyPage.cpp
@@ -16,7 +16,13 @@ extern bool g_IsNT;
namespace NWindows {
namespace NControl {
-static INT_PTR APIENTRY MyProperyPageProcedure(HWND dialogHWND, UINT message, WPARAM wParam, LPARAM lParam)
+static
+#ifdef Z7_OLD_WIN_SDK
+ BOOL
+#else
+ INT_PTR
+#endif
+APIENTRY MyProperyPageProcedure(HWND dialogHWND, UINT message, WPARAM wParam, LPARAM lParam)
{
CWindow tempDialog(dialogHWND);
if (message == WM_INITDIALOG)
@@ -34,75 +40,91 @@ bool CPropertyPage::OnNotify(UINT /* controlID */, LPNMHDR lParam)
{
switch (lParam->code)
{
- case PSN_APPLY: SetMsgResult(OnApply(LPPSHNOTIFY(lParam))); break;
- case PSN_KILLACTIVE: SetMsgResult(BoolToBOOL(OnKillActive(LPPSHNOTIFY(lParam)))); break;
- case PSN_SETACTIVE: SetMsgResult(OnSetActive(LPPSHNOTIFY(lParam))); break;
- case PSN_RESET: OnReset(LPPSHNOTIFY(lParam)); break;
- case PSN_HELP: OnNotifyHelp(LPPSHNOTIFY(lParam)); break;
+ case PSN_APPLY: SetMsgResult(OnApply2(LPPSHNOTIFY(lParam))); break;
+ case PSN_KILLACTIVE: SetMsgResult(BoolToBOOL(OnKillActive2(LPPSHNOTIFY(lParam)))); break;
+ case PSN_SETACTIVE: SetMsgResult(OnSetActive2(LPPSHNOTIFY(lParam))); break;
+ case PSN_RESET: OnReset2(LPPSHNOTIFY(lParam)); break;
+ case PSN_HELP: OnNotifyHelp2(LPPSHNOTIFY(lParam)); break;
default: return false;
}
return true;
}
+/*
+PROPSHEETPAGE fields depend from
+#if (_WIN32_WINNT >= 0x0600)
+#elif (_WIN32_WINNT >= 0x0501)
+#elif (_WIN32_IE >= 0x0400)
+PROPSHEETHEADER fields depend from
+#if (_WIN32_IE >= 0x0400)
+*/
+#if defined(PROPSHEETPAGEA_V1_SIZE) && !defined(Z7_OLD_WIN_SDK)
+#ifndef _UNICODE
+#define my_compatib_PROPSHEETPAGEA PROPSHEETPAGEA_V1
+#endif
+#define my_compatib_PROPSHEETPAGEW PROPSHEETPAGEW_V1
+#else
+// for old mingw:
+#ifndef _UNICODE
+#define my_compatib_PROPSHEETPAGEA PROPSHEETPAGEA
+#endif
+#define my_compatib_PROPSHEETPAGEW PROPSHEETPAGEW
+#endif
+
INT_PTR MyPropertySheet(const CObjectVector<CPageInfo> &pagesInfo, HWND hwndParent, const UString &title)
{
- #ifndef _UNICODE
- AStringVector titles;
- #endif
- #ifndef _UNICODE
- CRecordVector<PROPSHEETPAGEA> pagesA;
- #endif
- CRecordVector<PROPSHEETPAGEW> pagesW;
-
unsigned i;
#ifndef _UNICODE
+ AStringVector titles;
for (i = 0; i < pagesInfo.Size(); i++)
titles.Add(GetSystemString(pagesInfo[i].Title));
+ CRecordVector<my_compatib_PROPSHEETPAGEA> pagesA;
#endif
+ CRecordVector<my_compatib_PROPSHEETPAGEW> pagesW;
for (i = 0; i < pagesInfo.Size(); i++)
{
const CPageInfo &pageInfo = pagesInfo[i];
#ifndef _UNICODE
{
- PROPSHEETPAGE page;
+ my_compatib_PROPSHEETPAGEA page;
+ memset(&page, 0, sizeof(page));
page.dwSize = sizeof(page);
page.dwFlags = PSP_HASHELP;
page.hInstance = g_hInstance;
- page.pszTemplate = MAKEINTRESOURCE(pageInfo.ID);
- page.pszIcon = NULL;
+ page.pszTemplate = MAKEINTRESOURCEA(pageInfo.ID);
+ // page.pszIcon = NULL;
page.pfnDlgProc = NWindows::NControl::MyProperyPageProcedure;
- if (titles[i].IsEmpty())
- page.pszTitle = NULL;
- else
+ if (!titles[i].IsEmpty())
{
- page.dwFlags |= PSP_USETITLE;
page.pszTitle = titles[i];
+ page.dwFlags |= PSP_USETITLE;
}
+ // else page.pszTitle = NULL;
page.lParam = (LPARAM)pageInfo.Page;
- page.pfnCallback = NULL;
+ // page.pfnCallback = NULL;
pagesA.Add(page);
}
#endif
{
- PROPSHEETPAGEW page;
+ my_compatib_PROPSHEETPAGEW page;
+ memset(&page, 0, sizeof(page));
page.dwSize = sizeof(page);
page.dwFlags = PSP_HASHELP;
page.hInstance = g_hInstance;
page.pszTemplate = MAKEINTRESOURCEW(pageInfo.ID);
- page.pszIcon = NULL;
+ // page.pszIcon = NULL;
page.pfnDlgProc = NWindows::NControl::MyProperyPageProcedure;
- if (pageInfo.Title.IsEmpty())
- page.pszTitle = NULL;
- else
+ if (!pageInfo.Title.IsEmpty())
{
- page.dwFlags |= PSP_USETITLE;
page.pszTitle = pageInfo.Title;
+ page.dwFlags |= PSP_USETITLE;
}
+ // else page.pszTitle = NULL;
page.lParam = (LPARAM)pageInfo.Page;
- page.pfnCallback = NULL;
+ // page.pfnCallback = NULL;
pagesW.Add(page);
}
}
@@ -110,16 +132,16 @@ INT_PTR MyPropertySheet(const CObjectVector<CPageInfo> &pagesInfo, HWND hwndPare
#ifndef _UNICODE
if (!g_IsNT)
{
- PROPSHEETHEADER sheet;
+ PROPSHEETHEADERA sheet;
sheet.dwSize = sizeof(sheet);
sheet.dwFlags = PSH_PROPSHEETPAGE;
sheet.hwndParent = hwndParent;
sheet.hInstance = g_hInstance;
AString titleA (GetSystemString(title));
sheet.pszCaption = titleA;
- sheet.nPages = pagesInfo.Size();
+ sheet.nPages = pagesA.Size();
sheet.nStartPage = 0;
- sheet.ppsp = &pagesA.Front();
+ sheet.ppsp = (LPCPROPSHEETPAGEA)(const void *)&pagesA.Front();
sheet.pfnCallback = NULL;
return ::PropertySheetA(&sheet);
}
@@ -132,9 +154,9 @@ INT_PTR MyPropertySheet(const CObjectVector<CPageInfo> &pagesInfo, HWND hwndPare
sheet.hwndParent = hwndParent;
sheet.hInstance = g_hInstance;
sheet.pszCaption = title;
- sheet.nPages = pagesInfo.Size();
+ sheet.nPages = pagesW.Size();
sheet.nStartPage = 0;
- sheet.ppsp = &pagesW.Front();
+ sheet.ppsp = (LPCPROPSHEETPAGEW)(const void *)&pagesW.Front();
sheet.pfnCallback = NULL;
return ::PropertySheetW(&sheet);
}
diff --git a/3rdparty/lzma/CPP/Windows/Control/PropertyPage.h b/3rdparty/lzma/CPP/Windows/Control/PropertyPage.h
index b68fd8fee24..264a5d29cac 100644
--- a/3rdparty/lzma/CPP/Windows/Control/PropertyPage.h
+++ b/3rdparty/lzma/CPP/Windows/Control/PropertyPage.h
@@ -1,11 +1,11 @@
// Windows/Control/PropertyPage.h
-#ifndef __WINDOWS_CONTROL_PROPERTYPAGE_H
-#define __WINDOWS_CONTROL_PROPERTYPAGE_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_PROPERTYPAGE_H
+#define ZIP7_INC_WINDOWS_CONTROL_PROPERTYPAGE_H
#include "../../Common/MyWindows.h"
-#include <PrSht.h>
+#include <prsht.h>
#include "Dialog.h"
@@ -17,23 +17,23 @@ INT_PTR APIENTRY ProperyPageProcedure(HWND dialogHWND, UINT message, WPARAM wPar
class CPropertyPage: public CDialog
{
public:
- CPropertyPage(HWND window = NULL): CDialog(window){};
+ CPropertyPage(HWND window = NULL): CDialog(window) {}
void Changed() { PropSheet_Changed(GetParent(), (HWND)*this); }
void UnChanged() { PropSheet_UnChanged(GetParent(), (HWND)*this); }
- virtual bool OnNotify(UINT controlID, LPNMHDR lParam);
+ virtual bool OnNotify(UINT controlID, LPNMHDR lParam) Z7_override;
virtual bool OnKillActive() { return false; } // false = OK
- virtual bool OnKillActive(const PSHNOTIFY *) { return OnKillActive(); }
+ virtual bool OnKillActive2(const PSHNOTIFY *) { return OnKillActive(); }
virtual LONG OnSetActive() { return false; } // false = OK
- virtual LONG OnSetActive(const PSHNOTIFY *) { return OnSetActive(); }
+ virtual LONG OnSetActive2(const PSHNOTIFY *) { return OnSetActive(); }
virtual LONG OnApply() { return PSNRET_NOERROR; }
- virtual LONG OnApply(const PSHNOTIFY *) { return OnApply(); }
+ virtual LONG OnApply2(const PSHNOTIFY *) { return OnApply(); }
virtual void OnNotifyHelp() {}
- virtual void OnNotifyHelp(const PSHNOTIFY *) { OnNotifyHelp(); }
+ virtual void OnNotifyHelp2(const PSHNOTIFY *) { OnNotifyHelp(); }
virtual void OnReset() {}
- virtual void OnReset(const PSHNOTIFY *) { OnReset(); }
+ virtual void OnReset2(const PSHNOTIFY *) { OnReset(); }
};
struct CPageInfo
diff --git a/3rdparty/lzma/CPP/Windows/Control/ReBar.h b/3rdparty/lzma/CPP/Windows/Control/ReBar.h
index c2d58dbe80d..b56f018cb05 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ReBar.h
+++ b/3rdparty/lzma/CPP/Windows/Control/ReBar.h
@@ -1,7 +1,7 @@
// Windows/Control/ReBar.h
-#ifndef __WINDOWS_CONTROL_REBAR_H
-#define __WINDOWS_CONTROL_REBAR_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_REBAR_H
+#define ZIP7_INC_WINDOWS_CONTROL_REBAR_H
#include "../Window.h"
@@ -14,7 +14,7 @@ public:
bool SetBarInfo(LPREBARINFO barInfo)
{ return LRESULTToBool(SendMsg(RB_SETBARINFO, 0, (LPARAM)barInfo)); }
bool InsertBand(int index, LPREBARBANDINFO bandInfo)
- { return LRESULTToBool(SendMsg(RB_INSERTBAND, index, (LPARAM)bandInfo)); }
+ { return LRESULTToBool(SendMsg(RB_INSERTBAND, MY_int_TO_WPARAM(index), (LPARAM)bandInfo)); }
bool SetBandInfo(unsigned index, LPREBARBANDINFO bandInfo)
{ return LRESULTToBool(SendMsg(RB_SETBANDINFO, index, (LPARAM)bandInfo)); }
void MaximizeBand(unsigned index, bool ideal)
diff --git a/3rdparty/lzma/CPP/Windows/Control/Static.h b/3rdparty/lzma/CPP/Windows/Control/Static.h
index 5523b2e633e..ceeedf96695 100644
--- a/3rdparty/lzma/CPP/Windows/Control/Static.h
+++ b/3rdparty/lzma/CPP/Windows/Control/Static.h
@@ -1,7 +1,7 @@
// Windows/Control/Static.h
-#ifndef __WINDOWS_CONTROL_STATIC_H
-#define __WINDOWS_CONTROL_STATIC_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_STATIC_H
+#define ZIP7_INC_WINDOWS_CONTROL_STATIC_H
#include "../Window.h"
diff --git a/3rdparty/lzma/CPP/Windows/Control/StatusBar.h b/3rdparty/lzma/CPP/Windows/Control/StatusBar.h
index 988b84700b4..38aca478821 100644
--- a/3rdparty/lzma/CPP/Windows/Control/StatusBar.h
+++ b/3rdparty/lzma/CPP/Windows/Control/StatusBar.h
@@ -1,7 +1,7 @@
// Windows/Control/StatusBar.h
-#ifndef __WINDOWS_CONTROL_STATUSBAR_H
-#define __WINDOWS_CONTROL_STATUSBAR_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_STATUSBAR_H
+#define ZIP7_INC_WINDOWS_CONTROL_STATUSBAR_H
#include "../Window.h"
@@ -12,7 +12,7 @@ class CStatusBar: public NWindows::CWindow
{
public:
bool Create(LONG style, LPCTSTR text, HWND hwndParent, UINT id)
- { return (_window = ::CreateStatusWindow(style, text, hwndParent, id)) != 0; }
+ { return (_window = ::CreateStatusWindow(style, text, hwndParent, id)) != NULL; }
bool SetText(LPCTSTR text)
{ return CWindow::SetText(text); }
bool SetText(unsigned index, LPCTSTR text, UINT type)
@@ -22,7 +22,7 @@ public:
#ifndef _UNICODE
bool Create(LONG style, LPCWSTR text, HWND hwndParent, UINT id)
- { return (_window = ::CreateStatusWindowW(style, text, hwndParent, id)) != 0; }
+ { return (_window = ::CreateStatusWindowW(style, text, hwndParent, id)) != NULL; }
bool SetText(LPCWSTR text)
{ return CWindow::SetText(text); }
bool SetText(unsigned index, LPCWSTR text, UINT type)
@@ -34,7 +34,7 @@ public:
bool SetParts(unsigned numParts, const int *edgePostions)
{ return LRESULTToBool(SendMsg(SB_SETPARTS, numParts, (LPARAM)edgePostions)); }
void Simple(bool simple)
- { SendMsg(SB_SIMPLE, BoolToBOOL(simple), 0); }
+ { SendMsg(SB_SIMPLE, (WPARAM)BoolToBOOL(simple), 0); }
};
}}
diff --git a/3rdparty/lzma/CPP/Windows/Control/StdAfx.h b/3rdparty/lzma/CPP/Windows/Control/StdAfx.h
index 1cbd7feaeec..80866550d1f 100644
--- a/3rdparty/lzma/CPP/Windows/Control/StdAfx.h
+++ b/3rdparty/lzma/CPP/Windows/Control/StdAfx.h
@@ -1,8 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../../Common/Common.h"
#endif
diff --git a/3rdparty/lzma/CPP/Windows/Control/ToolBar.h b/3rdparty/lzma/CPP/Windows/Control/ToolBar.h
index 7bc93a24170..2bf20a592e3 100644
--- a/3rdparty/lzma/CPP/Windows/Control/ToolBar.h
+++ b/3rdparty/lzma/CPP/Windows/Control/ToolBar.h
@@ -1,7 +1,7 @@
// Windows/Control/ToolBar.h
-#ifndef __WINDOWS_CONTROL_TOOLBAR_H
-#define __WINDOWS_CONTROL_TOOLBAR_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_TOOLBAR_H
+#define ZIP7_INC_WINDOWS_CONTROL_TOOLBAR_H
#include "../Window.h"
@@ -18,7 +18,7 @@ public:
#ifdef UNDER_CE
{
// maybe it must be fixed for more than 1 buttons
- DWORD val = GetButtonSize();
+ const DWORD val = GetButtonSize();
size->cx = LOWORD(val);
size->cy = HIWORD(val);
return true;
diff --git a/3rdparty/lzma/CPP/Windows/Control/Trackbar.h b/3rdparty/lzma/CPP/Windows/Control/Trackbar.h
index 313e0c851b6..18d1b29186a 100644
--- a/3rdparty/lzma/CPP/Windows/Control/Trackbar.h
+++ b/3rdparty/lzma/CPP/Windows/Control/Trackbar.h
@@ -1,7 +1,7 @@
// Windows/Control/Trackbar.h
-#ifndef __WINDOWS_CONTROL_TRACKBAR_H
-#define __WINDOWS_CONTROL_TRACKBAR_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_TRACKBAR_H
+#define ZIP7_INC_WINDOWS_CONTROL_TRACKBAR_H
#include "../Window.h"
diff --git a/3rdparty/lzma/CPP/Windows/Control/Window2.cpp b/3rdparty/lzma/CPP/Windows/Control/Window2.cpp
index 994d96e080a..8fe908e0813 100644
--- a/3rdparty/lzma/CPP/Windows/Control/Window2.cpp
+++ b/3rdparty/lzma/CPP/Windows/Control/Window2.cpp
@@ -32,9 +32,9 @@ static LRESULT CALLBACK WindowProcedure(HWND aHWND, UINT message, WPARAM wParam,
if (message == MY_START_WM_CREATE)
tempWindow.SetUserDataLongPtr((LONG_PTR)(((LPCREATESTRUCT)lParam)->lpCreateParams));
CWindow2 *window = (CWindow2 *)(tempWindow.GetUserDataLongPtr());
- if (window != NULL && message == MY_START_WM_CREATE)
+ if (window && message == MY_START_WM_CREATE)
window->Attach(aHWND);
- if (window == 0)
+ if (!window)
{
#ifndef _UNICODE
if (g_IsNT)
@@ -140,7 +140,7 @@ LRESULT CWindow2::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
return -1;
break;
case WM_COMMAND:
- if (OnCommand(wParam, lParam, result))
+ if (OnCommand(HIWORD(wParam), LOWORD(wParam), lParam, result))
return result;
break;
case WM_NOTIFY:
@@ -160,12 +160,14 @@ LRESULT CWindow2::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
return DefProc(message, wParam, lParam);
}
-bool CWindow2::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT &result)
+/*
+bool CWindow2::OnCommand2(WPARAM wParam, LPARAM lParam, LRESULT &result)
{
return OnCommand(HIWORD(wParam), LOWORD(wParam), lParam, result);
}
+*/
-bool CWindow2::OnCommand(int /* code */, int /* itemID */, LPARAM /* lParam */, LRESULT & /* result */)
+bool CWindow2::OnCommand(unsigned /* code */, unsigned /* itemID */, LPARAM /* lParam */, LRESULT & /* result */)
{
return false;
// return DefProc(message, wParam, lParam);
@@ -176,7 +178,7 @@ bool CWindow2::OnCommand(int /* code */, int /* itemID */, LPARAM /* lParam */,
}
/*
-bool CDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+bool CDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
switch (buttonID)
{
diff --git a/3rdparty/lzma/CPP/Windows/Control/Window2.h b/3rdparty/lzma/CPP/Windows/Control/Window2.h
index 7ac580cb071..ebb59793567 100644
--- a/3rdparty/lzma/CPP/Windows/Control/Window2.h
+++ b/3rdparty/lzma/CPP/Windows/Control/Window2.h
@@ -1,7 +1,7 @@
// Windows/Control/Window2.h
-#ifndef __WINDOWS_CONTROL_WINDOW2_H
-#define __WINDOWS_CONTROL_WINDOW2_H
+#ifndef ZIP7_INC_WINDOWS_CONTROL_WINDOW2_H
+#define ZIP7_INC_WINDOWS_CONTROL_WINDOW2_H
#include "../Window.h"
@@ -10,10 +10,12 @@ namespace NControl {
class CWindow2: public CWindow
{
+ // Z7_CLASS_NO_COPY(CWindow2)
+
LRESULT DefProc(UINT message, WPARAM wParam, LPARAM lParam);
public:
- CWindow2(HWND newWindow = NULL): CWindow(newWindow){};
- virtual ~CWindow2() {};
+ CWindow2(HWND newWindow = NULL): CWindow(newWindow) {}
+ virtual ~CWindow2() {}
bool CreateEx(DWORD exStyle, LPCTSTR className, LPCTSTR windowName,
DWORD style, int x, int y, int width, int height,
@@ -28,8 +30,8 @@ public:
virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
virtual bool OnCreate(CREATESTRUCT * /* createStruct */) { return true; }
// virtual LRESULT OnCommand(WPARAM wParam, LPARAM lParam);
- virtual bool OnCommand(WPARAM wParam, LPARAM lParam, LRESULT &result);
- virtual bool OnCommand(int code, int itemID, LPARAM lParam, LRESULT &result);
+ // bool OnCommand2(WPARAM wParam, LPARAM lParam, LRESULT &result);
+ virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam, LRESULT &result);
virtual bool OnSize(WPARAM /* wParam */, int /* xSize */, int /* ySize */) { return false; }
virtual bool OnNotify(UINT /* controlID */, LPNMHDR /* lParam */, LRESULT & /* result */) { return false; }
virtual void OnDestroy() { PostQuitMessage(0); }
@@ -37,7 +39,7 @@ public:
/*
virtual LRESULT OnHelp(LPHELPINFO helpInfo) { OnHelp(); }
virtual LRESULT OnHelp() {};
- virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
+ virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND);
virtual void OnOK() {};
virtual void OnCancel() {};
*/
diff --git a/3rdparty/lzma/CPP/Windows/DLL.cpp b/3rdparty/lzma/CPP/Windows/DLL.cpp
index cf5d01a302c..b2499ecdc0e 100644
--- a/3rdparty/lzma/CPP/Windows/DLL.cpp
+++ b/3rdparty/lzma/CPP/Windows/DLL.cpp
@@ -17,11 +17,11 @@ namespace NDLL {
bool CLibrary::Free() throw()
{
- if (_module == 0)
+ if (_module == NULL)
return true;
if (!::FreeLibrary(_module))
return false;
- _module = 0;
+ _module = NULL;
return true;
}
@@ -90,7 +90,7 @@ bool MyGetModuleFileName(FString &path)
return false;
}
-#ifndef _SFX
+#ifndef Z7_SFX
FString GetModuleDirPrefix()
{
@@ -110,38 +110,35 @@ FString GetModuleDirPrefix()
}}
-#else
+#else // _WIN32
#include <dlfcn.h>
#include <stdlib.h>
+#include "../Common/Common.h"
+
+// FARPROC
+void *GetProcAddress(HMODULE module, LPCSTR procName)
+{
+ void *ptr = NULL;
+ if (module)
+ ptr = dlsym(module, procName);
+ return ptr;
+}
namespace NWindows {
namespace NDLL {
bool CLibrary::Free() throw()
{
- if (_module == NULL)
+ if (!_module)
return true;
- int ret = dlclose(_module);
+ const int ret = dlclose(_module);
if (ret != 0)
return false;
_module = NULL;
return true;
}
-static
-// FARPROC
-void *
-local_GetProcAddress(HMODULE module, LPCSTR procName)
-{
- void *ptr = NULL;
- if (module)
- {
- ptr = dlsym(module, procName);
- }
- return ptr;
-}
-
bool CLibrary::Load(CFSTR path) throw()
{
if (!Free())
@@ -163,21 +160,11 @@ bool CLibrary::Load(CFSTR path) throw()
#endif
#endif
- void *handler = dlopen(path, options);
-
- if (handler)
- {
- // here we can transfer some settings to DLL
- }
- else
- {
- }
-
- _module = handler;
-
+ _module = dlopen(path, options);
return (_module != NULL);
}
+/*
// FARPROC
void * CLibrary::GetProc(LPCSTR procName) const
{
@@ -185,6 +172,7 @@ void * CLibrary::GetProc(LPCSTR procName) const
return local_GetProcAddress(_module, procName);
// return NULL;
}
+*/
}}
diff --git a/3rdparty/lzma/CPP/Windows/DLL.h b/3rdparty/lzma/CPP/Windows/DLL.h
index 0c093eeddb6..19a82b33b89 100644
--- a/3rdparty/lzma/CPP/Windows/DLL.h
+++ b/3rdparty/lzma/CPP/Windows/DLL.h
@@ -1,20 +1,29 @@
// Windows/DLL.h
-#ifndef __WINDOWS_DLL_H
-#define __WINDOWS_DLL_H
+#ifndef ZIP7_INC_WINDOWS_DLL_H
+#define ZIP7_INC_WINDOWS_DLL_H
#include "../Common/MyString.h"
+#ifndef _WIN32
+typedef void * HMODULE;
+// typedef int (*FARPROC)();
+// typedef void *FARPROC;
+void *GetProcAddress(HMODULE module, LPCSTR procName);
+#endif
+
namespace NWindows {
namespace NDLL {
#ifdef _WIN32
+/*
#ifdef UNDER_CE
#define My_GetProcAddress(module, procName) (void *)::GetProcAddressA(module, procName)
#else
#define My_GetProcAddress(module, procName) (void *)::GetProcAddress(module, procName)
#endif
+*/
/* Win32: Don't call CLibrary::Free() and FreeLibrary() from another
FreeLibrary() code: detaching code in DLL entry-point or in
@@ -24,13 +33,25 @@ class CLibrary
{
HMODULE _module;
- // CLASS_NO_COPY(CLibrary);
+ // Z7_CLASS_NO_COPY(CLibrary);
+ // copy constructor is required here
public:
- CLibrary(): _module(NULL) {};
+ CLibrary(): _module(NULL) {}
~CLibrary() { Free(); }
- operator HMODULE() const { return _module; }
- HMODULE* operator&() { return &_module; }
+ CLibrary(const CLibrary &c): _module(NULL)
+ {
+ if (c._module)
+ {
+ // we need non const to reference from original item
+ // c._module = NULL;
+ throw 20230102;
+ }
+ }
+
+ HMODULE Get_HMODULE() const { return _module; }
+ // operator HMODULE() const { return _module; }
+ // HMODULE* operator&() { return &_module; }
bool IsLoaded() const { return (_module != NULL); }
void Attach(HMODULE m)
@@ -40,7 +61,7 @@ public:
}
HMODULE Detach()
{
- HMODULE m = _module;
+ const HMODULE m = _module;
_module = NULL;
return m;
}
@@ -49,28 +70,26 @@ public:
bool LoadEx(CFSTR path, DWORD flags = LOAD_LIBRARY_AS_DATAFILE) throw();
bool Load(CFSTR path) throw();
// FARPROC
- void *GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); }
+ // void *GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); }
};
#else
-typedef void * HMODULE;
-// typedef int (*FARPROC)();
-// typedef void *FARPROC;
-
class CLibrary
{
HMODULE _module;
- // CLASS_NO_COPY(CLibrary);
+ // Z7_CLASS_NO_COPY(CLibrary);
public:
- CLibrary(): _module(NULL) {};
+ CLibrary(): _module(NULL) {}
~CLibrary() { Free(); }
+ HMODULE Get_HMODULE() const { return _module; }
+
bool Free() throw();
bool Load(CFSTR path) throw();
// FARPROC
- void *GetProc(LPCSTR procName) const; // { return My_GetProcAddress(_module, procName); }
+ // void *GetProc(LPCSTR procName) const; // { return My_GetProcAddress(_module, procName); }
};
#endif
diff --git a/3rdparty/lzma/CPP/Windows/Defs.h b/3rdparty/lzma/CPP/Windows/Defs.h
index 1d96078dd60..8ab9cf5ea79 100644
--- a/3rdparty/lzma/CPP/Windows/Defs.h
+++ b/3rdparty/lzma/CPP/Windows/Defs.h
@@ -1,12 +1,11 @@
// Windows/Defs.h
-#ifndef __WINDOWS_DEFS_H
-#define __WINDOWS_DEFS_H
+#ifndef ZIP7_INC_WINDOWS_DEFS_H
+#define ZIP7_INC_WINDOWS_DEFS_H
#include "../Common/MyWindows.h"
#ifdef _WIN32
-inline bool LRESULTToBool(LRESULT v) { return (v != FALSE); }
inline BOOL BoolToBOOL(bool v) { return (v ? TRUE: FALSE); }
#endif
diff --git a/3rdparty/lzma/CPP/Windows/ErrorMsg.cpp b/3rdparty/lzma/CPP/Windows/ErrorMsg.cpp
index f6343a5cf3b..5acf3adb613 100644
--- a/3rdparty/lzma/CPP/Windows/ErrorMsg.cpp
+++ b/3rdparty/lzma/CPP/Windows/ErrorMsg.cpp
@@ -19,8 +19,8 @@ namespace NError {
static bool MyFormatMessage(DWORD errorCode, UString &message)
{
- #ifndef _SFX
- if ((HRESULT)errorCode == MY_HRES_ERROR__INTERNAL_ERROR)
+ #ifndef Z7_SFX
+ if ((HRESULT)errorCode == MY_HRES_ERROR_INTERNAL_ERROR)
{
message = "Internal Error: The failure in hardware (RAM or CPU), OS or program";
return true;
@@ -72,7 +72,7 @@ static bool MyFormatMessage(DWORD errorCode, UString &message)
case E_OUTOFMEMORY : s = "E_OUTOFMEMORY : Can't allocate required memory"; break;
case E_INVALIDARG : s = "E_INVALIDARG : One or more arguments are invalid"; break;
- // case MY__E_ERROR_NEGATIVE_SEEK : s = "MY__E_ERROR_NEGATIVE_SEEK"; break;
+ // case MY_E_ERROR_NEGATIVE_SEEK : s = "MY_E_ERROR_NEGATIVE_SEEK"; break;
default:
break;
}
@@ -81,7 +81,7 @@ static bool MyFormatMessage(DWORD errorCode, UString &message)
So we must transfer error codes before strerror() */
if (!s)
{
- if ((errorCode & 0xFFFF0000) == (UInt32)((MY__FACILITY__WRes << 16) | 0x80000000))
+ if ((errorCode & 0xFFFF0000) == (UInt32)((MY_FACILITY_WRes << 16) | 0x80000000))
errorCode &= 0xFFFF;
else if ((errorCode & ((UInt32)1 << 31)))
return false; // we will show hex error later for that case
diff --git a/3rdparty/lzma/CPP/Windows/ErrorMsg.h b/3rdparty/lzma/CPP/Windows/ErrorMsg.h
index 01204eb9567..6142b4ebe64 100644
--- a/3rdparty/lzma/CPP/Windows/ErrorMsg.h
+++ b/3rdparty/lzma/CPP/Windows/ErrorMsg.h
@@ -1,7 +1,7 @@
// Windows/ErrorMsg.h
-#ifndef __WINDOWS_ERROR_MSG_H
-#define __WINDOWS_ERROR_MSG_H
+#ifndef ZIP7_INC_WINDOWS_ERROR_MSG_H
+#define ZIP7_INC_WINDOWS_ERROR_MSG_H
#include "../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/Windows/FileDir.cpp b/3rdparty/lzma/CPP/Windows/FileDir.cpp
index cce2638587e..5b1f340b5c7 100644
--- a/3rdparty/lzma/CPP/Windows/FileDir.cpp
+++ b/3rdparty/lzma/CPP/Windows/FileDir.cpp
@@ -65,46 +65,55 @@ namespace NDir {
bool GetWindowsDir(FString &path)
{
- UINT needLength;
+ const unsigned kBufSize = MAX_PATH + 16;
+ UINT len;
#ifndef _UNICODE
if (!g_IsNT)
{
- TCHAR s[MAX_PATH + 2];
+ TCHAR s[kBufSize + 1];
s[0] = 0;
- needLength = ::GetWindowsDirectory(s, MAX_PATH + 1);
+ len = ::GetWindowsDirectory(s, kBufSize);
path = fas2fs(s);
}
else
#endif
{
- WCHAR s[MAX_PATH + 2];
+ WCHAR s[kBufSize + 1];
s[0] = 0;
- needLength = ::GetWindowsDirectoryW(s, MAX_PATH + 1);
+ len = ::GetWindowsDirectoryW(s, kBufSize);
path = us2fs(s);
}
- return (needLength > 0 && needLength <= MAX_PATH);
+ return (len != 0 && len < kBufSize);
}
+
+/*
+new DOCs for GetSystemDirectory:
+ returned path does not end with a backslash unless the
+ system directory is the root directory.
+*/
+
bool GetSystemDir(FString &path)
{
- UINT needLength;
+ const unsigned kBufSize = MAX_PATH + 16;
+ UINT len;
#ifndef _UNICODE
if (!g_IsNT)
{
- TCHAR s[MAX_PATH + 2];
+ TCHAR s[kBufSize + 1];
s[0] = 0;
- needLength = ::GetSystemDirectory(s, MAX_PATH + 1);
+ len = ::GetSystemDirectory(s, kBufSize);
path = fas2fs(s);
}
else
#endif
{
- WCHAR s[MAX_PATH + 2];
+ WCHAR s[kBufSize + 1];
s[0] = 0;
- needLength = ::GetSystemDirectoryW(s, MAX_PATH + 1);
+ len = ::GetSystemDirectoryW(s, kBufSize);
path = us2fs(s);
}
- return (needLength > 0 && needLength <= MAX_PATH);
+ return (len != 0 && len < kBufSize);
}
#endif // UNDER_CE
@@ -123,7 +132,7 @@ bool SetDirTime(CFSTR path, const CFiTime *cTime, const CFiTime *aTime, const CF
IF_USE_MAIN_PATH
hDir = ::CreateFileW(fs2us(path), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (hDir == INVALID_HANDLE_VALUE && USE_SUPER_PATH)
{
UString superPath;
@@ -158,7 +167,7 @@ bool SetFileAttrib(CFSTR path, DWORD attrib)
IF_USE_MAIN_PATH
if (::SetFileAttributesW(fs2us(path), attrib))
return true;
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (USE_SUPER_PATH)
{
UString superPath;
@@ -195,7 +204,7 @@ bool RemoveDir(CFSTR path)
IF_USE_MAIN_PATH
if (::RemoveDirectoryW(fs2us(path)))
return true;
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (USE_SUPER_PATH)
{
UString superPath;
@@ -224,7 +233,7 @@ bool MyMoveFile(CFSTR oldFile, CFSTR newFile)
if (::MoveFileW(fs2us(oldFile), fs2us(newFile)))
return true;
}
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (USE_SUPER_PATH_2)
{
UString d1, d2;
@@ -261,8 +270,11 @@ bool MyCreateHardLink(CFSTR newFileName, CFSTR existFileName)
else
#endif
{
- Func_CreateHardLinkW my_CreateHardLinkW = (Func_CreateHardLinkW)
- (void *)::GetProcAddress(::GetModuleHandleW(L"kernel32.dll"), "CreateHardLinkW");
+ const
+ Func_CreateHardLinkW
+ my_CreateHardLinkW = Z7_GET_PROC_ADDRESS(
+ Func_CreateHardLinkW, ::GetModuleHandleW(L"kernel32.dll"),
+ "CreateHardLinkW");
if (!my_CreateHardLinkW)
return false;
IF_USE_MAIN_PATH_2(newFileName, existFileName)
@@ -270,7 +282,7 @@ bool MyCreateHardLink(CFSTR newFileName, CFSTR existFileName)
if (my_CreateHardLinkW(fs2us(newFileName), fs2us(existFileName), NULL))
return true;
}
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (USE_SUPER_PATH_2)
{
UString d1, d2;
@@ -320,7 +332,7 @@ bool CreateDir(CFSTR path)
IF_USE_MAIN_PATH
if (::CreateDirectoryW(fs2us(path), NULL))
return true;
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if ((!USE_MAIN_PATH || ::GetLastError() != ERROR_ALREADY_EXISTS) && USE_SUPER_PATH)
{
UString superPath;
@@ -355,7 +367,7 @@ static bool CreateDir2(CFSTR path)
IF_USE_MAIN_PATH
if (::CreateDirectoryW(fs2us(path), NULL))
return true;
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if ((!USE_MAIN_PATH || ::GetLastError() != ERROR_ALREADY_EXISTS) && USE_SUPER_PATH)
{
UString superPath;
@@ -390,7 +402,7 @@ bool CreateComplexDir(CFSTR _path)
#ifdef _WIN32
{
- DWORD attrib = NFind::GetFileAttrib(_path);
+ const DWORD attrib = NFind::GetFileAttrib(_path);
if (attrib != INVALID_FILE_ATTRIBUTES && (attrib & FILE_ATTRIBUTE_DIRECTORY) != 0)
return true;
}
@@ -496,7 +508,7 @@ bool DeleteFileAlways(CFSTR path)
IF_USE_MAIN_PATH
if (::DeleteFileW(fs2us(path)))
return true;
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (USE_SUPER_PATH)
{
UString superPath;
@@ -586,9 +598,12 @@ bool MyGetFullPathName(CFSTR path, FString &resFullPath)
#ifdef _WIN32
+/* Win10: SetCurrentDirectory() doesn't support long paths and
+ doesn't support super prefix "\\?\", if long path behavior is not
+ enabled in registry (LongPathsEnabled) and in manifest (longPathAware). */
+
bool SetCurrentDir(CFSTR path)
{
- // SetCurrentDirectory doesn't support \\?\ prefix
#ifndef _UNICODE
if (!g_IsNT)
{
@@ -602,28 +617,74 @@ bool SetCurrentDir(CFSTR path)
}
+/*
+we use system function GetCurrentDirectory()
+new GetCurrentDirectory() DOCs:
+ - If the function fails, the return value is zero.
+ - If the function succeeds, the return value specifies
+ the number of characters that are written to the buffer,
+ not including the terminating null character.
+ - If the buffer is not large enough, the return value specifies
+ the required size of the buffer, in characters,
+ including the null-terminating character.
+
+GetCurrentDir() calls GetCurrentDirectory().
+GetCurrentDirectory() in win10 in tests:
+ the returned (path) does not end with a backslash, if
+ current directory is not root directory of drive.
+ But that behavior is not guarantied in specification docs.
+*/
+
bool GetCurrentDir(FString &path)
{
+ const unsigned kBufSize = MAX_PATH + 16;
path.Empty();
- DWORD needLength;
#ifndef _UNICODE
if (!g_IsNT)
{
- TCHAR s[MAX_PATH + 2];
+ TCHAR s[kBufSize + 1];
s[0] = 0;
- needLength = ::GetCurrentDirectory(MAX_PATH + 1, s);
+ const DWORD len = ::GetCurrentDirectory(kBufSize, s);
+ if (len == 0 || len >= kBufSize)
+ return false;
+ s[kBufSize] = 0; // optional guard
path = fas2fs(s);
+ return true;
}
else
#endif
{
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, s);
- path = us2fs(s);
+ DWORD len;
+ {
+ WCHAR s[kBufSize + 1];
+ s[0] = 0;
+ len = ::GetCurrentDirectoryW(kBufSize, s);
+ if (len == 0)
+ return false;
+ if (len < kBufSize)
+ {
+ s[kBufSize] = 0; // optional guard
+ path = us2fs(s);
+ return true;
+ }
+ }
+ UString temp;
+ const DWORD len2 = ::GetCurrentDirectoryW(len, temp.GetBuf(len));
+ if (len2 == 0)
+ return false;
+ temp.ReleaseBuf_CalcLen(len);
+ if (temp.Len() != len2 || len - 1 != len2)
+ {
+ /* it's unexpected case, if current dir of process
+ was changed between two function calls,
+ or some unexpected function implementation */
+ // SetLastError((DWORD)E_FAIL); // we can set some error code
+ return false;
+ }
+ path = us2fs(temp);
+ return true;
}
- return (needLength > 0 && needLength <= MAX_PATH);
}
#endif // _WIN32
@@ -648,41 +709,59 @@ bool GetOnlyDirPrefix(CFSTR path, FString &resDirPrefix)
return GetFullPathAndSplit(path, resDirPrefix, resFileName);
}
+
+
bool MyGetTempPath(FString &path)
{
#ifdef _WIN32
- path.Empty();
- DWORD needLength;
+
+ /*
+ new DOCs for GetTempPathW():
+ - The returned string ends with a backslash.
+ - The maximum possible return value is MAX_PATH+1 (261).
+ */
+
+ const unsigned kBufSize = MAX_PATH + 16;
+ DWORD len;
#ifndef _UNICODE
if (!g_IsNT)
{
- TCHAR s[MAX_PATH + 2];
+ TCHAR s[kBufSize + 1];
s[0] = 0;
- needLength = ::GetTempPath(MAX_PATH + 1, s);
+ len = ::GetTempPath(kBufSize, s);
path = fas2fs(s);
}
else
#endif
{
- WCHAR s[MAX_PATH + 2];
+ WCHAR s[kBufSize + 1];
s[0] = 0;
- needLength = ::GetTempPathW(MAX_PATH + 1, s);;
+ len = ::GetTempPathW(kBufSize, s);
path = us2fs(s);
}
- return (needLength > 0 && needLength <= MAX_PATH);
+ /* win10: GetTempPathW() doesn't set backslash at the end of path,
+ if (buffer_size == len_of(path_with_backslash)).
+ So we normalize path here: */
+ NormalizeDirPathPrefix(path);
+ return (len != 0 && len < kBufSize);
- #else
+ #else // !_WIN32
// FIXME: improve that code
- path = "/tmp/";
- if (!NFind::DoesDirExist_FollowLink(path))
- path = "./";
+ path = STRING_PATH_SEPARATOR "tmp";
+ const char *s;
+ if (NFind::DoesDirExist_FollowLink(path))
+ s = STRING_PATH_SEPARATOR "tmp" STRING_PATH_SEPARATOR;
+ else
+ s = "." STRING_PATH_SEPARATOR;
+ path = s;
return true;
+
#endif
}
-static bool CreateTempFile(CFSTR prefix, bool addRandom, FString &path, NIO::COutFile *outFile)
+bool CreateTempFile2(CFSTR prefix, bool addRandom, AString &postfix, NIO::COutFile *outFile)
{
UInt32 d =
#ifdef _WIN32
@@ -693,7 +772,7 @@ static bool CreateTempFile(CFSTR prefix, bool addRandom, FString &path, NIO::COu
for (unsigned i = 0; i < 100; i++)
{
- path = prefix;
+ postfix.Empty();
if (addRandom)
{
char s[16];
@@ -701,14 +780,14 @@ static bool CreateTempFile(CFSTR prefix, bool addRandom, FString &path, NIO::COu
unsigned k;
for (k = 0; k < 8; k++)
{
- unsigned t = val & 0xF;
+ const unsigned t = val & 0xF;
val >>= 4;
s[k] = (char)((t < 10) ? ('0' + t) : ('A' + (t - 10)));
}
s[k] = '\0';
if (outFile)
- path += '.';
- path += s;
+ postfix.Add_Dot();
+ postfix += s;
UInt32 step = GetTickCount() + 2;
if (step == 0)
step = 1;
@@ -716,7 +795,9 @@ static bool CreateTempFile(CFSTR prefix, bool addRandom, FString &path, NIO::COu
}
addRandom = true;
if (outFile)
- path += ".tmp";
+ postfix += ".tmp";
+ FString path (prefix);
+ path += postfix;
if (NFind::DoesFileOrDirExist(path))
{
SetLastError(ERROR_ALREADY_EXISTS);
@@ -732,12 +813,12 @@ static bool CreateTempFile(CFSTR prefix, bool addRandom, FString &path, NIO::COu
if (CreateDir(path))
return true;
}
- DWORD error = GetLastError();
+ const DWORD error = GetLastError();
if (error != ERROR_FILE_EXISTS &&
error != ERROR_ALREADY_EXISTS)
break;
}
- path.Empty();
+ postfix.Empty();
return false;
}
@@ -745,8 +826,12 @@ bool CTempFile::Create(CFSTR prefix, NIO::COutFile *outFile)
{
if (!Remove())
return false;
- if (!CreateTempFile(prefix, false, _path, outFile))
+ _path.Empty();
+ AString postfix;
+ if (!CreateTempFile2(prefix, false, postfix, outFile))
return false;
+ _path = prefix;
+ _path += postfix;
_mustBeDeleted = true;
return true;
}
@@ -755,11 +840,16 @@ bool CTempFile::CreateRandomInTempFolder(CFSTR namePrefix, NIO::COutFile *outFil
{
if (!Remove())
return false;
+ _path.Empty();
FString tempPath;
if (!MyGetTempPath(tempPath))
return false;
- if (!CreateTempFile(tempPath + namePrefix, true, _path, outFile))
+ AString postfix;
+ tempPath += namePrefix;
+ if (!CreateTempFile2(tempPath, true, postfix, outFile))
return false;
+ _path = tempPath;
+ _path += postfix;
_mustBeDeleted = true;
return true;
}
@@ -802,11 +892,16 @@ bool CTempDir::Create(CFSTR prefix)
{
if (!Remove())
return false;
+ _path.Empty();
FString tempPath;
if (!MyGetTempPath(tempPath))
return false;
- if (!CreateTempFile(tempPath + prefix, true, _path, NULL))
+ tempPath += prefix;
+ AString postfix;
+ if (!CreateTempFile2(tempPath, true, postfix, NULL))
return false;
+ _path = tempPath;
+ _path += postfix;
_mustBeDeleted = true;
return true;
}
@@ -830,7 +925,7 @@ bool RemoveDir(CFSTR path)
}
-static BOOL My__CopyFile(CFSTR oldFile, CFSTR newFile)
+static BOOL My_CopyFile(CFSTR oldFile, CFSTR newFile)
{
NWindows::NFile::NIO::COutFile outFile;
if (!outFile.Create(newFile, false))
@@ -865,7 +960,7 @@ bool MyMoveFile(CFSTR oldFile, CFSTR newFile)
if (errno != EXDEV) // (oldFile and newFile are not on the same mounted filesystem)
return false;
- if (My__CopyFile(oldFile, newFile) == FALSE)
+ if (My_CopyFile(oldFile, newFile) == FALSE)
return false;
struct stat info_file;
@@ -906,11 +1001,11 @@ bool GetCurrentDir(FString &path)
{
path.Empty();
- #define MY__PATH_MAX PATH_MAX
- // #define MY__PATH_MAX 1024
+ #define MY_PATH_MAX PATH_MAX
+ // #define MY_PATH_MAX 1024
- char s[MY__PATH_MAX + 1];
- char *res = getcwd(s, MY__PATH_MAX);
+ char s[MY_PATH_MAX + 1];
+ char *res = getcwd(s, MY_PATH_MAX);
if (res)
{
path = fas2fs(s);
@@ -1035,10 +1130,10 @@ static C_umask g_umask;
#define PRF(x)
#define TRACE_SetFileAttrib(msg) \
- PRF(printf("\nSetFileAttrib(%s, %x) : %s\n", (const char *)path, attrib, msg));
+ PRF(printf("\nSetFileAttrib(%s, %x) : %s\n", (const char *)path, attrib, msg);)
#define TRACE_chmod(s, mode) \
- PRF(printf("\n chmod(%s, %o)\n", (const char *)path, (unsigned)(mode)));
+ PRF(printf("\n chmod(%s, %o)\n", (const char *)path, (unsigned)(mode));)
int my_chown(CFSTR path, uid_t owner, gid_t group)
{
@@ -1047,7 +1142,7 @@ int my_chown(CFSTR path, uid_t owner, gid_t group)
bool SetFileAttrib_PosixHighDetect(CFSTR path, DWORD attrib)
{
- TRACE_SetFileAttrib("");
+ TRACE_SetFileAttrib("")
struct stat st;
@@ -1056,7 +1151,7 @@ bool SetFileAttrib_PosixHighDetect(CFSTR path, DWORD attrib)
{
if (lstat(path, &st) != 0)
{
- TRACE_SetFileAttrib("bad lstat()");
+ TRACE_SetFileAttrib("bad lstat()")
return false;
}
// TRACE_chmod("lstat", st.st_mode);
@@ -1065,14 +1160,14 @@ bool SetFileAttrib_PosixHighDetect(CFSTR path, DWORD attrib)
{
if (stat(path, &st) != 0)
{
- TRACE_SetFileAttrib("bad stat()");
+ TRACE_SetFileAttrib("bad stat()")
return false;
}
}
if (attrib & FILE_ATTRIBUTE_UNIX_EXTENSION)
{
- TRACE_SetFileAttrib("attrib & FILE_ATTRIBUTE_UNIX_EXTENSION");
+ TRACE_SetFileAttrib("attrib & FILE_ATTRIBUTE_UNIX_EXTENSION")
st.st_mode = attrib >> 16;
if (S_ISDIR(st.st_mode))
{
@@ -1092,7 +1187,7 @@ bool SetFileAttrib_PosixHighDetect(CFSTR path, DWORD attrib)
}
else
{
- TRACE_SetFileAttrib("Only Windows Attributes");
+ TRACE_SetFileAttrib("Only Windows Attributes")
// Only Windows Attributes
if (S_ISDIR(st.st_mode)
|| (attrib & FILE_ATTRIBUTE_READONLY) == 0)
@@ -1105,7 +1200,7 @@ bool SetFileAttrib_PosixHighDetect(CFSTR path, DWORD attrib)
if (S_ISLNK(st.st_mode))
{
printf("\nfchmodat()\n");
- TRACE_chmod(path, (st.st_mode) & g_umask.mask);
+ TRACE_chmod(path, (st.st_mode) & g_umask.mask)
// AT_SYMLINK_NOFOLLOW is not implemted still in Linux.
res = fchmodat(AT_FDCWD, path, (st.st_mode) & g_umask.mask,
S_ISLNK(st.st_mode) ? AT_SYMLINK_NOFOLLOW : 0);
@@ -1113,7 +1208,7 @@ bool SetFileAttrib_PosixHighDetect(CFSTR path, DWORD attrib)
else
*/
{
- TRACE_chmod(path, (st.st_mode) & g_umask.mask);
+ TRACE_chmod(path, (st.st_mode) & g_umask.mask)
res = chmod(path, (st.st_mode) & g_umask.mask);
}
// TRACE_SetFileAttrib("End")
@@ -1123,7 +1218,7 @@ bool SetFileAttrib_PosixHighDetect(CFSTR path, DWORD attrib)
bool MyCreateHardLink(CFSTR newFileName, CFSTR existFileName)
{
- PRF(printf("\nhard link() %s -> %s\n", newFileName, existFileName));
+ PRF(printf("\nhard link() %s -> %s\n", newFileName, existFileName);)
return (link(existFileName, newFileName) == 0);
}
diff --git a/3rdparty/lzma/CPP/Windows/FileDir.h b/3rdparty/lzma/CPP/Windows/FileDir.h
index 08281aaa986..573ffa23329 100644
--- a/3rdparty/lzma/CPP/Windows/FileDir.h
+++ b/3rdparty/lzma/CPP/Windows/FileDir.h
@@ -1,7 +1,7 @@
// Windows/FileDir.h
-#ifndef __WINDOWS_FILE_DIR_H
-#define __WINDOWS_FILE_DIR_H
+#ifndef ZIP7_INC_WINDOWS_FILE_DIR_H
+#define ZIP7_INC_WINDOWS_FILE_DIR_H
#include "../Common/MyString.h"
@@ -73,6 +73,8 @@ bool GetCurrentDir(FString &resultPath);
bool MyGetTempPath(FString &resultPath);
+bool CreateTempFile2(CFSTR prefix, bool addRandom, AString &postfix, NIO::COutFile *outFile);
+
class CTempFile MY_UNCOPYABLE
{
bool _mustBeDeleted;
diff --git a/3rdparty/lzma/CPP/Windows/FileFind.cpp b/3rdparty/lzma/CPP/Windows/FileFind.cpp
index c6557599a2e..c562a909ce3 100644
--- a/3rdparty/lzma/CPP/Windows/FileFind.cpp
+++ b/3rdparty/lzma/CPP/Windows/FileFind.cpp
@@ -39,10 +39,10 @@ typedef struct
WCHAR cStreamName[MAX_PATH + 36];
} MY_WIN32_FIND_STREAM_DATA, *MY_PWIN32_FIND_STREAM_DATA;
-typedef HANDLE (WINAPI *FindFirstStreamW_Ptr)(LPCWSTR fileName, MY_STREAM_INFO_LEVELS infoLevel,
+typedef HANDLE (WINAPI *Func_FindFirstStreamW)(LPCWSTR fileName, MY_STREAM_INFO_LEVELS infoLevel,
LPVOID findStreamData, DWORD flags);
-typedef BOOL (APIENTRY *FindNextStreamW_Ptr)(HANDLE findStream, LPVOID findStreamData);
+typedef BOOL (APIENTRY *Func_FindNextStreamW)(HANDLE findStream, LPVOID findStreamData);
EXTERN_C_END
@@ -54,7 +54,7 @@ namespace NFile {
#ifdef _WIN32
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
namespace NSystem
{
bool MyGetDiskFreeSpace(CFSTR rootPath, UInt64 &clusterSize, UInt64 &totalSize, UInt64 &freeSize);
@@ -128,7 +128,7 @@ bool CFileInfo::IsDots() const throw()
static void Convert_WIN32_FIND_DATA_to_FileInfo(const WIN32_FIND_DATAW &fd, CFileInfo &fi)
{
- WIN_FD_TO_MY_FI(fi, fd);
+ WIN_FD_TO_MY_FI(fi, fd)
fi.Name = us2fs(fd.cFileName);
#if defined(_WIN32) && !defined(UNDER_CE)
// fi.ShortName = us2fs(fd.cAlternateFileName);
@@ -138,7 +138,7 @@ static void Convert_WIN32_FIND_DATA_to_FileInfo(const WIN32_FIND_DATAW &fd, CFil
#ifndef _UNICODE
static void Convert_WIN32_FIND_DATA_to_FileInfo(const WIN32_FIND_DATA &fd, CFileInfo &fi)
{
- WIN_FD_TO_MY_FI(fi, fd);
+ WIN_FD_TO_MY_FI(fi, fd)
fi.Name = fas2fs(fd.cFileName);
#if defined(_WIN32) && !defined(UNDER_CE)
// fi.ShortName = fas2fs(fd.cAlternateFileName);
@@ -211,7 +211,7 @@ bool CFindFile::FindFirst(CFSTR path, CFileInfo &fi)
IF_USE_MAIN_PATH
_handle = ::FindFirstFileW(fs2us(path), &fd);
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (_handle == INVALID_HANDLE_VALUE && USE_SUPER_PATH)
{
UString superPath;
@@ -252,23 +252,27 @@ bool CFindFile::FindNext(CFileInfo &fi)
////////////////////////////////
// AltStreams
-static FindFirstStreamW_Ptr g_FindFirstStreamW;
-static FindNextStreamW_Ptr g_FindNextStreamW;
+static Func_FindFirstStreamW g_FindFirstStreamW;
+static Func_FindNextStreamW g_FindNextStreamW;
static struct CFindStreamLoader
{
CFindStreamLoader()
{
- HMODULE hm = ::GetModuleHandleA("kernel32.dll");
- g_FindFirstStreamW = (FindFirstStreamW_Ptr)(void *)::GetProcAddress(hm, "FindFirstStreamW");
- g_FindNextStreamW = (FindNextStreamW_Ptr)(void *)::GetProcAddress(hm, "FindNextStreamW");
+ const HMODULE hm = ::GetModuleHandleA("kernel32.dll");
+ g_FindFirstStreamW = Z7_GET_PROC_ADDRESS(
+ Func_FindFirstStreamW, hm,
+ "FindFirstStreamW");
+ g_FindNextStreamW = Z7_GET_PROC_ADDRESS(
+ Func_FindNextStreamW, hm,
+ "FindNextStreamW");
}
} g_FindStreamLoader;
bool CStreamInfo::IsMainStream() const throw()
{
return StringsAreEqualNoCase_Ascii(Name, "::$DATA");
-};
+}
UString CStreamInfo::GetReducedName() const
{
@@ -331,7 +335,7 @@ bool CFindStream::FindFirst(CFSTR path, CStreamInfo &si)
if (::GetLastError() == ERROR_HANDLE_EOF)
return false;
// long name can be tricky for path like ".\dirName".
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (USE_SUPER_PATH)
{
UString superPath;
@@ -414,7 +418,7 @@ DWORD GetFileAttrib(CFSTR path)
if (dw != INVALID_FILE_ATTRIBUTES)
return dw;
}
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (USE_SUPER_PATH)
{
UString superPath;
@@ -451,7 +455,7 @@ also we support paths that are not supported by FindFirstFile:
bool CFileInfo::Find(CFSTR path, bool followLink)
{
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
if (IS_PATH_SEPAR(path[0]) &&
IS_PATH_SEPAR(path[1]) &&
@@ -847,7 +851,7 @@ HANDLE CFindChangeNotification::FindFirst(CFSTR path, bool watchSubtree, DWORD n
{
IF_USE_MAIN_PATH
_handle = ::FindFirstChangeNotificationW(fs2us(path), BoolToBOOL(watchSubtree), notifyFilter);
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (!IsHandleAllocated())
{
UString superPath;
diff --git a/3rdparty/lzma/CPP/Windows/FileFind.h b/3rdparty/lzma/CPP/Windows/FileFind.h
index fcfe02c7e64..11408d05958 100644
--- a/3rdparty/lzma/CPP/Windows/FileFind.h
+++ b/3rdparty/lzma/CPP/Windows/FileFind.h
@@ -1,7 +1,7 @@
// Windows/FileFind.h
-#ifndef __WINDOWS_FILE_FIND_H
-#define __WINDOWS_FILE_FIND_H
+#ifndef ZIP7_INC_WINDOWS_FILE_FIND_H
+#define ZIP7_INC_WINDOWS_FILE_FIND_H
#ifndef _WIN32
#include <sys/stat.h>
@@ -249,7 +249,15 @@ class CFindChangeNotification MY_UNCOPYABLE
HANDLE _handle;
public:
operator HANDLE () { return _handle; }
- bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE && _handle != 0; }
+ bool IsHandleAllocated() const
+ {
+ /* at least on win2000/XP (undocumented):
+ if pathName is "" or NULL,
+ FindFirstChangeNotification() could return NULL.
+ So we check for INVALID_HANDLE_VALUE and NULL.
+ */
+ return _handle != INVALID_HANDLE_VALUE && _handle != NULL;
+ }
CFindChangeNotification(): _handle(INVALID_HANDLE_VALUE) {}
~CFindChangeNotification() { Close(); }
bool Close() throw();
diff --git a/3rdparty/lzma/CPP/Windows/FileIO.cpp b/3rdparty/lzma/CPP/Windows/FileIO.cpp
index e51b0eb31b8..4ecbb7ed213 100644
--- a/3rdparty/lzma/CPP/Windows/FileIO.cpp
+++ b/3rdparty/lzma/CPP/Windows/FileIO.cpp
@@ -2,7 +2,7 @@
#include "StdAfx.h"
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
#include "../../C/Alloc.h"
#endif
@@ -21,7 +21,7 @@
HRESULT GetLastError_noZero_HRESULT()
{
- DWORD res = ::GetLastError();
+ const DWORD res = ::GetLastError();
if (res == 0)
return E_FAIL;
return HRESULT_FROM_WIN32(res);
@@ -40,7 +40,7 @@ using namespace NName;
namespace NWindows {
namespace NFile {
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
namespace NSystem
{
@@ -72,7 +72,7 @@ bool CFileBase::Create(CFSTR path, DWORD desiredAccess,
if (!Close())
return false;
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
IsDeviceFile = false;
#endif
@@ -88,7 +88,7 @@ bool CFileBase::Create(CFSTR path, DWORD desiredAccess,
IF_USE_MAIN_PATH
_handle = ::CreateFileW(fs2us(path), desiredAccess, shareMode,
(LPSECURITY_ATTRIBUTES)NULL, creationDisposition, flagsAndAttributes, (HANDLE)NULL);
- #ifdef WIN_LONG_PATH
+ #ifdef Z7_LONG_PATH
if (_handle == INVALID_HANDLE_VALUE && USE_SUPER_PATH)
{
UString superPath;
@@ -101,7 +101,7 @@ bool CFileBase::Create(CFSTR path, DWORD desiredAccess,
/*
#ifndef UNDER_CE
- #ifndef _SFX
+ #ifndef Z7_SFX
if (_handle == INVALID_HANDLE_VALUE)
{
// it's debug hack to open symbolic links in Windows XP and WSL links in Windows 10
@@ -149,7 +149,7 @@ bool CFileBase::Close() throw()
bool CFileBase::GetLength(UInt64 &length) const throw()
{
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
if (IsDeviceFile && SizeDefined)
{
length = Size;
@@ -219,7 +219,7 @@ bool CFileBase::GetPosition(UInt64 &position) const throw()
bool CFileBase::Seek(Int64 distanceToMove, DWORD moveMethod, UInt64 &newPosition) const throw()
{
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
if (IsDeviceFile && SizeDefined && moveMethod == FILE_END)
{
distanceToMove += Size;
@@ -262,12 +262,12 @@ bool CFileBase::SeekToEnd(UInt64 &newPosition) const throw()
// ---------- CInFile ---------
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
void CInFile::CorrectDeviceSize()
{
// maybe we must decrease kClusterSize to 1 << 12, if we want correct size at tail
- static const UInt32 kClusterSize = 1 << 14;
+ const UInt32 kClusterSize = 1 << 14;
UInt64 pos = Size & ~(UInt64)(kClusterSize - 1);
UInt64 realNewPosition;
if (!Seek(pos, realNewPosition))
@@ -462,7 +462,7 @@ static const UInt32 kChunkSizeMax = (1 << 22);
bool CInFile::Read1(void *data, UInt32 size, UInt32 &processedSize) throw()
{
DWORD processedLoc = 0;
- bool res = BOOLToBool(::ReadFile(_handle, data, size, &processedLoc, NULL));
+ const bool res = BOOLToBool(::ReadFile(_handle, data, size, &processedLoc, NULL));
processedSize = (UInt32)processedLoc;
return res;
}
@@ -480,7 +480,7 @@ bool CInFile::Read(void *data, UInt32 size, UInt32 &processedSize) throw()
do
{
UInt32 processedLoc = 0;
- bool res = ReadPart(data, size, processedLoc);
+ const bool res = ReadPart(data, size, processedLoc);
processedSize += processedLoc;
if (!res)
return false;
@@ -551,7 +551,7 @@ bool COutFile::Write(const void *data, UInt32 size, UInt32 &processedSize) throw
do
{
UInt32 processedLoc = 0;
- bool res = WritePart(data, size, processedLoc);
+ const bool res = WritePart(data, size, processedLoc);
processedSize += processedLoc;
if (!res)
return false;
@@ -628,14 +628,14 @@ bool SetDirTime(CFSTR path, const CFiTime *cTime, const CFiTime *aTime, const CF
namespace NIO {
-bool CFileBase::OpenBinary(const char *name, int flags)
+bool CFileBase::OpenBinary(const char *name, int flags, mode_t mode)
{
#ifdef O_BINARY
flags |= O_BINARY;
#endif
Close();
- _handle = ::open(name, flags, 0666);
+ _handle = ::open(name, flags, mode);
return _handle != -1;
/*
@@ -804,10 +804,10 @@ bool COutFile::Create(const char *name, bool createAlways)
if (createAlways)
{
Close();
- _handle = ::creat(name, 0666);
+ _handle = ::creat(name, mode_for_Create);
return _handle != -1;
}
- return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY);
+ return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY, mode_for_Create);
}
bool COutFile::Open(const char *name, DWORD creationDisposition)
@@ -850,13 +850,13 @@ bool COutFile::SetLength(UInt64 length) throw()
return false;
}
// The value of the seek pointer shall not be modified by a call to ftruncate().
- int iret = ftruncate(_handle, len2);
+ const int iret = ftruncate(_handle, len2);
return (iret == 0);
}
bool COutFile::Close()
{
- bool res = CFileBase::Close();
+ const bool res = CFileBase::Close();
if (!res)
return res;
if (CTime_defined || ATime_defined || MTime_defined)
diff --git a/3rdparty/lzma/CPP/Windows/FileIO.h b/3rdparty/lzma/CPP/Windows/FileIO.h
index 80509653e99..03e061a980b 100644
--- a/3rdparty/lzma/CPP/Windows/FileIO.h
+++ b/3rdparty/lzma/CPP/Windows/FileIO.h
@@ -1,23 +1,23 @@
// Windows/FileIO.h
-#ifndef __WINDOWS_FILE_IO_H
-#define __WINDOWS_FILE_IO_H
+#ifndef ZIP7_INC_WINDOWS_FILE_IO_H
+#define ZIP7_INC_WINDOWS_FILE_IO_H
#include "../Common/MyWindows.h"
-#define _my_IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
-#define _my_IO_REPARSE_TAG_SYMLINK (0xA000000CL)
-#define _my_IO_REPARSE_TAG_LX_SYMLINK (0xA000001DL)
+#define Z7_WIN_IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
+#define Z7_WIN_IO_REPARSE_TAG_SYMLINK (0xA000000CL)
+#define Z7_WIN_IO_REPARSE_TAG_LX_SYMLINK (0xA000001DL)
-#define _my_SYMLINK_FLAG_RELATIVE 1
+#define Z7_WIN_SYMLINK_FLAG_RELATIVE 1
// what the meaning of that FLAG or field (2)?
-#define _my_LX_SYMLINK_FLAG 2
+#define Z7_WIN_LX_SYMLINK_FLAG 2
#ifdef _WIN32
#if defined(_WIN32) && !defined(UNDER_CE)
-#include <WinIoCtl.h>
+#include <winioctl.h>
#endif
#else
@@ -76,11 +76,11 @@ struct CReparseAttr
// returns (false) and (ErrorCode = ERROR_REPARSE_TAG_INVALID), if unknown tag
bool Parse(const Byte *p, size_t size);
- bool IsMountPoint() const { return Tag == _my_IO_REPARSE_TAG_MOUNT_POINT; } // it's Junction
- bool IsSymLink_Win() const { return Tag == _my_IO_REPARSE_TAG_SYMLINK; }
- bool IsSymLink_WSL() const { return Tag == _my_IO_REPARSE_TAG_LX_SYMLINK; }
+ bool IsMountPoint() const { return Tag == Z7_WIN_IO_REPARSE_TAG_MOUNT_POINT; } // it's Junction
+ bool IsSymLink_Win() const { return Tag == Z7_WIN_IO_REPARSE_TAG_SYMLINK; }
+ bool IsSymLink_WSL() const { return Tag == Z7_WIN_IO_REPARSE_TAG_LX_SYMLINK; }
- bool IsRelative_Win() const { return Flags == _my_SYMLINK_FLAG_RELATIVE; }
+ bool IsRelative_Win() const { return Flags == Z7_WIN_SYMLINK_FLAG_RELATIVE; }
bool IsRelative_WSL() const
{
@@ -141,17 +141,19 @@ public:
public:
bool PreserveATime;
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
bool IsDeviceFile;
bool SizeDefined;
UInt64 Size; // it can be larger than real available size
#endif
- CFileBase(): _handle(INVALID_HANDLE_VALUE), PreserveATime(false) {};
+ CFileBase(): _handle(INVALID_HANDLE_VALUE), PreserveATime(false) {}
~CFileBase() { Close(); }
HANDLE GetHandle() const { return _handle; }
+ // void Detach() { _handle = INVALID_HANDLE_VALUE; }
+
bool Close() throw();
bool GetPosition(UInt64 &position) const throw();
@@ -193,7 +195,7 @@ struct my_DISK_GEOMETRY_EX
class CInFile: public CFileBase
{
- #ifdef SUPPORT_DEVICE_FILE
+ #ifdef Z7_DEVICE_FILE
#ifndef UNDER_CE
@@ -232,6 +234,14 @@ public:
// we must use (FILE_FLAG_BACKUP_SEMANTICS) to open handle of directory.
}
+ bool Open_for_FileRenameInformation(CFSTR fileName)
+ {
+ return Create(fileName, DELETE | SYNCHRONIZE | GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL);
+ // we must use (FILE_FLAG_BACKUP_SEMANTICS) to open handle of directory.
+ }
+
bool OpenReparse(CFSTR fileName)
{
// 17.02 fix: to support Windows XP compatibility junctions:
@@ -295,12 +305,13 @@ protected:
UInt64 Size; // it can be larger than real available size
*/
- bool OpenBinary(const char *name, int flags);
+ bool OpenBinary(const char *name, int flags, mode_t mode = 0666);
public:
bool PreserveATime;
- CFileBase(): _handle(-1), PreserveATime(false) {};
+ CFileBase(): _handle(-1), PreserveATime(false) {}
~CFileBase() { Close(); }
+ // void Detach() { _handle = -1; }
bool Close();
bool GetLength(UInt64 &length) const;
off_t seek(off_t distanceToMove, int moveMethod) const;
@@ -330,7 +341,6 @@ class COutFile: public CFileBase
bool CTime_defined;
bool ATime_defined;
bool MTime_defined;
-
CFiTime CTime;
CFiTime ATime;
CFiTime MTime;
@@ -338,10 +348,13 @@ class COutFile: public CFileBase
AString Path;
ssize_t write_part(const void *data, size_t size) throw();
public:
+ mode_t mode_for_Create;
+
COutFile():
CTime_defined(false),
ATime_defined(false),
- MTime_defined(false)
+ MTime_defined(false),
+ mode_for_Create(0666)
{}
bool Close();
diff --git a/3rdparty/lzma/CPP/Windows/FileLink.cpp b/3rdparty/lzma/CPP/Windows/FileLink.cpp
index 8ce634fd01a..2b9fa1a0930 100644
--- a/3rdparty/lzma/CPP/Windows/FileLink.cpp
+++ b/3rdparty/lzma/CPP/Windows/FileLink.cpp
@@ -8,7 +8,7 @@
#include <unistd.h>
#endif
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
#include "../../C/Alloc.h"
#endif
@@ -20,6 +20,15 @@
#include "FileIO.h"
#include "FileName.h"
+#ifdef Z7_OLD_WIN_SDK
+#ifndef ERROR_INVALID_REPARSE_DATA
+#define ERROR_INVALID_REPARSE_DATA 4392L
+#endif
+#ifndef ERROR_REPARSE_TAG_INVALID
+#define ERROR_REPARSE_TAG_INVALID 4393L
+#endif
+#endif
+
#ifndef _UNICODE
extern bool g_IsNT;
#endif
@@ -72,13 +81,13 @@ static const UInt32 kReparseFlags_Alias = (1 << 29);
static const UInt32 kReparseFlags_HighLatency = (1 << 30);
static const UInt32 kReparseFlags_Microsoft = ((UInt32)1 << 31);
-#define _my_IO_REPARSE_TAG_HSM (0xC0000004L)
-#define _my_IO_REPARSE_TAG_HSM2 (0x80000006L)
-#define _my_IO_REPARSE_TAG_SIS (0x80000007L)
-#define _my_IO_REPARSE_TAG_WIM (0x80000008L)
-#define _my_IO_REPARSE_TAG_CSV (0x80000009L)
-#define _my_IO_REPARSE_TAG_DFS (0x8000000AL)
-#define _my_IO_REPARSE_TAG_DFSR (0x80000012L)
+#define Z7_WIN_IO_REPARSE_TAG_HSM (0xC0000004L)
+#define Z7_WIN_IO_REPARSE_TAG_HSM2 (0x80000006L)
+#define Z7_WIN_IO_REPARSE_TAG_SIS (0x80000007L)
+#define Z7_WIN_IO_REPARSE_TAG_WIM (0x80000008L)
+#define Z7_WIN_IO_REPARSE_TAG_CSV (0x80000009L)
+#define Z7_WIN_IO_REPARSE_TAG_DFS (0x8000000AL)
+#define Z7_WIN_IO_REPARSE_TAG_DFSR (0x80000012L)
*/
#define Get16(p) GetUi16(p)
@@ -112,7 +121,7 @@ static void WriteString(Byte *dest, const wchar_t *path)
wchar_t c = *path++;
if (c == 0)
return;
- Set16(dest, (UInt16)c);
+ Set16(dest, (UInt16)c)
dest += 2;
}
}
@@ -133,10 +142,10 @@ bool FillLinkData(CByteBuffer &dest, const wchar_t *path, bool isSymLink, bool i
return false;
dest.Alloc(8 + size);
Byte *p = dest;
- Set32(p, _my_IO_REPARSE_TAG_LX_SYMLINK);
- Set16(p + 4, (UInt16)(size));
- Set16(p + 6, 0);
- Set32(p + 8, _my_LX_SYMLINK_FLAG);
+ Set32(p, Z7_WIN_IO_REPARSE_TAG_LX_SYMLINK)
+ Set16(p + 4, (UInt16)(size))
+ Set16(p + 6, 0)
+ Set32(p + 8, Z7_WIN_LX_SYMLINK_FLAG)
memcpy(p + 12, utf.Ptr(), utf.Len());
return true;
}
@@ -176,12 +185,12 @@ bool FillLinkData(CByteBuffer &dest, const wchar_t *path, bool isSymLink, bool i
dest.Alloc(size);
memset(dest, 0, size);
const UInt32 tag = isSymLink ?
- _my_IO_REPARSE_TAG_SYMLINK :
- _my_IO_REPARSE_TAG_MOUNT_POINT;
+ Z7_WIN_IO_REPARSE_TAG_SYMLINK :
+ Z7_WIN_IO_REPARSE_TAG_MOUNT_POINT;
Byte *p = dest;
- Set32(p, tag);
- Set16(p + 4, (UInt16)(size - 8));
- Set16(p + 6, 0);
+ Set32(p, tag)
+ Set16(p + 4, (UInt16)(size - 8))
+ Set16(p + 6, 0)
p += 8;
unsigned subOffs = 0;
@@ -191,16 +200,16 @@ bool FillLinkData(CByteBuffer &dest, const wchar_t *path, bool isSymLink, bool i
else
printOffs = (unsigned)len1 + 2;
- Set16(p + 0, (UInt16)subOffs);
- Set16(p + 2, (UInt16)len1);
- Set16(p + 4, (UInt16)printOffs);
- Set16(p + 6, (UInt16)len2);
+ Set16(p + 0, (UInt16)subOffs)
+ Set16(p + 2, (UInt16)len1)
+ Set16(p + 4, (UInt16)printOffs)
+ Set16(p + 6, (UInt16)len2)
p += 8;
if (isSymLink)
{
- UInt32 flags = isAbs ? 0 : _my_SYMLINK_FLAG_RELATIVE;
- Set32(p, flags);
+ UInt32 flags = isAbs ? 0 : Z7_WIN_SYMLINK_FLAG_RELATIVE;
+ Set32(p, flags)
p += 4;
}
@@ -255,9 +264,9 @@ bool CReparseAttr::Parse(const Byte *p, size_t size)
HeaderError = false;
- if ( Tag != _my_IO_REPARSE_TAG_MOUNT_POINT
- && Tag != _my_IO_REPARSE_TAG_SYMLINK
- && Tag != _my_IO_REPARSE_TAG_LX_SYMLINK)
+ if ( Tag != Z7_WIN_IO_REPARSE_TAG_MOUNT_POINT
+ && Tag != Z7_WIN_IO_REPARSE_TAG_SYMLINK
+ && Tag != Z7_WIN_IO_REPARSE_TAG_LX_SYMLINK)
{
// for unsupported reparse points
ErrorCode = (DWORD)ERROR_REPARSE_TAG_INVALID; // ERROR_REPARSE_TAG_MISMATCH
@@ -270,12 +279,12 @@ bool CReparseAttr::Parse(const Byte *p, size_t size)
p += 8;
size -= 8;
- if (Tag == _my_IO_REPARSE_TAG_LX_SYMLINK)
+ if (Tag == Z7_WIN_IO_REPARSE_TAG_LX_SYMLINK)
{
if (len < 4)
return false;
Flags = Get32(p); // maybe it's not Flags
- if (Flags != _my_LX_SYMLINK_FLAG)
+ if (Flags != Z7_WIN_LX_SYMLINK_FLAG)
return false;
len -= 4;
p += 4;
@@ -304,7 +313,7 @@ bool CReparseAttr::Parse(const Byte *p, size_t size)
p += 8;
Flags = 0;
- if (Tag == _my_IO_REPARSE_TAG_SYMLINK)
+ if (Tag == Z7_WIN_IO_REPARSE_TAG_SYMLINK)
{
if (len < 4)
return false;
@@ -341,8 +350,8 @@ bool CReparseShortInfo::Parse(const Byte *p, size_t size)
(type & kReparseFlags_Microsoft) == 0 ||
(type & 0xFFFF) != 3)
*/
- if (Tag != _my_IO_REPARSE_TAG_MOUNT_POINT &&
- Tag != _my_IO_REPARSE_TAG_SYMLINK)
+ if (Tag != Z7_WIN_IO_REPARSE_TAG_MOUNT_POINT &&
+ Tag != Z7_WIN_IO_REPARSE_TAG_SYMLINK)
// return true;
return false;
@@ -365,7 +374,7 @@ bool CReparseShortInfo::Parse(const Byte *p, size_t size)
p += 8;
// UInt32 Flags = 0;
- if (Tag == _my_IO_REPARSE_TAG_SYMLINK)
+ if (Tag == Z7_WIN_IO_REPARSE_TAG_SYMLINK)
{
if (len < 4)
return false;
@@ -426,13 +435,13 @@ UString CReparseAttr::GetPath() const
return s;
}
-#ifdef SUPPORT_DEVICE_FILE
+#ifdef Z7_DEVICE_FILE
namespace NSystem
{
bool MyGetDiskFreeSpace(CFSTR rootPath, UInt64 &clusterSize, UInt64 &totalSize, UInt64 &freeSize);
}
-#endif // SUPPORT_DEVICE_FILE
+#endif // Z7_DEVICE_FILE
#if defined(_WIN32) && !defined(UNDER_CE)
diff --git a/3rdparty/lzma/CPP/Windows/FileMapping.h b/3rdparty/lzma/CPP/Windows/FileMapping.h
index f90c429f1d7..caa7ea3ed77 100644
--- a/3rdparty/lzma/CPP/Windows/FileMapping.h
+++ b/3rdparty/lzma/CPP/Windows/FileMapping.h
@@ -1,7 +1,7 @@
// Windows/FileMapping.h
-#ifndef __WINDOWS_FILEMAPPING_H
-#define __WINDOWS_FILEMAPPING_H
+#ifndef ZIP7_INC_WINDOWS_FILE_MAPPING_H
+#define ZIP7_INC_WINDOWS_FILE_MAPPING_H
#include "../Common/MyTypes.h"
@@ -34,7 +34,7 @@ public:
return res;
#else
_handle = ::OpenFileMapping(desiredAccess, FALSE, name);
- if (_handle != 0)
+ if (_handle != NULL)
return 0;
return ::GetLastError();
#endif
diff --git a/3rdparty/lzma/CPP/Windows/FileName.cpp b/3rdparty/lzma/CPP/Windows/FileName.cpp
index d61ff7e1dd6..c9c4f8b6ce9 100644
--- a/3rdparty/lzma/CPP/Windows/FileName.cpp
+++ b/3rdparty/lzma/CPP/Windows/FileName.cpp
@@ -6,9 +6,9 @@
#include <limits.h>
#include <unistd.h>
#include "../Common/StringConvert.h"
-#include "FileDir.h"
#endif
+#include "FileDir.h"
#include "FileName.h"
#ifndef _UNICODE
@@ -68,7 +68,7 @@ void NormalizeDirPathPrefix(UString &dirPath)
#ifdef _WIN32
#ifndef USE_UNICODE_FSTRING
-#ifdef WIN_LONG_PATH
+#ifdef Z7_LONG_PATH
static void NormalizeDirSeparators(UString &s)
{
const unsigned len = s.Len();
@@ -90,7 +90,7 @@ void NormalizeDirSeparators(FString &s)
#endif
-#define IS_LETTER_CHAR(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z'))
+#define IS_LETTER_CHAR(c) ((((unsigned)(int)(c) | 0x20) - (unsigned)'a' <= (unsigned)('z' - 'a')))
bool IsDrivePath(const wchar_t *s) throw() { return IS_LETTER_CHAR(s[0]) && s[1] == ':' && IS_SEPAR(s[2]); }
@@ -120,7 +120,7 @@ bool IsAltPathPrefix(CFSTR s) throw()
#if defined(_WIN32) && !defined(UNDER_CE)
const char * const kSuperPathPrefix = "\\\\?\\";
-#ifdef WIN_LONG_PATH
+#ifdef Z7_LONG_PATH
static const char * const kSuperUncPrefix = "\\\\?\\UNC\\";
#endif
@@ -191,7 +191,7 @@ unsigned GetNetworkServerPrefixSize(CFSTR s) throw()
if (c == '.' || c == '?')
return 0;
}
- int pos = FindSepar(s + prefixSize);
+ const int pos = FindSepar(s + prefixSize);
if (pos < 0)
return 0;
return prefixSize + (unsigned)(pos + 1);
@@ -199,11 +199,11 @@ unsigned GetNetworkServerPrefixSize(CFSTR s) throw()
bool IsNetworkShareRootPath(CFSTR s) throw()
{
- unsigned prefixSize = GetNetworkServerPrefixSize(s);
+ const unsigned prefixSize = GetNetworkServerPrefixSize(s);
if (prefixSize == 0)
return false;
s += prefixSize;
- int pos = FindSepar(s);
+ const int pos = FindSepar(s);
if (pos < 0)
return true;
return s[(unsigned)pos + 1] == 0;
@@ -217,6 +217,37 @@ bool IsSuperPath(const wchar_t *s) throw() { return IS_SUPER_PREFIX(s); }
bool IsSuperOrDevicePath(const wchar_t *s) throw() { return IS_SUPER_OR_DEVICE_PATH(s); }
// bool IsSuperUncPath(const wchar_t *s) throw() { return (IS_SUPER_PREFIX(s) && IS_UNC_WITH_SLASH(s + kSuperPathPrefixSize)); }
+bool IsAltStreamPrefixWithColon(const UString &s) throw()
+{
+ if (s.IsEmpty())
+ return false;
+ if (s.Back() != ':')
+ return false;
+ unsigned pos = 0;
+ if (IsSuperPath(s))
+ pos = kSuperPathPrefixSize;
+ if (s.Len() - pos == 2 && IsDrivePath2(s.Ptr(pos)))
+ return false;
+ return true;
+}
+
+bool If_IsSuperPath_RemoveSuperPrefix(UString &s)
+{
+ if (!IsSuperPath(s))
+ return false;
+ unsigned start = 0;
+ unsigned count = kSuperPathPrefixSize;
+ const wchar_t *s2 = s.Ptr(kSuperPathPrefixSize);
+ if (IS_UNC_WITH_SLASH(s2))
+ {
+ start = 2;
+ count = kSuperUncPathPrefixSize - 2;
+ }
+ s.Delete(start, count);
+ return true;
+}
+
+
#ifndef USE_UNICODE_FSTRING
bool IsDrivePath2(CFSTR s) throw() { return IS_LETTER_CHAR(s[0]) && s[1] == ':'; }
// bool IsDriveName2(CFSTR s) throw() { return IS_LETTER_CHAR(s[0]) && s[1] == ':' && s[2] == 0; }
@@ -288,7 +319,7 @@ static unsigned GetRootPrefixSize_Of_SimplePath(CFSTR s)
return 0;
if (s[1] == 0 || !IS_SEPAR(s[1]))
return 1;
- unsigned size = GetRootPrefixSize_Of_NetworkPath(s + 2);
+ const unsigned size = GetRootPrefixSize_Of_NetworkPath(s + 2);
return (size == 0) ? 0 : 2 + size;
}
@@ -296,11 +327,11 @@ static unsigned GetRootPrefixSize_Of_SuperPath(CFSTR s)
{
if (IS_UNC_WITH_SLASH(s + kSuperPathPrefixSize))
{
- unsigned size = GetRootPrefixSize_Of_NetworkPath(s + kSuperUncPathPrefixSize);
+ const unsigned size = GetRootPrefixSize_Of_NetworkPath(s + kSuperUncPathPrefixSize);
return (size == 0) ? 0 : kSuperUncPathPrefixSize + size;
}
// we support \\?\c:\ paths and volume GUID paths \\?\Volume{GUID}\"
- int pos = FindSepar(s + kSuperPathPrefixSize);
+ const int pos = FindSepar(s + kSuperPathPrefixSize);
if (pos < 0)
return 0;
return kSuperPathPrefixSize + pos + 1;
@@ -379,42 +410,26 @@ unsigned GetRootPrefixSize(const wchar_t *s) throw() { return IS_SEPAR(s[0]) ? 1
#ifndef UNDER_CE
-static bool GetCurDir(UString &path)
-{
- path.Empty();
- #ifdef _WIN32
+#ifdef USE_UNICODE_FSTRING
- DWORD needLength;
- #ifndef _UNICODE
- if (!g_IsNT)
- {
- TCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetCurrentDirectory(MAX_PATH + 1, s);
- path = fs2us(fas2fs(s));
- }
- else
- #endif
- {
- WCHAR s[MAX_PATH + 2];
- s[0] = 0;
- needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, s);
- path = s;
- }
- return (needLength > 0 && needLength <= MAX_PATH);
+#define GetCurDir NDir::GetCurrentDir
- #else
+#else
+static bool GetCurDir(UString &path)
+{
+ path.Empty();
FString s;
if (!NDir::GetCurrentDir(s))
return false;
- path = GetUnicodeString(s);
+ path = fs2us(s);
return true;
-
- #endif
}
+#endif
+
+
static bool ResolveDotsFolders(UString &s)
{
#ifdef _WIN32
@@ -516,7 +531,7 @@ static bool AreThereDotsFolders(CFSTR s)
#endif
#endif // LONG_PATH_DOTS_FOLDERS_PARSING
-#ifdef WIN_LONG_PATH
+#ifdef Z7_LONG_PATH
/*
Most of Windows versions have problems, if some file or dir name
@@ -610,11 +625,11 @@ static bool GetSuperPathBase(CFSTR s, UString &res)
return true;
UString temp = fs2us(s);
- unsigned fixedSize = GetRootPrefixSize_Of_SuperPath(temp);
+ const unsigned fixedSize = GetRootPrefixSize_Of_SuperPath(temp);
if (fixedSize == 0)
return true;
- UString rem = &temp[fixedSize];
+ UString rem = temp.Ptr(fixedSize);
if (!ResolveDotsFolders(rem))
return true;
@@ -632,13 +647,13 @@ static bool GetSuperPathBase(CFSTR s, UString &res)
if (IS_SEPAR(s[1]))
{
UString temp = fs2us(s + 2);
- unsigned fixedSize = GetRootPrefixSize_Of_NetworkPath(temp);
+ const unsigned fixedSize = GetRootPrefixSize_Of_NetworkPath(temp);
// we ignore that error to allow short network paths server\share?
/*
if (fixedSize == 0)
return false;
*/
- UString rem = &temp[fixedSize];
+ UString rem = temp.Ptr(fixedSize);
if (!ResolveDotsFolders(rem))
return false;
res += kSuperUncPrefix;
@@ -783,7 +798,7 @@ bool GetSuperPath(CFSTR path, UString &superPath)
return false;
}
*/
-#endif // WIN_LONG_PATH
+#endif // Z7_LONG_PATH
bool GetFullPath(CFSTR dirPrefix, CFSTR s, FString &res)
{
@@ -801,8 +816,11 @@ bool GetFullPath(CFSTR dirPrefix, CFSTR s, FString &res)
#else
- unsigned prefixSize = GetRootPrefixSize(s);
+ const unsigned prefixSize = GetRootPrefixSize(s);
if (prefixSize != 0)
+#ifdef _WIN32
+ if (prefixSize != 1)
+#endif
{
if (!AreThereDotsFolders(s + prefixSize))
return true;
@@ -815,21 +833,9 @@ bool GetFullPath(CFSTR dirPrefix, CFSTR s, FString &res)
return true;
}
- /*
- FChar c = s[0];
- if (c == 0)
- return true;
- if (c == '.' && (s[1] == 0 || (s[1] == '.' && s[2] == 0)))
- return true;
- if (IS_SEPAR(c) && IS_SEPAR(s[1]))
- return true;
- if (IsDrivePath(s))
- return true;
- */
-
UString curDir;
- if (dirPrefix)
- curDir = fs2us(dirPrefix);
+ if (dirPrefix && prefixSize == 0)
+ curDir = fs2us(dirPrefix); // we use (dirPrefix), only if (s) path is relative
else
{
if (!GetCurDir(curDir))
@@ -837,46 +843,40 @@ bool GetFullPath(CFSTR dirPrefix, CFSTR s, FString &res)
}
NormalizeDirPathPrefix(curDir);
- unsigned fixedSize = 0;
+ unsigned fixedSize = GetRootPrefixSize(curDir);
- #ifdef _WIN32
-
- if (IsSuperPath(curDir))
+ UString temp;
+#ifdef _WIN32
+ if (prefixSize != 0)
{
- fixedSize = GetRootPrefixSize_Of_SuperPath(curDir);
+ /* (s) is absolute path, but only (prefixSize == 1) is possible here.
+ So for full resolving we need root of current folder and
+ relative part of (s). */
+ s += prefixSize;
+ // (s) is relative part now
if (fixedSize == 0)
- return false;
- }
- else
- {
- if (IsDrivePath(curDir))
- fixedSize = kDrivePrefixSize;
- else
{
- if (!IsPathSepar(curDir[0]) || !IsPathSepar(curDir[1]))
- return false;
- fixedSize = GetRootPrefixSize_Of_NetworkPath(curDir.Ptr(2));
- if (fixedSize == 0)
- return false;
- fixedSize += 2;
+ // (curDir) is not absolute.
+ // That case is unexpected, but we support it too.
+ curDir.Empty();
+ curDir.Add_PathSepar();
+ fixedSize = 1;
+ // (curDir) now is just Separ character.
+ // So final (res) path later also will have Separ prefix.
}
}
-
- #endif // _WIN32
-
- UString temp;
- if (IS_SEPAR(s[0]))
- {
- temp = fs2us(s + 1);
- }
else
+#endif // _WIN32
{
- temp += curDir.Ptr(fixedSize);
- temp += fs2us(s);
+ // (s) is relative path
+ temp = curDir.Ptr(fixedSize);
+ // (temp) is relative_part_of(curDir)
}
+ temp += fs2us(s);
if (!ResolveDotsFolders(temp))
return false;
curDir.DeleteFrom(fixedSize);
+ // (curDir) now contains only absolute prefix part
res = us2fs(curDir);
res += us2fs(temp);
@@ -885,6 +885,7 @@ bool GetFullPath(CFSTR dirPrefix, CFSTR s, FString &res)
return true;
}
+
bool GetFullPath(CFSTR path, FString &fullPath)
{
return GetFullPath(NULL, path, fullPath);
diff --git a/3rdparty/lzma/CPP/Windows/FileName.h b/3rdparty/lzma/CPP/Windows/FileName.h
index de8bd13488f..219b656b297 100644
--- a/3rdparty/lzma/CPP/Windows/FileName.h
+++ b/3rdparty/lzma/CPP/Windows/FileName.h
@@ -1,7 +1,7 @@
// Windows/FileName.h
-#ifndef __WINDOWS_FILE_NAME_H
-#define __WINDOWS_FILE_NAME_H
+#ifndef ZIP7_INC_WINDOWS_FILE_NAME_H
+#define ZIP7_INC_WINDOWS_FILE_NAME_H
#include "../Common/MyString.h"
@@ -54,6 +54,10 @@ bool IsDrivePath2(const wchar_t *s) throw(); // first 2 chars are drive chars li
bool IsSuperPath(const wchar_t *s) throw();
bool IsSuperOrDevicePath(const wchar_t *s) throw();
+bool IsAltStreamPrefixWithColon(const UString &s) throw();
+// returns true, if super prefix was removed
+bool If_IsSuperPath_RemoveSuperPrefix(UString &s);
+
#ifndef USE_UNICODE_FSTRING
bool IsDrivePath2(CFSTR s) throw(); // first 2 chars are drive chars like "a:"
// bool IsDriveName2(CFSTR s) throw(); // is drive name like "a:"
@@ -82,7 +86,7 @@ int FindAltStreamColon(CFSTR path) throw();
bool IsAbsolutePath(const wchar_t *s) throw();
unsigned GetRootPrefixSize(const wchar_t *s) throw();
-#ifdef WIN_LONG_PATH
+#ifdef Z7_LONG_PATH
const int kSuperPathType_UseOnlyMain = 0;
const int kSuperPathType_UseOnlySuper = 1;
@@ -92,16 +96,16 @@ int GetUseSuperPathType(CFSTR s) throw();
bool GetSuperPath(CFSTR path, UString &superPath, bool onlyIfNew);
bool GetSuperPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2, bool onlyIfNew);
-#define USE_MAIN_PATH (__useSuperPathType != kSuperPathType_UseOnlySuper)
-#define USE_MAIN_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlySuper && __useSuperPathType2 != kSuperPathType_UseOnlySuper)
+#define USE_MAIN_PATH (_useSuperPathType != kSuperPathType_UseOnlySuper)
+#define USE_MAIN_PATH_2 (_useSuperPathType1 != kSuperPathType_UseOnlySuper && _useSuperPathType2 != kSuperPathType_UseOnlySuper)
-#define USE_SUPER_PATH (__useSuperPathType != kSuperPathType_UseOnlyMain)
-#define USE_SUPER_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlyMain || __useSuperPathType2 != kSuperPathType_UseOnlyMain)
+#define USE_SUPER_PATH (_useSuperPathType != kSuperPathType_UseOnlyMain)
+#define USE_SUPER_PATH_2 (_useSuperPathType1 != kSuperPathType_UseOnlyMain || _useSuperPathType2 != kSuperPathType_UseOnlyMain)
-#define IF_USE_MAIN_PATH int __useSuperPathType = GetUseSuperPathType(path); if (USE_MAIN_PATH)
+#define IF_USE_MAIN_PATH int _useSuperPathType = GetUseSuperPathType(path); if (USE_MAIN_PATH)
#define IF_USE_MAIN_PATH_2(x1, x2) \
- int __useSuperPathType1 = GetUseSuperPathType(x1); \
- int __useSuperPathType2 = GetUseSuperPathType(x2); \
+ int _useSuperPathType1 = GetUseSuperPathType(x1); \
+ int _useSuperPathType2 = GetUseSuperPathType(x2); \
if (USE_MAIN_PATH_2)
#else
@@ -109,8 +113,18 @@ bool GetSuperPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2, bool onlyIfNew)
#define IF_USE_MAIN_PATH
#define IF_USE_MAIN_PATH_2(x1, x2)
-#endif // WIN_LONG_PATH
-
+#endif // Z7_LONG_PATH
+
+/*
+ if (dirPrefix != NULL && (path) is relative)
+ {
+ (dirPrefix) will be used
+ result (fullPath) will contain prefix part of (dirPrefix).
+ }
+ Current_Dir path can be used in 2 cases:
+ 1) if (path) is relative && dirPrefix == NULL
+ 2) for _WIN32: if (path) is absolute starting wuth "\"
+*/
bool GetFullPath(CFSTR dirPrefix, CFSTR path, FString &fullPath);
bool GetFullPath(CFSTR path, FString &fullPath);
diff --git a/3rdparty/lzma/CPP/Windows/FileSystem.cpp b/3rdparty/lzma/CPP/Windows/FileSystem.cpp
index 6259453225e..6a262d92d7f 100644
--- a/3rdparty/lzma/CPP/Windows/FileSystem.cpp
+++ b/3rdparty/lzma/CPP/Windows/FileSystem.cpp
@@ -71,14 +71,14 @@ UINT MyGetDriveType(CFSTR pathName)
}
}
-typedef BOOL (WINAPI * GetDiskFreeSpaceExA_Pointer)(
+typedef BOOL (WINAPI * Func_GetDiskFreeSpaceExA)(
LPCSTR lpDirectoryName, // directory name
PULARGE_INTEGER lpFreeBytesAvailable, // bytes available to caller
PULARGE_INTEGER lpTotalNumberOfBytes, // bytes on disk
PULARGE_INTEGER lpTotalNumberOfFreeBytes // free bytes on disk
);
-typedef BOOL (WINAPI * GetDiskFreeSpaceExW_Pointer)(
+typedef BOOL (WINAPI * Func_GetDiskFreeSpaceExW)(
LPCWSTR lpDirectoryName, // directory name
PULARGE_INTEGER lpFreeBytesAvailable, // bytes available to caller
PULARGE_INTEGER lpTotalNumberOfBytes, // bytes on disk
@@ -92,12 +92,14 @@ bool MyGetDiskFreeSpace(CFSTR rootPath, UInt64 &clusterSize, UInt64 &totalSize,
#ifndef _UNICODE
if (!g_IsNT)
{
- GetDiskFreeSpaceExA_Pointer pGetDiskFreeSpaceEx = (GetDiskFreeSpaceExA_Pointer)(void *)GetProcAddress(
- GetModuleHandle(TEXT("kernel32.dll")), "GetDiskFreeSpaceExA");
- if (pGetDiskFreeSpaceEx)
+ const
+ Func_GetDiskFreeSpaceExA f = Z7_GET_PROC_ADDRESS(
+ Func_GetDiskFreeSpaceExA, GetModuleHandle(TEXT("kernel32.dll")),
+ "GetDiskFreeSpaceExA");
+ if (f)
{
ULARGE_INTEGER freeBytesToCaller2, totalSize2, freeSize2;
- sizeIsDetected = BOOLToBool(pGetDiskFreeSpaceEx(fs2fas(rootPath), &freeBytesToCaller2, &totalSize2, &freeSize2));
+ sizeIsDetected = BOOLToBool(f(fs2fas(rootPath), &freeBytesToCaller2, &totalSize2, &freeSize2));
totalSize = totalSize2.QuadPart;
freeSize = freeSize2.QuadPart;
}
@@ -107,12 +109,14 @@ bool MyGetDiskFreeSpace(CFSTR rootPath, UInt64 &clusterSize, UInt64 &totalSize,
else
#endif
{
- GetDiskFreeSpaceExW_Pointer pGetDiskFreeSpaceEx = (GetDiskFreeSpaceExW_Pointer)(void *)GetProcAddress(
- GetModuleHandle(TEXT("kernel32.dll")), "GetDiskFreeSpaceExW");
- if (pGetDiskFreeSpaceEx)
+ const
+ Func_GetDiskFreeSpaceExW f = Z7_GET_PROC_ADDRESS(
+ Func_GetDiskFreeSpaceExW, GetModuleHandle(TEXT("kernel32.dll")),
+ "GetDiskFreeSpaceExW");
+ if (f)
{
ULARGE_INTEGER freeBytesToCaller2, totalSize2, freeSize2;
- sizeIsDetected = BOOLToBool(pGetDiskFreeSpaceEx(fs2us(rootPath), &freeBytesToCaller2, &totalSize2, &freeSize2));
+ sizeIsDetected = BOOLToBool(f(fs2us(rootPath), &freeBytesToCaller2, &totalSize2, &freeSize2));
totalSize = totalSize2.QuadPart;
freeSize = freeSize2.QuadPart;
}
diff --git a/3rdparty/lzma/CPP/Windows/FileSystem.h b/3rdparty/lzma/CPP/Windows/FileSystem.h
index 9b49a025a3b..9f9e399ce75 100644
--- a/3rdparty/lzma/CPP/Windows/FileSystem.h
+++ b/3rdparty/lzma/CPP/Windows/FileSystem.h
@@ -1,7 +1,7 @@
// Windows/FileSystem.h
-#ifndef __WINDOWS_FILE_SYSTEM_H
-#define __WINDOWS_FILE_SYSTEM_H
+#ifndef ZIP7_INC_WINDOWS_FILE_SYSTEM_H
+#define ZIP7_INC_WINDOWS_FILE_SYSTEM_H
#include "../Common/MyString.h"
#include "../Common/MyTypes.h"
diff --git a/3rdparty/lzma/CPP/Windows/Handle.h b/3rdparty/lzma/CPP/Windows/Handle.h
index 5878c830448..6ae09ecf53c 100644
--- a/3rdparty/lzma/CPP/Windows/Handle.h
+++ b/3rdparty/lzma/CPP/Windows/Handle.h
@@ -1,9 +1,9 @@
// Windows/Handle.h
-#ifndef __WINDOWS_HANDLE_H
-#define __WINDOWS_HANDLE_H
+#ifndef ZIP7_INC_WINDOWS_HANDLE_H
+#define ZIP7_INC_WINDOWS_HANDLE_H
-#include "../Common/MyTypes.h"
+#include "../Common/MyWindows.h"
namespace NWindows {
@@ -28,7 +28,7 @@ public:
void Attach(HANDLE handle) { _handle = handle; }
HANDLE Detach()
{
- HANDLE handle = _handle;
+ const HANDLE handle = _handle;
_handle = NULL;
return handle;
}
diff --git a/3rdparty/lzma/CPP/Windows/MemoryGlobal.h b/3rdparty/lzma/CPP/Windows/MemoryGlobal.h
index c217510e584..68525915800 100644
--- a/3rdparty/lzma/CPP/Windows/MemoryGlobal.h
+++ b/3rdparty/lzma/CPP/Windows/MemoryGlobal.h
@@ -1,7 +1,7 @@
// Windows/MemoryGlobal.h
-#ifndef __WINDOWS_MEMORY_GLOBAL_H
-#define __WINDOWS_MEMORY_GLOBAL_H
+#ifndef ZIP7_INC_WINDOWS_MEMORY_GLOBAL_H
+#define ZIP7_INC_WINDOWS_MEMORY_GLOBAL_H
#include "../Common/MyWindows.h"
@@ -12,7 +12,7 @@ class CGlobal
{
HGLOBAL _global;
public:
- CGlobal(): _global(NULL){};
+ CGlobal(): _global(NULL) {}
~CGlobal() { Free(); }
operator HGLOBAL() const { return _global; }
void Attach(HGLOBAL hGlobal)
@@ -22,7 +22,7 @@ public:
}
HGLOBAL Detach()
{
- HGLOBAL h = _global;
+ const HGLOBAL h = _global;
_global = NULL;
return h;
}
@@ -42,10 +42,10 @@ public:
CGlobalLock(HGLOBAL hGlobal): _global(hGlobal)
{
_ptr = GlobalLock(hGlobal);
- };
+ }
~CGlobalLock()
{
- if (_ptr != NULL)
+ if (_ptr)
GlobalUnlock(_global);
}
};
diff --git a/3rdparty/lzma/CPP/Windows/MemoryLock.cpp b/3rdparty/lzma/CPP/Windows/MemoryLock.cpp
index 24866b1aeb3..0bd7504f1cc 100644
--- a/3rdparty/lzma/CPP/Windows/MemoryLock.cpp
+++ b/3rdparty/lzma/CPP/Windows/MemoryLock.cpp
@@ -21,7 +21,10 @@ typedef BOOL (WINAPI * Func_LookupPrivilegeValue)(LPCTSTR lpSystemName, LPCTSTR
typedef BOOL (WINAPI * Func_AdjustTokenPrivileges)(HANDLE TokenHandle, BOOL DisableAllPrivileges,
PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength);
}
-#define GET_PROC_ADDR(fff, name) Func_ ## fff my_ ## fff = (Func_ ## fff) (void(*)()) GetProcAddress(hModule, name)
+
+#define GET_PROC_ADDR(fff, name) \
+ const Func_ ## fff my_ ## fff = Z7_GET_PROC_ADDRESS( \
+ Func_ ## fff, hModule, name);
#endif
bool EnablePrivilege(LPCTSTR privilegeName, bool enable)
@@ -30,13 +33,19 @@ bool EnablePrivilege(LPCTSTR privilegeName, bool enable)
#ifndef _UNICODE
- HMODULE hModule = ::LoadLibrary(TEXT("Advapi32.dll"));
- if (hModule == NULL)
+ const HMODULE hModule = ::LoadLibrary(TEXT("advapi32.dll"));
+ if (!hModule)
return false;
- GET_PROC_ADDR(OpenProcessToken, "OpenProcessToken");
- GET_PROC_ADDR(LookupPrivilegeValue, "LookupPrivilegeValueA");
- GET_PROC_ADDR(AdjustTokenPrivileges, "AdjustTokenPrivileges");
+ GET_PROC_ADDR(
+ OpenProcessToken,
+ "OpenProcessToken")
+ GET_PROC_ADDR(
+ LookupPrivilegeValue,
+ "LookupPrivilegeValueA")
+ GET_PROC_ADDR(
+ AdjustTokenPrivileges,
+ "AdjustTokenPrivileges")
if (my_OpenProcessToken &&
my_AdjustTokenPrivileges &&
@@ -85,10 +94,13 @@ typedef void (WINAPI * Func_RtlGetVersion) (OSVERSIONINFOEXW *);
unsigned Get_LargePages_RiskLevel()
{
OSVERSIONINFOEXW vi;
- HMODULE ntdll = ::GetModuleHandleW(L"ntdll.dll");
+ const HMODULE ntdll = ::GetModuleHandleW(L"ntdll.dll");
if (!ntdll)
return 0;
- Func_RtlGetVersion func = (Func_RtlGetVersion)(void *)GetProcAddress(ntdll, "RtlGetVersion");
+ const
+ Func_RtlGetVersion func = Z7_GET_PROC_ADDRESS(
+ Func_RtlGetVersion, ntdll,
+ "RtlGetVersion");
if (!func)
return 0;
func(&vi);
diff --git a/3rdparty/lzma/CPP/Windows/MemoryLock.h b/3rdparty/lzma/CPP/Windows/MemoryLock.h
index dcaf182e95e..2b850029f7a 100644
--- a/3rdparty/lzma/CPP/Windows/MemoryLock.h
+++ b/3rdparty/lzma/CPP/Windows/MemoryLock.h
@@ -1,7 +1,7 @@
// Windows/MemoryLock.h
-#ifndef __WINDOWS_MEMORY_LOCK_H
-#define __WINDOWS_MEMORY_LOCK_H
+#ifndef ZIP7_INC_WINDOWS_MEMORY_LOCK_H
+#define ZIP7_INC_WINDOWS_MEMORY_LOCK_H
#include "../Common/MyWindows.h"
diff --git a/3rdparty/lzma/CPP/Windows/NtCheck.h b/3rdparty/lzma/CPP/Windows/NtCheck.h
index 0af32911909..362a05ad973 100644
--- a/3rdparty/lzma/CPP/Windows/NtCheck.h
+++ b/3rdparty/lzma/CPP/Windows/NtCheck.h
@@ -1,19 +1,29 @@
// Windows/NtCheck.h
-#ifndef __WINDOWS_NT_CHECK_H
-#define __WINDOWS_NT_CHECK_H
+#ifndef ZIP7_INC_WINDOWS_NT_CHECK_H
+#define ZIP7_INC_WINDOWS_NT_CHECK_H
#ifdef _WIN32
#include "../Common/MyWindows.h"
#if !defined(_WIN64) && !defined(UNDER_CE)
+
+#if defined(_MSC_VER) && _MSC_VER >= 1900
+#pragma warning(push)
+// GetVersionExW was declared deprecated
+#pragma warning(disable : 4996)
+#endif
static inline bool IsItWindowsNT()
{
OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(vi);
return (::GetVersionEx(&vi) && vi.dwPlatformId == VER_PLATFORM_WIN32_NT);
}
+#if defined(_MSC_VER) && _MSC_VER >= 1900
+#pragma warning(pop)
+#endif
+
#endif
#ifndef _UNICODE
diff --git a/3rdparty/lzma/CPP/Windows/PropVariant.cpp b/3rdparty/lzma/CPP/Windows/PropVariant.cpp
index 2b179500479..457b1dcbbee 100644
--- a/3rdparty/lzma/CPP/Windows/PropVariant.cpp
+++ b/3rdparty/lzma/CPP/Windows/PropVariant.cpp
@@ -197,17 +197,17 @@ BSTR CPropVariant::AllocBstr(unsigned numChars)
void CPropVariant::Set_Int32(Int32 value) throw()
{
- SET_PROP_id_dest(VT_I4, lVal);
+ SET_PROP_id_dest(VT_I4, lVal)
}
void CPropVariant::Set_Int64(Int64 value) throw()
{
- SET_PROP_id_dest(VT_I8, hVal.QuadPart);
+ SET_PROP_id_dest(VT_I8, hVal.QuadPart)
}
#define SET_PROP_FUNC(type, id, dest) \
CPropVariant& CPropVariant::operator=(type value) throw() \
- { SET_PROP_id_dest(id, dest); return *this; }
+ { SET_PROP_id_dest(id, dest) return *this; }
SET_PROP_FUNC(Byte, VT_UI1, bVal)
// SET_PROP_FUNC(Int16, VT_I2, iVal)
@@ -245,7 +245,7 @@ SET_PROP_FUNC(const FILETIME &, VT_FILETIME, filetime)
we call system functions for VT_BSTR and for unknown typed
*/
-CPropVariant::~CPropVariant()
+CPropVariant::~CPropVariant() throw()
{
switch ((unsigned)vt)
{
diff --git a/3rdparty/lzma/CPP/Windows/PropVariant.h b/3rdparty/lzma/CPP/Windows/PropVariant.h
index 171402f743a..f358fdea12f 100644
--- a/3rdparty/lzma/CPP/Windows/PropVariant.h
+++ b/3rdparty/lzma/CPP/Windows/PropVariant.h
@@ -1,7 +1,7 @@
// Windows/PropVariant.h
-#ifndef __WINDOWS_PROP_VARIANT_H
-#define __WINDOWS_PROP_VARIANT_H
+#ifndef ZIP7_INC_WINDOWS_PROP_VARIANT_H
+#define ZIP7_INC_WINDOWS_PROP_VARIANT_H
#include "../Common/MyTypes.h"
#include "../Common/MyWindows.h"
@@ -64,7 +64,7 @@ public:
// wReserved2 = 0;
// wReserved3 = 0;
// uhVal.QuadPart = 0;
- bstrVal = 0;
+ bstrVal = NULL;
}
@@ -104,13 +104,13 @@ public:
const unsigned ns100 = wReserved2;
if (prec == 0
&& prec <= k_PropVar_TimePrec_1ns
- && ns100 < 100
+ && ns100 < 100
&& wReserved3 == 0)
return ns100;
return 0;
}
- ~CPropVariant();
+ ~CPropVariant() throw();
CPropVariant(const PROPVARIANT &varSrc);
CPropVariant(const CPropVariant &varSrc);
CPropVariant(BSTR bstrSrc);
diff --git a/3rdparty/lzma/CPP/Windows/PropVariantConv.cpp b/3rdparty/lzma/CPP/Windows/PropVariantConv.cpp
index 3c9bbd1702f..5fb96a7c53a 100644
--- a/3rdparty/lzma/CPP/Windows/PropVariantConv.cpp
+++ b/3rdparty/lzma/CPP/Windows/PropVariantConv.cpp
@@ -36,17 +36,17 @@ bool ConvertUtcFileTimeToString2(const FILETIME &utc, unsigned ns100, char *s, i
s[0] = (char)('0' + val / 10);
s += 4;
}
- UINT_TO_STR_2('-', st.wMonth);
- UINT_TO_STR_2('-', st.wDay);
+ UINT_TO_STR_2('-', st.wMonth)
+ UINT_TO_STR_2('-', st.wDay)
if (level > kTimestampPrintLevel_DAY)
{
- UINT_TO_STR_2(' ', st.wHour);
- UINT_TO_STR_2(':', st.wMinute);
+ UINT_TO_STR_2(' ', st.wHour)
+ UINT_TO_STR_2(':', st.wMinute)
if (level >= kTimestampPrintLevel_SEC)
{
- UINT_TO_STR_2(':', st.wSecond);
+ UINT_TO_STR_2(':', st.wSecond)
if (level > kTimestampPrintLevel_SEC)
{
diff --git a/3rdparty/lzma/CPP/Windows/PropVariantConv.h b/3rdparty/lzma/CPP/Windows/PropVariantConv.h
index 606778406f4..ec5223bd9c5 100644
--- a/3rdparty/lzma/CPP/Windows/PropVariantConv.h
+++ b/3rdparty/lzma/CPP/Windows/PropVariantConv.h
@@ -1,7 +1,7 @@
// Windows/PropVariantConv.h
-#ifndef __PROP_VARIANT_CONV_H
-#define __PROP_VARIANT_CONV_H
+#ifndef ZIP7_INC_PROP_VARIANT_CONV_H
+#define ZIP7_INC_PROP_VARIANT_CONV_H
#include "../Common/MyTypes.h"
diff --git a/3rdparty/lzma/CPP/Windows/Registry.h b/3rdparty/lzma/CPP/Windows/Registry.h
index ca79dfe3cda..0d3b4fcc3d5 100644
--- a/3rdparty/lzma/CPP/Windows/Registry.h
+++ b/3rdparty/lzma/CPP/Windows/Registry.h
@@ -1,7 +1,7 @@
// Windows/Registry.h
-#ifndef __WINDOWS_REGISTRY_H
-#define __WINDOWS_REGISTRY_H
+#ifndef ZIP7_INC_WINDOWS_REGISTRY_H
+#define ZIP7_INC_WINDOWS_REGISTRY_H
#include "../Common/MyBuffer.h"
#include "../Common/MyString.h"
diff --git a/3rdparty/lzma/CPP/Windows/ResourceString.h b/3rdparty/lzma/CPP/Windows/ResourceString.h
index f0bdabf47fe..773307b931c 100644
--- a/3rdparty/lzma/CPP/Windows/ResourceString.h
+++ b/3rdparty/lzma/CPP/Windows/ResourceString.h
@@ -1,9 +1,10 @@
// Windows/ResourceString.h
-#ifndef __WINDOWS_RESOURCE_STRING_H
-#define __WINDOWS_RESOURCE_STRING_H
+#ifndef ZIP7_INC_WINDOWS_RESOURCE_STRING_H
+#define ZIP7_INC_WINDOWS_RESOURCE_STRING_H
#include "../Common/MyString.h"
+#include "../Common/MyWindows.h"
namespace NWindows {
diff --git a/3rdparty/lzma/CPP/Windows/SecurityUtils.cpp b/3rdparty/lzma/CPP/Windows/SecurityUtils.cpp
index ede83faf565..d4282d070c2 100644
--- a/3rdparty/lzma/CPP/Windows/SecurityUtils.cpp
+++ b/3rdparty/lzma/CPP/Windows/SecurityUtils.cpp
@@ -4,9 +4,6 @@
#include "SecurityUtils.h"
-#define MY_CAST_FUNC (void(*)())
-// #define MY_CAST_FUNC
-
namespace NWindows {
namespace NSecurity {
@@ -35,7 +32,7 @@ bool MyLookupAccountSid(LPCTSTR systemName, PSID sid,
static void SetLsaString(LPWSTR src, PLSA_UNICODE_STRING dest)
{
- size_t len = (size_t)wcslen(src);
+ const size_t len = (size_t)wcslen(src);
dest->Length = (USHORT)(len * sizeof(WCHAR));
dest->MaximumLength = (USHORT)((len + 1) * sizeof(WCHAR));
dest->Buffer = src;
@@ -72,13 +69,14 @@ typedef BOOL (WINAPI * Func_LookupAccountNameW)(
static PSID GetSid(LPWSTR accountName)
{
#ifndef _UNICODE
- HMODULE hModule = GetModuleHandle(TEXT("Advapi32.dll"));
- if (hModule == NULL)
+ const HMODULE hModule = GetModuleHandle(TEXT("advapi32.dll"));
+ if (!hModule)
return NULL;
- Func_LookupAccountNameW lookupAccountNameW = (Func_LookupAccountNameW)
- MY_CAST_FUNC
- GetProcAddress(hModule, "LookupAccountNameW");
- if (lookupAccountNameW == NULL)
+ const
+ Func_LookupAccountNameW lookupAccountNameW = Z7_GET_PROC_ADDRESS(
+ Func_LookupAccountNameW, hModule,
+ "LookupAccountNameW");
+ if (!lookupAccountNameW)
return NULL;
#endif
@@ -88,21 +86,21 @@ static PSID GetSid(LPWSTR accountName)
#ifdef _UNICODE
::LookupAccountNameW
#else
- lookupAccountNameW
+ lookupAccountNameW
#endif
- (NULL, accountName, NULL, &sidLen, NULL, &domainLen, &sidNameUse))
+ (NULL, accountName, NULL, &sidLen, NULL, &domainLen, &sidNameUse))
{
if (::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
- PSID pSid = ::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sidLen);
+ const PSID pSid = ::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sidLen);
LPWSTR domainName = (LPWSTR)::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (domainLen + 1) * sizeof(WCHAR));
- BOOL res =
+ const BOOL res =
#ifdef _UNICODE
::LookupAccountNameW
#else
- lookupAccountNameW
+ lookupAccountNameW
#endif
- (NULL, accountName, pSid, &sidLen, domainName, &domainLen, &sidNameUse);
+ (NULL, accountName, pSid, &sidLen, domainName, &domainLen, &sidNameUse);
::HeapFree(GetProcessHeap(), 0, domainName);
if (res)
return pSid;
@@ -111,7 +109,7 @@ static PSID GetSid(LPWSTR accountName)
return NULL;
}
-#define MY__SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
+#define Z7_WIN_SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
bool AddLockMemoryPrivilege()
{
@@ -131,13 +129,13 @@ bool AddLockMemoryPrivilege()
!= 0)
return false;
LSA_UNICODE_STRING userRights;
- wchar_t s[128] = MY__SE_LOCK_MEMORY_NAME;
+ wchar_t s[128] = Z7_WIN_SE_LOCK_MEMORY_NAME;
SetLsaString(s, &userRights);
WCHAR userName[256 + 2];
DWORD size = 256;
if (!GetUserNameW(userName, &size))
return false;
- PSID psid = GetSid(userName);
+ const PSID psid = GetSid(userName);
if (psid == NULL)
return false;
bool res = false;
@@ -176,7 +174,7 @@ bool AddLockMemoryPrivilege()
res = true;
}
*/
- NTSTATUS status = policy.AddAccountRights(psid, &userRights);
+ const NTSTATUS status = policy.AddAccountRights(psid, &userRights);
if (status == 0)
res = true;
// ULONG res = LsaNtStatusToWinError(status);
diff --git a/3rdparty/lzma/CPP/Windows/SecurityUtils.h b/3rdparty/lzma/CPP/Windows/SecurityUtils.h
index c0d7b127a0f..4ef3939f8e4 100644
--- a/3rdparty/lzma/CPP/Windows/SecurityUtils.h
+++ b/3rdparty/lzma/CPP/Windows/SecurityUtils.h
@@ -1,7 +1,7 @@
// Windows/SecurityUtils.h
-#ifndef __WINDOWS_SECURITY_UTILS_H
-#define __WINDOWS_SECURITY_UTILS_H
+#ifndef ZIP7_INC_WINDOWS_SECURITY_UTILS_H
+#define ZIP7_INC_WINDOWS_SECURITY_UTILS_H
#include <NTSecAPI.h>
@@ -20,7 +20,7 @@ typedef NTSTATUS (NTAPI *Func_LsaAddAccountRights)(LSA_HANDLE PolicyHandle,
#define POLICY_FUNC_CALL(fff, str) \
if (hModule == NULL) return MY_STATUS_NOT_IMPLEMENTED; \
- Func_ ## fff v = (Func_ ## fff) (void(*)()) GetProcAddress(hModule, str); \
+ const Func_ ## fff v = Z7_GET_PROC_ADDRESS(Func_ ## fff, hModule, str); \
if (!v) return MY_STATUS_NOT_IMPLEMENTED; \
const NTSTATUS res = v
@@ -39,7 +39,7 @@ class CAccessToken
{
HANDLE _handle;
public:
- CAccessToken(): _handle(NULL) {};
+ CAccessToken(): _handle(NULL) {}
~CAccessToken() { Close(); }
bool Close()
{
@@ -93,9 +93,9 @@ public:
CPolicy(): _handle(NULL)
{
#ifndef _UNICODE
- hModule = GetModuleHandle(TEXT("Advapi32.dll"));
+ hModule = GetModuleHandle(TEXT("advapi32.dll"));
#endif
- };
+ }
~CPolicy() { Close(); }
NTSTATUS Open(PLSA_UNICODE_STRING systemName, PLSA_OBJECT_ATTRIBUTES objectAttributes,
diff --git a/3rdparty/lzma/CPP/Windows/Shell.cpp b/3rdparty/lzma/CPP/Windows/Shell.cpp
index 071833cfa8e..b2a3489870d 100644
--- a/3rdparty/lzma/CPP/Windows/Shell.cpp
+++ b/3rdparty/lzma/CPP/Windows/Shell.cpp
@@ -2,23 +2,50 @@
#include "StdAfx.h"
-/*
-#include <stdio.h>
-#include <string.h>
-*/
-
#include "../Common/MyCom.h"
-#ifndef _UNICODE
#include "../Common/StringConvert.h"
-#endif
#include "COM.h"
+#include "FileName.h"
+#include "MemoryGlobal.h"
#include "Shell.h"
#ifndef _UNICODE
extern bool g_IsNT;
#endif
+// MSVC6 and old SDK don't support this function:
+// #define LWSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
+// LWSTDAPI StrRetToStrW(STRRET *pstr, LPCITEMIDLIST pidl, LPWSTR *ppsz);
+
+// #define SHOW_DEBUG_SHELL
+
+#ifdef SHOW_DEBUG_SHELL
+
+#include "../Common/IntToString.h"
+
+static void Print_Number(UInt32 number, const char *s)
+{
+ AString s2;
+ s2.Add_UInt32(number);
+ s2.Add_Space();
+ s2 += s;
+ OutputDebugStringA(s2);
+}
+
+#define ODS(sz) { OutputDebugStringA(sz); }
+#define ODS_U(s) { OutputDebugStringW(s); }
+#define ODS_(op) { op; }
+
+#else
+
+#define ODS(sz)
+#define ODS_U(s)
+#define ODS_(op)
+
+#endif
+
+
namespace NWindows {
namespace NShell {
@@ -28,12 +55,24 @@ namespace NShell {
void CItemIDList::Free()
{
- if (m_Object == NULL)
+ if (!m_Object)
return;
+ /* DOCs:
+ SHGetMalloc was introduced in Windows 95 and Microsoft Windows NT 4.0,
+ but as of Windows 2000 it is no longer necessary.
+ In its place, programs can call the equivalent (and easier to use) CoTaskMemAlloc and CoTaskMemFree.
+ Description from oldnewthings:
+ shell functions could work without COM (if OLE32.DLL is not loaded),
+ but now if OLE32.DLL is loaded, then shell functions and com functions do same things.
+ 22.02: so we use OLE32.DLL function to free memory:
+ */
+ /*
CMyComPtr<IMalloc> shellMalloc;
if (::SHGetMalloc(&shellMalloc) != NOERROR)
throw 41099;
shellMalloc->Free(m_Object);
+ */
+ CoTaskMemFree(m_Object);
m_Object = NULL;
}
@@ -70,9 +109,354 @@ CItemIDList& CItemIDList::operator=(const CItemIDList &object)
}
*/
+
+static HRESULT ReadUnicodeStrings(const wchar_t *p, size_t size, UStringVector &names)
+{
+ names.Clear();
+ const wchar_t *lim = p + size;
+ UString s;
+ /*
+ if (size == 0 || p[size - 1] != 0)
+ return E_INVALIDARG;
+ if (size == 1)
+ return S_OK;
+ if (p[size - 2] != 0)
+ return E_INVALIDARG;
+ */
+ for (;;)
+ {
+ const wchar_t *start = p;
+ for (;;)
+ {
+ if (p == lim) return E_INVALIDARG; // S_FALSE
+ if (*p++ == 0)
+ break;
+ }
+ const size_t num = (size_t)(p - start);
+ if (num == 1)
+ {
+ if (p != lim) return E_INVALIDARG; // S_FALSE
+ return S_OK;
+ }
+ s.SetFrom(start, (unsigned)(num - 1));
+ ODS_U(s)
+ names.Add(s);
+ // names.ReserveOnePosition();
+ // names.AddInReserved_Ptr_of_new(new UString((unsigned)num - 1, start));
+ }
+}
+
+
+static HRESULT ReadAnsiStrings(const char *p, size_t size, UStringVector &names)
+{
+ names.Clear();
+ AString name;
+ for (; size != 0; size--)
+ {
+ const char c = *p++;
+ if (c == 0)
+ {
+ if (name.IsEmpty())
+ return S_OK;
+ names.Add(GetUnicodeString(name));
+ name.Empty();
+ }
+ else
+ name += c;
+ }
+ return E_INVALIDARG;
+}
+
+
+#define INIT_FORMATETC_HGLOBAL(type) { (type), NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }
+
+static HRESULT DataObject_GetData_HGLOBAL(IDataObject *dataObject, CLIPFORMAT cf, NCOM::CStgMedium &medium)
+{
+ FORMATETC etc = INIT_FORMATETC_HGLOBAL(cf);
+ RINOK(dataObject->GetData(&etc, &medium))
+ if (medium.tymed != TYMED_HGLOBAL)
+ return E_INVALIDARG;
+ return S_OK;
+}
+
+static HRESULT DataObject_GetData_HDROP_Names(IDataObject *dataObject, UStringVector &names)
+{
+ names.Clear();
+ NCOM::CStgMedium medium;
+
+ /* Win10 : if (dataObject) is from IContextMenu::Initialize() and
+ if (len_of_path >= MAX_PATH (260) for some file in data object)
+ {
+ GetData() returns HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
+ "The data area passed to a system call is too small",
+ Is there a way to fix this code for long paths?
+ } */
+
+ RINOK(DataObject_GetData_HGLOBAL(dataObject, CF_HDROP, medium))
+ const size_t blockSize = GlobalSize(medium.hGlobal);
+ if (blockSize < sizeof(DROPFILES))
+ return E_INVALIDARG;
+ NMemory::CGlobalLock dropLock(medium.hGlobal);
+ const DROPFILES *dropFiles = (const DROPFILES *)dropLock.GetPointer();
+ if (!dropFiles)
+ return E_INVALIDARG;
+ if (blockSize < dropFiles->pFiles
+ || dropFiles->pFiles < sizeof(DROPFILES)
+ // || dropFiles->pFiles != sizeof(DROPFILES)
+ )
+ return E_INVALIDARG;
+ const size_t size = blockSize - dropFiles->pFiles;
+ const void *namesData = (const Byte *)(const void *)dropFiles + dropFiles->pFiles;
+ HRESULT hres;
+ if (dropFiles->fWide)
+ {
+ if (size % sizeof(wchar_t) != 0)
+ return E_INVALIDARG;
+ hres = ReadUnicodeStrings((const wchar_t *)namesData, size / sizeof(wchar_t), names);
+ }
+ else
+ hres = ReadAnsiStrings((const char *)namesData, size, names);
+
+ ODS_(Print_Number(names.Size(), "DataObject_GetData_HDROP_Names"))
+ return hres;
+}
+
+
+
+// CF_IDLIST:
+#define MYWIN_CFSTR_SHELLIDLIST TEXT("Shell IDList Array")
+
+typedef struct
+{
+ UINT cidl;
+ UINT aoffset[1];
+} MYWIN_CIDA;
+/*
+ cidl : number of PIDLs that are being transferred, not including the parent folder.
+ aoffset : An array of offsets, relative to the beginning of this structure.
+ aoffset[0] - fully qualified PIDL of a parent folder.
+ If this PIDL is empty, the parent folder is the desktop.
+ aoffset[1] ... aoffset[cidl] : offset to one of the PIDLs to be transferred.
+ All of these PIDLs are relative to the PIDL of the parent folder.
+*/
+
+static HRESULT DataObject_GetData_IDLIST(IDataObject *dataObject, UStringVector &names)
+{
+ names.Clear();
+ NCOM::CStgMedium medium;
+ RINOK(DataObject_GetData_HGLOBAL(dataObject, (CLIPFORMAT)
+ RegisterClipboardFormat(MYWIN_CFSTR_SHELLIDLIST), medium))
+ const size_t blockSize = GlobalSize(medium.hGlobal);
+ if (blockSize < sizeof(MYWIN_CIDA) || blockSize >= (UInt32)((UInt32)0 - 1))
+ return E_INVALIDARG;
+ NMemory::CGlobalLock dropLock(medium.hGlobal);
+ const MYWIN_CIDA *cida = (const MYWIN_CIDA *)dropLock.GetPointer();
+ if (!cida)
+ return E_INVALIDARG;
+ if (cida->cidl == 0)
+ {
+ // is it posssible to have no selected items?
+ // it's unexpected case.
+ return E_INVALIDARG;
+ }
+ if (cida->cidl >= (blockSize - (UInt32)sizeof(MYWIN_CIDA)) / sizeof(UINT))
+ return E_INVALIDARG;
+ const UInt32 start = cida->cidl * (UInt32)sizeof(UINT) + (UInt32)sizeof(MYWIN_CIDA);
+
+ STRRET strret;
+ CMyComPtr<IShellFolder> parentFolder;
+ {
+ const UINT offset = cida->aoffset[0];
+ if (offset < start || offset >= blockSize
+ // || offset != start
+ )
+ return E_INVALIDARG;
+
+ CMyComPtr<IShellFolder> desktopFolder;
+ RINOK(::SHGetDesktopFolder(&desktopFolder))
+ if (!desktopFolder)
+ return E_FAIL;
+
+ LPCITEMIDLIST const lpcItem = (LPCITEMIDLIST)(const void *)((const Byte *)cida + offset);
+
+ #ifdef SHOW_DEBUG_SHELL
+ {
+ const HRESULT res = desktopFolder->GetDisplayNameOf(
+ lpcItem, SHGDN_FORPARSING, &strret);
+ if (res == S_OK && strret.uType == STRRET_WSTR)
+ {
+ ODS_U(strret.pOleStr)
+ /* if lpcItem is empty, the path will be
+ "C:\Users\user_name\Desktop"
+ if lpcItem is "My Computer" folder, the path will be
+ "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" */
+ CoTaskMemFree(strret.pOleStr);
+ }
+ }
+ #endif
+
+ RINOK(desktopFolder->BindToObject(lpcItem,
+ NULL, IID_IShellFolder, (void **)&parentFolder))
+ if (!parentFolder)
+ return E_FAIL;
+ }
+
+ names.ClearAndReserve(cida->cidl);
+ UString path;
+
+ // for (int y = 0; y < 1; y++) // for debug
+ for (unsigned i = 1; i <= cida->cidl; i++)
+ {
+ const UINT offset = cida->aoffset[i];
+ if (offset < start || offset >= blockSize)
+ return E_INVALIDARG;
+ const void *p = (const Byte *)(const void *)cida + offset;
+ /* ITEMIDLIST of file can contain more than one SHITEMID item.
+ In win10 only SHGDN_FORPARSING returns path that contains
+ all path parts related to parts of ITEMIDLIST.
+ So we can use only SHGDN_FORPARSING here.
+ Don't use (SHGDN_INFOLDER)
+ Don't use (SHGDN_INFOLDER | SHGDN_FORPARSING)
+ */
+ RINOK(parentFolder->GetDisplayNameOf((LPCITEMIDLIST)p, SHGDN_FORPARSING, &strret))
+
+ /*
+ // MSVC6 and old SDK do not support StrRetToStrW().
+ LPWSTR lpstr;
+ RINOK (StrRetToStrW(&strret, NULL, &lpstr))
+ ODS_U(lpstr)
+ path = lpstr;
+ CoTaskMemFree(lpstr);
+ */
+ if (strret.uType != STRRET_WSTR)
+ return E_INVALIDARG;
+ ODS_U(strret.pOleStr)
+ path = strret.pOleStr;
+ // the path could have super path prefix "\\\\?\\"
+ // we can remove super path prefix here, if we don't need that prefix
+ #ifdef Z7_LONG_PATH
+ // we remove super prefix, if we can work without that prefix
+ NFile::NName::If_IsSuperPath_RemoveSuperPrefix(path);
+ #endif
+ names.AddInReserved(path);
+ CoTaskMemFree(strret.pOleStr);
+ }
+
+ ODS_(Print_Number(cida->cidl, "CFSTR_SHELLIDLIST END"))
+ return S_OK;
+}
+
+
+HRESULT DataObject_GetData_HDROP_or_IDLIST_Names(IDataObject *dataObject, UStringVector &paths)
+{
+ ODS("-- DataObject_GetData_HDROP_or_IDLIST_Names START")
+ HRESULT hres = NShell::DataObject_GetData_HDROP_Names(dataObject, paths);
+ // if (hres == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER))
+ if (hres != S_OK)
+ {
+ ODS("-- DataObject_GetData_IDLIST START")
+ // for (int y = 0; y < 10000; y++) // for debug
+ hres = NShell::DataObject_GetData_IDLIST(dataObject, paths);
+ }
+ ODS("-- DataObject_GetData_HDROP_or_IDLIST_Names END")
+ return hres;
+}
+
+
+
+// #if (NTDDI_VERSION >= NTDDI_VISTA)
+typedef struct
+{
+ UINT cItems; // number of items in rgdwFileAttributes array
+ DWORD dwSumFileAttributes; // all of the attributes ORed together
+ DWORD dwProductFileAttributes; // all of the attributes ANDed together
+ DWORD rgdwFileAttributes[1]; // array
+} MYWIN_FILE_ATTRIBUTES_ARRAY;
+
+#define MYWIN_CFSTR_FILE_ATTRIBUTES_ARRAY TEXT("File Attributes Array")
+
+HRESULT DataObject_GetData_FILE_ATTRS(IDataObject *dataObject, CFileAttribs &attribs)
+{
+ attribs.Clear();
+ NCOM::CStgMedium medium;
+ RINOK(DataObject_GetData_HGLOBAL(dataObject, (CLIPFORMAT)
+ RegisterClipboardFormat(MYWIN_CFSTR_FILE_ATTRIBUTES_ARRAY), medium))
+ const size_t blockSize = GlobalSize(medium.hGlobal);
+ if (blockSize < sizeof(MYWIN_FILE_ATTRIBUTES_ARRAY))
+ return E_INVALIDARG;
+ NMemory::CGlobalLock dropLock(medium.hGlobal);
+ const MYWIN_FILE_ATTRIBUTES_ARRAY *faa = (const MYWIN_FILE_ATTRIBUTES_ARRAY *)dropLock.GetPointer();
+ if (!faa)
+ return E_INVALIDARG;
+ const unsigned numFiles = faa->cItems;
+ if (numFiles == 0)
+ {
+ // is it posssible to have empty array here?
+ return E_INVALIDARG;
+ }
+ if ((blockSize - (sizeof(MYWIN_FILE_ATTRIBUTES_ARRAY) - sizeof(DWORD)))
+ / sizeof(DWORD) != numFiles)
+ return E_INVALIDARG;
+ // attribs.Sum = faa->dwSumFileAttributes;
+ // attribs.Product = faa->dwProductFileAttributes;
+ // attribs.Vals.SetFromArray(faa->rgdwFileAttributes, numFiles);
+ // attribs.IsDirVector.ClearAndSetSize(numFiles);
+
+ if ((faa->dwSumFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
+ {
+ /* in win10: if selected items are volumes (c:\, d:\ ..) in My Compter,
+ all items have FILE_ATTRIBUTE_DIRECTORY attribute
+ ntfs volume also have FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM
+ udf volume: FILE_ATTRIBUTE_READONLY
+ dvd-rom device: (-1) : all bits are set
+ */
+ const DWORD *attr = faa->rgdwFileAttributes;
+ // DWORD product = (UInt32)0 - 1, sum = 0;
+ for (unsigned i = 0; i < numFiles; i++)
+ {
+ if (attr[i] & FILE_ATTRIBUTE_DIRECTORY)
+ {
+ // attribs.ThereAreDirs = true;
+ attribs.FirstDirIndex = (int)i;
+ break;
+ }
+ // attribs.IsDirVector[i] = (attr[i] & FILE_ATTRIBUTE_DIRECTORY) != 0;
+ // product &= v;
+ // sum |= v;
+ }
+ // ODS_(Print_Number(product, "Product calc FILE_ATTRIBUTES_ARRAY ==== DataObject_GetData_HDROP_Names"))
+ // ODS_(Print_Number(sum, "Sum calc FILE_ATTRIBUTES_ARRAY ==== DataObject_GetData_HDROP_Names"))
+ }
+ // ODS_(Print_Number(attribs.Product, "Product FILE_ATTRIBUTES_ARRAY ==== DataObject_GetData_HDROP_Names"))
+ // ODS_(Print_Number(attribs.Sum, "Sum FILE_ATTRIBUTES_ARRAY ==== DataObject_GetData_HDROP_Names"))
+ ODS_(Print_Number(numFiles, "FILE_ATTRIBUTES_ARRAY ==== DataObject_GetData_HDROP_Names"))
+ return S_OK;
+}
+
+
/////////////////////////////
// CDrop
+/*
+ win10:
+ DragQueryFile() implementation code is not effective because
+ there is no pointer inside DROP internal file list, so
+ DragQueryFile(fileIndex) runs all names in range [0, fileIndex].
+ DragQueryFile(,, buf, bufSize)
+ if (buf == NULL) by spec
+ {
+ returns value is the required size
+ in characters, of the buffer, not including the terminating null character
+ tests show that if (bufSize == 0), then it also returns required size.
+ }
+ if (bufSize != NULL)
+ {
+ returns: the count of the characters copied, not including null character.
+ win10: null character is also copied at position buf[ret_count];
+ }
+*/
+
+/*
void CDrop::Attach(HDROP object)
{
Free();
@@ -92,56 +476,133 @@ UINT CDrop::QueryCountOfFiles()
return QueryFile(0xFFFFFFFF, (LPTSTR)NULL, 0);
}
-UString CDrop::QueryFileName(UINT fileIndex)
+void CDrop::QueryFileName(UINT fileIndex, UString &fileName)
{
- UString fileName;
#ifndef _UNICODE
if (!g_IsNT)
{
AString fileNameA;
- UINT bufferSize = QueryFile(fileIndex, (LPTSTR)NULL, 0);
- const unsigned len = bufferSize + 2;
- QueryFile(fileIndex, fileNameA.GetBuf(len), bufferSize + 1);
+ const UINT len = QueryFile(fileIndex, (LPTSTR)NULL, 0);
+ const UINT numCopied = QueryFile(fileIndex, fileNameA.GetBuf(len + 2), len + 2);
fileNameA.ReleaseBuf_CalcLen(len);
+ if (numCopied != len)
+ throw 20221223;
fileName = GetUnicodeString(fileNameA);
}
else
#endif
{
- UINT bufferSize = QueryFile(fileIndex, (LPWSTR)NULL, 0);
- const unsigned len = bufferSize + 2;
- QueryFile(fileIndex, fileName.GetBuf(len), bufferSize + 1);
+ // kReserve must be >= 3 for additional buffer size
+ // safety and for optimal performance
+ const unsigned kReserve = 3;
+ {
+ unsigned len = 0;
+ wchar_t *buf = fileName.GetBuf_GetMaxAvail(len);
+ if (len >= kReserve)
+ {
+ const UINT numCopied = QueryFile(fileIndex, buf, len);
+ if (numCopied < len - 1)
+ {
+ // (numCopied < len - 1) case means that it have copied full string.
+ fileName.ReleaseBuf_CalcLen(numCopied);
+ return;
+ }
+ }
+ }
+ const UINT len = QueryFile(fileIndex, (LPWSTR)NULL, 0);
+ const UINT numCopied = QueryFile(fileIndex,
+ fileName.GetBuf(len + kReserve), len + kReserve);
fileName.ReleaseBuf_CalcLen(len);
+ if (numCopied != len)
+ throw 20221223;
}
- return fileName;
}
+
void CDrop::QueryFileNames(UStringVector &fileNames)
{
UINT numFiles = QueryCountOfFiles();
- /*
- char s[100];
- sprintf(s, "QueryFileNames: %d files", numFiles);
- OutputDebugStringA(s);
- */
+
+ Print_Number(numFiles, "\n====== CDrop::QueryFileNames START ===== \n");
+
fileNames.ClearAndReserve(numFiles);
+ UString s;
for (UINT i = 0; i < numFiles; i++)
{
- const UString s2 = QueryFileName(i);
- if (!s2.IsEmpty())
- fileNames.AddInReserved(s2);
- /*
- OutputDebugStringW(L"file ---");
- OutputDebugStringW(s2);
- */
+ QueryFileName(i, s);
+ if (!s.IsEmpty())
+ fileNames.AddInReserved(s);
}
+ Print_Number(numFiles, "\n====== CDrop::QueryFileNames END ===== \n");
+}
+*/
+
+
+// #if (NTDDI_VERSION >= NTDDI_VISTA)
+// SHGetPathFromIDListEx returns a win32 file system path for the item in the name space.
+typedef int Z7_WIN_GPFIDL_FLAGS;
+
+extern "C" {
+typedef BOOL (WINAPI * Func_SHGetPathFromIDListW)(LPCITEMIDLIST pidl, LPWSTR pszPath);
+typedef BOOL (WINAPI * Func_SHGetPathFromIDListEx)(LPCITEMIDLIST pidl, PWSTR pszPath, DWORD cchPath, Z7_WIN_GPFIDL_FLAGS uOpts);
}
+#ifndef _UNICODE
-bool GetPathFromIDList(LPCITEMIDLIST itemIDList, CSysString &path)
+bool GetPathFromIDList(LPCITEMIDLIST itemIDList, AString &path)
+{
+ path.Empty();
+ const unsigned len = MAX_PATH + 16;
+ const bool result = BOOLToBool(::SHGetPathFromIDList(itemIDList, path.GetBuf(len)));
+ path.ReleaseBuf_CalcLen(len);
+ return result;
+}
+
+#endif
+
+bool GetPathFromIDList(LPCITEMIDLIST itemIDList, UString &path)
{
- const unsigned len = MAX_PATH * 2;
+ path.Empty();
+ unsigned len = MAX_PATH + 16;
+
+#ifdef _UNICODE
bool result = BOOLToBool(::SHGetPathFromIDList(itemIDList, path.GetBuf(len)));
+#else
+ const
+ Func_SHGetPathFromIDListW
+ shGetPathFromIDListW = Z7_GET_PROC_ADDRESS(
+ Func_SHGetPathFromIDListW, ::GetModuleHandleW(L"shell32.dll"),
+ "SHGetPathFromIDListW");
+ if (!shGetPathFromIDListW)
+ return false;
+ bool result = BOOLToBool(shGetPathFromIDListW(itemIDList, path.GetBuf(len)));
+#endif
+
+ if (!result)
+ {
+ ODS("==== GetPathFromIDList() SHGetPathFromIDList() returned false")
+ /* for long path we need SHGetPathFromIDListEx().
+ win10: SHGetPathFromIDListEx() for long path returns path with
+ with super path prefix "\\\\?\\". */
+ const
+ Func_SHGetPathFromIDListEx
+ func_SHGetPathFromIDListEx = Z7_GET_PROC_ADDRESS(
+ Func_SHGetPathFromIDListEx, ::GetModuleHandleW(L"shell32.dll"),
+ "SHGetPathFromIDListEx");
+ if (func_SHGetPathFromIDListEx)
+ {
+ ODS("==== GetPathFromIDList() (SHGetPathFromIDListEx)")
+ do
+ {
+ len *= 4;
+ result = BOOLToBool(func_SHGetPathFromIDListEx(itemIDList, path.GetBuf(len), len, 0));
+ if (result)
+ break;
+ }
+ while (len <= (1 << 16));
+ }
+ }
+
path.ReleaseBuf_CalcLen(len);
return result;
}
@@ -180,11 +641,16 @@ bool BrowseForFolder(HWND /* owner */, LPCTSTR /* title */,
#else
+/* win10: SHBrowseForFolder() doesn't support long paths,
+ even if long path suppport is enabled in registry and in manifest.
+ and SHBrowseForFolder() doesn't support super path prefix "\\\\?\\". */
+
bool BrowseForFolder(LPBROWSEINFO browseInfo, CSysString &resultPath)
{
+ resultPath.Empty();
NWindows::NCOM::CComInitializer comInitializer;
LPITEMIDLIST itemIDList = ::SHBrowseForFolder(browseInfo);
- if (itemIDList == NULL)
+ if (!itemIDList)
return false;
CItemIDList itemIDListHolder;
itemIDListHolder.Attach(itemIDList);
@@ -240,11 +706,18 @@ static bool BrowseForFolder(HWND owner, LPCTSTR title, UINT ulFlags,
browseInfo.lpszTitle = title;
// #endif
browseInfo.ulFlags = ulFlags;
- browseInfo.lpfn = (initialFolder != NULL) ? BrowseCallbackProc : NULL;
+ browseInfo.lpfn = initialFolder ? BrowseCallbackProc : NULL;
browseInfo.lParam = (LPARAM)initialFolder;
return BrowseForFolder(&browseInfo, resultPath);
}
+#ifdef Z7_OLD_WIN_SDK
+// ShlObj.h:
+#ifndef BIF_NEWDIALOGSTYLE
+#define BIF_NEWDIALOGSTYLE 0x0040
+#endif
+#endif
+
bool BrowseForFolder(HWND owner, LPCTSTR title,
LPCTSTR initialFolder, CSysString &resultPath)
{
@@ -259,38 +732,21 @@ bool BrowseForFolder(HWND owner, LPCTSTR title,
#ifndef _UNICODE
extern "C" {
-typedef BOOL (WINAPI * Func_SHGetPathFromIDListW)(LPCITEMIDLIST pidl, LPWSTR pszPath);
typedef LPITEMIDLIST (WINAPI * Func_SHBrowseForFolderW)(LPBROWSEINFOW lpbi);
}
-#define MY_CAST_FUNC (void(*)())
-// #define MY_CAST_FUNC
-
-bool GetPathFromIDList(LPCITEMIDLIST itemIDList, UString &path)
-{
- path.Empty();
- Func_SHGetPathFromIDListW shGetPathFromIDListW = (Func_SHGetPathFromIDListW)
- MY_CAST_FUNC
- ::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHGetPathFromIDListW");
- if (!shGetPathFromIDListW)
- return false;
- const unsigned len = MAX_PATH * 2;
- bool result = BOOLToBool(shGetPathFromIDListW(itemIDList, path.GetBuf(len)));
- path.ReleaseBuf_CalcLen(len);
- return result;
-}
-
-
static bool BrowseForFolder(LPBROWSEINFOW browseInfo, UString &resultPath)
{
NWindows::NCOM::CComInitializer comInitializer;
- Func_SHBrowseForFolderW shBrowseForFolderW = (Func_SHBrowseForFolderW)
- MY_CAST_FUNC
- ::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHBrowseForFolderW");
- if (!shBrowseForFolderW)
+ const
+ Func_SHBrowseForFolderW
+ f_SHBrowseForFolderW = Z7_GET_PROC_ADDRESS(
+ Func_SHBrowseForFolderW, ::GetModuleHandleW(L"shell32.dll"),
+ "SHBrowseForFolderW");
+ if (!f_SHBrowseForFolderW)
return false;
- LPITEMIDLIST itemIDList = shBrowseForFolderW(browseInfo);
- if (itemIDList == NULL)
+ LPITEMIDLIST itemIDList = f_SHBrowseForFolderW(browseInfo);
+ if (!itemIDList)
return false;
CItemIDList itemIDListHolder;
itemIDListHolder.Attach(itemIDList);
@@ -336,7 +792,7 @@ static bool BrowseForFolder(HWND owner, LPCWSTR title, UINT ulFlags,
browseInfo.pszDisplayName = displayName.GetBuf(MAX_PATH);
browseInfo.lpszTitle = title;
browseInfo.ulFlags = ulFlags;
- browseInfo.lpfn = (initialFolder != NULL) ? BrowseCallbackProc2 : NULL;
+ browseInfo.lpfn = initialFolder ? BrowseCallbackProc2 : NULL;
browseInfo.lParam = (LPARAM)initialFolder;
return BrowseForFolder(&browseInfo, resultPath);
}
diff --git a/3rdparty/lzma/CPP/Windows/Shell.h b/3rdparty/lzma/CPP/Windows/Shell.h
index de91d3f1142..b4cdb3048e1 100644
--- a/3rdparty/lzma/CPP/Windows/Shell.h
+++ b/3rdparty/lzma/CPP/Windows/Shell.h
@@ -1,17 +1,22 @@
// Windows/Shell.h
-#ifndef __WINDOWS_SHELL_H
-#define __WINDOWS_SHELL_H
+#ifndef ZIP7_WINDOWS_SHELL_H
+#define ZIP7_WINDOWS_SHELL_H
+#include "../Common/Common.h"
#include "../Common/MyWindows.h"
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <shlobj.h>
+#else
#include <ShlObj.h>
+#endif
#include "../Common/MyString.h"
#include "Defs.h"
-namespace NWindows{
-namespace NShell{
+namespace NWindows {
+namespace NShell {
/////////////////////////
// CItemIDList
@@ -20,6 +25,7 @@ namespace NShell{
class CItemIDList
{
LPITEMIDLIST m_Object;
+ Z7_CLASS_NO_COPY(CItemIDList)
public:
CItemIDList(): m_Object(NULL) {}
// CItemIDList(LPCITEMIDLIST itemIDList);
@@ -49,6 +55,7 @@ public:
/////////////////////////////
// CDrop
+/*
class CDrop
{
HDROP m_Object;
@@ -63,22 +70,51 @@ public:
operator HDROP() { return m_Object;}
bool QueryPoint(LPPOINT point)
{ return BOOLToBool(::DragQueryPoint(m_Object, point)); }
- void Finish() { ::DragFinish(m_Object); }
- UINT QueryFile(UINT fileIndex, LPTSTR fileName, UINT fileNameSize)
- { return ::DragQueryFile(m_Object, fileIndex, fileName, fileNameSize); }
+ void Finish()
+ {
+ ::DragFinish(m_Object);
+ }
+ UINT QueryFile(UINT fileIndex, LPTSTR fileName, UINT bufSize)
+ { return ::DragQueryFile(m_Object, fileIndex, fileName, bufSize); }
#ifndef _UNICODE
- UINT QueryFile(UINT fileIndex, LPWSTR fileName, UINT fileNameSize)
- { return ::DragQueryFileW(m_Object, fileIndex, fileName, fileNameSize); }
+ UINT QueryFile(UINT fileIndex, LPWSTR fileName, UINT bufSize)
+ { return ::DragQueryFileW(m_Object, fileIndex, fileName, bufSize); }
#endif
UINT QueryCountOfFiles();
- UString QueryFileName(UINT fileIndex);
+ void QueryFileName(UINT fileIndex, UString &fileName);
void QueryFileNames(UStringVector &fileNames);
};
-
+*/
#endif
-/////////////////////////////
-// Functions
+struct CFileAttribs
+{
+ int FirstDirIndex;
+ // DWORD Sum;
+ // DWORD Product;
+ // CRecordVector<DWORD> Vals;
+ // CRecordVector<bool> IsDirVector;
+
+ CFileAttribs()
+ {
+ Clear();
+ }
+
+ void Clear()
+ {
+ FirstDirIndex = -1;
+ // Sum = 0;
+ // Product = 0;
+ // IsDirVector.Clear();
+ }
+};
+
+
+/* read pathnames from HDROP or SHELLIDLIST.
+ The parser can return E_INVALIDARG, if there is some unexpected data in dataObject */
+HRESULT DataObject_GetData_HDROP_or_IDLIST_Names(IDataObject *dataObject, UStringVector &names);
+
+HRESULT DataObject_GetData_FILE_ATTRS(IDataObject *dataObject, CFileAttribs &attribs);
bool GetPathFromIDList(LPCITEMIDLIST itemIDList, CSysString &path);
bool BrowseForFolder(LPBROWSEINFO lpbi, CSysString &resultPath);
diff --git a/3rdparty/lzma/CPP/Windows/StdAfx.h b/3rdparty/lzma/CPP/Windows/StdAfx.h
index 1766dfa860a..bd5084fdbfe 100644
--- a/3rdparty/lzma/CPP/Windows/StdAfx.h
+++ b/3rdparty/lzma/CPP/Windows/StdAfx.h
@@ -1,7 +1,11 @@
// StdAfx.h
-#ifndef __STDAFX_H
-#define __STDAFX_H
+#ifndef ZIP7_INC_STDAFX_H
+#define ZIP7_INC_STDAFX_H
+
+#if defined(_MSC_VER) && _MSC_VER >= 1800
+#pragma warning(disable : 4464) // relative include path contains '..'
+#endif
#include "../Common/Common.h"
diff --git a/3rdparty/lzma/CPP/Windows/Synchronization.cpp b/3rdparty/lzma/CPP/Windows/Synchronization.cpp
index fbf919dcbda..d5542af4864 100644
--- a/3rdparty/lzma/CPP/Windows/Synchronization.cpp
+++ b/3rdparty/lzma/CPP/Windows/Synchronization.cpp
@@ -19,6 +19,30 @@ namespace NSynchronization {
DWORD WaitForMultipleObjects(DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout);
*/
+/* clang: we need to place some virtual functions in cpp file to rid off the warning:
+ 'CBaseHandle_WFMO' has no out-of-line virtual method definitions;
+ its vtable will be emitted in every translation unit */
+CBaseHandle_WFMO::~CBaseHandle_WFMO()
+{
+}
+
+bool CBaseEvent_WFMO::IsSignaledAndUpdate()
+{
+ if (this->_state == false)
+ return false;
+ if (this->_manual_reset == false)
+ this->_state = false;
+ return true;
+}
+
+bool CSemaphore_WFMO::IsSignaledAndUpdate()
+{
+ if (this->_count == 0)
+ return false;
+ this->_count--;
+ return true;
+}
+
DWORD WINAPI WaitForMultiObj_Any_Infinite(DWORD count, const CHandle_WFMO *handles)
{
if (count < 1)
diff --git a/3rdparty/lzma/CPP/Windows/Synchronization.h b/3rdparty/lzma/CPP/Windows/Synchronization.h
index 7d2e8d2aef2..afd03d2cb06 100644
--- a/3rdparty/lzma/CPP/Windows/Synchronization.h
+++ b/3rdparty/lzma/CPP/Windows/Synchronization.h
@@ -1,7 +1,7 @@
// Windows/Synchronization.h
-#ifndef __WINDOWS_SYNCHRONIZATION_H
-#define __WINDOWS_SYNCHRONIZATION_H
+#ifndef ZIP7_INC_WINDOWS_SYNCHRONIZATION_H
+#define ZIP7_INC_WINDOWS_SYNCHRONIZATION_H
#include "../../C/Threads.h"
@@ -32,14 +32,14 @@ public:
WRes Create(bool manualReset, bool initiallyOwn, LPCTSTR name = NULL, LPSECURITY_ATTRIBUTES sa = NULL)
{
_object = ::CreateEvent(sa, BoolToBOOL(manualReset), BoolToBOOL(initiallyOwn), name);
- if (name == NULL && _object != 0)
+ if (name == NULL && _object != NULL)
return 0;
return ::GetLastError();
}
WRes Open(DWORD desiredAccess, bool inheritHandle, LPCTSTR name)
{
_object = ::OpenEvent(desiredAccess, BoolToBOOL(inheritHandle), name);
- if (_object != 0)
+ if (_object != NULL)
return 0;
return ::GetLastError();
}
@@ -227,8 +227,8 @@ public:
}
WRes Create()
{
- RINOK(::pthread_mutex_init(&_mutex, 0));
- WRes ret = ::pthread_cond_init(&_cond, 0);
+ RINOK(::pthread_mutex_init(&_mutex, NULL))
+ const WRes ret = ::pthread_cond_init(&_cond, NULL);
_isValid = 1;
return ret;
}
@@ -246,8 +246,8 @@ public:
}
WRes LeaveAndSignal()
{
- WRes res1 = ::pthread_cond_broadcast(&_cond);
- WRes res2 = ::pthread_mutex_unlock(&_mutex);
+ const WRes res1 = ::pthread_cond_broadcast(&_cond);
+ const WRes res2 = ::pthread_mutex_unlock(&_mutex);
return (res2 ? res2 : res1);
}
};
@@ -268,6 +268,7 @@ struct CBaseHandle_WFMO MY_UNCOPYABLE
CSynchro *_sync;
CBaseHandle_WFMO(): _sync(NULL) {}
+ virtual ~CBaseHandle_WFMO();
operator CHandle_WFMO() { return this; }
virtual bool IsSignaledAndUpdate() = 0;
@@ -283,7 +284,7 @@ public:
// bool IsCreated() { return (this->_sync != NULL); }
// CBaseEvent_WFMO() { ; }
- ~CBaseEvent_WFMO() { Close(); }
+ // ~CBaseEvent_WFMO() Z7_override { Close(); }
WRes Close() { this->_sync = NULL; return 0; }
@@ -299,37 +300,30 @@ public:
WRes Set()
{
- RINOK(this->_sync->Enter());
+ RINOK(this->_sync->Enter())
this->_state = true;
return this->_sync->LeaveAndSignal();
}
WRes Reset()
{
- RINOK(this->_sync->Enter());
+ RINOK(this->_sync->Enter())
this->_state = false;
return this->_sync->Leave();
}
- virtual bool IsSignaledAndUpdate()
- {
- if (this->_state == false)
- return false;
- if (this->_manual_reset == false)
- this->_state = false;
- return true;
- }
+ virtual bool IsSignaledAndUpdate() Z7_override;
};
-class CManualResetEvent_WFMO: public CBaseEvent_WFMO
+class CManualResetEvent_WFMO Z7_final: public CBaseEvent_WFMO
{
public:
WRes Create(CSynchro *sync, bool initiallyOwn = false) { return CBaseEvent_WFMO::Create(sync, true, initiallyOwn); }
};
-class CAutoResetEvent_WFMO: public CBaseEvent_WFMO
+class CAutoResetEvent_WFMO Z7_final: public CBaseEvent_WFMO
{
public:
WRes Create(CSynchro *sync) { return CBaseEvent_WFMO::Create(sync, false, false); }
@@ -340,7 +334,7 @@ public:
};
-class CSemaphore_WFMO : public CBaseHandle_WFMO
+class CSemaphore_WFMO Z7_final: public CBaseHandle_WFMO
{
UInt32 _count;
UInt32 _maxCount;
@@ -365,11 +359,11 @@ public:
if (releaseCount < 1)
return EINVAL;
- RINOK(this->_sync->Enter());
+ RINOK(this->_sync->Enter())
UInt32 newCount = this->_count + releaseCount;
if (newCount > this->_maxCount)
{
- RINOK(this->_sync->Leave());
+ RINOK(this->_sync->Leave())
return ERROR_TOO_MANY_POSTS; // EINVAL
}
this->_count = newCount;
@@ -377,13 +371,7 @@ public:
return this->_sync->LeaveAndSignal();
}
- virtual bool IsSignaledAndUpdate()
- {
- if (this->_count == 0)
- return false;
- this->_count--;
- return true;
- }
+ virtual bool IsSignaledAndUpdate() Z7_override;
};
#endif // _WIN32
diff --git a/3rdparty/lzma/CPP/Windows/System.cpp b/3rdparty/lzma/CPP/Windows/System.cpp
index 3a14b77ddd2..dbe287a0c45 100644
--- a/3rdparty/lzma/CPP/Windows/System.cpp
+++ b/3rdparty/lzma/CPP/Windows/System.cpp
@@ -4,6 +4,7 @@
#ifndef _WIN32
#include <unistd.h>
+#include <limits.h>
#ifdef __APPLE__
#include <sys/sysctl.h>
#else
@@ -74,7 +75,7 @@ BOOL CProcessAffinity::Get()
return TRUE;
*/
- #ifdef _7ZIP_AFFINITY_SUPPORTED
+ #ifdef Z7_AFFINITY_SUPPORTED
// numSysThreads = sysconf(_SC_NPROCESSORS_ONLN); // The number of processors currently online
if (sched_getaffinity(0, sizeof(cpu_set), &cpu_set) != 0)
@@ -93,7 +94,7 @@ BOOL CProcessAffinity::Get()
UInt32 GetNumberOfProcessors()
{
- #ifndef _7ZIP_ST
+ #ifndef Z7_ST
long n = sysconf(_SC_NPROCESSORS_CONF); // The number of processors configured
if (n < 1)
n = 1;
@@ -110,7 +111,8 @@ UInt32 GetNumberOfProcessors()
#ifndef UNDER_CE
-#if !defined(_WIN64) && defined(__GNUC__)
+#if !defined(_WIN64) && \
+ (defined(__MINGW32_VERSION) || defined(Z7_OLD_WIN_SDK))
typedef struct _MY_MEMORYSTATUSEX {
DWORD dwLength;
@@ -131,7 +133,7 @@ typedef struct _MY_MEMORYSTATUSEX {
#endif
-typedef BOOL (WINAPI *GlobalMemoryStatusExP)(MY_LPMEMORYSTATUSEX lpBuffer);
+typedef BOOL (WINAPI *Func_GlobalMemoryStatusEx)(MY_LPMEMORYSTATUSEX lpBuffer);
#endif // !UNDER_CE
@@ -155,9 +157,11 @@ bool GetRamSize(UInt64 &size)
#else
#ifndef UNDER_CE
- GlobalMemoryStatusExP globalMemoryStatusEx = (GlobalMemoryStatusExP)
- (void *)::GetProcAddress(::GetModuleHandleA("kernel32.dll"), "GlobalMemoryStatusEx");
- if (globalMemoryStatusEx && globalMemoryStatusEx(&stat))
+ const
+ Func_GlobalMemoryStatusEx fn = Z7_GET_PROC_ADDRESS(
+ Func_GlobalMemoryStatusEx, ::GetModuleHandleA("kernel32.dll"),
+ "GlobalMemoryStatusEx");
+ if (fn && fn(&stat))
{
size = MyMin(stat.ullTotalVirtual, stat.ullTotalPhys);
return true;
@@ -231,4 +235,44 @@ bool GetRamSize(UInt64 &size)
#endif
+
+unsigned long Get_File_OPEN_MAX()
+{
+ #ifdef _WIN32
+ return (1 << 24) - (1 << 16); // ~16M handles
+ #else
+ // some linux versions have default open file limit for user process of 1024 files.
+ long n = sysconf(_SC_OPEN_MAX);
+ // n = -1; // for debug
+ // n = 9; // for debug
+ if (n < 1)
+ {
+ // n = OPEN_MAX; // ???
+ // n = FOPEN_MAX; // = 16 : <stdio.h>
+ #ifdef _POSIX_OPEN_MAX
+ n = _POSIX_OPEN_MAX; // = 20 : <limits.h>
+ #else
+ n = 30; // our limit
+ #endif
+ }
+ return (unsigned long)n;
+ #endif
+}
+
+unsigned Get_File_OPEN_MAX_Reduced_for_3_tasks()
+{
+ unsigned long numFiles_OPEN_MAX = NSystem::Get_File_OPEN_MAX();
+ const unsigned delta = 10; // the reserve for another internal needs of process
+ if (numFiles_OPEN_MAX > delta)
+ numFiles_OPEN_MAX -= delta;
+ else
+ numFiles_OPEN_MAX = 1;
+ numFiles_OPEN_MAX /= 3; // we suppose that we have up to 3 tasks in total for multiple file processing
+ numFiles_OPEN_MAX = MyMax(numFiles_OPEN_MAX, (unsigned long)3);
+ unsigned n = (UInt32)(UInt32)-1;
+ if (n > numFiles_OPEN_MAX)
+ n = (unsigned)numFiles_OPEN_MAX;
+ return n;
+}
+
}}
diff --git a/3rdparty/lzma/CPP/Windows/System.h b/3rdparty/lzma/CPP/Windows/System.h
index 23cb0dabcb0..06500074c7a 100644
--- a/3rdparty/lzma/CPP/Windows/System.h
+++ b/3rdparty/lzma/CPP/Windows/System.h
@@ -1,7 +1,7 @@
// Windows/System.h
-#ifndef __WINDOWS_SYSTEM_H
-#define __WINDOWS_SYSTEM_H
+#ifndef ZIP7_INC_WINDOWS_SYSTEM_H
+#define ZIP7_INC_WINDOWS_SYSTEM_H
#ifndef _WIN32
// #include <sched.h>
@@ -9,11 +9,11 @@
#endif
#include "../Common/MyTypes.h"
+#include "../Common/MyWindows.h"
namespace NWindows {
namespace NSystem {
-
#ifdef _WIN32
UInt32 CountAffinity(DWORD_PTR mask);
@@ -64,7 +64,7 @@ struct CProcessAffinity
UInt32 GetNumSystemThreads() const { return (UInt32)numSysThreads; }
BOOL Get();
- #ifdef _7ZIP_AFFINITY_SUPPORTED
+ #ifdef Z7_AFFINITY_SUPPORTED
CCpuSet cpu_set;
@@ -86,7 +86,7 @@ struct CProcessAffinity
return sched_setaffinity(0, sizeof(cpu_set), &cpu_set) == 0;
}
- #else
+ #else // Z7_AFFINITY_SUPPORTED
void InitST()
{
@@ -114,16 +114,19 @@ struct CProcessAffinity
return FALSE;
}
- #endif
+ #endif // Z7_AFFINITY_SUPPORTED
};
-#endif
+#endif // _WIN32
UInt32 GetNumberOfProcessors();
bool GetRamSize(UInt64 &size); // returns false, if unknown ram size
+unsigned long Get_File_OPEN_MAX();
+unsigned Get_File_OPEN_MAX_Reduced_for_3_tasks();
+
}}
#endif
diff --git a/3rdparty/lzma/CPP/Windows/SystemInfo.cpp b/3rdparty/lzma/CPP/Windows/SystemInfo.cpp
index d882a8ee404..6bafc8046b3 100644
--- a/3rdparty/lzma/CPP/Windows/SystemInfo.cpp
+++ b/3rdparty/lzma/CPP/Windows/SystemInfo.cpp
@@ -102,38 +102,44 @@ static void PrintHex(AString &s, UInt64 v)
#ifdef MY_CPU_X86_OR_AMD64
+Z7_NO_INLINE
static void PrintCpuChars(AString &s, UInt32 v)
{
- for (int j = 0; j < 4; j++)
+ for (unsigned j = 0; j < 4; j++)
{
Byte b = (Byte)(v & 0xFF);
v >>= 8;
if (b == 0)
break;
- s += (char)b;
+ if (b >= 0x20 && b <= 0x7f)
+ s += (char)b;
+ else
+ {
+ s += '[';
+ char temp[16];
+ ConvertUInt32ToHex(b, temp);
+ s += temp;
+ s += ']';
+ }
}
}
-static void x86cpuid_to_String(const Cx86cpuid &c, AString &s, AString &ver)
+static void x86cpuid_to_String(AString &s)
{
s.Empty();
- UInt32 maxFunc2 = 0;
- UInt32 t[3];
+ UInt32 a[4];
+ // cpuid was called already. So we don't check for cpuid availability here
+ z7_x86_cpuid(a, 0x80000000);
- MyCPUID(0x80000000, &maxFunc2, &t[0], &t[1], &t[2]);
-
- bool fullNameIsAvail = (maxFunc2 >= 0x80000004);
-
- if (fullNameIsAvail)
+ if (a[0] >= 0x80000004) // if (maxFunc2 >= hi+4) the full name is available
{
for (unsigned i = 0; i < 3; i++)
{
- UInt32 d[4] = { 0 };
- MyCPUID(0x80000002 + i, &d[0], &d[1], &d[2], &d[3]);
+ z7_x86_cpuid(a, 0x80000002 + i);
for (unsigned j = 0; j < 4; j++)
- PrintCpuChars(s, d[j]);
+ PrintCpuChars(s, a[j]);
}
}
@@ -141,16 +147,14 @@ static void x86cpuid_to_String(const Cx86cpuid &c, AString &s, AString &ver)
if (s.IsEmpty())
{
- for (int i = 0; i < 3; i++)
- PrintCpuChars(s, c.vendor[i]);
+ z7_x86_cpuid(a, 0);
+ for (unsigned i = 1; i < 4; i++)
+ {
+ const unsigned j = (i ^ (i >> 1));
+ PrintCpuChars(s, a[j]);
+ }
s.Trim();
}
-
- {
- char temp[32];
- ConvertUInt32ToHex(c.ver, temp);
- ver += temp;
- }
}
/*
@@ -184,7 +188,7 @@ static void x86cpuid_all_to_String(AString &s)
{
char temp[32];
ConvertUInt32ToHex8Digits(d[i], temp);
- s += " ";
+ s.Add_Space();
s += temp;
}
}
@@ -215,12 +219,12 @@ static const char * const k_PROCESSOR_ARCHITECTURE[] =
, "ARM32_ON_WIN64"
};
-#define MY__PROCESSOR_ARCHITECTURE_INTEL 0
-#define MY__PROCESSOR_ARCHITECTURE_AMD64 9
+#define Z7_WIN_PROCESSOR_ARCHITECTURE_INTEL 0
+#define Z7_WIN_PROCESSOR_ARCHITECTURE_AMD64 9
-#define MY__PROCESSOR_INTEL_PENTIUM 586
-#define MY__PROCESSOR_AMD_X8664 8664
+#define Z7_WIN_PROCESSOR_INTEL_PENTIUM 586
+#define Z7_WIN_PROCESSOR_AMD_X8664 8664
/*
static const CUInt32PCharPair k_PROCESSOR[] =
@@ -303,19 +307,20 @@ static const char * const k_PF[] =
#endif
-#ifdef _WIN32
-
-static void PrintPage(AString &s, UInt32 v)
+static void PrintPage(AString &s, UInt64 v)
{
- if ((v & 0x3FF) == 0)
+ const char *t = "B";
+ if ((v & 0x3ff) == 0)
{
- s.Add_UInt32(v >> 10);
- s += "K";
+ v >>= 10;
+ t = "KB";
}
- else
- s.Add_UInt32(v >> 10);
+ s.Add_UInt64(v);
+ s += t;
}
+#ifdef _WIN32
+
static AString TypeToString2(const char * const table[], unsigned num, UInt32 value)
{
char sz[16];
@@ -330,7 +335,7 @@ static AString TypeToString2(const char * const table[], unsigned num, UInt32 va
return (AString)p;
}
-// #if defined(_7ZIP_LARGE_PAGES) || defined(_WIN32)
+// #if defined(Z7_LARGE_PAGES) || defined(_WIN32)
// #ifdef _WIN32
void PrintSize_KMGT_Or_Hex(AString &s, UInt64 v)
{
@@ -342,32 +347,32 @@ void PrintSize_KMGT_Or_Hex(AString &s, UInt64 v)
}}}}
else
{
+ // s += "0x";
PrintHex(s, v);
return;
}
- char temp[32];
- ConvertUInt64ToString(v, temp);
- s += temp;
+ s.Add_UInt64(v);
if (c)
s += c;
+ s += 'B';
}
// #endif
// #endif
static void SysInfo_To_String(AString &s, const SYSTEM_INFO &si)
{
- s += TypeToString2(k_PROCESSOR_ARCHITECTURE, ARRAY_SIZE(k_PROCESSOR_ARCHITECTURE), si.wProcessorArchitecture);
+ s += TypeToString2(k_PROCESSOR_ARCHITECTURE, Z7_ARRAY_SIZE(k_PROCESSOR_ARCHITECTURE), si.wProcessorArchitecture);
- if (!( (si.wProcessorArchitecture == MY__PROCESSOR_ARCHITECTURE_INTEL && si.dwProcessorType == MY__PROCESSOR_INTEL_PENTIUM)
- || (si.wProcessorArchitecture == MY__PROCESSOR_ARCHITECTURE_AMD64 && si.dwProcessorType == MY__PROCESSOR_AMD_X8664)))
+ if (!( (si.wProcessorArchitecture == Z7_WIN_PROCESSOR_ARCHITECTURE_INTEL && si.dwProcessorType == Z7_WIN_PROCESSOR_INTEL_PENTIUM)
+ || (si.wProcessorArchitecture == Z7_WIN_PROCESSOR_ARCHITECTURE_AMD64 && si.dwProcessorType == Z7_WIN_PROCESSOR_AMD_X8664)))
{
- s += " ";
- // s += TypePairToString(k_PROCESSOR, ARRAY_SIZE(k_PROCESSOR), si.dwProcessorType);
+ s.Add_Space();
+ // s += TypePairToString(k_PROCESSOR, Z7_ARRAY_SIZE(k_PROCESSOR), si.dwProcessorType);
s.Add_UInt32(si.dwProcessorType);
}
- s += " ";
+ s.Add_Space();
PrintHex(s, si.wProcessorLevel);
- s += ".";
+ s.Add_Dot();
PrintHex(s, si.wProcessorRevision);
if ((UInt64)si.dwActiveProcessorMask + 1 != ((UInt64)1 << si.dwNumberOfProcessors))
if ((UInt64)si.dwActiveProcessorMask + 1 != 0 || si.dwNumberOfProcessors != sizeof(UInt64) * 8)
@@ -387,9 +392,9 @@ static void SysInfo_To_String(AString &s, const SYSTEM_INFO &si)
s += " gran:";
PrintPage(s, si.dwAllocationGranularity);
}
- s += " ";
+ s.Add_Space();
- DWORD_PTR minAdd = (DWORD_PTR)si.lpMinimumApplicationAddress;
+ const DWORD_PTR minAdd = (DWORD_PTR)si.lpMinimumApplicationAddress;
UInt64 maxSize = (UInt64)(DWORD_PTR)si.lpMaximumApplicationAddress + 1;
const UInt32 kReserveSize = ((UInt32)1 << 16);
if (minAdd != kReserveSize)
@@ -419,7 +424,7 @@ static void Add_sysctlbyname_to_String(const char *name, AString &s)
{
size_t bufSize = 256;
char buf[256];
- if (My_sysctlbyname_Get(name, &buf, &bufSize) == 0)
+ if (z7_sysctlbyname_Get(name, &buf, &bufSize) == 0)
s += buf;
}
#endif
@@ -440,12 +445,14 @@ void GetSysInfo(AString &s1, AString &s2)
}
#if !defined(_WIN64) && !defined(UNDER_CE)
- Func_GetNativeSystemInfo fn_GetNativeSystemInfo = (Func_GetNativeSystemInfo)(void *)GetProcAddress(
- GetModuleHandleA("kernel32.dll"), "GetNativeSystemInfo");
- if (fn_GetNativeSystemInfo)
+ const
+ Func_GetNativeSystemInfo fn = Z7_GET_PROC_ADDRESS(
+ Func_GetNativeSystemInfo, GetModuleHandleA("kernel32.dll"),
+ "GetNativeSystemInfo");
+ if (fn)
{
SYSTEM_INFO si2;
- fn_GetNativeSystemInfo(&si2);
+ fn(&si2);
// if (memcmp(&si, &si2, sizeof(si)) != 0)
{
// s += " - ";
@@ -500,18 +507,20 @@ void CCpuName::Fill()
#ifdef MY_CPU_X86_OR_AMD64
{
- Cx86cpuid cpuid;
- if (x86cpuid_CheckAndRead(&cpuid))
- {
- x86cpuid_to_String(cpuid, s, Revision);
- }
+ #if !defined(MY_CPU_AMD64)
+ if (!z7_x86_cpuid_GetMaxFunc())
+ s += "x86";
else
- {
- #ifdef MY_CPU_AMD64
- s += "x64";
- #else
- s += "x86";
#endif
+ {
+ x86cpuid_to_String(s);
+ {
+ UInt32 a[4];
+ z7_x86_cpuid(a, 1);
+ char temp[16];
+ ConvertUInt32ToHex(a[0], temp);
+ Revision += temp;
+ }
}
}
#elif defined(__APPLE__)
@@ -534,12 +543,12 @@ void CCpuName::Fill()
{
AString s2;
UInt32 v = 0;
- if (My_sysctlbyname_Get_UInt32("machdep.cpu.core_count", &v) == 0)
+ if (z7_sysctlbyname_Get_UInt32("machdep.cpu.core_count", &v) == 0)
{
s2.Add_UInt32(v);
s2 += 'C';
}
- if (My_sysctlbyname_Get_UInt32("machdep.cpu.thread_count", &v) == 0)
+ if (z7_sysctlbyname_Get_UInt32("machdep.cpu.thread_count", &v) == 0)
{
s2.Add_UInt32(v);
s2 += 'T';
@@ -561,7 +570,7 @@ void CCpuName::Fill()
LONG res[2];
CByteBuffer bufs[2];
{
- for (int i = 0; i < 2; i++)
+ for (unsigned i = 0; i < 2; i++)
{
UInt32 size = 0;
res[i] = key.QueryValue(i == 0 ?
@@ -574,7 +583,7 @@ void CCpuName::Fill()
}
if (res[0] == ERROR_SUCCESS || res[1] == ERROR_SUCCESS)
{
- for (int i = 0; i < 2; i++)
+ for (unsigned i = 0; i < 2; i++)
{
if (i == 1)
Microcode += "->";
@@ -598,7 +607,7 @@ void CCpuName::Fill()
#endif
- #ifdef _7ZIP_LARGE_PAGES
+ #ifdef Z7_LARGE_PAGES
Add_LargePages_String(LargePages);
#endif
}
@@ -608,7 +617,7 @@ void AddCpuFeatures(AString &s)
{
#ifdef _WIN32
// const unsigned kNumFeatures_Extra = 32; // we check also for unknown features
- // const unsigned kNumFeatures = ARRAY_SIZE(k_PF) + kNumFeatures_Extra;
+ // const unsigned kNumFeatures = Z7_ARRAY_SIZE(k_PF) + kNumFeatures_Extra;
const unsigned kNumFeatures = 64;
UInt64 flags = 0;
for (unsigned i = 0; i < kNumFeatures; i++)
@@ -617,7 +626,7 @@ void AddCpuFeatures(AString &s)
{
flags += (UInt64)1 << i;
// s.Add_Space_if_NotEmpty();
- // s += TypeToString2(k_PF, ARRAY_SIZE(k_PF), i);
+ // s += TypeToString2(k_PF, Z7_ARRAY_SIZE(k_PF), i);
}
}
s.Add_OptSpaced("f:");
@@ -626,11 +635,10 @@ void AddCpuFeatures(AString &s)
#elif defined(__APPLE__)
{
UInt32 v = 0;
- if (My_sysctlbyname_Get_UInt32("hw.pagesize", &v) == 0)
+ if (z7_sysctlbyname_Get_UInt32("hw.pagesize", &v) == 0)
{
- s += "PageSize:";
- s.Add_UInt32(v >> 10);
- s += "KB";
+ s.Add_OptSpaced("PageSize:");
+ PrintPage(s, v);
}
}
@@ -639,10 +647,8 @@ void AddCpuFeatures(AString &s)
const long v = sysconf(_SC_PAGESIZE);
if (v != -1)
{
- s.Add_Space_if_NotEmpty();
- s += "PageSize:";
- s.Add_UInt32((UInt32)(v >> 10));
- s += "KB";
+ s.Add_OptSpaced("PageSize:");
+ PrintPage(s, (unsigned long)v);
}
#if !defined(_AIX)
@@ -659,11 +665,11 @@ void AddCpuFeatures(AString &s)
const int pos = s2.Find('[');
if (pos >= 0)
{
- const int pos2 = s2.Find(']', pos + 1);
+ const int pos2 = s2.Find(']', (unsigned)pos + 1);
if (pos2 >= 0)
{
- s2.DeleteFrom(pos2);
- s2.DeleteFrontal(pos + 1);
+ s2.DeleteFrom((unsigned)pos2);
+ s2.DeleteFrontal((unsigned)pos + 1);
}
}
s += s2;
@@ -722,10 +728,13 @@ EXTERN_C_END
static BOOL My_RtlGetVersion(OSVERSIONINFOEXW *vi)
{
- HMODULE ntdll = ::GetModuleHandleW(L"ntdll.dll");
+ const HMODULE ntdll = ::GetModuleHandleW(L"ntdll.dll");
if (!ntdll)
return FALSE;
- Func_RtlGetVersion func = (Func_RtlGetVersion)(void *)GetProcAddress(ntdll, "RtlGetVersion");
+ const
+ Func_RtlGetVersion func = Z7_GET_PROC_ADDRESS(
+ Func_RtlGetVersion, ntdll,
+ "RtlGetVersion");
if (!func)
return FALSE;
func(vi);
@@ -752,18 +761,18 @@ void GetOsInfoText(AString &sRes)
s += "Windows";
if (vi.dwPlatformId != VER_PLATFORM_WIN32_NT)
s.Add_UInt32(vi.dwPlatformId);
- s += " "; s.Add_UInt32(vi.dwMajorVersion);
- s += "."; s.Add_UInt32(vi.dwMinorVersion);
- s += " "; s.Add_UInt32(vi.dwBuildNumber);
+ s.Add_Space(); s.Add_UInt32(vi.dwMajorVersion);
+ s.Add_Dot(); s.Add_UInt32(vi.dwMinorVersion);
+ s.Add_Space(); s.Add_UInt32(vi.dwBuildNumber);
if (vi.wServicePackMajor != 0 || vi.wServicePackMinor != 0)
{
s += " SP:"; s.Add_UInt32(vi.wServicePackMajor);
- s += "."; s.Add_UInt32(vi.wServicePackMinor);
+ s.Add_Dot(); s.Add_UInt32(vi.wServicePackMinor);
}
// s += " Suite:"; PrintHex(s, vi.wSuiteMask);
// s += " Type:"; s.Add_UInt32(vi.wProductType);
- // s += " "; s += GetOemString(vi.szCSDVersion);
+ // s.Add_Space(); s += GetOemString(vi.szCSDVersion);
}
/*
{
@@ -793,6 +802,17 @@ void GetOsInfoText(AString &sRes)
#endif // _WIN32
sRes += s;
+ #ifdef MY_CPU_X86_OR_AMD64
+ {
+ AString s2;
+ GetVirtCpuid(s2);
+ if (!s2.IsEmpty())
+ {
+ sRes += " : ";
+ sRes += s2;
+ }
+ }
+ #endif
}
@@ -875,6 +895,61 @@ void GetCpuName_MultiLine(AString &s)
}
}
+
+#ifdef MY_CPU_X86_OR_AMD64
+
+void GetVirtCpuid(AString &s)
+{
+ const UInt32 kHv = 0x40000000;
+
+ Z7_IF_X86_CPUID_SUPPORTED
+ {
+ UInt32 a[4];
+ z7_x86_cpuid(a, kHv);
+
+ if (a[0] < kHv || a[0] >= kHv + (1 << 16))
+ return;
+ {
+ {
+ for (unsigned j = 1; j < 4; j++)
+ PrintCpuChars(s, a[j]);
+ }
+ }
+ if (a[0] >= kHv + 1)
+ {
+ UInt32 d[4];
+ z7_x86_cpuid(d, kHv + 1);
+ s += " : ";
+ PrintCpuChars(s, d[0]);
+ if (a[0] >= kHv + 2)
+ {
+ z7_x86_cpuid(d, kHv + 2);
+ s += " : ";
+ s.Add_UInt32(d[1] >> 16);
+ s.Add_Dot(); s.Add_UInt32(d[1] & 0xffff);
+ s.Add_Dot(); s.Add_UInt32(d[0]);
+ s.Add_Dot(); s.Add_UInt32(d[2]);
+ s.Add_Dot(); s.Add_UInt32(d[3] >> 24);
+ s.Add_Dot(); s.Add_UInt32(d[3] & 0xffffff);
+ }
+ /*
+ if (a[0] >= kHv + 5)
+ {
+ z7_x86_cpuid(d, kHv + 5);
+ s += " : ";
+ s.Add_UInt32(d[0]);
+ s += "p";
+ s.Add_UInt32(d[1]);
+ s += "t";
+ }
+ */
+ }
+ }
+}
+
+#endif
+
+
void GetCompiler(AString &s)
{
#ifdef __VERSION__
@@ -884,28 +959,28 @@ void GetCompiler(AString &s)
#ifdef __GNUC__
s += " GCC ";
s.Add_UInt32(__GNUC__);
- s += '.';
+ s.Add_Dot();
s.Add_UInt32(__GNUC_MINOR__);
- s += '.';
+ s.Add_Dot();
s.Add_UInt32(__GNUC_PATCHLEVEL__);
#endif
#ifdef __clang__
s += " CLANG ";
s.Add_UInt32(__clang_major__);
- s += '.';
+ s.Add_Dot();
s.Add_UInt32(__clang_minor__);
#endif
#ifdef __xlC__
s += " XLC ";
s.Add_UInt32(__xlC__ >> 8);
- s += '.';
+ s.Add_Dot();
s.Add_UInt32(__xlC__ & 0xFF);
#ifdef __xlC_ver__
- s += '.';
+ s.Add_Dot();
s.Add_UInt32(__xlC_ver__ >> 8);
- s += '.';
+ s.Add_Dot();
s.Add_UInt32(__xlC_ver__ & 0xFF);
#endif
#endif
@@ -914,4 +989,34 @@ void GetCompiler(AString &s)
s += " MSC ";
s.Add_UInt32(_MSC_VER);
#endif
+
+ #if defined(__AVX2__)
+ #define MY_CPU_COMPILE_ISA "AVX2"
+ #elif defined(__AVX__)
+ #define MY_CPU_COMPILE_ISA "AVX"
+ #elif defined(__SSE2__)
+ #define MY_CPU_COMPILE_ISA "SSE2"
+ #elif defined(_M_IX86_FP) && (_M_IX86_FP >= 2)
+ #define MY_CPU_COMPILE_ISA "SSE2"
+ #elif defined(__SSE__)
+ #define MY_CPU_COMPILE_ISA "SSE"
+ #elif defined(_M_IX86_FP) && (_M_IX86_FP >= 1)
+ #define MY_CPU_COMPILE_ISA "SSE"
+ #elif defined(__i686__)
+ #define MY_CPU_COMPILE_ISA "i686"
+ #elif defined(__i586__)
+ #define MY_CPU_COMPILE_ISA "i586"
+ #elif defined(__i486__)
+ #define MY_CPU_COMPILE_ISA "i486"
+ #elif defined(__i386__)
+ #define MY_CPU_COMPILE_ISA "i386"
+ #elif defined(_M_IX86_FP)
+ #define MY_CPU_COMPILE_ISA "IA32"
+ #endif
+
+
+ #ifdef MY_CPU_COMPILE_ISA
+ s += ':';
+ s.Add_OptSpaced(MY_CPU_COMPILE_ISA);
+ #endif
}
diff --git a/3rdparty/lzma/CPP/Windows/SystemInfo.h b/3rdparty/lzma/CPP/Windows/SystemInfo.h
index e941d0aa418..c2e2e3b19fa 100644
--- a/3rdparty/lzma/CPP/Windows/SystemInfo.h
+++ b/3rdparty/lzma/CPP/Windows/SystemInfo.h
@@ -1,7 +1,7 @@
// Windows/SystemInfo.h
-#ifndef __WINDOWS_SYSTEM_INFO_H
-#define __WINDOWS_SYSTEM_INFO_H
+#ifndef ZIP7_INC_WINDOWS_SYSTEM_INFO_H
+#define ZIP7_INC_WINDOWS_SYSTEM_INFO_H
#include "../Common/MyString.h"
@@ -14,5 +14,6 @@ void PrintSize_KMGT_Or_Hex(AString &s, UInt64 v);
void Add_LargePages_String(AString &s);
void GetCompiler(AString &s);
+void GetVirtCpuid(AString &s);
#endif
diff --git a/3rdparty/lzma/CPP/Windows/Thread.h b/3rdparty/lzma/CPP/Windows/Thread.h
index 5fca173f00d..d72f64c47ab 100644
--- a/3rdparty/lzma/CPP/Windows/Thread.h
+++ b/3rdparty/lzma/CPP/Windows/Thread.h
@@ -1,7 +1,7 @@
// Windows/Thread.h
-#ifndef __WINDOWS_THREAD_H
-#define __WINDOWS_THREAD_H
+#ifndef ZIP7_INC_WINDOWS_THREAD_H
+#define ZIP7_INC_WINDOWS_THREAD_H
#include "../../C/Threads.h"
@@ -13,7 +13,7 @@ class CThread MY_UNCOPYABLE
{
::CThread thread;
public:
- CThread() { Thread_Construct(&thread); }
+ CThread() { Thread_CONSTRUCT(&thread) }
~CThread() { Close(); }
bool IsCreated() { return Thread_WasCreated(&thread) != 0; }
WRes Close() { return Thread_Close(&thread); }
diff --git a/3rdparty/lzma/CPP/Windows/TimeUtils.cpp b/3rdparty/lzma/CPP/Windows/TimeUtils.cpp
index 77d2c510293..e80ae13dcac 100644
--- a/3rdparty/lzma/CPP/Windows/TimeUtils.cpp
+++ b/3rdparty/lzma/CPP/Windows/TimeUtils.cpp
@@ -258,7 +258,7 @@ void GetCurUtc_FiTime(CFiTime &ft) throw()
FiTime_Clear(ft);
struct timeval now;
- if (gettimeofday(&now, 0 ) == 0)
+ if (gettimeofday(&now, NULL) == 0)
{
ft.tv_sec = now.tv_sec;
ft.tv_nsec = now.tv_usec * 1000;
@@ -272,7 +272,7 @@ void GetCurUtcFileTime(FILETIME &ft) throw()
{
UInt64 v = 0;
struct timeval now;
- if (gettimeofday(&now, 0 ) == 0)
+ if (gettimeofday(&now, NULL) == 0)
{
v = ((UInt64)now.tv_sec + kUnixTimeOffset) *
kNumTimeQuantumsInSecond + (UInt64)now.tv_usec * 10;
diff --git a/3rdparty/lzma/CPP/Windows/TimeUtils.h b/3rdparty/lzma/CPP/Windows/TimeUtils.h
index 60ee739f221..4a9d0f2fade 100644
--- a/3rdparty/lzma/CPP/Windows/TimeUtils.h
+++ b/3rdparty/lzma/CPP/Windows/TimeUtils.h
@@ -1,7 +1,7 @@
// Windows/TimeUtils.h
-#ifndef __WINDOWS_TIME_UTILS_H
-#define __WINDOWS_TIME_UTILS_H
+#ifndef ZIP7_INC_WINDOWS_TIME_UTILS_H
+#define ZIP7_INC_WINDOWS_TIME_UTILS_H
#include "../Common/MyTypes.h"
#include "../Common/MyWindows.h"
diff --git a/3rdparty/lzma/CPP/Windows/Window.cpp b/3rdparty/lzma/CPP/Windows/Window.cpp
index 32af4aabcfa..102c503a567 100644
--- a/3rdparty/lzma/CPP/Windows/Window.cpp
+++ b/3rdparty/lzma/CPP/Windows/Window.cpp
@@ -111,7 +111,7 @@ bool MySetWindowText(HWND wnd, LPCWSTR s)
}
#endif
-bool CWindow::GetText(CSysString &s)
+bool CWindow::GetText(CSysString &s) const
{
s.Empty();
unsigned len = (unsigned)GetTextLength();
@@ -119,7 +119,7 @@ bool CWindow::GetText(CSysString &s)
return (::GetLastError() == ERROR_SUCCESS);
TCHAR *p = s.GetBuf(len);
{
- unsigned len2 = (unsigned)GetText(p, (int)(len + 1));
+ const unsigned len2 = (unsigned)GetText(p, (int)(len + 1));
if (len > len2)
len = len2;
}
@@ -130,7 +130,7 @@ bool CWindow::GetText(CSysString &s)
}
#ifndef _UNICODE
-bool CWindow::GetText(UString &s)
+bool CWindow::GetText(UString &s) const
{
if (g_IsNT)
{
@@ -140,7 +140,7 @@ bool CWindow::GetText(UString &s)
return (::GetLastError() == ERROR_SUCCESS);
wchar_t *p = s.GetBuf(len);
{
- unsigned len2 = (unsigned)GetWindowTextW(_window, p, (int)(len + 1));
+ const unsigned len2 = (unsigned)GetWindowTextW(_window, p, (int)(len + 1));
if (len > len2)
len = len2;
}
@@ -150,7 +150,7 @@ bool CWindow::GetText(UString &s)
return true;
}
CSysString sysString;
- bool result = GetText(sysString);
+ const bool result = GetText(sysString);
MultiByteToUnicodeString2(s, sysString);
return result;
}
diff --git a/3rdparty/lzma/CPP/Windows/Window.h b/3rdparty/lzma/CPP/Windows/Window.h
index 83726c7ad7d..a99143bd131 100644
--- a/3rdparty/lzma/CPP/Windows/Window.h
+++ b/3rdparty/lzma/CPP/Windows/Window.h
@@ -1,7 +1,7 @@
// Windows/Window.h
-#ifndef __WINDOWS_WINDOW_H
-#define __WINDOWS_WINDOW_H
+#ifndef ZIP7_INC_WINDOWS_WINDOW_H
+#define ZIP7_INC_WINDOWS_WINDOW_H
#include "../Common/MyWindows.h"
#include "../Common/MyString.h"
@@ -9,23 +9,100 @@
#include "Defs.h"
#ifndef UNDER_CE
+#ifdef WM_CHANGEUISTATE
+#define Z7_WIN_WM_CHANGEUISTATE WM_CHANGEUISTATE
+#define Z7_WIN_WM_UPDATEUISTATE WM_UPDATEUISTATE
+#define Z7_WIN_WM_QUERYUISTATE WM_QUERYUISTATE
+#else
+// these are defined for (_WIN32_WINNT >= 0x0500):
+#define Z7_WIN_WM_CHANGEUISTATE 0x0127
+#define Z7_WIN_WM_UPDATEUISTATE 0x0128
+#define Z7_WIN_WM_QUERYUISTATE 0x0129
+#endif
+
+#ifdef UIS_SET
-#define MY__WM_CHANGEUISTATE 0x0127
-#define MY__WM_UPDATEUISTATE 0x0128
-#define MY__WM_QUERYUISTATE 0x0129
+#define Z7_WIN_UIS_SET UIS_SET
+#define Z7_WIN_UIS_CLEAR UIS_CLEAR
+#define Z7_WIN_UIS_INITIALIZE UIS_INITIALIZE
+#define Z7_WIN_UISF_HIDEFOCUS UISF_HIDEFOCUS
+#define Z7_WIN_UISF_HIDEACCEL UISF_HIDEACCEL
+
+#else
+// these are defined for (_WIN32_WINNT >= 0x0500):
// LOWORD(wParam) values in WM_*UISTATE
-#define MY__UIS_SET 1
-#define MY__UIS_CLEAR 2
-#define MY__UIS_INITIALIZE 3
+#define Z7_WIN_UIS_SET 1
+#define Z7_WIN_UIS_CLEAR 2
+#define Z7_WIN_UIS_INITIALIZE 3
// HIWORD(wParam) values in WM_*UISTATE
-#define MY__UISF_HIDEFOCUS 0x1
-#define MY__UISF_HIDEACCEL 0x2
-#define MY__UISF_ACTIVE 0x4
+#define Z7_WIN_UISF_HIDEFOCUS 0x1
+#define Z7_WIN_UISF_HIDEACCEL 0x2
+// defined for for (_WIN32_WINNT >= 0x0501):
+// #define Z7_WIN_UISF_ACTIVE 0x4
#endif
+#endif // UNDER_CE
+
+
+#ifdef Z7_OLD_WIN_SDK
+
+// #define VK_OEM_1 0xBA // ';:' for US
+#define VK_OEM_PLUS 0xBB // '+' any country
+// #define VK_OEM_COMMA 0xBC // ',' any country
+#define VK_OEM_MINUS 0xBD // '-' any country
+// #define VK_OEM_PERIOD 0xBE // '.' any country
+// #define VK_OEM_2 0xBF // '/?' for US
+// #define VK_OEM_3 0xC0 // '`~' for US
+
+// #ifndef GWLP_USERDATA
+#define GWLP_WNDPROC (-4)
+#define GWLP_USERDATA (-21)
+// #endif
+#define DWLP_MSGRESULT 0
+// #define DWLP_DLGPROC DWLP_MSGRESULT + sizeof(LRESULT)
+// #define DWLP_USER DWLP_DLGPROC + sizeof(DLGPROC)
+
+#define BTNS_BUTTON TBSTYLE_BUTTON // 0x0000
+
+/*
+vc6 defines INT_PTR via long:
+ typedef long INT_PTR, *PINT_PTR;
+ typedef unsigned long UINT_PTR, *PUINT_PTR;
+but newer sdk (sdk2003+) defines INT_PTR via int:
+ typedef _W64 int INT_PTR, *PINT_PTR;
+ typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
+*/
+
+#define IS_INTRESOURCE(_r) (((ULONG_PTR)(_r) >> 16) == 0)
+
+#define GetWindowLongPtrA GetWindowLongA
+#define GetWindowLongPtrW GetWindowLongW
+#ifdef UNICODE
+#define GetWindowLongPtr GetWindowLongPtrW
+#else
+#define GetWindowLongPtr GetWindowLongPtrA
+#endif // !UNICODE
+
+#define SetWindowLongPtrA SetWindowLongA
+#define SetWindowLongPtrW SetWindowLongW
+#ifdef UNICODE
+#define SetWindowLongPtr SetWindowLongPtrW
+#else
+#define SetWindowLongPtr SetWindowLongPtrA
+#endif // !UNICODE
+
+#define ListView_SetCheckState(hwndLV, i, fCheck) \
+ ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK)
+
+#endif // Z7_OLD_WIN_SDK
+
+inline bool LRESULTToBool(LRESULT v) { return (v != FALSE); }
+
+#define MY_int_TO_WPARAM(i) ((WPARAM)(INT_PTR)(i))
+
namespace NWindows {
inline ATOM MyRegisterClass(CONST WNDCLASS *wndClass)
@@ -52,12 +129,13 @@ bool MySetWindowText(HWND wnd, LPCWSTR s);
class CWindow
{
+ Z7_CLASS_NO_COPY(CWindow)
private:
- // bool ModifyStyleBase(int styleOffset, DWORD remove, DWORD add, UINT flags);
+ // bool ModifyStyleBase(int styleOffset, DWORD remove, DWORD add, UINT flags);
protected:
HWND _window;
public:
- CWindow(HWND newWindow = NULL): _window(newWindow){};
+ CWindow(HWND newWindow = NULL): _window(newWindow) {}
CWindow& operator=(HWND newWindow)
{
_window = newWindow;
@@ -174,6 +252,7 @@ public:
void SetRedraw(bool redraw = true) { SendMsg(WM_SETREDRAW, (WPARAM)BoolToBOOL(redraw), 0); }
LONG_PTR SetStyle(LONG_PTR style) { return SetLongPtr(GWL_STYLE, style); }
+ // LONG_PTR SetStyle(DWORD style) { return SetLongPtr(GWL_STYLE, (LONG_PTR)style); }
LONG_PTR GetStyle() const { return GetLongPtr(GWL_STYLE); }
// bool MyIsMaximized() const { return ((GetStyle() & WS_MAXIMIZE) != 0); }
@@ -246,19 +325,19 @@ public:
{ return GetWindowTextLength(_window); }
int GetText(LPTSTR string, int maxCount) const
{ return GetWindowText(_window, string, maxCount); }
- bool GetText(CSysString &s);
+ bool GetText(CSysString &s) const;
#ifndef _UNICODE
/*
UINT GetText(LPWSTR string, int maxCount) const
{ return GetWindowTextW(_window, string, maxCount); }
*/
- bool GetText(UString &s);
+ bool GetText(UString &s) const;
#endif
bool Enable(bool enable)
{ return BOOLToBool(::EnableWindow(_window, BoolToBOOL(enable))); }
- bool IsEnabled()
+ bool IsEnabled() const
{ return BOOLToBool(::IsWindowEnabled(_window)); }
#ifndef UNDER_CE
@@ -266,7 +345,7 @@ public:
{ return ::GetSystemMenu(_window, BoolToBOOL(revert)); }
#endif
- UINT_PTR SetTimer(UINT_PTR idEvent, UINT elapse, TIMERPROC timerFunc = 0)
+ UINT_PTR SetTimer(UINT_PTR idEvent, UINT elapse, TIMERPROC timerFunc = NULL)
{ return ::SetTimer(_window, idEvent, elapse, timerFunc); }
bool KillTimer(UINT_PTR idEvent)
{return BOOLToBool(::KillTimer(_window, idEvent)); }