mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-14 22:11:38 -06:00
4.27 beta
This commit is contained in:
committed by
Kornel Lesiński
parent
31e7b924e8
commit
d66cf2fcf3
@@ -496,6 +496,14 @@ SOURCE=..\..\Common\StreamObjects.cpp
|
||||
|
||||
SOURCE=..\..\Common\StreamObjects.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\Common\StreamUtils.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\Common\StreamUtils.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Windows"
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Decode.cpp
|
||||
// 7zDecode.cpp
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
@@ -136,10 +136,10 @@ static bool AreBindInfoExEqual(const CBindInfoEx &a1, const CBindInfoEx &a2)
|
||||
|
||||
CDecoder::CDecoder(bool multiThread)
|
||||
{
|
||||
_multiThread = true;
|
||||
#ifdef _ST_MODE
|
||||
_multiThread = multiThread;
|
||||
#ifndef _ST_MODE
|
||||
multiThread = true;
|
||||
#endif
|
||||
_multiThread = multiThread;
|
||||
_bindInfoExPrevIsDefinded = false;
|
||||
#ifndef EXCLUDE_COM
|
||||
LoadMethodMap();
|
||||
|
||||
@@ -142,7 +142,13 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
|
||||
|
||||
extractCallback->SetTotal(importantTotalUnPacked);
|
||||
|
||||
CDecoder decoder(true);
|
||||
CDecoder decoder(
|
||||
#ifdef _ST_MODE
|
||||
false
|
||||
#else
|
||||
true
|
||||
#endif
|
||||
);
|
||||
// CDecoder1 decoder;
|
||||
|
||||
UInt64 currentImportantTotalUnPacked = 0;
|
||||
|
||||
@@ -79,7 +79,7 @@ HRESULT CFolderInStream::CloseStream()
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFolderInStream::ReadPart(void *data, UInt32 size, UInt32 *processedSize)
|
||||
STDMETHODIMP CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
|
||||
{
|
||||
UInt32 realProcessedSize = 0;
|
||||
while ((_fileIndex < _numFiles || _fileIsOpen) && size > 0)
|
||||
@@ -87,7 +87,7 @@ STDMETHODIMP CFolderInStream::ReadPart(void *data, UInt32 size, UInt32 *processe
|
||||
if (_fileIsOpen)
|
||||
{
|
||||
UInt32 localProcessedSize;
|
||||
RINOK(_inStreamWithHash->ReadPart(
|
||||
RINOK(_inStreamWithHash->Read(
|
||||
((Byte *)data) + realProcessedSize, size, &localProcessedSize));
|
||||
if (localProcessedSize == 0)
|
||||
{
|
||||
@@ -109,24 +109,6 @@ STDMETHODIMP CFolderInStream::ReadPart(void *data, UInt32 size, UInt32 *processe
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSize)
|
||||
{
|
||||
UInt32 realProcessedSize = 0;
|
||||
while (size > 0)
|
||||
{
|
||||
UInt32 localProcessedSize;
|
||||
RINOK(ReadPart(((Byte *)data) + realProcessedSize, size, &localProcessedSize));
|
||||
if (localProcessedSize == 0)
|
||||
break;
|
||||
size -= localProcessedSize;
|
||||
realProcessedSize += localProcessedSize;
|
||||
}
|
||||
if (processedSize != 0)
|
||||
*processedSize = realProcessedSize;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
STDMETHODIMP CFolderInStream::GetSubStreamSize(UInt64 subStream, UInt64 *value)
|
||||
{
|
||||
*value = 0;
|
||||
|
||||
@@ -26,7 +26,6 @@ public:
|
||||
CFolderInStream();
|
||||
|
||||
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
|
||||
STDMETHOD(ReadPart)(void *data, UInt32 size, UInt32 *processedSize);
|
||||
|
||||
STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value);
|
||||
private:
|
||||
|
||||
@@ -91,7 +91,8 @@ STDMETHODIMP CFolderOutStream::Write(const void *data,
|
||||
UInt64(size - realProcessedSize));
|
||||
|
||||
UInt32 processedSizeLocal;
|
||||
RINOK(_outStreamWithHash->Write((const Byte *)data + realProcessedSize, numBytesToWrite, &processedSizeLocal));
|
||||
RINOK(_outStreamWithHash->Write((const Byte *)data + realProcessedSize,
|
||||
numBytesToWrite, &processedSizeLocal));
|
||||
|
||||
_filePos += processedSizeLocal;
|
||||
realProcessedSize += processedSizeLocal;
|
||||
@@ -130,12 +131,6 @@ STDMETHODIMP CFolderOutStream::Write(const void *data,
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFolderOutStream::WritePart(const void *data,
|
||||
UInt32 size, UInt32 *processedSize)
|
||||
{
|
||||
return Write(data, size, processedSize);
|
||||
}
|
||||
|
||||
HRESULT CFolderOutStream::FlushCorrupted(Int32 resultEOperationResult)
|
||||
{
|
||||
while(_currentIndex < _extractStatuses->Size())
|
||||
|
||||
@@ -22,7 +22,6 @@ public:
|
||||
CFolderOutStream();
|
||||
|
||||
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
||||
STDMETHOD(WritePart)(const void *data, UInt32 size, UInt32 *processedSize);
|
||||
private:
|
||||
|
||||
COutStreamWithCRC *_outStreamWithHashSpec;
|
||||
|
||||
@@ -50,9 +50,9 @@ struct COneMethodInfo
|
||||
};
|
||||
#endif
|
||||
|
||||
// {23170F69-40C1-278A-1000-000110050000}
|
||||
// {23170F69-40C1-278A-1000-000110070000}
|
||||
DEFINE_GUID(CLSID_CFormat7z,
|
||||
0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x05, 0x00, 0x00);
|
||||
0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);
|
||||
|
||||
class CHandler:
|
||||
public IInArchive,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "7zMethods.h"
|
||||
#include "7zDecode.h"
|
||||
#include "../../Common/StreamObjects.h"
|
||||
#include "../../Common/StreamUtils.h"
|
||||
#include "../../../Common/CRC.h"
|
||||
|
||||
namespace NArchive {
|
||||
@@ -69,7 +70,7 @@ HRESULT CInArchive::ReadDirect(IInStream *stream, void *data, UInt32 size,
|
||||
UInt32 *processedSize)
|
||||
{
|
||||
UInt32 realProcessedSize;
|
||||
HRESULT result = stream->Read(data, size, &realProcessedSize);
|
||||
HRESULT result = ReadStream(stream, data, size, &realProcessedSize);
|
||||
if(processedSize != NULL)
|
||||
*processedSize = realProcessedSize;
|
||||
_position += realProcessedSize;
|
||||
@@ -850,7 +851,13 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(UInt64 baseOffset,
|
||||
// database.ArchiveInfo.DataStartPosition2 += database.ArchiveInfo.StartPositionAfterHeader;
|
||||
|
||||
CNum packIndex = 0;
|
||||
CDecoder decoder(false);
|
||||
CDecoder decoder(
|
||||
#ifdef _ST_MODE
|
||||
false
|
||||
#else
|
||||
true
|
||||
#endif
|
||||
);
|
||||
UInt64 dataStartPos = baseOffset + dataOffset;
|
||||
for(int i = 0; i < folders.Size(); i++)
|
||||
{
|
||||
|
||||
@@ -11,10 +11,10 @@ static HRESULT WriteBytes(ISequentialOutStream *stream, const void *data, size_t
|
||||
{
|
||||
while (size > 0)
|
||||
{
|
||||
UInt32 curSize = (UInt32)(MyMin(size, (size_t)0xFFFFFFFF));
|
||||
UInt32 curSize = (UInt32)MyMin(size, (size_t)0xFFFFFFFF);
|
||||
UInt32 processedSize;
|
||||
RINOK(stream->WritePart(data, curSize, &processedSize));
|
||||
if(processedSize == 0 || processedSize > curSize)
|
||||
RINOK(stream->Write(data, curSize, &processedSize));
|
||||
if(processedSize == 0)
|
||||
return E_FAIL;
|
||||
data = (const void *)((const Byte *)data + processedSize);
|
||||
size -= processedSize;
|
||||
@@ -111,7 +111,10 @@ HRESULT COutArchive::Create(ISequentialOutStream *stream, bool endMarker)
|
||||
{
|
||||
SeqStream.QueryInterface(IID_IOutStream, &Stream);
|
||||
if (!Stream)
|
||||
endMarker = true;
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
// endMarker = true;
|
||||
}
|
||||
}
|
||||
#ifdef _7Z_VOL
|
||||
if (endMarker)
|
||||
|
||||
@@ -14,16 +14,6 @@ STDMETHODIMP CSequentialInStreamSizeCount2::Read(void *data, UInt32 size, UInt32
|
||||
return result;
|
||||
}
|
||||
|
||||
STDMETHODIMP CSequentialInStreamSizeCount2::ReadPart(void *data, UInt32 size, UInt32 *processedSize)
|
||||
{
|
||||
UInt32 realProcessedSize;
|
||||
HRESULT result = _stream->ReadPart(data, size, &realProcessedSize);
|
||||
_size += realProcessedSize;
|
||||
if (processedSize != 0)
|
||||
*processedSize = realProcessedSize;
|
||||
return result;
|
||||
}
|
||||
|
||||
STDMETHODIMP CSequentialInStreamSizeCount2::GetSubStreamSize(
|
||||
UInt64 subStream, UInt64 *value)
|
||||
{
|
||||
|
||||
@@ -28,7 +28,6 @@ public:
|
||||
MY_UNKNOWN_IMP1(ICompressGetSubStreamSize)
|
||||
|
||||
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
|
||||
STDMETHOD(ReadPart)(void *data, UInt32 size, UInt32 *processedSize);
|
||||
|
||||
STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value);
|
||||
};
|
||||
|
||||
@@ -89,11 +89,13 @@ UString CUpdateItem::GetExtension() const
|
||||
return Name.Mid(GetExtensionPos());
|
||||
}
|
||||
|
||||
/*
|
||||
struct CFolderRef
|
||||
{
|
||||
const CArchiveDatabaseEx *Database;
|
||||
int FolderIndex;
|
||||
};
|
||||
*/
|
||||
|
||||
#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }
|
||||
|
||||
@@ -159,31 +161,31 @@ static int CompareFiles(const CFileItem &f1, const CFileItem &f2)
|
||||
return MyStringCollateNoCase(f1.Name, f2.Name);
|
||||
}
|
||||
|
||||
static int __cdecl CompareFolderRefs(const void *p1, const void *p2)
|
||||
static int CompareFolderRefs(const int *p1, const int *p2, void *param)
|
||||
{
|
||||
const CFolderRef &a1 = *((const CFolderRef *)p1);
|
||||
const CFolderRef &a2 = *((const CFolderRef *)p2);
|
||||
const CArchiveDatabaseEx &d1 = *a1.Database;
|
||||
const CArchiveDatabaseEx &d2 = *a2.Database;
|
||||
int i1 = *p1;
|
||||
int i2 = *p2;
|
||||
const CArchiveDatabaseEx &db = *(const CArchiveDatabaseEx *)param;
|
||||
RINOZ(CompareFolders(
|
||||
d1.Folders[a1.FolderIndex],
|
||||
d2.Folders[a2.FolderIndex]));
|
||||
db.Folders[i1],
|
||||
db.Folders[i2]));
|
||||
RINOZ(MyCompare(
|
||||
d1.NumUnPackStreamsVector[a1.FolderIndex],
|
||||
d2.NumUnPackStreamsVector[a2.FolderIndex]));
|
||||
if (d1.NumUnPackStreamsVector[a1.FolderIndex] == 0)
|
||||
db.NumUnPackStreamsVector[i1],
|
||||
db.NumUnPackStreamsVector[i2]));
|
||||
if (db.NumUnPackStreamsVector[i1] == 0)
|
||||
return 0;
|
||||
return CompareFiles(
|
||||
d1.Files[d1.FolderStartFileIndex[a1.FolderIndex]],
|
||||
d2.Files[d2.FolderStartFileIndex[a2.FolderIndex]]);
|
||||
db.Files[db.FolderStartFileIndex[i1]],
|
||||
db.Files[db.FolderStartFileIndex[i2]]);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
static int __cdecl CompareEmptyItems(const void *p1, const void *p2)
|
||||
static int CompareEmptyItems(const int *p1, const int *p2, void *param)
|
||||
{
|
||||
const CUpdateItem &u1 = **((CUpdateItem **)p1);
|
||||
const CUpdateItem &u2 = **((CUpdateItem **)p2);
|
||||
const CObjectVector<CUpdateItem> &updateItems = *(const CObjectVector<CUpdateItem> *)param;
|
||||
const CUpdateItem &u1 = updateItems[*p1];
|
||||
const CUpdateItem &u2 = updateItems[*p2];
|
||||
if (u1.IsDirectory != u2.IsDirectory)
|
||||
{
|
||||
if (u1.IsDirectory)
|
||||
@@ -234,10 +236,10 @@ struct CRefItem
|
||||
}
|
||||
};
|
||||
|
||||
static int __cdecl CompareUpdateItems(const void *p1, const void *p2)
|
||||
static int CompareUpdateItems(const CRefItem *p1, const CRefItem *p2, void *param)
|
||||
{
|
||||
const CRefItem &a1 = *((CRefItem *)p1);
|
||||
const CRefItem &a2 = *((CRefItem *)p2);
|
||||
const CRefItem &a1 = *p1;
|
||||
const CRefItem &a2 = *p2;
|
||||
const CUpdateItem &u1 = *a1.UpdateItem;
|
||||
const CUpdateItem &u2 = *a2.UpdateItem;
|
||||
int n;
|
||||
@@ -455,7 +457,7 @@ static void FromUpdateItemToFileItem(const CUpdateItem &updateItem,
|
||||
static HRESULT Update2(
|
||||
IInStream *inStream,
|
||||
const CArchiveDatabaseEx *database,
|
||||
CObjectVector<CUpdateItem> &updateItems,
|
||||
const CObjectVector<CUpdateItem> &updateItems,
|
||||
ISequentialOutStream *seqOutStream,
|
||||
IArchiveUpdateCallback *updateCallback,
|
||||
const CUpdateOptions &options)
|
||||
@@ -496,38 +498,32 @@ static HRESULT Update2(
|
||||
fileIndexToUpdateIndexMap[index] = i;
|
||||
}
|
||||
|
||||
CRecordVector<CFolderRef> folderRefs;
|
||||
CRecordVector<int> folderRefs;
|
||||
if (database != 0)
|
||||
{
|
||||
for(i = 0; i < database->Folders.Size(); i++)
|
||||
{
|
||||
CNum indexInFolder = 0;
|
||||
CNum numCopyItems = 0;
|
||||
CNum numUnPackStreams = database->NumUnPackStreamsVector[i];
|
||||
for (CNum fileIndex = database->FolderStartFileIndex[i];
|
||||
indexInFolder < numUnPackStreams; fileIndex++)
|
||||
for(i = 0; i < database->Folders.Size(); i++)
|
||||
{
|
||||
if (database->Files[fileIndex].HasStream)
|
||||
CNum indexInFolder = 0;
|
||||
CNum numCopyItems = 0;
|
||||
CNum numUnPackStreams = database->NumUnPackStreamsVector[i];
|
||||
for (CNum fileIndex = database->FolderStartFileIndex[i];
|
||||
indexInFolder < numUnPackStreams; fileIndex++)
|
||||
{
|
||||
indexInFolder++;
|
||||
int updateIndex = fileIndexToUpdateIndexMap[fileIndex];
|
||||
if (updateIndex >= 0)
|
||||
if (!updateItems[updateIndex].NewData)
|
||||
numCopyItems++;
|
||||
if (database->Files[fileIndex].HasStream)
|
||||
{
|
||||
indexInFolder++;
|
||||
int updateIndex = fileIndexToUpdateIndexMap[fileIndex];
|
||||
if (updateIndex >= 0)
|
||||
if (!updateItems[updateIndex].NewData)
|
||||
numCopyItems++;
|
||||
}
|
||||
}
|
||||
if (numCopyItems != numUnPackStreams && numCopyItems != 0)
|
||||
return E_NOTIMPL; // It needs repacking !!!
|
||||
if (numCopyItems > 0)
|
||||
folderRefs.Add(i);
|
||||
}
|
||||
if (numCopyItems != numUnPackStreams && numCopyItems != 0)
|
||||
return E_NOTIMPL; // It needs repacking !!!
|
||||
if (numCopyItems > 0)
|
||||
{
|
||||
CFolderRef folderRef;
|
||||
folderRef.Database = database;
|
||||
folderRef.FolderIndex = i;
|
||||
folderRefs.Add(folderRef);
|
||||
}
|
||||
}
|
||||
qsort(&folderRefs.Front(), folderRefs.Size(), sizeof(folderRefs[0]),
|
||||
CompareFolderRefs);
|
||||
folderRefs.Sort(CompareFolderRefs, (void *)database);
|
||||
}
|
||||
|
||||
CArchiveDatabase newDatabase;
|
||||
@@ -535,7 +531,7 @@ static HRESULT Update2(
|
||||
/////////////////////////////////////////
|
||||
// Write Empty Files & Folders
|
||||
|
||||
CRecordVector<const CUpdateItem *> emptyRefs;
|
||||
CRecordVector<int> emptyRefs;
|
||||
for(i = 0; i < updateItems.Size(); i++)
|
||||
{
|
||||
const CUpdateItem &updateItem = updateItems[i];
|
||||
@@ -548,13 +544,12 @@ static HRESULT Update2(
|
||||
if (updateItem.IndexInArchive != -1)
|
||||
if (database->Files[updateItem.IndexInArchive].HasStream)
|
||||
continue;
|
||||
emptyRefs.Add(&updateItem);
|
||||
emptyRefs.Add(i);
|
||||
}
|
||||
qsort(&emptyRefs.Front(), emptyRefs.Size(), sizeof(emptyRefs[0]),
|
||||
CompareEmptyItems);
|
||||
emptyRefs.Sort(CompareEmptyItems, (void *)&updateItems);
|
||||
for(i = 0; i < emptyRefs.Size(); i++)
|
||||
{
|
||||
const CUpdateItem &updateItem = *emptyRefs[i];
|
||||
const CUpdateItem &updateItem = updateItems[emptyRefs[i]];
|
||||
CFileItem file;
|
||||
if (updateItem.NewProperties)
|
||||
FromUpdateItemToFileItem(updateItem, file);
|
||||
@@ -566,11 +561,11 @@ static HRESULT Update2(
|
||||
////////////////////////////
|
||||
|
||||
COutArchive archive;
|
||||
archive.Create(seqOutStream, false);
|
||||
RINOK(archive.Create(seqOutStream, false));
|
||||
RINOK(archive.SkeepPrefixArchiveHeader());
|
||||
UInt64 complexity = 0;
|
||||
for(i = 0; i < folderRefs.Size(); i++)
|
||||
complexity += database->GetFolderFullPackSize(folderRefs[i].FolderIndex);
|
||||
complexity += database->GetFolderFullPackSize(folderRefs[i]);
|
||||
for(i = 0; i < updateItems.Size(); i++)
|
||||
{
|
||||
const CUpdateItem &updateItem = updateItems[i];
|
||||
@@ -586,7 +581,7 @@ static HRESULT Update2(
|
||||
|
||||
for(i = 0; i < folderRefs.Size(); i++)
|
||||
{
|
||||
int folderIndex = folderRefs[i].FolderIndex;
|
||||
int folderIndex = folderRefs[i];
|
||||
|
||||
RINOK(WriteRange(inStream, archive.SeqStream,
|
||||
database->GetFolderStreamPos(folderIndex, 0),
|
||||
@@ -652,7 +647,7 @@ static HRESULT Update2(
|
||||
for (i = 0; i < numFiles; i++)
|
||||
refItems.Add(CRefItem(group.Indices[i],
|
||||
updateItems[group.Indices[i]], numSolidFiles > 1));
|
||||
qsort(&refItems.Front(), refItems.Size(), sizeof(refItems[0]), CompareUpdateItems);
|
||||
refItems.Sort(CompareUpdateItems, 0);
|
||||
|
||||
CRecordVector<UInt32> indices;
|
||||
indices.Reserve(numFiles);
|
||||
@@ -862,7 +857,7 @@ HRESULT UpdateVolume(
|
||||
RINOK(volumeCallback->GetVolumeStream(volumeIndex, &volumeStream));
|
||||
|
||||
COutArchive archive;
|
||||
archive.Create(volumeStream, true);
|
||||
RINOK(archive.Create(volumeStream, true));
|
||||
RINOK(archive.SkeepPrefixArchiveHeader());
|
||||
|
||||
CSequentialInStreamWithCRC *inCrcStreamSpec = new CSequentialInStreamWithCRC;
|
||||
@@ -914,7 +909,6 @@ public:
|
||||
|
||||
HRESULT Flush();
|
||||
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
||||
STDMETHOD(WritePart)(const void *data, UInt32 size, UInt32 *processedSize);
|
||||
};
|
||||
|
||||
HRESULT COutVolumeStream::Flush()
|
||||
@@ -943,7 +937,7 @@ STDMETHODIMP COutVolumeStream::Write(const void *data, UInt32 size, UInt32 *proc
|
||||
RINOK(VolumeCallback->GetVolumeStream(_volIndex, &_volumeStream));
|
||||
_volIndex++;
|
||||
_curPos = 0;
|
||||
_archive.Create(_volumeStream, true);
|
||||
RINOK(_archive.Create(_volumeStream, true));
|
||||
RINOK(_archive.SkeepPrefixArchiveHeader());
|
||||
_crc.Init();
|
||||
continue;
|
||||
@@ -959,7 +953,7 @@ STDMETHODIMP COutVolumeStream::Write(const void *data, UInt32 size, UInt32 *proc
|
||||
if(processedSize != NULL)
|
||||
*processedSize += realProcessed;
|
||||
_curPos += realProcessed;
|
||||
if (realProcessed != curSize)
|
||||
if (realProcessed != curSize && realProcessed == 0)
|
||||
return E_FAIL;
|
||||
if (_curPos == pureSize)
|
||||
{
|
||||
@@ -969,16 +963,12 @@ STDMETHODIMP COutVolumeStream::Write(const void *data, UInt32 size, UInt32 *proc
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP COutVolumeStream::WritePart(const void *data, UInt32 size, UInt32 *processedSize)
|
||||
{
|
||||
return Write(data, size, processedSize);
|
||||
}
|
||||
#endif
|
||||
|
||||
HRESULT Update(
|
||||
IInStream *inStream,
|
||||
const CArchiveDatabaseEx *database,
|
||||
CObjectVector<CUpdateItem> &updateItems,
|
||||
const CObjectVector<CUpdateItem> &updateItems,
|
||||
ISequentialOutStream *seqOutStream,
|
||||
IArchiveUpdateCallback *updateCallback,
|
||||
const CUpdateOptions &options)
|
||||
|
||||
@@ -60,7 +60,7 @@ struct CUpdateOptions
|
||||
HRESULT Update(
|
||||
IInStream *inStream,
|
||||
const CArchiveDatabaseEx *database,
|
||||
CObjectVector<CUpdateItem> &updateItems,
|
||||
const CObjectVector<CUpdateItem> &updateItems,
|
||||
ISequentialOutStream *seqOutStream,
|
||||
IArchiveUpdateCallback *updateCallback,
|
||||
const CUpdateOptions &options);
|
||||
|
||||
@@ -48,6 +48,7 @@ WIN_OBJS = \
|
||||
$O\ProgressUtils.obj \
|
||||
$O\StreamBinder.obj \
|
||||
$O\StreamObjects.obj \
|
||||
$O\StreamUtils.obj \
|
||||
|
||||
AR_COMMON_OBJS = \
|
||||
$O\CodecsPath.obj \
|
||||
|
||||
Reference in New Issue
Block a user