mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-07 11:14:58 -06:00
4.57
This commit is contained in:
committed by
Kornel Lesiński
parent
acd742622d
commit
bd1fa36322
@@ -109,6 +109,7 @@ namespace NFileHeader
|
||||
*/
|
||||
|
||||
const UInt32 kDataDescriptorSize = 16;
|
||||
// const UInt32 kDataDescriptor64Size = 16 + 8;
|
||||
/*
|
||||
struct CDataDescriptor
|
||||
{
|
||||
|
||||
@@ -437,8 +437,21 @@ HRESULT CInArchive::ReadLocalItemAfterCdItemFull(CItemEx &item)
|
||||
if (ReadUInt32() != NSignature::kDataDescriptor)
|
||||
return S_FALSE;
|
||||
UInt32 crc = ReadUInt32();
|
||||
UInt32 packSize = ReadUInt32();
|
||||
UInt32 unpackSize = ReadUInt32();
|
||||
UInt64 packSize, unpackSize;
|
||||
|
||||
/*
|
||||
if (IsZip64)
|
||||
{
|
||||
packSize = ReadUInt64();
|
||||
unpackSize = ReadUInt64();
|
||||
}
|
||||
else
|
||||
*/
|
||||
{
|
||||
packSize = ReadUInt32();
|
||||
unpackSize = ReadUInt32();
|
||||
}
|
||||
|
||||
if (crc != item.FileCRC || item.PackSize != packSize || item.UnPackSize != unpackSize)
|
||||
return S_FALSE;
|
||||
}
|
||||
@@ -681,6 +694,7 @@ HRESULT CInArchive::ReadHeaders(CObjectVector<CItemEx> &items, CProgressVirt *pr
|
||||
// kEndOfCentralDirSignature
|
||||
// m_Position points to next byte after signature
|
||||
|
||||
IsZip64 = false;
|
||||
items.Clear();
|
||||
if (progress != 0)
|
||||
{
|
||||
@@ -722,7 +736,7 @@ HRESULT CInArchive::ReadHeaders(CObjectVector<CItemEx> &items, CProgressVirt *pr
|
||||
UInt64 zip64EcdStartOffset = m_Position - 4 - m_ArchiveInfo.Base;
|
||||
if(m_Signature == NSignature::kZip64EndOfCentralDir)
|
||||
{
|
||||
isZip64 = true;
|
||||
IsZip64 = isZip64 = true;
|
||||
UInt64 recordSize = ReadUInt64();
|
||||
/* UInt16 versionMade = */ ReadUInt16();
|
||||
/* UInt16 versionNeedExtract = */ ReadUInt16();
|
||||
|
||||
@@ -95,6 +95,7 @@ class CInArchive
|
||||
HRESULT ReadLocalsAndCd(CObjectVector<CItemEx> &items, CProgressVirt *progress, UInt64 &cdOffset);
|
||||
public:
|
||||
CInArchiveInfo m_ArchiveInfo;
|
||||
bool IsZip64;
|
||||
|
||||
HRESULT ReadHeaders(CObjectVector<CItemEx> &items, CProgressVirt *progress);
|
||||
HRESULT ReadLocalItemAfterCdItem(CItemEx &item);
|
||||
|
||||
@@ -18,6 +18,11 @@ public:
|
||||
UInt64 GetLocalFullSize() const
|
||||
{ return FileHeaderWithNameSize + LocalExtraSize + PackSize +
|
||||
(HasDescriptor() ? NFileHeader::kDataDescriptorSize : 0); };
|
||||
/*
|
||||
UInt64 GetLocalFullSize(bool isZip64) const
|
||||
{ return FileHeaderWithNameSize + LocalExtraSize + PackSize +
|
||||
(HasDescriptor() ? (isZip64 ? NFileHeader::kDataDescriptor64Size : NFileHeader::kDataDescriptorSize) : 0); };
|
||||
*/
|
||||
UInt64 GetLocalExtraPosition() const
|
||||
{ return LocalHeaderPosition + FileHeaderWithNameSize; };
|
||||
UInt64 GetDataPosition() const
|
||||
|
||||
@@ -267,6 +267,7 @@ void CMtProgressMixer2::Create(IProgress *progress, bool inSizeIsMain)
|
||||
void CMtProgressMixer2::SetProgressOffset(UInt64 progressOffset)
|
||||
{
|
||||
CriticalSection.Enter();
|
||||
InSizes[1] = OutSizes[1] = 0;
|
||||
ProgressOffset = progressOffset;
|
||||
CriticalSection.Leave();
|
||||
}
|
||||
@@ -323,7 +324,9 @@ STDMETHODIMP CMtProgressMixer::SetRatioInfo(const UInt64 *inSize, const UInt64 *
|
||||
|
||||
static HRESULT UpdateItemOldData(COutArchive &archive,
|
||||
IInStream *inStream,
|
||||
const CUpdateItem &updateItem, CItemEx &item, ICompressProgressInfo *progress,
|
||||
const CUpdateItem &updateItem, CItemEx &item,
|
||||
/* bool izZip64, */
|
||||
ICompressProgressInfo *progress,
|
||||
UInt64 &complexity)
|
||||
{
|
||||
if (updateItem.NewProperties)
|
||||
|
||||
Reference in New Issue
Block a user