diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2016-10-05 03:00:00 +0300 |
---|---|---|
committer | Kornel LesinĚski <kornel@geekhood.net> | 2016-12-08 15:13:50 +0300 |
commit | 603abd5528c97346e9448c0ff47949f818fe558c (patch) | |
tree | 6603230f4eab118fc83554731dc86e30578ccff9 | |
parent | 232ce7957441b06193c4cbdc1bc9e71436fadfdb (diff) |
16.0416.04
-rw-r--r-- | C/7zVersion.h | 8 | ||||
-rw-r--r-- | C/DllSecur.c | 4 | ||||
-rw-r--r-- | CPP/7zip/Archive/Rar/Rar5Handler.cpp | 19 | ||||
-rw-r--r-- | CPP/7zip/Archive/Rar/Rar5Handler.h | 4 | ||||
-rw-r--r-- | CPP/7zip/Compress/Rar2Decoder.cpp | 14 | ||||
-rw-r--r-- | CPP/7zip/Compress/Rar2Decoder.h | 21 | ||||
-rw-r--r-- | DOC/7zip.inf | 4 | ||||
-rw-r--r-- | DOC/7zip.nsi | 2 | ||||
-rw-r--r-- | DOC/7zip.wxs | 2 | ||||
-rw-r--r-- | DOC/readme.txt | 2 |
10 files changed, 55 insertions, 25 deletions
diff --git a/C/7zVersion.h b/C/7zVersion.h index 565878d4..4f15081d 100644 --- a/C/7zVersion.h +++ b/C/7zVersion.h @@ -1,9 +1,9 @@ #define MY_VER_MAJOR 16 -#define MY_VER_MINOR 03 +#define MY_VER_MINOR 04 #define MY_VER_BUILD 0 -#define MY_VERSION_NUMBERS "16.03" -#define MY_VERSION "16.03" -#define MY_DATE "2016-09-28" +#define MY_VERSION_NUMBERS "16.04" +#define MY_VERSION "16.04" +#define MY_DATE "2016-10-04" #undef MY_COPYRIGHT #undef MY_VERSION_COPYRIGHT_DATE #define MY_AUTHOR_NAME "Igor Pavlov" diff --git a/C/DllSecur.c b/C/DllSecur.c index 5cf63999..90352ce1 100644 --- a/C/DllSecur.c +++ b/C/DllSecur.c @@ -1,5 +1,5 @@ /* DllSecur.c -- DLL loading security -2016-09-15 : Igor Pavlov : Public domain */ +2016-10-04 : Igor Pavlov : Public domain */ #include "Precomp.h" @@ -42,7 +42,7 @@ void LoadSecurityDlls() // at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ??? OSVERSIONINFO vi; vi.dwOSVersionInfoSize = sizeof(vi); - if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMajorVersion != 0) + if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0) { Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories"); diff --git a/CPP/7zip/Archive/Rar/Rar5Handler.cpp b/CPP/7zip/Archive/Rar/Rar5Handler.cpp index 4fb63505..d70a5686 100644 --- a/CPP/7zip/Archive/Rar/Rar5Handler.cpp +++ b/CPP/7zip/Archive/Rar/Rar5Handler.cpp @@ -231,6 +231,18 @@ bool CItem::Is_CopyLink() const return FindExtra_Link(link) && link.Type == NLinkType::kFileCopy; } +bool CItem::Is_HardLink() const +{ + CLinkInfo link; + return FindExtra_Link(link) && link.Type == NLinkType::kHardLink; +} + +bool CItem::Is_CopyLink_or_HardLink() const +{ + CLinkInfo link; + return FindExtra_Link(link) && (link.Type == NLinkType::kFileCopy || link.Type == NLinkType::kHardLink); +} + void CItem::Link_to_Prop(unsigned linkType, NWindows::NCOM::CPropVariant &prop) const { CLinkInfo link; @@ -2587,7 +2599,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, { if (testMode) { - if (item->Is_CopyLink() && item->PackSize == 0) + if (item->NeedUse_as_CopyLink_or_HardLink()) { RINOK(extractCallback->PrepareOperation(askMode)); RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kOK)); @@ -2599,6 +2611,9 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, if (item->IsService()) continue; + if (item->NeedUse_as_HardLink()) + continue; + bool needDecode = false; for (unsigned n = i + 1; n < _refs.Size(); n++) @@ -2639,7 +2654,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, continue; } - if (item->Is_CopyLink() && item->PackSize == 0) + if (item->NeedUse_as_CopyLink()) { RINOK(extractCallback->SetOperationResult( realOutStream ? diff --git a/CPP/7zip/Archive/Rar/Rar5Handler.h b/CPP/7zip/Archive/Rar/Rar5Handler.h index cf741c7c..27e937de 100644 --- a/CPP/7zip/Archive/Rar/Rar5Handler.h +++ b/CPP/7zip/Archive/Rar/Rar5Handler.h @@ -262,8 +262,12 @@ struct CItem bool FindExtra_Link(CLinkInfo &link) const; void Link_to_Prop(unsigned linkType, NWindows::NCOM::CPropVariant &prop) const; bool Is_CopyLink() const; + bool Is_HardLink() const; + bool Is_CopyLink_or_HardLink() const; bool NeedUse_as_CopyLink() const { return PackSize == 0 && Is_CopyLink(); } + bool NeedUse_as_HardLink() const { return PackSize == 0 && Is_HardLink(); } + bool NeedUse_as_CopyLink_or_HardLink() const { return PackSize == 0 && Is_CopyLink_or_HardLink(); } bool GetAltStreamName(AString &name) const; diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp index b3f2b4b3..db67433a 100644 --- a/CPP/7zip/Compress/Rar2Decoder.cpp +++ b/CPP/7zip/Compress/Rar2Decoder.cpp @@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20; static const UInt32 kWindowReservSize = (1 << 22) + 256; CDecoder::CDecoder(): - m_IsSolid(false) + m_IsSolid(false), + m_TablesOK(false) { } @@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB bool CDecoder::ReadTables(void) { + m_TablesOK = false; + Byte levelLevels[kLevelTableSize]; Byte newLevels[kMaxTableSize]; m_AudioMode = (ReadBits(1) == 1); @@ -170,6 +173,9 @@ bool CDecoder::ReadTables(void) } memcpy(m_LastLevels, newLevels, kMaxTableSize); + + m_TablesOK = true; + return true; } @@ -340,10 +346,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * return S_FALSE; return S_OK; } - if (!ReadTables()) - return S_FALSE; + ReadTables(); } + if (!m_TablesOK) + return S_FALSE; + UInt64 startPos = m_OutWindowStream.GetProcessedSize(); while (pos < unPackSize) { diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h index 3a0535cc..0d8142b5 100644 --- a/CPP/7zip/Compress/Rar2Decoder.h +++ b/CPP/7zip/Compress/Rar2Decoder.h @@ -119,26 +119,29 @@ class CDecoder : { CLzOutWindow m_OutWindowStream; CBitDecoder m_InBitStream; + + UInt32 m_RepDistPtr; + UInt32 m_RepDists[kNumRepDists]; + + UInt32 m_LastLength; + + bool m_IsSolid; + bool m_TablesOK; + bool m_AudioMode; + NHuffman::CDecoder<kNumHuffmanBits, kMainTableSize> m_MainDecoder; NHuffman::CDecoder<kNumHuffmanBits, kDistTableSize> m_DistDecoder; NHuffman::CDecoder<kNumHuffmanBits, kLenTableSize> m_LenDecoder; NHuffman::CDecoder<kNumHuffmanBits, kMMTableSize> m_MMDecoders[NMultimedia::kNumChanelsMax]; NHuffman::CDecoder<kNumHuffmanBits, kLevelTableSize> m_LevelDecoder; - bool m_AudioMode; + UInt64 m_PackSize; - NMultimedia::CFilter2 m_MmFilter; unsigned m_NumChannels; + NMultimedia::CFilter2 m_MmFilter; - UInt32 m_RepDists[kNumRepDists]; - UInt32 m_RepDistPtr; - - UInt32 m_LastLength; - Byte m_LastLevels[kMaxTableSize]; - UInt64 m_PackSize; - bool m_IsSolid; void InitStructures(); UInt32 ReadBits(unsigned numBits); diff --git a/DOC/7zip.inf b/DOC/7zip.inf index a88badf8..b8aa402e 100644 --- a/DOC/7zip.inf +++ b/DOC/7zip.inf @@ -10,8 +10,8 @@ AppName = "7-Zip" InstallDir = %CE1%\%AppName% [Strings] -AppVer = "16.03" -AppDate = "2016-10-28" +AppVer = "16.04" +AppDate = "2016-10-04" [CEDevice] ; ProcessorType = 2577 ; ARM diff --git a/DOC/7zip.nsi b/DOC/7zip.nsi index 3df1c20c..abaa4c2e 100644 --- a/DOC/7zip.nsi +++ b/DOC/7zip.nsi @@ -2,7 +2,7 @@ ;Defines !define VERSION_MAJOR 16 -!define VERSION_MINOR 03 +!define VERSION_MINOR 04 !define VERSION_POSTFIX_FULL "" !ifdef WIN64 !ifdef IA64 diff --git a/DOC/7zip.wxs b/DOC/7zip.wxs index a84bef23..d26e2a85 100644 --- a/DOC/7zip.wxs +++ b/DOC/7zip.wxs @@ -1,7 +1,7 @@ <?xml version="1.0"?> <?define VerMajor = "16" ?> -<?define VerMinor = "03" ?> +<?define VerMinor = "04" ?> <?define VerBuild = "00" ?> <?define MmVer = "$(var.VerMajor).$(var.VerMinor)" ?> <?define MmHex = "$(var.VerMajor)$(var.VerMinor)" ?> diff --git a/DOC/readme.txt b/DOC/readme.txt index 4a6998c1..3d7b8d1d 100644 --- a/DOC/readme.txt +++ b/DOC/readme.txt @@ -1,4 +1,4 @@ -7-Zip 16.02 Sources +7-Zip 16.04 Sources ------------------- 7-Zip is a file archiver for Windows. |