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:
Diffstat (limited to 'CPP/7zip/Archive/MbrHandler.cpp')
-rw-r--r--[-rwxr-xr-x]CPP/7zip/Archive/MbrHandler.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/CPP/7zip/Archive/MbrHandler.cpp b/CPP/7zip/Archive/MbrHandler.cpp
index b6d79182..309bc286 100755..100644
--- a/CPP/7zip/Archive/MbrHandler.cpp
+++ b/CPP/7zip/Archive/MbrHandler.cpp
@@ -10,12 +10,12 @@
#include "../../../C/CpuArch.h"
-#include "Common/Buffer.h"
-#include "Common/ComTry.h"
-#include "Common/IntToString.h"
-#include "Common/MyString.h"
+#include "../../Common/ComTry.h"
+#include "../../Common/IntToString.h"
+#include "../../Common/MyBuffer.h"
+#include "../../Common/MyString.h"
-#include "Windows/PropVariant.h"
+#include "../../Windows/PropVariant.h"
#include "../Common/LimitedStreams.h"
#include "../Common/ProgressUtils.h"
@@ -169,7 +169,7 @@ static const CPartType kPartTypes[] =
static int FindPartType(UInt32 type)
{
- for (int i = 0; i < sizeof(kPartTypes) / sizeof(kPartTypes[0]); i++)
+ for (int i = 0; i < ARRAY_SIZE(kPartTypes); i++)
if (kPartTypes[i].Id == type)
return i;
return -1;
@@ -210,7 +210,7 @@ HRESULT CHandler::ReadTables(IInStream *stream, UInt32 baseLba, UInt32 lba, int
{
const UInt32 kSectorSize = 512;
- _buffer.SetCapacity(kSectorSize);
+ _buffer.Alloc(kSectorSize);
Byte *buf = _buffer;
UInt64 newPos = (UInt64)lba << 9;
if (newPos + 512 > _totalSize)
@@ -243,7 +243,7 @@ HRESULT CHandler::ReadTables(IInStream *stream, UInt32 baseLba, UInt32 lba, int
part.Print();
#endif
- int numItems = _items.Size();
+ unsigned numItems = _items.Size();
UInt32 newLba = lba + part.Lba;
if (part.IsExtended())
@@ -323,6 +323,7 @@ STDMETHODIMP CHandler::Open(IInStream *stream,
STDMETHODIMP CHandler::Close()
{
+ _totalSize = 0;
_items.Clear();
_stream.Release();
return S_OK;
@@ -335,7 +336,7 @@ enum
kpidEndChs
};
-STATPROPSTG kProps[] =
+static const STATPROPSTG kProps[] =
{
{ NULL, kpidPath, VT_BSTR},
{ NULL, kpidSize, VT_UI8},
@@ -352,12 +353,12 @@ IMP_IInArchive_ArcProps_NO_Table
STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
{
NCOM::CPropVariant prop;
- switch(propID)
+ switch (propID)
{
case kpidMainSubfile:
{
int mainIndex = -1;
- for (int i = 0; i < _items.Size(); i++)
+ FOR_VECTOR (i, _items)
if (_items[i].IsReal)
{
if (mainIndex >= 0)
@@ -371,6 +372,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
prop = (UInt32)mainIndex;
break;
}
+ case kpidPhySize: prop = _totalSize; break;
}
prop.Detach(value);
return S_OK;
@@ -435,7 +437,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
Int32 testMode, IArchiveExtractCallback *extractCallback)
{
COM_TRY_BEGIN
- bool allFilesMode = (numItems == (UInt32)-1);
+ bool allFilesMode = (numItems == (UInt32)(Int32)-1);
if (allFilesMode)
numItems = _items.Size();
if (numItems == 0)
@@ -497,10 +499,16 @@ STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
COM_TRY_END
}
-static IInArchive *CreateArc() { return new CHandler; }
+IMP_CreateArcIn
static CArcInfo g_ArcInfo =
- { L"MBR", L"mbr", 0, 0xDB, { 1, 1, 0 }, 3, false, CreateArc, 0 };
+ { "MBR", "mbr", 0, 0xDB,
+ // 3, { 1, 1, 0 },
+ // 2, { 0x55, 0x1FF },
+ 0, { 0 },
+ 0,
+ NArcInfoFlags::kPureStartOpen,
+ CreateArc };
REGISTER_ARC(Mbr)