mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-10 06:07:07 -06:00
23.01
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -95,7 +95,7 @@ static void AddErrorMessage(AString &s, const char *message)
|
||||
}
|
||||
|
||||
|
||||
STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
||||
Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value))
|
||||
{
|
||||
COM_TRY_BEGIN
|
||||
NCOM::CPropVariant prop;
|
||||
@@ -124,7 +124,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
||||
const CImageInfo &image2 = xml.Images[i];
|
||||
if (image2.CTimeDefined)
|
||||
if (index < 0 || ::CompareFileTime(&image2.CTime, &xml.Images[index].CTime) < 0)
|
||||
index = i;
|
||||
index = (int)i;
|
||||
}
|
||||
if (index >= 0)
|
||||
prop = xml.Images[index].CTime;
|
||||
@@ -141,7 +141,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
||||
const CImageInfo &image2 = xml.Images[i];
|
||||
if (image2.MTimeDefined)
|
||||
if (index < 0 || ::CompareFileTime(&image2.MTime, &xml.Images[index].MTime) > 0)
|
||||
index = i;
|
||||
index = (int)i;
|
||||
}
|
||||
if (index >= 0)
|
||||
prop = xml.Images[index].MTime;
|
||||
@@ -170,11 +170,11 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
||||
|
||||
AString res;
|
||||
res.Add_UInt32(ver1);
|
||||
res += '.';
|
||||
res.Add_Dot();
|
||||
res.Add_UInt32(ver2);
|
||||
if (ver3 != 0)
|
||||
{
|
||||
res += '.';
|
||||
res.Add_Dot();
|
||||
res.Add_UInt32(ver3);
|
||||
}
|
||||
prop = res;
|
||||
@@ -245,7 +245,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
||||
if (h.PartNumber != 1)
|
||||
{
|
||||
s.Add_UInt32(h.PartNumber);
|
||||
s += '.';
|
||||
s.Add_Dot();
|
||||
}
|
||||
s += "swm";
|
||||
prop = s;
|
||||
@@ -267,7 +267,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
||||
{
|
||||
const CHeader &header = _volumes[_xmls[i].VolIndex].Header;
|
||||
unsigned method = header.GetMethod();
|
||||
if (method < ARRAY_SIZE(k_Methods))
|
||||
if (method < Z7_ARRAY_SIZE(k_Methods))
|
||||
methodMask |= ((UInt32)1 << method);
|
||||
else
|
||||
methodUnknown = method;
|
||||
@@ -280,7 +280,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
||||
|
||||
unsigned numMethods = 0;
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(k_Methods); i++)
|
||||
for (unsigned i = 0; i < Z7_ARRAY_SIZE(k_Methods); i++)
|
||||
{
|
||||
if (methodMask & ((UInt32)1 << i))
|
||||
{
|
||||
@@ -365,8 +365,8 @@ static void MethodToProp(int method, int chunksSizeBits, NCOM::CPropVariant &pro
|
||||
{
|
||||
char temp[32];
|
||||
|
||||
if ((unsigned)method < ARRAY_SIZE(k_Methods))
|
||||
strcpy(temp, k_Methods[(unsigned)method]);
|
||||
if ((unsigned)method < Z7_ARRAY_SIZE(k_Methods))
|
||||
MyStringCopy(temp, k_Methods[(unsigned)method]);
|
||||
else
|
||||
ConvertUInt32ToString((UInt32)(unsigned)method, temp);
|
||||
|
||||
@@ -382,7 +382,7 @@ static void MethodToProp(int method, int chunksSizeBits, NCOM::CPropVariant &pro
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
@@ -423,7 +423,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
|
||||
else
|
||||
*/
|
||||
AString s (FILES_DIR_NAME STRING_PATH_SEPARATOR);
|
||||
s.Add_UInt32(item.StreamIndex);
|
||||
s.Add_UInt32((UInt32)(Int32)item.StreamIndex);
|
||||
prop = s;
|
||||
}
|
||||
break;
|
||||
@@ -434,7 +434,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
|
||||
else
|
||||
{
|
||||
char sz[16];
|
||||
ConvertUInt32ToString(item.StreamIndex, sz);
|
||||
ConvertUInt32ToString((UInt32)(Int32)item.StreamIndex, sz);
|
||||
/*
|
||||
AString s = sz;
|
||||
while (s.Len() < _nameLenForStreams)
|
||||
@@ -558,7 +558,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
|
||||
if (r.SolidIndex >= 0)
|
||||
{
|
||||
CSolid &ss = _db.Solids[r.SolidIndex];
|
||||
MethodToProp(ss.Method, ss.ChunkSizeBits, prop);
|
||||
MethodToProp(ss.Method, (int)ss.ChunkSizeBits, prop);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -567,8 +567,8 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
|
||||
int chunkSizeBits = -1;
|
||||
if (r.IsCompressed())
|
||||
{
|
||||
method = vol->Header.GetMethod();
|
||||
chunkSizeBits = vol->Header.ChunkSizeBits;
|
||||
method = (int)vol->Header.GetMethod();
|
||||
chunkSizeBits = (int)vol->Header.ChunkSizeBits;
|
||||
}
|
||||
MethodToProp(method, chunkSizeBits, prop);
|
||||
}
|
||||
@@ -620,7 +620,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
STDMETHODIMP CHandler::GetRootProp(PROPID propID, PROPVARIANT *value)
|
||||
Z7_COM7F_IMF(CHandler::GetRootProp(PROPID propID, PROPVARIANT *value))
|
||||
{
|
||||
// COM_TRY_BEGIN
|
||||
NCOM::CPropVariant prop;
|
||||
@@ -670,9 +670,9 @@ HRESULT CHandler::GetSecurity(UInt32 realIndex, const void **data, UInt32 *dataS
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CHandler::GetRootRawProp(PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)
|
||||
Z7_COM7F_IMF(CHandler::GetRootRawProp(PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType))
|
||||
{
|
||||
*data = 0;
|
||||
*data = NULL;
|
||||
*dataSize = 0;
|
||||
*propType = 0;
|
||||
if (propID == kpidNtSecure && _db.Images.Size() != 0 && _db.NumExcludededItems != 0)
|
||||
@@ -694,20 +694,20 @@ static const Byte kRawProps[] =
|
||||
};
|
||||
|
||||
|
||||
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::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;
|
||||
@@ -722,13 +722,13 @@ STDMETHODIMP CHandler::GetParent(UInt32 index, UInt32 *parent, UInt32 *parentTyp
|
||||
if (item.Parent >= 0)
|
||||
{
|
||||
if (_db.ExludedItem != item.Parent)
|
||||
*parent = _db.Items[item.Parent].IndexInSorted;
|
||||
*parent = (unsigned)_db.Items[item.Parent].IndexInSorted;
|
||||
}
|
||||
else
|
||||
{
|
||||
CImage &image = _db.Images[item.ImageIndex];
|
||||
if (image.VirtualRootIndex >= 0)
|
||||
*parent = _db.SortedItems.Size() + _numXmlItems + image.VirtualRootIndex;
|
||||
*parent = _db.SortedItems.Size() + _numXmlItems + (unsigned)image.VirtualRootIndex;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -736,7 +736,7 @@ STDMETHODIMP CHandler::GetParent(UInt32 index, UInt32 *parent, UInt32 *parentTyp
|
||||
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;
|
||||
@@ -842,8 +842,8 @@ public:
|
||||
{
|
||||
int dotPos = name.ReverseFind_Dot();
|
||||
if (dotPos < 0)
|
||||
dotPos = name.Len();
|
||||
_before.SetFrom(name.Ptr(), dotPos);
|
||||
dotPos = (int)name.Len();
|
||||
_before.SetFrom(name.Ptr(), (unsigned)dotPos);
|
||||
_after = name.Ptr(dotPos);
|
||||
}
|
||||
|
||||
@@ -856,7 +856,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *callback)
|
||||
Z7_COM7F_IMF(CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *callback))
|
||||
{
|
||||
COM_TRY_BEGIN
|
||||
|
||||
@@ -963,7 +963,7 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
|
||||
numVolumes = header.NumParts;
|
||||
{
|
||||
NCOM::CPropVariant prop;
|
||||
RINOK(openVolumeCallback->GetProperty(kpidName, &prop));
|
||||
RINOK(openVolumeCallback->GetProperty(kpidName, &prop))
|
||||
if (prop.vt != VT_BSTR)
|
||||
break;
|
||||
seqName.InitName(prop.bstrVal);
|
||||
@@ -971,7 +971,7 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
|
||||
}
|
||||
}
|
||||
|
||||
RINOK(_db.FillAndCheck(_volumes));
|
||||
RINOK(_db.FillAndCheck(_volumes))
|
||||
int defaultImageIndex = (int)_defaultImageNumber - 1;
|
||||
|
||||
bool showImageNumber = (_db.Images.Size() != 1 && defaultImageIndex < 0);
|
||||
@@ -983,8 +983,8 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
|
||||
|
||||
_showImageNumber = showImageNumber;
|
||||
|
||||
RINOK(_db.GenerateSortedItems(defaultImageIndex, showImageNumber));
|
||||
RINOK(_db.ExtractReparseStreams(_volumes, callback));
|
||||
RINOK(_db.GenerateSortedItems(defaultImageIndex, showImageNumber))
|
||||
RINOK(_db.ExtractReparseStreams(_volumes, callback))
|
||||
|
||||
/*
|
||||
wchar_t sz[16];
|
||||
@@ -1001,7 +1001,7 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCal
|
||||
}
|
||||
|
||||
|
||||
STDMETHODIMP CHandler::Close()
|
||||
Z7_COM7F_IMF(CHandler::Close())
|
||||
{
|
||||
_firstVolumeIndex = -1;
|
||||
_phySize = 0;
|
||||
@@ -1019,11 +1019,11 @@ STDMETHODIMP CHandler::Close()
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
bool allFilesMode = (numItems == (UInt32)(Int32)-1);
|
||||
const bool allFilesMode = (numItems == (UInt32)(Int32)-1);
|
||||
|
||||
if (allFilesMode)
|
||||
numItems = _db.SortedItems.Size() + _numXmlItems + _db.VirtualRoots.Size() + _numIgnoreItems;
|
||||
@@ -1048,12 +1048,12 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
||||
else
|
||||
{
|
||||
index -= _db.SortedItems.Size();
|
||||
if (index < (UInt32)_numXmlItems)
|
||||
if (index < _numXmlItems)
|
||||
totalSize += _xmls[index].Data.Size();
|
||||
}
|
||||
}
|
||||
|
||||
RINOK(extractCallback->SetTotal(totalSize));
|
||||
RINOK(extractCallback->SetTotal(totalSize))
|
||||
|
||||
UInt64 currentTotalUnPacked = 0;
|
||||
UInt64 currentItemUnPacked;
|
||||
@@ -1074,36 +1074,36 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
||||
lps->InSize = unpacker.TotalPacked;
|
||||
lps->OutSize = currentTotalUnPacked;
|
||||
|
||||
RINOK(lps->SetCur());
|
||||
RINOK(lps->SetCur())
|
||||
|
||||
if (i >= numItems)
|
||||
break;
|
||||
|
||||
UInt32 index = allFilesMode ? i : indices[i];
|
||||
Int32 askMode = testMode ?
|
||||
const Int32 askMode = testMode ?
|
||||
NExtract::NAskMode::kTest :
|
||||
NExtract::NAskMode::kExtract;
|
||||
|
||||
CMyComPtr<ISequentialOutStream> realOutStream;
|
||||
RINOK(extractCallback->GetStream(index, &realOutStream, askMode));
|
||||
RINOK(extractCallback->GetStream(index, &realOutStream, askMode))
|
||||
|
||||
if (index >= _db.SortedItems.Size())
|
||||
{
|
||||
if (!testMode && !realOutStream)
|
||||
continue;
|
||||
RINOK(extractCallback->PrepareOperation(askMode));
|
||||
RINOK(extractCallback->PrepareOperation(askMode))
|
||||
index -= _db.SortedItems.Size();
|
||||
if (index < (UInt32)_numXmlItems)
|
||||
if (index < _numXmlItems)
|
||||
{
|
||||
const CByteBuffer &data = _xmls[index].Data;
|
||||
currentItemUnPacked = data.Size();
|
||||
if (realOutStream)
|
||||
{
|
||||
RINOK(WriteStream(realOutStream, (const Byte *)data, data.Size()));
|
||||
RINOK(WriteStream(realOutStream, (const Byte *)data, data.Size()))
|
||||
realOutStream.Release();
|
||||
}
|
||||
}
|
||||
RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kOK));
|
||||
RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kOK))
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1114,11 +1114,11 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
||||
if (!item.IsDir)
|
||||
if (!testMode && !realOutStream)
|
||||
continue;
|
||||
RINOK(extractCallback->PrepareOperation(askMode));
|
||||
RINOK(extractCallback->PrepareOperation(askMode))
|
||||
realOutStream.Release();
|
||||
RINOK(extractCallback->SetOperationResult(!item.IsDir && _db.ItemHasStream(item) ?
|
||||
NExtract::NOperationResult::kDataError :
|
||||
NExtract::NOperationResult::kOK));
|
||||
NExtract::NOperationResult::kOK))
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1128,7 +1128,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
||||
|
||||
if (!testMode && !realOutStream)
|
||||
continue;
|
||||
RINOK(extractCallback->PrepareOperation(askMode));
|
||||
RINOK(extractCallback->PrepareOperation(askMode))
|
||||
Int32 opRes = NExtract::NOperationResult::kOK;
|
||||
|
||||
if (streamIndex != prevSuccessStreamIndex || realOutStream)
|
||||
@@ -1156,7 +1156,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
||||
}
|
||||
|
||||
realOutStream.Release();
|
||||
RINOK(extractCallback->SetOperationResult(opRes));
|
||||
RINOK(extractCallback->SetOperationResult(opRes))
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
@@ -1164,7 +1164,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
||||
}
|
||||
|
||||
|
||||
STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
|
||||
Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
|
||||
{
|
||||
*numItems = _db.SortedItems.Size() +
|
||||
_numXmlItems +
|
||||
@@ -1180,7 +1180,7 @@ CHandler::CHandler()
|
||||
_xmlError = false;
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
InitDefaults();
|
||||
|
||||
@@ -1197,18 +1197,18 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
|
||||
{
|
||||
// some clients write 'x' property. So we support it
|
||||
UInt32 level = 0;
|
||||
RINOK(ParsePropToUInt32(name.Ptr(1), prop, level));
|
||||
RINOK(ParsePropToUInt32(name.Ptr(1), prop, level))
|
||||
}
|
||||
else if (name.IsEqualTo("is"))
|
||||
{
|
||||
RINOK(PROPVARIANT_to_bool(prop, _set_showImageNumber));
|
||||
RINOK(PROPVARIANT_to_bool(prop, _set_showImageNumber))
|
||||
_set_use_ShowImageNumber = true;
|
||||
}
|
||||
else if (name.IsEqualTo("im"))
|
||||
{
|
||||
UInt32 image = 9;
|
||||
RINOK(ParsePropToUInt32(L"", prop, image));
|
||||
_defaultImageNumber = image;
|
||||
RINOK(ParsePropToUInt32(L"", prop, image))
|
||||
_defaultImageNumber = (int)image;
|
||||
}
|
||||
else if (name.IsPrefixedBy_Ascii_NoCase("mt"))
|
||||
{
|
||||
@@ -1217,12 +1217,17 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVAR
|
||||
{
|
||||
}
|
||||
else
|
||||
return E_INVALIDARG;
|
||||
{
|
||||
bool processed = false;
|
||||
RINOK(_timeOptions.Parse(name, prop, processed))
|
||||
if (!processed)
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CHandler::KeepModeForNextOpen()
|
||||
Z7_COM7F_IMF(CHandler::KeepModeForNextOpen())
|
||||
{
|
||||
_keepMode_ShowImageNumber = _showImageNumber;
|
||||
return S_OK;
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
// WimHandler.h
|
||||
|
||||
#ifndef __ARCHIVE_WIM_HANDLER_H
|
||||
#define __ARCHIVE_WIM_HANDLER_H
|
||||
#ifndef ZIP7_INC_ARCHIVE_WIM_HANDLER_H
|
||||
#define ZIP7_INC_ARCHIVE_WIM_HANDLER_H
|
||||
|
||||
#include "../../../Common/MyCom.h"
|
||||
|
||||
#include "../Common/HandlerOut.h"
|
||||
|
||||
#include "WimIn.h"
|
||||
|
||||
namespace NArchive {
|
||||
@@ -12,15 +14,13 @@ namespace NWim {
|
||||
|
||||
static const Int32 kNumImagesMaxUpdate = (1 << 10);
|
||||
|
||||
class CHandler:
|
||||
public IInArchive,
|
||||
public IArchiveGetRawProps,
|
||||
public IArchiveGetRootProps,
|
||||
public IArchiveKeepModeForNextOpen,
|
||||
public ISetProperties,
|
||||
public IOutArchive,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
Z7_CLASS_IMP_CHandler_IInArchive_5(
|
||||
IArchiveGetRawProps
|
||||
, IArchiveGetRootProps
|
||||
, IArchiveKeepModeForNextOpen
|
||||
, ISetProperties
|
||||
, IOutArchive
|
||||
)
|
||||
CDatabase _db;
|
||||
UInt32 _version;
|
||||
bool _isOldVersion;
|
||||
@@ -49,11 +49,14 @@ class CHandler:
|
||||
UInt64 _phySize;
|
||||
int _firstVolumeIndex;
|
||||
|
||||
CHandlerTimeOptions _timeOptions;
|
||||
|
||||
void InitDefaults()
|
||||
{
|
||||
_set_use_ShowImageNumber = false;
|
||||
_set_showImageNumber = false;
|
||||
_defaultImageNumber = -1;
|
||||
_timeOptions.Init();
|
||||
}
|
||||
|
||||
bool IsUpdateSupported() const
|
||||
@@ -83,19 +86,6 @@ class CHandler:
|
||||
HRESULT GetTime(IArchiveUpdateCallback *callback, UInt32 callbackIndex, Int32 arcIndex, PROPID propID, FILETIME &ft);
|
||||
public:
|
||||
CHandler();
|
||||
MY_UNKNOWN_IMP6(
|
||||
IInArchive,
|
||||
IArchiveGetRawProps,
|
||||
IArchiveGetRootProps,
|
||||
IArchiveKeepModeForNextOpen,
|
||||
ISetProperties,
|
||||
IOutArchive)
|
||||
INTERFACE_IInArchive(;)
|
||||
INTERFACE_IArchiveGetRawProps(;)
|
||||
INTERFACE_IArchiveGetRootProps(;)
|
||||
STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps);
|
||||
STDMETHOD(KeepModeForNextOpen)();
|
||||
INTERFACE_IOutArchive(;)
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -99,7 +99,7 @@ HRESULT CUnpacker::UnpackChunk(
|
||||
if (!packBuf.Data)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
RINOK(ReadStream_FALSE(inStream, packBuf.Data, inSize));
|
||||
RINOK(ReadStream_FALSE(inStream, packBuf.Data, inSize))
|
||||
|
||||
TotalPacked += inSize;
|
||||
|
||||
@@ -124,7 +124,7 @@ HRESULT CUnpacker::UnpackChunk(
|
||||
else
|
||||
{
|
||||
res = lzmsDecoder->Code(packBuf.Data, inSize, unpackBuf.Data, outSize);
|
||||
unpackedSize = lzmsDecoder->GetUnpackSize();;
|
||||
unpackedSize = lzmsDecoder->GetUnpackSize();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ HRESULT CUnpacker::UnpackChunk(
|
||||
|
||||
if (outStream)
|
||||
{
|
||||
RINOK(WriteStream(outStream, unpackBuf.Data, outSize));
|
||||
RINOK(WriteStream(outStream, unpackBuf.Data, outSize))
|
||||
}
|
||||
|
||||
return res;
|
||||
@@ -168,7 +168,7 @@ HRESULT CUnpacker::Unpack2(
|
||||
CMyComPtr<ISequentialInStream> limitedStream = limitedStreamSpec;
|
||||
limitedStreamSpec->SetStream(inStream);
|
||||
|
||||
RINOK(inStream->Seek(resource.Offset, STREAM_SEEK_SET, NULL));
|
||||
RINOK(InStream_SeekSet(inStream, resource.Offset))
|
||||
if (resource.PackSize != resource.UnpackSize)
|
||||
return S_FALSE;
|
||||
|
||||
@@ -221,7 +221,7 @@ HRESULT CUnpacker::Unpack2(
|
||||
size_t cur = chunkSize - offsetInChunk;
|
||||
if (cur > rem)
|
||||
cur = (size_t)rem;
|
||||
RINOK(WriteStream(outStream, unpackBuf.Data + offsetInChunk, cur));
|
||||
RINOK(WriteStream(outStream, unpackBuf.Data + offsetInChunk, cur))
|
||||
outProcessed += cur;
|
||||
rem -= cur;
|
||||
offsetInChunk = 0;
|
||||
@@ -233,20 +233,20 @@ HRESULT CUnpacker::Unpack2(
|
||||
if (rem == 0)
|
||||
return S_OK;
|
||||
|
||||
UInt64 offset = ss.Chunks[chunkIndex];
|
||||
UInt64 packSize = ss.GetChunkPackSize(chunkIndex);
|
||||
const UInt64 offset = ss.Chunks[chunkIndex];
|
||||
const UInt64 packSize = ss.GetChunkPackSize(chunkIndex);
|
||||
const CResource &rs = db->DataStreams[ss.StreamIndex].Resource;
|
||||
RINOK(inStream->Seek(rs.Offset + ss.HeadersSize + offset, STREAM_SEEK_SET, NULL));
|
||||
RINOK(InStream_SeekSet(inStream, rs.Offset + ss.HeadersSize + offset))
|
||||
|
||||
size_t cur = chunkSize;
|
||||
UInt64 unpackRem = ss.UnpackSize - ((UInt64)chunkIndex << chunkSizeBits);
|
||||
const UInt64 unpackRem = ss.UnpackSize - ((UInt64)chunkIndex << chunkSizeBits);
|
||||
if (cur > unpackRem)
|
||||
cur = (size_t)unpackRem;
|
||||
|
||||
_solidIndex = -1;
|
||||
_unpackedChunkIndex = 0;
|
||||
|
||||
HRESULT res = UnpackChunk(inStream, ss.Method, chunkSizeBits, (size_t)packSize, cur, NULL);
|
||||
const HRESULT res = UnpackChunk(inStream, (unsigned)ss.Method, chunkSizeBits, (size_t)packSize, cur, NULL);
|
||||
|
||||
if (res != S_OK)
|
||||
{
|
||||
@@ -266,11 +266,11 @@ HRESULT CUnpacker::Unpack2(
|
||||
if (cur > rem)
|
||||
cur = (size_t)rem;
|
||||
|
||||
RINOK(WriteStream(outStream, unpackBuf.Data + offsetInChunk, cur));
|
||||
RINOK(WriteStream(outStream, unpackBuf.Data + offsetInChunk, cur))
|
||||
|
||||
if (progress)
|
||||
{
|
||||
RINOK(progress->SetRatioInfo(&packProcessed, &outProcessed));
|
||||
RINOK(progress->SetRatioInfo(&packProcessed, &outProcessed))
|
||||
packProcessed += packSize;
|
||||
outProcessed += cur;
|
||||
}
|
||||
@@ -311,8 +311,8 @@ HRESULT CUnpacker::Unpack2(
|
||||
if (sizesBufSize != sizesBufSize64)
|
||||
return E_OUTOFMEMORY;
|
||||
sizesBuf.AllocAtLeast(sizesBufSize);
|
||||
RINOK(inStream->Seek(baseOffset, STREAM_SEEK_SET, NULL));
|
||||
RINOK(ReadStream_FALSE(inStream, sizesBuf, sizesBufSize));
|
||||
RINOK(InStream_SeekSet(inStream, baseOffset))
|
||||
RINOK(ReadStream_FALSE(inStream, sizesBuf, sizesBufSize))
|
||||
baseOffset += sizesBufSize64;
|
||||
numChunks = (size_t)numChunks64;
|
||||
}
|
||||
@@ -341,11 +341,11 @@ HRESULT CUnpacker::Unpack2(
|
||||
if (inSize != inSize64)
|
||||
return S_FALSE;
|
||||
|
||||
RINOK(inStream->Seek(baseOffset + offset, STREAM_SEEK_SET, NULL));
|
||||
RINOK(InStream_SeekSet(inStream, baseOffset + offset))
|
||||
|
||||
if (progress)
|
||||
{
|
||||
RINOK(progress->SetRatioInfo(&offset, &outProcessed));
|
||||
RINOK(progress->SetRatioInfo(&offset, &outProcessed))
|
||||
}
|
||||
|
||||
size_t outSize = (size_t)1 << chunkSizeBits;
|
||||
@@ -353,7 +353,7 @@ HRESULT CUnpacker::Unpack2(
|
||||
if (outSize > rem)
|
||||
outSize = (size_t)rem;
|
||||
|
||||
RINOK(UnpackChunk(inStream, header.GetMethod(), chunkSizeBits, inSize, outSize, outStream));
|
||||
RINOK(UnpackChunk(inStream, header.GetMethod(), chunkSizeBits, inSize, outSize, outStream))
|
||||
|
||||
outProcessed += outSize;
|
||||
offset = nextOffset;
|
||||
@@ -494,8 +494,8 @@ void CDatabase::GetItemName(unsigned index, NWindows::NCOM::CPropVariant &name)
|
||||
void CDatabase::GetItemPath(unsigned index1, bool showImageNumber, NWindows::NCOM::CPropVariant &path) const
|
||||
{
|
||||
unsigned size = 0;
|
||||
int index = index1;
|
||||
int imageIndex = Items[index].ImageIndex;
|
||||
int index = (int)index1;
|
||||
const int imageIndex = Items[index].ImageIndex;
|
||||
const CImage &image = Images[imageIndex];
|
||||
|
||||
unsigned newLevel = 0;
|
||||
@@ -545,7 +545,7 @@ void CDatabase::GetItemPath(unsigned index1, bool showImageNumber, NWindows::NCO
|
||||
else if (needColon)
|
||||
s[0] = L':';
|
||||
|
||||
index = index1;
|
||||
index = (int)index1;
|
||||
wchar_t separator = 0;
|
||||
|
||||
for (;;)
|
||||
@@ -597,7 +597,7 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent)
|
||||
if (OpenCallback && (Items.Size() & 0xFFFF) == 0)
|
||||
{
|
||||
UInt64 numFiles = Items.Size();
|
||||
RINOK(OpenCallback->SetCompleted(&numFiles, NULL));
|
||||
RINOK(OpenCallback->SetCompleted(&numFiles, NULL))
|
||||
}
|
||||
|
||||
const size_t rem = DirSize - pos;
|
||||
@@ -664,7 +664,7 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent)
|
||||
|
||||
item.Offset = pos;
|
||||
item.Parent = parent;
|
||||
item.ImageIndex = Images.Size() - 1;
|
||||
item.ImageIndex = (int)Images.Size() - 1;
|
||||
|
||||
const unsigned prevIndex = Items.Add(item);
|
||||
|
||||
@@ -677,7 +677,8 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent)
|
||||
return S_FALSE;
|
||||
const Byte *p2 = DirData + pos;
|
||||
const UInt64 len2 = Get64(p2);
|
||||
if ((len2 & align) != 0 || rem2 < len2 || len2 < (IsOldVersion ? 0x18 : 0x28))
|
||||
if ((len2 & align) != 0 || rem2 < len2
|
||||
|| len2 < (unsigned)(IsOldVersion ? 0x18 : 0x28))
|
||||
return S_FALSE;
|
||||
|
||||
DirProcessed += (size_t)len2;
|
||||
@@ -742,8 +743,8 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent)
|
||||
CItem item2;
|
||||
item2.Offset = pos;
|
||||
item2.IsAltStream = true;
|
||||
item2.Parent = prevIndex;
|
||||
item2.ImageIndex = Images.Size() - 1;
|
||||
item2.Parent = (int)prevIndex;
|
||||
item2.ImageIndex = (int)Images.Size() - 1;
|
||||
Items.Add(item2);
|
||||
}
|
||||
|
||||
@@ -775,7 +776,7 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent)
|
||||
|
||||
if (item.IsDir && subdirOffset != 0)
|
||||
{
|
||||
RINOK(ParseDirItem((size_t)subdirOffset, prevIndex));
|
||||
RINOK(ParseDirItem((size_t)subdirOffset, (int)prevIndex))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -864,7 +865,7 @@ HRESULT CDatabase::ParseImageDirs(CByteBuffer &buf, int parent)
|
||||
DirStartOffset = DirProcessed = pos;
|
||||
image.StartItem = Items.Size();
|
||||
|
||||
RINOK(ParseDirItem(pos, parent));
|
||||
RINOK(ParseDirItem(pos, parent))
|
||||
|
||||
image.NumItems = Items.Size() - image.StartItem;
|
||||
if (DirProcessed == DirSize)
|
||||
@@ -899,27 +900,27 @@ HRESULT CHeader::Parse(const Byte *p, UInt64 &phySize)
|
||||
ChunkSizeBits = kChunkSizeBits;
|
||||
if (ChunkSize != 0)
|
||||
{
|
||||
int log = GetLog(ChunkSize);
|
||||
const int log = GetLog(ChunkSize);
|
||||
if (log < 12)
|
||||
return S_FALSE;
|
||||
ChunkSizeBits = log;
|
||||
ChunkSizeBits = (unsigned)log;
|
||||
}
|
||||
}
|
||||
|
||||
_IsOldVersion = false;
|
||||
_IsNewVersion = false;
|
||||
_isOldVersion = false;
|
||||
_isNewVersion = false;
|
||||
|
||||
if (IsSolidVersion())
|
||||
_IsNewVersion = true;
|
||||
_isNewVersion = true;
|
||||
else
|
||||
{
|
||||
if (Version < 0x010900)
|
||||
return S_FALSE;
|
||||
_IsOldVersion = (Version <= 0x010A00);
|
||||
_isOldVersion = (Version <= 0x010A00);
|
||||
// We don't know details about 1.11 version. So we use headerSize to guess exact features.
|
||||
if (Version == 0x010B00 && headerSize == 0x60)
|
||||
_IsOldVersion = true;
|
||||
_IsNewVersion = (Version >= 0x010D00);
|
||||
_isOldVersion = true;
|
||||
_isNewVersion = (Version >= 0x010D00);
|
||||
}
|
||||
|
||||
unsigned offset;
|
||||
@@ -973,7 +974,7 @@ const Byte kSignature[kSignatureSize] = { 'M', 'S', 'W', 'I', 'M', 0, 0, 0 };
|
||||
HRESULT ReadHeader(IInStream *inStream, CHeader &h, UInt64 &phySize)
|
||||
{
|
||||
Byte p[kHeaderSizeMax];
|
||||
RINOK(ReadStream_FALSE(inStream, p, kHeaderSizeMax));
|
||||
RINOK(ReadStream_FALSE(inStream, p, kHeaderSizeMax))
|
||||
if (memcmp(p, kSignature, kSignatureSize) != 0)
|
||||
return S_FALSE;
|
||||
return h.Parse(p, phySize);
|
||||
@@ -985,7 +986,7 @@ static HRESULT ReadStreams(IInStream *inStream, const CHeader &h, CDatabase &db)
|
||||
CByteBuffer offsetBuf;
|
||||
|
||||
CUnpacker unpacker;
|
||||
RINOK(unpacker.UnpackData(inStream, h.OffsetResource, h, NULL, offsetBuf, NULL));
|
||||
RINOK(unpacker.UnpackData(inStream, h.OffsetResource, h, NULL, offsetBuf, NULL))
|
||||
|
||||
const size_t streamInfoSize = h.IsOldVersion() ? kStreamInfoSize + 2 : kStreamInfoSize;
|
||||
{
|
||||
@@ -1087,7 +1088,7 @@ HRESULT CDatabase::Open(IInStream *inStream, const CHeader &h, unsigned numItems
|
||||
IsOldVersion = h.IsOldVersion();
|
||||
IsOldVersion9 = (h.Version == 0x10900);
|
||||
|
||||
RINOK(ReadStreams(inStream, h, *this));
|
||||
RINOK(ReadStreams(inStream, h, *this))
|
||||
|
||||
bool needBootMetadata = !h.MetadataResource.IsEmpty();
|
||||
unsigned numNonDeletedImages = 0;
|
||||
@@ -1101,14 +1102,14 @@ HRESULT CDatabase::Open(IInStream *inStream, const CHeader &h, unsigned numItems
|
||||
if (h.PartNumber != 1 || si.PartNumber != h.PartNumber)
|
||||
continue;
|
||||
|
||||
const int userImage = Images.Size() + GetStartImageIndex();
|
||||
const unsigned userImage = Images.Size() + GetStartImageIndex();
|
||||
CImage &image = Images.AddNew();
|
||||
SetRootNames(image, userImage);
|
||||
|
||||
CByteBuffer &metadata = image.Meta;
|
||||
Byte hash[kHashSize];
|
||||
|
||||
RINOK(unpacker.UnpackData(inStream, si.Resource, h, this, metadata, hash));
|
||||
RINOK(unpacker.UnpackData(inStream, si.Resource, h, this, metadata, hash))
|
||||
|
||||
if (memcmp(hash, si.Hash, kHashSize) != 0 &&
|
||||
!(h.IsOldVersion() && IsEmptySha(si.Hash)))
|
||||
@@ -1119,7 +1120,7 @@ HRESULT CDatabase::Open(IInStream *inStream, const CHeader &h, unsigned numItems
|
||||
if (Items.IsEmpty())
|
||||
Items.ClearAndReserve(numItemsReserve);
|
||||
|
||||
RINOK(ParseImageDirs(metadata, -1));
|
||||
RINOK(ParseImageDirs(metadata, -1))
|
||||
|
||||
if (needBootMetadata)
|
||||
{
|
||||
@@ -1166,12 +1167,12 @@ bool CDatabase::ItemHasStream(const CItem &item) const
|
||||
}
|
||||
|
||||
|
||||
#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }
|
||||
#define RINOZ(x) { int _tt_ = (x); if (_tt_ != 0) return _tt_; }
|
||||
|
||||
static int CompareStreamsByPos(const CStreamInfo *p1, const CStreamInfo *p2, void * /* param */)
|
||||
{
|
||||
RINOZ(MyCompare(p1->PartNumber, p2->PartNumber));
|
||||
RINOZ(MyCompare(p1->Resource.Offset, p2->Resource.Offset));
|
||||
RINOZ(MyCompare(p1->PartNumber, p2->PartNumber))
|
||||
RINOZ(MyCompare(p1->Resource.Offset, p2->Resource.Offset))
|
||||
return MyCompare(p1->Resource.PackSize, p2->Resource.PackSize);
|
||||
}
|
||||
|
||||
@@ -1192,11 +1193,11 @@ static int FindId(const CStreamInfo *streams, const CUIntVector &sorted, UInt32
|
||||
unsigned left = 0, right = sorted.Size();
|
||||
while (left != right)
|
||||
{
|
||||
unsigned mid = (left + right) / 2;
|
||||
unsigned streamIndex = sorted[mid];
|
||||
UInt32 id2 = streams[streamIndex].Id;
|
||||
const unsigned mid = (left + right) / 2;
|
||||
const unsigned streamIndex = sorted[mid];
|
||||
const UInt32 id2 = streams[streamIndex].Id;
|
||||
if (id == id2)
|
||||
return streamIndex;
|
||||
return (int)streamIndex;
|
||||
if (id < id2)
|
||||
right = mid;
|
||||
else
|
||||
@@ -1210,15 +1211,15 @@ static int FindHash(const CStreamInfo *streams, const CUIntVector &sorted, const
|
||||
unsigned left = 0, right = sorted.Size();
|
||||
while (left != right)
|
||||
{
|
||||
unsigned mid = (left + right) / 2;
|
||||
unsigned streamIndex = sorted[mid];
|
||||
const unsigned mid = (left + right) / 2;
|
||||
const unsigned streamIndex = sorted[mid];
|
||||
const Byte *hash2 = streams[streamIndex].Hash;
|
||||
unsigned i;
|
||||
for (i = 0; i < kHashSize; i++)
|
||||
if (hash[i] != hash2[i])
|
||||
break;
|
||||
if (i == kHashSize)
|
||||
return streamIndex;
|
||||
return (int)streamIndex;
|
||||
if (hash[i] < hash2[i])
|
||||
right = mid;
|
||||
else
|
||||
@@ -1237,8 +1238,8 @@ static int CompareItems(const unsigned *a1, const unsigned *a2, void *param)
|
||||
return i1.IsDir ? -1 : 1;
|
||||
if (i1.IsAltStream != i2.IsAltStream)
|
||||
return i1.IsAltStream ? 1 : -1;
|
||||
RINOZ(MyCompare(i1.StreamIndex, i2.StreamIndex));
|
||||
RINOZ(MyCompare(i1.ImageIndex, i2.ImageIndex));
|
||||
RINOZ(MyCompare(i1.StreamIndex, i2.StreamIndex))
|
||||
RINOZ(MyCompare(i1.ImageIndex, i2.ImageIndex))
|
||||
return MyCompare(i1.Offset, i2.Offset);
|
||||
}
|
||||
|
||||
@@ -1286,7 +1287,7 @@ HRESULT CDatabase::FillAndCheck(const CObjectVector<CVolume> &volumes)
|
||||
if (si.RefCount != 1)
|
||||
return S_FALSE;
|
||||
|
||||
r.SolidIndex = Solids.Size();
|
||||
r.SolidIndex = (int)Solids.Size();
|
||||
|
||||
CSolid &ss = Solids.AddNew();
|
||||
ss.StreamIndex = k;
|
||||
@@ -1300,8 +1301,8 @@ HRESULT CDatabase::FillAndCheck(const CObjectVector<CVolume> &volumes)
|
||||
|
||||
const CVolume &vol = volumes[si.PartNumber];
|
||||
IInStream *inStream = vol.Stream;
|
||||
RINOK(inStream->Seek(r.Offset, STREAM_SEEK_SET, NULL));
|
||||
RINOK(ReadStream_FALSE(inStream, (Byte *)header, kSolidHeaderSize));
|
||||
RINOK(InStream_SeekSet(inStream, r.Offset))
|
||||
RINOK(ReadStream_FALSE(inStream, (Byte *)header, kSolidHeaderSize))
|
||||
|
||||
ss.UnpackSize = GetUi64(header);
|
||||
|
||||
@@ -1313,11 +1314,11 @@ HRESULT CDatabase::FillAndCheck(const CObjectVector<CVolume> &volumes)
|
||||
return S_FALSE;
|
||||
|
||||
const UInt32 solidChunkSize = GetUi32(header + 8);
|
||||
int log = GetLog(solidChunkSize);
|
||||
const int log = GetLog(solidChunkSize);
|
||||
if (log < 8 || log > 31)
|
||||
return S_FALSE;
|
||||
ss.ChunkSizeBits = log;
|
||||
ss.Method = GetUi32(header + 12);
|
||||
ss.ChunkSizeBits = (unsigned)log;
|
||||
ss.Method = (Int32)GetUi32(header + 12);
|
||||
|
||||
UInt64 numChunks64 = (ss.UnpackSize + (((UInt32)1 << ss.ChunkSizeBits) - 1)) >> ss.ChunkSizeBits;
|
||||
UInt64 sizesBufSize64 = 4 * numChunks64;
|
||||
@@ -1327,7 +1328,7 @@ HRESULT CDatabase::FillAndCheck(const CObjectVector<CVolume> &volumes)
|
||||
return E_OUTOFMEMORY;
|
||||
sizesBuf.AllocAtLeast(sizesBufSize);
|
||||
|
||||
RINOK(ReadStream_FALSE(inStream, sizesBuf, sizesBufSize));
|
||||
RINOK(ReadStream_FALSE(inStream, sizesBuf, sizesBufSize))
|
||||
|
||||
size_t numChunks = (size_t)numChunks64;
|
||||
ss.Chunks.Alloc(numChunks + 1);
|
||||
@@ -1381,14 +1382,14 @@ HRESULT CDatabase::FillAndCheck(const CObjectVector<CVolume> &volumes)
|
||||
CSolid &ss = Solids[solidIndex];
|
||||
if (r.Offset < ss.SolidOffset)
|
||||
return S_FALSE;
|
||||
UInt64 relat = r.Offset - ss.SolidOffset;
|
||||
const UInt64 relat = r.Offset - ss.SolidOffset;
|
||||
if (relat > ss.UnpackSize)
|
||||
return S_FALSE;
|
||||
if (r.PackSize > ss.UnpackSize - relat)
|
||||
return S_FALSE;
|
||||
r.SolidIndex = solidIndex;
|
||||
r.SolidIndex = (int)solidIndex;
|
||||
if (ss.FirstSmallStream < 0)
|
||||
ss.FirstSmallStream = k;
|
||||
ss.FirstSmallStream = (int)k;
|
||||
|
||||
sortedByHash.AddInReserved(k);
|
||||
// ss.NumRefs++;
|
||||
@@ -1542,7 +1543,7 @@ HRESULT CDatabase::FillAndCheck(const CObjectVector<CVolume> &volumes)
|
||||
{
|
||||
CItem item;
|
||||
item.Offset = 0;
|
||||
item.StreamIndex = i;
|
||||
item.StreamIndex = (int)i;
|
||||
item.ImageIndex = -1;
|
||||
Items.Add(item);
|
||||
ThereAreDeletedStreams = true;
|
||||
@@ -1591,7 +1592,7 @@ HRESULT CDatabase::GenerateSortedItems(int imageIndex, bool showImageNumber)
|
||||
|
||||
if (NumExcludededItems != 0)
|
||||
{
|
||||
ExludedItem = startItem;
|
||||
ExludedItem = (int)startItem;
|
||||
startItem += NumExcludededItems;
|
||||
}
|
||||
|
||||
@@ -1603,7 +1604,7 @@ HRESULT CDatabase::GenerateSortedItems(int imageIndex, bool showImageNumber)
|
||||
|
||||
SortedItems.Sort(CompareItems, this);
|
||||
for (i = 0; i < SortedItems.Size(); i++)
|
||||
Items[SortedItems[i]].IndexInSorted = i;
|
||||
Items[SortedItems[i]].IndexInSorted = (int)i;
|
||||
|
||||
if (showImageNumber)
|
||||
for (i = 0; i < Images.Size(); i++)
|
||||
@@ -1611,7 +1612,7 @@ HRESULT CDatabase::GenerateSortedItems(int imageIndex, bool showImageNumber)
|
||||
CImage &image = Images[i];
|
||||
if (image.NumEmptyRootItems != 0)
|
||||
continue;
|
||||
image.VirtualRootIndex = VirtualRoots.Size();
|
||||
image.VirtualRootIndex = (int)VirtualRoots.Size();
|
||||
VirtualRoots.Add(i);
|
||||
}
|
||||
|
||||
@@ -1681,7 +1682,7 @@ HRESULT CDatabase::ExtractReparseStreams(const CObjectVector<CVolume> &volumes,
|
||||
if ((unpacker.TotalPacked - totalPackedPrev) >= ((UInt32)1 << 16))
|
||||
{
|
||||
UInt64 numFiles = Items.Size();
|
||||
RINOK(openCallback->SetCompleted(&numFiles, &unpacker.TotalPacked));
|
||||
RINOK(openCallback->SetCompleted(&numFiles, &unpacker.TotalPacked))
|
||||
totalPackedPrev = unpacker.TotalPacked;
|
||||
}
|
||||
}
|
||||
@@ -1715,7 +1716,7 @@ HRESULT CDatabase::ExtractReparseStreams(const CObjectVector<CVolume> &volumes,
|
||||
if (res == S_FALSE)
|
||||
continue;
|
||||
|
||||
RINOK(res);
|
||||
RINOK(res)
|
||||
|
||||
if (memcmp(digest, si.Hash, kHashSize) != 0
|
||||
// && !(h.IsOldVersion() && IsEmptySha(si.Hash))
|
||||
@@ -1729,11 +1730,11 @@ HRESULT CDatabase::ExtractReparseStreams(const CObjectVector<CVolume> &volumes,
|
||||
CByteBuffer &reparse = ReparseItems.AddNew();
|
||||
reparse.Alloc(8 + buf.Size());
|
||||
Byte *dest = (Byte *)reparse;
|
||||
SetUi32(dest, tag);
|
||||
SetUi32(dest + 4, (UInt32)buf.Size());
|
||||
SetUi32(dest, tag)
|
||||
SetUi32(dest + 4, (UInt32)buf.Size())
|
||||
if (buf.Size() != 0)
|
||||
memcpy(dest + 8, buf, buf.Size());
|
||||
ItemToReparse[itemIndex] = ReparseItems.Size() - 1;
|
||||
ItemToReparse[itemIndex] = (int)ReparseItems.Size() - 1;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
@@ -1856,7 +1857,7 @@ bool CWimXml::Parse()
|
||||
return false;
|
||||
}
|
||||
|
||||
imageInfo.ItemIndexInXml = i;
|
||||
imageInfo.ItemIndexInXml = (int)i;
|
||||
Images.Add(imageInfo);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Archive/WimIn.h
|
||||
|
||||
#ifndef __ARCHIVE_WIM_IN_H
|
||||
#define __ARCHIVE_WIM_IN_H
|
||||
#ifndef ZIP7_INC_ARCHIVE_WIM_IN_H
|
||||
#define ZIP7_INC_ARCHIVE_WIM_IN_H
|
||||
|
||||
#include "../../../../C/Alloc.h"
|
||||
|
||||
@@ -192,7 +192,7 @@ struct CSolid
|
||||
|
||||
UInt64 UnpackSize;
|
||||
int Method;
|
||||
int ChunkSizeBits;
|
||||
unsigned ChunkSizeBits;
|
||||
|
||||
UInt64 HeadersSize;
|
||||
// size_t NumChunks;
|
||||
@@ -258,8 +258,8 @@ struct CHeader
|
||||
UInt32 NumImages;
|
||||
UInt32 BootIndex;
|
||||
|
||||
bool _IsOldVersion; // 1.10-
|
||||
bool _IsNewVersion; // 1.13+ or 0.14
|
||||
bool _isOldVersion; // 1.10-
|
||||
bool _isNewVersion; // 1.13+ or 0.14
|
||||
|
||||
CResource OffsetResource;
|
||||
CResource XmlResource;
|
||||
@@ -295,8 +295,8 @@ struct CHeader
|
||||
return mask;
|
||||
}
|
||||
|
||||
bool IsOldVersion() const { return _IsOldVersion; }
|
||||
bool IsNewVersion() const { return _IsNewVersion; }
|
||||
bool IsOldVersion() const { return _isOldVersion; }
|
||||
bool IsNewVersion() const { return _isNewVersion; }
|
||||
bool IsSolidVersion() const { return (Version == k_Version_Solid); }
|
||||
|
||||
bool AreFromOnArchive(const CHeader &h)
|
||||
@@ -457,7 +457,7 @@ public:
|
||||
bool RefCountError;
|
||||
bool HeadersError;
|
||||
|
||||
bool GetStartImageIndex() const { return IsOldVersion9 ? 0 : 1; }
|
||||
unsigned GetStartImageIndex() const { return IsOldVersion9 ? 0 : 1; }
|
||||
unsigned GetDirAlignMask() const { return IsOldVersion9 ? 3 : 7; }
|
||||
|
||||
// User Items can contain all images or just one image from all.
|
||||
|
||||
Reference in New Issue
Block a user