67 lines
1.5 KiB
C
67 lines
1.5 KiB
C
|
// Archive/CabItem.h
|
||
|
|
||
|
#ifndef __ARCHIVE_CAB_ITEM_H
|
||
|
#define __ARCHIVE_CAB_ITEM_H
|
||
|
|
||
|
#include "../../../Common/MyString.h"
|
||
|
|
||
|
#include "CabHeader.h"
|
||
|
|
||
|
namespace NArchive {
|
||
|
namespace NCab {
|
||
|
|
||
|
const unsigned kNumMethodsMax = 16;
|
||
|
|
||
|
struct CFolder
|
||
|
{
|
||
|
UInt32 DataStart; // offset of the first CFDATA block in this folder
|
||
|
UInt16 NumDataBlocks; // number of CFDATA blocks in this folder
|
||
|
Byte MethodMajor;
|
||
|
Byte MethodMinor;
|
||
|
|
||
|
Byte GetMethod() const { return (Byte)(MethodMajor & 0xF); }
|
||
|
};
|
||
|
|
||
|
struct CItem
|
||
|
{
|
||
|
AString Name;
|
||
|
UInt32 Offset;
|
||
|
UInt32 Size;
|
||
|
UInt32 Time;
|
||
|
UInt32 FolderIndex;
|
||
|
UInt16 Flags;
|
||
|
UInt16 Attributes;
|
||
|
|
||
|
UInt64 GetEndOffset() const { return (UInt64)Offset + Size; }
|
||
|
UInt32 GetWinAttrib() const { return (UInt32)Attributes & ~(UInt32)NHeader::kFileNameIsUtf8_Mask; }
|
||
|
bool IsNameUTF() const { return (Attributes & NHeader::kFileNameIsUtf8_Mask) != 0; }
|
||
|
bool IsDir() const { return (Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; }
|
||
|
|
||
|
bool ContinuedFromPrev() const
|
||
|
{
|
||
|
return
|
||
|
FolderIndex == NHeader::NFolderIndex::kContinuedFromPrev ||
|
||
|
FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext;
|
||
|
}
|
||
|
|
||
|
bool ContinuedToNext() const
|
||
|
{
|
||
|
return
|
||
|
FolderIndex == NHeader::NFolderIndex::kContinuedToNext ||
|
||
|
FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext;
|
||
|
}
|
||
|
|
||
|
int GetFolderIndex(unsigned numFolders) const
|
||
|
{
|
||
|
if (ContinuedFromPrev())
|
||
|
return 0;
|
||
|
if (ContinuedToNext())
|
||
|
return numFolders - 1;
|
||
|
return FolderIndex;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
}}
|
||
|
|
||
|
#endif
|