mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 09:14:58 -06:00
4.65
This commit is contained in:
committed by
Kornel Lesiński
parent
1dc92281fa
commit
8874e4fbc9
@@ -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
|
||||
|
||||
10
C/LzmaEnc.c
10
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)
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
UString GetReducedName(bool unicode) const
|
||||
{
|
||||
AString prefix = PrefixA;
|
||||
if (prefix.Length() > 0)
|
||||
if (prefix[prefix.Length() - 1] != '\\')
|
||||
prefix += '\\';
|
||||
AString s2 = prefix + NameA;
|
||||
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("$INSTDIR\\") == 0)
|
||||
s2 = s2.Mid(len);
|
||||
return s2;
|
||||
if (s.Left(len).CompareNoCase(L"$INSTDIR\\") == 0)
|
||||
s = s.Mid(len);
|
||||
return s;
|
||||
}
|
||||
|
||||
UString GetReducedNameU() const
|
||||
{
|
||||
UString prefix = PrefixU;
|
||||
if (prefix.Length() > 0)
|
||||
if (prefix[prefix.Length() - 1] != L'\\')
|
||||
prefix += L'\\';
|
||||
UString s2 = prefix + NameU;
|
||||
const int len = 9;
|
||||
if (s2.Left(len).CompareNoCase(L"$INSTDIR\\") == 0)
|
||||
s2 = s2.Mid(len);
|
||||
return s2;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class CInArchive
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ enum EEnum
|
||||
kNo,
|
||||
kYesAll,
|
||||
kNoAll,
|
||||
kAutoRename,
|
||||
kAutoRenameAll,
|
||||
kQuit
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ConvertByteToHex(unsigned value, wchar_t *s)
|
||||
{
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
unsigned t = value & 0xF;
|
||||
value >>= 4;
|
||||
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 = 0; i < 8; i++)
|
||||
for (int i = 6; i >= 0; i -= 2)
|
||||
{
|
||||
int t = value & 0xF;
|
||||
value >>= 4;
|
||||
s[7 - i] = (wchar_t)((t < 10) ? (L'0' + t) : (L'A' + (t - 10)));
|
||||
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));
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -149,6 +149,7 @@ AGENT_OBJS = \
|
||||
|
||||
C_OBJS = \
|
||||
$O\Alloc.obj \
|
||||
$O\Sha256.obj \
|
||||
$O\Sort.obj \
|
||||
$O\Threads.obj \
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -20,7 +20,7 @@ public:
|
||||
{ SendMessage(TBM_SETTICFREQ, freq); }
|
||||
|
||||
int GetPos()
|
||||
{ return SendMessage(TBM_GETPOS); }
|
||||
{ return (int)SendMessage(TBM_GETPOS); }
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#ifndef __WINDOWS_SECURITY_H
|
||||
#define __WINDOWS_SECURITY_H
|
||||
|
||||
#include "Windows/Defs.h"
|
||||
#include "Defs.h"
|
||||
|
||||
#include <NTSecAPI.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)); }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)" ?>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
LZMA SDK 4.63
|
||||
LZMA SDK 4.65
|
||||
-------------
|
||||
|
||||
LZMA SDK provides the documentation, samples, header files, libraries,
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user