This commit is contained in:
Igor Pavlov
2023-12-22 17:17:05 +00:00
committed by Kornel
parent ec44a8a070
commit a36c48cece
954 changed files with 42199 additions and 25482 deletions

View File

@@ -71,8 +71,10 @@ struct CItem
}
};
class CHandler: public CHandlerCont
Z7_class_CHandler_final: public CHandlerCont
{
Z7_IFACE_COM7_IMP(IInArchive_Cont)
CRecordVector<CItem> _items;
unsigned _blockSizeLog;
UInt32 _numBlocks;
@@ -82,16 +84,13 @@ class CHandler: public CHandlerCont
HRESULT ReadTables(IInStream *stream);
UInt64 BlocksToBytes(UInt32 i) const { return (UInt64)i << _blockSizeLog; }
virtual int GetItem_ExtractInfo(UInt32 index, UInt64 &pos, UInt64 &size) const
virtual int GetItem_ExtractInfo(UInt32 index, UInt64 &pos, UInt64 &size) const Z7_override
{
const CItem &item = _items[index];
pos = BlocksToBytes(item.StartBlock);
size = BlocksToBytes(item.NumBlocks);
return NExtract::NOperationResult::kOK;
}
public:
INTERFACE_IInArchive_Cont(;)
};
static const UInt32 kSectorSize = 512;
@@ -118,7 +117,7 @@ HRESULT CHandler::ReadTables(IInStream *stream)
{
Byte buf[kSectorSize];
{
RINOK(ReadStream_FALSE(stream, buf, kSectorSize));
RINOK(ReadStream_FALSE(stream, buf, kSectorSize))
if (buf[0] != kSig0 || buf[1] != kSig1)
return S_FALSE;
UInt32 blockSize = Get16(buf + 2);
@@ -136,14 +135,14 @@ HRESULT CHandler::ReadTables(IInStream *stream)
unsigned numSkips = (unsigned)1 << (_blockSizeLog - 9);
for (unsigned j = 1; j < numSkips; j++)
{
RINOK(ReadStream_FALSE(stream, buf, kSectorSize));
RINOK(ReadStream_FALSE(stream, buf, kSectorSize))
}
UInt32 numBlocksInMap = 0;
for (unsigned i = 0;;)
{
RINOK(ReadStream_FALSE(stream, buf, kSectorSize));
RINOK(ReadStream_FALSE(stream, buf, kSectorSize))
CItem item;
@@ -167,7 +166,7 @@ HRESULT CHandler::ReadTables(IInStream *stream)
_items.Add(item);
for (unsigned j = 1; j < numSkips; j++)
{
RINOK(ReadStream_FALSE(stream, buf, kSectorSize));
RINOK(ReadStream_FALSE(stream, buf, kSectorSize))
}
if (++i == numBlocksInMap)
break;
@@ -178,17 +177,17 @@ HRESULT CHandler::ReadTables(IInStream *stream)
return S_OK;
}
STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback * /* callback */)
Z7_COM7F_IMF(CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback * /* callback */))
{
COM_TRY_BEGIN
Close();
RINOK(ReadTables(stream));
RINOK(ReadTables(stream))
_stream = stream;
return S_OK;
COM_TRY_END
}
STDMETHODIMP CHandler::Close()
Z7_COM7F_IMF(CHandler::Close())
{
_isArc = false;
_phySize = 0;
@@ -220,7 +219,7 @@ static AString GetString(const char *s)
return res;
}
STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
Z7_COM7F_IMF(CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value))
{
COM_TRY_BEGIN
NCOM::CPropVariant prop;
@@ -244,7 +243,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
}
}
if (mainIndex >= 0)
prop = (UInt32)mainIndex;
prop = (UInt32)(Int32)mainIndex;
break;
}
case kpidClusterSize: prop = (UInt32)1 << _blockSizeLog; break;
@@ -263,13 +262,13 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
COM_TRY_END
}
STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
Z7_COM7F_IMF(CHandler::GetNumberOfItems(UInt32 *numItems))
{
*numItems = _items.Size();
return S_OK;
}
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;
@@ -286,7 +285,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
type = "hfs";
if (!type.IsEmpty())
{
s += '.';
s.Add_Dot();
s += type;
}
prop = s;
@@ -306,7 +305,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
static const Byte k_Signature[] = { kSig0, kSig1 };
REGISTER_ARC_I(
"APM", "apm", 0, 0xD4,
"APM", "apm", NULL, 0xD4,
k_Signature,
0,
0,