Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pavlov <ipavlov@users.sourceforge.net>2009-02-03 03:00:00 +0300
committerKornel LesiƄski <kornel@geekhood.net>2016-05-28 02:15:59 +0300
commit8874e4fbc9faabdcff719b9b2ac8ebad4f282bbe (patch)
tree4180f817b3d10dc34cde8b7ccc8c589eae4b26d3
parent1dc92281fa580c11a79fef9fc862a6ce354a76ac (diff)
4.654.65
-rwxr-xr-xC/7zVersion.h6
-rwxr-xr-xC/LzmaEnc.c10
-rwxr-xr-xCPP/7zip/Archive/Common/HandlerOut.cpp2
-rwxr-xr-xCPP/7zip/Archive/DebHandler.cpp2
-rwxr-xr-xCPP/7zip/Archive/MachoHandler.cpp8
-rwxr-xr-xCPP/7zip/Archive/Nsis/NsisHandler.cpp34
-rwxr-xr-xCPP/7zip/Archive/Nsis/NsisIn.h48
-rwxr-xr-xCPP/7zip/Archive/Zip/ZipHandler.h2
-rwxr-xr-xCPP/7zip/Archive/Zip/ZipHandlerOut.cpp19
-rwxr-xr-xCPP/7zip/Archive/Zip/ZipItem.h1
-rwxr-xr-xCPP/7zip/MyVersion.h8
-rwxr-xr-xCPP/7zip/UI/Client7z/Client7z.cpp19
-rwxr-xr-xCPP/7zip/UI/Common/Update.cpp5
-rwxr-xr-xCPP/7zip/UI/Console/ExtractCallbackConsole.cpp2
-rwxr-xr-xCPP/7zip/UI/Console/UserInputUtils.cpp10
-rwxr-xr-xCPP/7zip/UI/Console/UserInputUtils.h2
-rwxr-xr-xCPP/7zip/UI/Explorer/RegistryContextMenu.cpp31
-rwxr-xr-xCPP/7zip/UI/FileManager/App.cpp2
-rwxr-xr-xCPP/7zip/UI/FileManager/FM.dsp28
-rwxr-xr-xCPP/7zip/UI/FileManager/PanelCrc.cpp62
-rwxr-xr-xCPP/7zip/UI/FileManager/RegistryAssociations.cpp3
-rwxr-xr-xCPP/7zip/UI/FileManager/makefile1
-rwxr-xr-xCPP/7zip/UI/GUI/CompressDialog.cpp4
-rwxr-xr-xCPP/Common/MyString.cpp12
-rwxr-xr-xCPP/Common/MyString.h5
-rwxr-xr-xCPP/Windows/Control/Trackbar.h2
-rwxr-xr-xCPP/Windows/Security.cpp15
-rwxr-xr-xCPP/Windows/Security.h2
-rwxr-xr-xCPP/Windows/Thread.h3
-rwxr-xr-xDOC/7zip.nsi2
-rwxr-xr-xDOC/7zip.wxs2
-rwxr-xr-xDOC/Methods.txt8
-rwxr-xr-xDOC/lzma.txt2
-rwxr-xr-xDOC/readme.txt2
34 files changed, 216 insertions, 148 deletions
diff --git a/C/7zVersion.h b/C/7zVersion.h
index e7ed4490..b7eb2355 100755
--- a/C/7zVersion.h
+++ b/C/7zVersion.h
@@ -1,7 +1,7 @@
#define MY_VER_MAJOR 4
-#define MY_VER_MINOR 64
+#define MY_VER_MINOR 65
#define MY_VER_BUILD 0
-#define MY_VERSION "4.64"
-#define MY_DATE "2009-01-03"
+#define MY_VERSION "4.65"
+#define MY_DATE "2009-02-03"
#define MY_COPYRIGHT ": Igor Pavlov : Public domain"
#define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " : " MY_DATE
diff --git a/C/LzmaEnc.c b/C/LzmaEnc.c
index 0c92c532..9196c43f 100755
--- a/C/LzmaEnc.c
+++ b/C/LzmaEnc.c
@@ -1,5 +1,5 @@
/* LzmaEnc.c -- LZMA Encoder
-2008-10-04 : Igor Pavlov : Public domain */
+2009-02-02 : Igor Pavlov : Public domain */
#include <string.h>
@@ -64,7 +64,13 @@ void LzmaEncProps_Normalize(CLzmaEncProps *p)
if (p->btMode < 0) p->btMode = (p->algo == 0 ? 0 : 1);
if (p->numHashBytes < 0) p->numHashBytes = 4;
if (p->mc == 0) p->mc = (16 + (p->fb >> 1)) >> (p->btMode ? 0 : 1);
- if (p->numThreads < 0) p->numThreads = ((p->btMode && p->algo) ? 2 : 1);
+ if (p->numThreads < 0)
+ p->numThreads =
+ #ifdef COMPRESS_MF_MT
+ ((p->btMode && p->algo) ? 2 : 1);
+ #else
+ 1;
+ #endif
}
UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2)
diff --git a/CPP/7zip/Archive/Common/HandlerOut.cpp b/CPP/7zip/Archive/Common/HandlerOut.cpp
index 3e817beb..76739e94 100755
--- a/CPP/7zip/Archive/Common/HandlerOut.cpp
+++ b/CPP/7zip/Archive/Common/HandlerOut.cpp
@@ -586,7 +586,7 @@ HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &val
if (number <= mainDicMethodIndex)
mainDicSize = dicSize;
}
- else if (realName.Left(1).CompareNoCase(L"B") == 0)
+ else if (realName.Left(1).CompareNoCase(L"C") == 0)
{
UInt32 blockSize;
RINOK(ParsePropDictionaryValue(realName.Mid(1), value, blockSize));
diff --git a/CPP/7zip/Archive/DebHandler.cpp b/CPP/7zip/Archive/DebHandler.cpp
index cf0c383f..fc962df3 100755
--- a/CPP/7zip/Archive/DebHandler.cpp
+++ b/CPP/7zip/Archive/DebHandler.cpp
@@ -198,7 +198,7 @@ HRESULT CInArchive::GetNextItem(bool &filled, CItemEx &item)
RINOK(GetNextItemReal(filled, item));
if (!filled)
return S_OK;
- if (item.Name.CompareNoCase("debian-binary") != 0)
+ if (item.Name.Compare("debian-binary") != 0)
return S_OK;
if (item.Size != 4)
return S_OK;
diff --git a/CPP/7zip/Archive/MachoHandler.cpp b/CPP/7zip/Archive/MachoHandler.cpp
index f3ccadf5..76f63a21 100755
--- a/CPP/7zip/Archive/MachoHandler.cpp
+++ b/CPP/7zip/Archive/MachoHandler.cpp
@@ -308,11 +308,9 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
static AString GetName(const char *name)
{
- AString res;
- char *p = res.GetBuffer(kNameSize);
- strncpy(p, name, kNameSize);
- p[kNameSize] = 0;
- res.ReleaseBuffer();
+ char res[kNameSize + 1];
+ memcpy(res, name, kNameSize);
+ res[kNameSize] = 0;
return res;
}
diff --git a/CPP/7zip/Archive/Nsis/NsisHandler.cpp b/CPP/7zip/Archive/Nsis/NsisHandler.cpp
index b8945130..f2e3aab6 100755
--- a/CPP/7zip/Archive/Nsis/NsisHandler.cpp
+++ b/CPP/7zip/Archive/Nsis/NsisHandler.cpp
@@ -2,19 +2,19 @@
#include "StdAfx.h"
-#include "NsisHandler.h"
+#include "../../../../C/CpuArch.h"
-#include "Common/StringConvert.h"
+#include "Common/ComTry.h"
#include "Common/IntToString.h"
#include "Common/NewHandler.h"
-#include "Common/ComTry.h"
#include "Windows/PropVariant.h"
-#include "../Common/ItemNameUtils.h"
#include "../../Common/StreamUtils.h"
-#include "../../../../C/CpuArch.h"
+#include "../Common/ItemNameUtils.h"
+
+#include "NsisHandler.h"
#define Get32(p) GetUi32(p)
@@ -228,12 +228,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
{
case kpidPath:
{
- UString s;
- if (_archive.IsUnicode)
- s = item.GetReducedNameU();
- else
- s = MultiByteToUnicodeString(item.GetReducedNameA(), CP_ACP);
- s = NItemName::WinNameToOSName(s);
+ UString s = NItemName::WinNameToOSName(item.GetReducedName(_archive.IsUnicode));
if (!s.IsEmpty())
prop = (const wchar_t *)s;
break;
@@ -320,6 +315,11 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
_inStream, _archive.Method, _archive.FilterFlag, useFilter));
}
+ CByteBuffer byteBuf;
+ const UInt32 kBufferLength = 1 << 16;
+ byteBuf.SetCapacity(kBufferLength);
+ Byte *buffer = byteBuf;
+
bool dataError = false;
for (i = 0; i < numItems; i++, currentTotalSize += currentItemSize)
{
@@ -363,9 +363,6 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
bool sizeIsKnown = false;
UInt32 fullSize = 0;
- const UInt32 kBufferLength = 1 << 11;
- Byte buffer[kBufferLength];
-
if (_archive.IsSolid)
{
UInt64 pos = _archive.GetPosOfSolidItem(index);
@@ -389,12 +386,13 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
}
if (streamPos == pos)
{
+ Byte buffer2[4];
size_t processedSize = 4;
- RINOK(_archive.Decoder.Read(buffer, &processedSize));
+ RINOK(_archive.Decoder.Read(buffer2, &processedSize));
if (processedSize != 4)
return E_FAIL;
streamPos += processedSize;
- fullSize = Get32(buffer);
+ fullSize = Get32(buffer2);
sizeIsKnown = true;
needDecompress = true;
}
@@ -409,7 +407,9 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
RINOK(_archive.Decoder.Init(
EXTERNAL_CODECS_VARS
_inStream, _archive.Method, _archive.FilterFlag, useFilter));
- fullSize = Get32(buffer);
+ // fullSize = Get32(buffer); // It's bug !!!
+ // Test it: what is exact fullSize?
+ fullSize = 0xFFFFFFFF;
}
else
fullSize = item.Size;
diff --git a/CPP/7zip/Archive/Nsis/NsisIn.h b/CPP/7zip/Archive/Nsis/NsisIn.h
index 4257b687..1fa6b4a6 100755
--- a/CPP/7zip/Archive/Nsis/NsisIn.h
+++ b/CPP/7zip/Archive/Nsis/NsisIn.h
@@ -3,16 +3,17 @@
#ifndef __ARCHIVE_NSIS_IN_H
#define __ARCHIVE_NSIS_IN_H
-#include "Common/MyCom.h"
-#include "Common/IntToString.h"
#include "Common/Buffer.h"
+#include "Common/IntToString.h"
+#include "Common/MyCom.h"
+#include "Common/StringConvert.h"
+
+#include "../../Common/CreateCoder.h"
#include "../../IStream.h"
#include "NsisDecode.h"
-#include "../../Common/CreateCoder.h"
-
// #define NSIS_SCRIPT
namespace NArchive {
@@ -81,32 +82,25 @@ struct CItem
return (PrefixA.Length() >= 3 || PrefixU.Length() >= 3);
}
- AString GetReducedNameA() const
- {
- AString prefix = PrefixA;
- if (prefix.Length() > 0)
- if (prefix[prefix.Length() - 1] != '\\')
- prefix += '\\';
- AString s2 = prefix + NameA;
- const int len = 9;
- if (s2.Left(len).CompareNoCase("$INSTDIR\\") == 0)
- s2 = s2.Mid(len);
- return s2;
- }
-
- UString GetReducedNameU() const
+ UString GetReducedName(bool unicode) const
{
- UString prefix = PrefixU;
- if (prefix.Length() > 0)
- if (prefix[prefix.Length() - 1] != L'\\')
- prefix += L'\\';
- UString s2 = prefix + NameU;
+ UString s;
+ if (unicode)
+ s = PrefixU;
+ else
+ s = MultiByteToUnicodeString(PrefixA);
+ if (s.Length() > 0)
+ if (s[s.Length() - 1] != L'\\')
+ s += L'\\';
+ if (unicode)
+ s += NameU;
+ else
+ s += MultiByteToUnicodeString(NameA);
const int len = 9;
- if (s2.Left(len).CompareNoCase(L"$INSTDIR\\") == 0)
- s2 = s2.Mid(len);
- return s2;
+ if (s.Left(len).CompareNoCase(L"$INSTDIR\\") == 0)
+ s = s.Mid(len);
+ return s;
}
-
};
class CInArchive
diff --git a/CPP/7zip/Archive/Zip/ZipHandler.h b/CPP/7zip/Archive/Zip/ZipHandler.h
index 09179111..1a3a441a 100755
--- a/CPP/7zip/Archive/Zip/ZipHandler.h
+++ b/CPP/7zip/Archive/Zip/ZipHandler.h
@@ -55,6 +55,7 @@ private:
UInt32 m_NumMatchFinderCycles;
bool m_NumMatchFinderCyclesDefined;
+ bool m_ForceAesMode;
bool m_IsAesMode;
Byte m_AesKeyMode;
@@ -78,6 +79,7 @@ private:
m_NumFastBytes =
m_NumMatchFinderCycles = 0xFFFFFFFF;
m_NumMatchFinderCyclesDefined = false;
+ m_ForceAesMode = false;
m_IsAesMode = false;
m_AesKeyMode = 3; // aes-256
m_WriteNtfsTimeExtra = false;
diff --git a/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp b/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp
index fe2c16e7..2f28d5ec 100755
--- a/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp
+++ b/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp
@@ -98,6 +98,7 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
{
COM_TRY_BEGIN2
CObjectVector<CUpdateItem> updateItems;
+ bool thereAreAesUpdates = false;
for (UInt32 i = 0; i < numItems; i++)
{
CUpdateItem ui;
@@ -111,7 +112,11 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
ui.NewData = IntToBool(newData);
ui.IndexInArchive = indexInArchive;
ui.IndexInClient = i;
- // bool existInArchive = (indexInArchive != UInt32(-1));
+ bool existInArchive = (indexInArchive != UInt32(-1));
+ if (existInArchive && newData)
+ if (m_Items[indexInArchive].IsAesEncrypted())
+ thereAreAesUpdates = true;
+
if (IntToBool(newProperties))
{
UString name;
@@ -237,7 +242,6 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
}
CMyComPtr<ICryptoGetTextPassword2> getTextPassword;
- if (!getTextPassword)
{
CMyComPtr<IArchiveUpdateCallback> udateCallBack2(callback);
udateCallBack2.QueryInterface(IID_ICryptoGetTextPassword2, &getTextPassword);
@@ -252,16 +256,17 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
options.PasswordIsDefined = IntToBool(passwordIsDefined);
if (options.PasswordIsDefined)
{
+ options.IsAesMode = (m_ForceAesMode ? m_IsAesMode : thereAreAesUpdates);
+ options.AesKeyMode = m_AesKeyMode;
+
if (!IsAsciiString((const wchar_t *)password))
return E_INVALIDARG;
- if (m_IsAesMode)
+ if (options.IsAesMode)
{
if (options.Password.Length() > NCrypto::NWzAes::kPasswordSizeMax)
return E_INVALIDARG;
}
options.Password = UnicodeStringToMultiByte((const wchar_t *)password, CP_OEMCP);
- options.IsAesMode = m_IsAesMode;
- options.AesKeyMode = m_AesKeyMode;
}
}
else
@@ -422,9 +427,13 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *v
else
return E_INVALIDARG;
m_IsAesMode = true;
+ m_ForceAesMode = true;
}
else if (valueString == L"ZIPCRYPTO")
+ {
m_IsAesMode = false;
+ m_ForceAesMode = true;
+ }
else
return E_INVALIDARG;
}
diff --git a/CPP/7zip/Archive/Zip/ZipItem.h b/CPP/7zip/Archive/Zip/ZipItem.h
index c41ba8c8..c0f780f8 100755
--- a/CPP/7zip/Archive/Zip/ZipItem.h
+++ b/CPP/7zip/Archive/Zip/ZipItem.h
@@ -187,6 +187,7 @@ public:
bool IsEncrypted() const { return (Flags & NFileHeader::NFlags::kEncrypted) != 0; }
bool IsStrongEncrypted() const { return IsEncrypted() && (Flags & NFileHeader::NFlags::kStrongEncrypted) != 0; };
+ bool IsAesEncrypted() const { return IsEncrypted() && (IsStrongEncrypted() || CompressionMethod == NFileHeader::NCompressionMethod::kWzAES); };
bool IsLzmaEOS() const { return (Flags & NFileHeader::NFlags::kLzmaEOS) != 0; }
diff --git a/CPP/7zip/MyVersion.h b/CPP/7zip/MyVersion.h
index 0f06d540..68058ec3 100755
--- a/CPP/7zip/MyVersion.h
+++ b/CPP/7zip/MyVersion.h
@@ -1,8 +1,8 @@
#define MY_VER_MAJOR 4
-#define MY_VER_MINOR 64
+#define MY_VER_MINOR 65
#define MY_VER_BUILD 0
-#define MY_VERSION "4.64"
-#define MY_7ZIP_VERSION "7-Zip 4.64"
-#define MY_DATE "2009-01-03"
+#define MY_VERSION "4.65"
+#define MY_7ZIP_VERSION "7-Zip 4.65"
+#define MY_DATE "2009-02-03"
#define MY_COPYRIGHT "Copyright (c) 1999-2009 Igor Pavlov"
#define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " " MY_DATE
diff --git a/CPP/7zip/UI/Client7z/Client7z.cpp b/CPP/7zip/UI/Client7z/Client7z.cpp
index 0c447479..a63144a7 100755
--- a/CPP/7zip/UI/Client7z/Client7z.cpp
+++ b/CPP/7zip/UI/Client7z/Client7z.cpp
@@ -2,23 +2,25 @@
#include "StdAfx.h"
+#include "Common/IntToString.h"
#include "Common/MyInitGuid.h"
#include "Common/StringConvert.h"
-#include "Common/IntToString.h"
-#include "Windows/PropVariant.h"
-#include "Windows/PropVariantConversions.h"
#include "Windows/DLL.h"
#include "Windows/FileDir.h"
-#include "Windows/FileName.h"
#include "Windows/FileFind.h"
+#include "Windows/FileName.h"
+#include "Windows/PropVariant.h"
+#include "Windows/PropVariantConversions.h"
#include "../../Common/FileStreams.h"
+
#include "../../Archive/IArchive.h"
+
#include "../../IPassword.h"
#include "../../MyVersion.h"
-
+// use another CLSIDs, if you want to support other formats (zip, rar, ...).
// {23170F69-40C1-278A-1000-000110070000}
DEFINE_GUID(CLSID_CFormat7z,
0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);
@@ -687,8 +689,9 @@ int MY_CDECL main(int argc, char* argv[])
}
AString command = argv[1];
+ command.MakeLower();
UString archiveName = GetUnicodeString(argv[2], CP_OEMCP);
- if (command.CompareNoCase("a") == 0)
+ if (command.Compare("a") == 0)
{
// create archive command
if (argc < 4)
@@ -764,9 +767,9 @@ int MY_CDECL main(int argc, char* argv[])
}
bool listCommand;
- if (command.CompareNoCase("l") == 0)
+ if (command.Compare("l") == 0)
listCommand = true;
- else if (command.CompareNoCase("x") == 0)
+ else if (command.Compare("x") == 0)
listCommand = false;
else
{
diff --git a/CPP/7zip/UI/Common/Update.cpp b/CPP/7zip/UI/Common/Update.cpp
index 1f88a6f0..d8fee28b 100755
--- a/CPP/7zip/UI/Common/Update.cpp
+++ b/CPP/7zip/UI/Common/Update.cpp
@@ -531,8 +531,11 @@ HRESULT EnumerateInArchiveItems(const NWildcard::CCensor &censor,
CArcItem ai;
RINOK(GetArchiveItemPath(archive, i, ai.Name));
+ // check it: defaultItemName !!!
+ if (ai.Name.IsEmpty())
+ ai.Name = defaultItemName;
RINOK(IsArchiveItemFolder(archive, i, ai.IsDir));
- ai.Censored = censor.CheckPath(ai.Name.IsEmpty() ? defaultItemName : ai.Name, !ai.IsDir);
+ ai.Censored = censor.CheckPath(ai.Name, !ai.IsDir);
RINOK(GetArchiveItemFileTime(archive, i, archiveFileInfo.MTime, ai.MTime));
{
diff --git a/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp b/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp
index e36b29ee..af65739c 100755
--- a/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp
+++ b/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp
@@ -77,7 +77,7 @@ STDMETHODIMP CExtractCallbackConsole::AskOverwrite(
case NUserAnswerMode::kNoAll: *answer = NOverwriteAnswer::kNoToAll; break;
case NUserAnswerMode::kYesAll: *answer = NOverwriteAnswer::kYesToAll; break;
case NUserAnswerMode::kYes: *answer = NOverwriteAnswer::kYes; break;
- case NUserAnswerMode::kAutoRename: *answer = NOverwriteAnswer::kAutoRename; break;
+ case NUserAnswerMode::kAutoRenameAll: *answer = NOverwriteAnswer::kAutoRename; break;
default: return E_FAIL;
}
return S_OK;
diff --git a/CPP/7zip/UI/Console/UserInputUtils.cpp b/CPP/7zip/UI/Console/UserInputUtils.cpp
index 8a202c2c..b85cd594 100755
--- a/CPP/7zip/UI/Console/UserInputUtils.cpp
+++ b/CPP/7zip/UI/Console/UserInputUtils.cpp
@@ -11,16 +11,14 @@ static const char kYes = 'Y';
static const char kNo = 'N';
static const char kYesAll = 'A';
static const char kNoAll = 'S';
-static const char kAutoRename = 'U';
+static const char kAutoRenameAll = 'U';
static const char kQuit = 'Q';
static const char *kFirstQuestionMessage = "?\n";
static const char *kHelpQuestionMessage =
- "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename / (Q)uit? ";
+ "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? ";
// return true if pressed Quite;
-// in: anAll
-// out: anAll, anYes;
NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream)
{
@@ -41,8 +39,8 @@ NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream)
return NUserAnswerMode::kYesAll;
case kNoAll:
return NUserAnswerMode::kNoAll;
- case kAutoRename:
- return NUserAnswerMode::kAutoRename;
+ case kAutoRenameAll:
+ return NUserAnswerMode::kAutoRenameAll;
case kQuit:
return NUserAnswerMode::kQuit;
}
diff --git a/CPP/7zip/UI/Console/UserInputUtils.h b/CPP/7zip/UI/Console/UserInputUtils.h
index 408e93e6..8b5232b3 100755
--- a/CPP/7zip/UI/Console/UserInputUtils.h
+++ b/CPP/7zip/UI/Console/UserInputUtils.h
@@ -13,7 +13,7 @@ enum EEnum
kNo,
kYesAll,
kNoAll,
- kAutoRename,
+ kAutoRenameAll,
kQuit
};
}
diff --git a/CPP/7zip/UI/Explorer/RegistryContextMenu.cpp b/CPP/7zip/UI/Explorer/RegistryContextMenu.cpp
index ee0078b7..e8e53bb3 100755
--- a/CPP/7zip/UI/Explorer/RegistryContextMenu.cpp
+++ b/CPP/7zip/UI/Explorer/RegistryContextMenu.cpp
@@ -35,38 +35,27 @@ static CSysString GetFullContextMenuKeyName(const CSysString &keyName)
static CSysString GetFullDragDropMenuKeyName(const CSysString &keyName)
{ return (keyName + kDragDropMenuKeyName); }
-static bool CheckContextMenuHandlerCommon(const CSysString &keyName)
+static bool CheckHandlerCommon(const CSysString &keyName)
{
NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection);
CKey key;
- if (key.Open(HKEY_CLASSES_ROOT, GetFullContextMenuKeyName(keyName), KEY_READ)
- != ERROR_SUCCESS)
+ if (key.Open(HKEY_CLASSES_ROOT, keyName, KEY_READ) != ERROR_SUCCESS)
return false;
CSysString value;
if (key.QueryValue(NULL, value) != ERROR_SUCCESS)
return false;
- return (value.CompareNoCase(kExtensionCLSID) == 0);
-}
-
-static bool CheckDragDropMenuHandlerCommon(const CSysString &keyName)
-{
- NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection);
- CKey key;
- if (key.Open(HKEY_CLASSES_ROOT, GetFullDragDropMenuKeyName(keyName), KEY_READ) != ERROR_SUCCESS)
- return false;
- CSysString value;
- if (key.QueryValue(NULL, value) != ERROR_SUCCESS)
- return false;
- return (value.CompareNoCase(kExtensionCLSID) == 0);
+ value.MakeUpper();
+ return (value.Compare(kExtensionCLSID) == 0);
}
bool CheckContextMenuHandler()
{
- return CheckContextMenuHandlerCommon(kRootKeyNameForFile) &&
- // CheckContextMenuHandlerCommon(kRootKeyNameForFolder) &&
- CheckContextMenuHandlerCommon(kRootKeyNameForDirectory) &&
- CheckDragDropMenuHandlerCommon(kRootKeyNameForDirectory) &&
- CheckDragDropMenuHandlerCommon(kRootKeyNameForDrive);
+ return
+ // CheckHandlerCommon(GetFullContextMenuKeyName(kRootKeyNameForFolder)) &&
+ CheckHandlerCommon(GetFullContextMenuKeyName(kRootKeyNameForDirectory)) &&
+ CheckHandlerCommon(GetFullContextMenuKeyName(kRootKeyNameForFile)) &&
+ CheckHandlerCommon(GetFullDragDropMenuKeyName(kRootKeyNameForDirectory)) &&
+ CheckHandlerCommon(GetFullDragDropMenuKeyName(kRootKeyNameForDrive));
}
static void DeleteContextMenuHandlerCommon(const CSysString &keyName)
diff --git a/CPP/7zip/UI/FileManager/App.cpp b/CPP/7zip/UI/FileManager/App.cpp
index 11c76458..f4f0bde7 100755
--- a/CPP/7zip/UI/FileManager/App.cpp
+++ b/CPP/7zip/UI/FileManager/App.cpp
@@ -151,7 +151,7 @@ static void CreateToolbar(
imageList.Create(
LargeButtons ? 48: 24,
LargeButtons ? 36: 24,
- ILC_MASK, 0, 0);
+ ILC_MASK | ILC_COLOR32, 0, 0);
toolBar.SetImageList(0, imageList);
}
diff --git a/CPP/7zip/UI/FileManager/FM.dsp b/CPP/7zip/UI/FileManager/FM.dsp
index d13e0a1f..6727b085 100755
--- a/CPP/7zip/UI/FileManager/FM.dsp
+++ b/CPP/7zip/UI/FileManager/FM.dsp
@@ -657,6 +657,34 @@ SOURCE=..\..\..\..\C\Alloc.h
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\C\Sha256.c
+
+!IF "$(CFG)" == "FM - Win32 Release"
+
+# ADD CPP /O2
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ELSEIF "$(CFG)" == "FM - Win32 Debug"
+
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ELSEIF "$(CFG)" == "FM - Win32 ReleaseU"
+
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ELSEIF "$(CFG)" == "FM - Win32 DebugU"
+
+# SUBTRACT CPP /YX /Yc /Yu
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\C\Sha256.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\C\Sort.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
diff --git a/CPP/7zip/UI/FileManager/PanelCrc.cpp b/CPP/7zip/UI/FileManager/PanelCrc.cpp
index d6dbd069..61a84050 100755
--- a/CPP/7zip/UI/FileManager/PanelCrc.cpp
+++ b/CPP/7zip/UI/FileManager/PanelCrc.cpp
@@ -2,30 +2,31 @@
#include "StdAfx.h"
-#include "resource.h"
-
extern "C"
{
#include "../../../../C/Alloc.h"
#include "../../../../C/7zCrc.h"
+ #include "../../../../C/Sha256.h"
}
#include "Common/IntToString.h"
#include "Common/StringConvert.h"
-#include "Windows/FileIO.h"
+#include "Windows/Error.h"
#include "Windows/FileFind.h"
+#include "Windows/FileIO.h"
#include "Windows/FileName.h"
#include "Windows/Thread.h"
-#include "Windows/Error.h"
-#include "ProgressDialog2.h"
#include "OverwriteDialogRes.h"
+#include "ProgressDialog2.h"
#include "App.h"
#include "FormatUtils.h"
#include "LangUtils.h"
+#include "resource.h"
+
using namespace NWindows;
using namespace NFile;
using namespace NName;
@@ -125,10 +126,12 @@ struct CThreadCrc
CDirEnumerator DirEnumerator;
+ UInt64 NumFilesScan;
UInt64 NumFiles;
UInt64 NumFolders;
UInt64 DataSize;
UInt32 DataCrcSum;
+ Byte Sha256Sum[SHA256_DIGEST_SIZE];
UInt32 DataNameCrcSum;
HRESULT Result;
@@ -139,7 +142,8 @@ struct CThreadCrc
void Process2()
{
- DataSize = NumFolders = NumFiles = DataCrcSum = DataNameCrcSum = 0;
+ DataSize = NumFolders = NumFiles = NumFilesScan = DataCrcSum = DataNameCrcSum = 0;
+ memset(Sha256Sum, 0, SHA256_DIGEST_SIZE);
ProgressDialog->WaitCreating();
CMyBuffer bufferObject;
@@ -172,14 +176,17 @@ struct CThreadCrc
if (!filled)
break;
if (!fileInfo.IsDir())
+ {
totalSize += fileInfo.Size;
+ NumFilesScan++;
+ }
ProgressDialog->ProgressSynch.SetCurrentFileName(scanningStr + resPath);
ProgressDialog->ProgressSynch.SetProgress(totalSize, 0);
Result = ProgressDialog->ProgressSynch.SetPosAndCheckPaused(0);
if (Result != S_OK)
return;
}
-
+ ProgressDialog->ProgressSynch.SetNumFilesTotal(NumFilesScan);
ProgressDialog->ProgressSynch.SetProgress(totalSize, 0);
DirEnumerator.Init();
@@ -199,6 +206,9 @@ struct CThreadCrc
break;
UInt32 crc = CRC_INIT_VAL;
+ CSha256 sha256;
+ Sha256_Init(&sha256);
+
if (fileInfo.IsDir())
NumFolders++;
else
@@ -211,8 +221,9 @@ struct CThreadCrc
ErrorPath = resPath;
return;
}
- NumFiles++;
ProgressDialog->ProgressSynch.SetCurrentFileName(resPath);
+ ProgressDialog->ProgressSynch.SetNumFilesCur(NumFiles);
+ NumFiles++;
for (;;)
{
UInt32 processedSize;
@@ -226,12 +237,17 @@ struct CThreadCrc
if (processedSize == 0)
break;
crc = CrcUpdate(crc, buffer, processedSize);
+ if (NumFilesScan == 1)
+ Sha256_Update(&sha256, buffer, processedSize);
+
DataSize += processedSize;
Result = ProgressDialog->ProgressSynch.SetPosAndCheckPaused(DataSize);
if (Result != S_OK)
return;
}
DataCrcSum += CRC_GET_DIGEST(crc);
+ if (NumFilesScan == 1)
+ Sha256_Final(&sha256, Sha256Sum);
}
for (int i = 0; i < resPath.Length(); i++)
{
@@ -259,13 +275,22 @@ struct CThreadCrc
}
};
-static void ConvertUInt32ToHex(UInt32 value, wchar_t *s)
+static void ConvertByteToHex(unsigned value, wchar_t *s)
{
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < 2; i++)
{
- int t = value & 0xF;
+ unsigned t = value & 0xF;
value >>= 4;
- s[7 - i] = (wchar_t)((t < 10) ? (L'0' + t) : (L'A' + (t - 10)));
+ s[1 - i] = (wchar_t)((t < 10) ? (L'0' + t) : (L'A' + (t - 10)));
+ }
+}
+
+static void ConvertUInt32ToHex(UInt32 value, wchar_t *s)
+{
+ for (int i = 6; i >= 0; i -= 2)
+ {
+ ConvertByteToHex(value & 0xFF, s + i);
+ value >>= 8;
}
s[8] = L'\0';
}
@@ -360,6 +385,19 @@ void CApp::CalculateCrc()
s += L" ";
ConvertUInt32ToHex(combiner.DataNameCrcSum, sz);
s += sz;
+ s += L"\n";
+
+ if (combiner.NumFiles == 1 && combiner.NumFilesScan == 1)
+ {
+ s += L"SHA-256: ";
+ for (int i = 0; i < SHA256_DIGEST_SIZE; i++)
+ {
+ wchar_t s2[4];
+ ConvertByteToHex(combiner.Sha256Sum[i], s2);
+ s2[2] = 0;
+ s += s2;
+ }
+ }
}
srcPanel.MessageBoxInfo(s, LangString(IDS_CHECKSUM_INFORMATION, 0x03020720));
}
diff --git a/CPP/7zip/UI/FileManager/RegistryAssociations.cpp b/CPP/7zip/UI/FileManager/RegistryAssociations.cpp
index 93340c3f..8c6e6ae8 100755
--- a/CPP/7zip/UI/FileManager/RegistryAssociations.cpp
+++ b/CPP/7zip/UI/FileManager/RegistryAssociations.cpp
@@ -126,7 +126,8 @@ static bool CheckShellExtensionInfo2(const CSysString &extension, UString &iconP
if (extKey.QueryValue(NULL, programNameValue) != ERROR_SUCCESS)
return false;
CSysString extProgramKeyName = GetExtProgramKeyName(extension);
- if (programNameValue.CompareNoCase(extProgramKeyName) != 0)
+ UString programNameValueU = GetUnicodeString(programNameValue);
+ if (programNameValueU.CompareNoCase(GetUnicodeString(extProgramKeyName)) != 0)
return false;
CKey iconKey;
if (extKey.Open(HKEY_CLASSES_ROOT, extProgramKeyName + CSysString(TEXT(CHAR_PATH_SEPARATOR)) + kDefaultIconKeyName, KEY_READ) != ERROR_SUCCESS)
diff --git a/CPP/7zip/UI/FileManager/makefile b/CPP/7zip/UI/FileManager/makefile
index bc1d2662..86bdd85f 100755
--- a/CPP/7zip/UI/FileManager/makefile
+++ b/CPP/7zip/UI/FileManager/makefile
@@ -149,6 +149,7 @@ AGENT_OBJS = \
C_OBJS = \
$O\Alloc.obj \
+ $O\Sha256.obj \
$O\Sort.obj \
$O\Threads.obj \
diff --git a/CPP/7zip/UI/GUI/CompressDialog.cpp b/CPP/7zip/UI/GUI/CompressDialog.cpp
index 69587f3a..64ee31d8 100755
--- a/CPP/7zip/UI/GUI/CompressDialog.cpp
+++ b/CPP/7zip/UI/GUI/CompressDialog.cpp
@@ -73,7 +73,7 @@ using namespace NFile;
using namespace NName;
using namespace NDirectory;
-static const int kHistorySize = 8;
+static const int kHistorySize = 20;
static LPCWSTR kExeExt = L".exe";
static LPCWSTR k7zFormat = L"7z";
@@ -1315,7 +1315,7 @@ UInt64 CCompressDialog::GetMemoryUsage(UInt32 dictionary, UInt64 &decompressMemo
UInt64 size1 = (UInt64)hs * 4;
size1 += (UInt64)dictionary * 11 / 2;
if (level >= 5)
- size1 += dictionary * 4;
+ size1 += (UInt64)dictionary * 4;
size1 += (2 << 20);
UInt32 numThreads1 = 1;
diff --git a/CPP/Common/MyString.cpp b/CPP/Common/MyString.cpp
index 41c0c95d..2c02e822 100755
--- a/CPP/Common/MyString.cpp
+++ b/CPP/Common/MyString.cpp
@@ -2,12 +2,14 @@
#include "StdAfx.h"
-#ifdef _WIN32
-#include "StringConvert.h"
-#else
+#ifndef _WIN32
#include <ctype.h>
#endif
+#ifndef _UNICODE
+#include "StringConvert.h"
+#endif
+
#include "MyString.h"
@@ -190,9 +192,9 @@ int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2)
}
}
-#ifdef _WIN32
+/*
int MyStringCompareNoCase(const char *s1, const char *s2)
{
return MyStringCompareNoCase(MultiByteToUnicodeString(s1), MultiByteToUnicodeString(s2));
}
-#endif
+*/
diff --git a/CPP/Common/MyString.h b/CPP/Common/MyString.h
index 82b97618..bae239da 100755
--- a/CPP/Common/MyString.h
+++ b/CPP/Common/MyString.h
@@ -100,10 +100,7 @@ int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2);
int MyStringCompare(const char *s1, const char *s2);
int MyStringCompare(const wchar_t *s1, const wchar_t *s2);
-#ifdef _WIN32
-int MyStringCompareNoCase(const char *s1, const char *s2);
-#endif
-
+// int MyStringCompareNoCase(const char *s1, const char *s2);
int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2);
template <class T>
diff --git a/CPP/Windows/Control/Trackbar.h b/CPP/Windows/Control/Trackbar.h
index bbd7009a..64120f98 100755
--- a/CPP/Windows/Control/Trackbar.h
+++ b/CPP/Windows/Control/Trackbar.h
@@ -20,7 +20,7 @@ public:
{ SendMessage(TBM_SETTICFREQ, freq); }
int GetPos()
- { return SendMessage(TBM_GETPOS); }
+ { return (int)SendMessage(TBM_GETPOS); }
};
}}
diff --git a/CPP/Windows/Security.cpp b/CPP/Windows/Security.cpp
index 24001c49..bb8c3a9a 100755
--- a/CPP/Windows/Security.cpp
+++ b/CPP/Windows/Security.cpp
@@ -1,12 +1,8 @@
-// Windows/Security.h
+// Windows/Security.cpp
#include "StdAfx.h"
-#include "Windows/Security.h"
-#include "Windows/Defs.h"
-
-#include "Common/StringConvert.h"
-#include "Defs.h"
+#include "Security.h"
namespace NWindows {
namespace NSecurity {
@@ -105,6 +101,8 @@ static PSID GetSid(LPWSTR accountName)
return NULL;
}
+#define MY__SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege"
+
bool AddLockMemoryPrivilege()
{
CPolicy policy;
@@ -123,8 +121,9 @@ bool AddLockMemoryPrivilege()
!= 0)
return false;
LSA_UNICODE_STRING userRights;
- UString s = GetUnicodeString(SE_LOCK_MEMORY_NAME);
- SetLsaString((LPWSTR)(LPCWSTR)s, &userRights);
+ wchar_t s[128];
+ wcscpy(s, MY__SE_LOCK_MEMORY_NAME);
+ SetLsaString(s, &userRights);
WCHAR userName[256 + 2];
DWORD size = 256;
if (!GetUserNameW(userName, &size))
diff --git a/CPP/Windows/Security.h b/CPP/Windows/Security.h
index 976f746b..90cf2caf 100755
--- a/CPP/Windows/Security.h
+++ b/CPP/Windows/Security.h
@@ -3,7 +3,7 @@
#ifndef __WINDOWS_SECURITY_H
#define __WINDOWS_SECURITY_H
-#include "Windows/Defs.h"
+#include "Defs.h"
#include <NTSecAPI.h>
diff --git a/CPP/Windows/Thread.h b/CPP/Windows/Thread.h
index 9c427608..39104f4a 100755
--- a/CPP/Windows/Thread.h
+++ b/CPP/Windows/Thread.h
@@ -25,6 +25,9 @@ public:
WRes Wait() { return Thread_Wait(&thread); }
#ifdef _WIN32
+ operator HANDLE() { return thread.handle; }
+ void Attach(HANDLE handle) { thread.handle = handle; }
+ HANDLE Detach() { HANDLE h = thread.handle; thread.handle = NULL; return h; }
DWORD Resume() { return ::ResumeThread(thread.handle); }
DWORD Suspend() { return ::SuspendThread(thread.handle); }
bool Terminate(DWORD exitCode) { return BOOLToBool(::TerminateThread(thread.handle, exitCode)); }
diff --git a/DOC/7zip.nsi b/DOC/7zip.nsi
index ca4fc60a..901872a7 100755
--- a/DOC/7zip.nsi
+++ b/DOC/7zip.nsi
@@ -2,7 +2,7 @@
;Defines
!define VERSION_MAJOR 4
-!define VERSION_MINOR 64
+!define VERSION_MINOR 65
!define VERSION_POSTFIX_FULL ""
!ifdef WIN64
!ifdef IA64
diff --git a/DOC/7zip.wxs b/DOC/7zip.wxs
index 3fcb5f1b..a6e3f957 100755
--- a/DOC/7zip.wxs
+++ b/DOC/7zip.wxs
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<?define VerMajor = "4" ?>
-<?define VerMinor = "64" ?>
+<?define VerMinor = "65" ?>
<?define VerBuild = "00" ?>
<?define MmVer = "$(var.VerMajor).$(var.VerMinor)" ?>
<?define MmHex = "0$(var.VerMajor)$(var.VerMinor)" ?>
diff --git a/DOC/Methods.txt b/DOC/Methods.txt
index 0503ca79..5b5cb931 100755
--- a/DOC/Methods.txt
+++ b/DOC/Methods.txt
@@ -1,4 +1,4 @@
-7-Zip method IDs (4.61)
+7-Zip method IDs (4.65)
-----------------------
Each compression or crypto method in 7z has unique binary value (ID).
@@ -24,12 +24,11 @@ List of defined IDs
-------------------
00 - Copy
-01 - Reserved
+
02 - Common
03 Swap
- 2 Swap2
- 4 Swap4
- 04 Delta (subject to change)
03 - 7z
01 - LZMA
@@ -60,9 +59,6 @@ List of defined IDs
7F -
01 - experimental methods.
- 80 - reserved for independent developers
-
- E0 - Random IDs
04 - Misc
00 - Reserved
diff --git a/DOC/lzma.txt b/DOC/lzma.txt
index d3cbc85a..715792d6 100755
--- a/DOC/lzma.txt
+++ b/DOC/lzma.txt
@@ -1,4 +1,4 @@
-LZMA SDK 4.63
+LZMA SDK 4.65
-------------
LZMA SDK provides the documentation, samples, header files, libraries,
diff --git a/DOC/readme.txt b/DOC/readme.txt
index ad92e658..13a30611 100755
--- a/DOC/readme.txt
+++ b/DOC/readme.txt
@@ -1,4 +1,4 @@
-7-Zip 4.64 Sources
+7-Zip 4.65 Sources
------------------
7-Zip is a file archiver for Windows 95/98/ME/NT/2000/2003/XP/Vista.