1*f6dc9357SAndroid Build Coastguard Worker // Archive/CabItem.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_CAB_ITEM_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_CAB_ITEM_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyString.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "CabHeader.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker namespace NArchive { 11*f6dc9357SAndroid Build Coastguard Worker namespace NCab { 12*f6dc9357SAndroid Build Coastguard Worker 13*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumMethodsMax = 16; 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker struct CFolder 16*f6dc9357SAndroid Build Coastguard Worker { 17*f6dc9357SAndroid Build Coastguard Worker UInt32 DataStart; // offset of the first CFDATA block in this folder 18*f6dc9357SAndroid Build Coastguard Worker UInt16 NumDataBlocks; // number of CFDATA blocks in this folder 19*f6dc9357SAndroid Build Coastguard Worker Byte MethodMajor; 20*f6dc9357SAndroid Build Coastguard Worker Byte MethodMinor; 21*f6dc9357SAndroid Build Coastguard Worker GetMethodCFolder22*f6dc9357SAndroid Build Coastguard Worker Byte GetMethod() const { return (Byte)(MethodMajor & 0xF); } 23*f6dc9357SAndroid Build Coastguard Worker }; 24*f6dc9357SAndroid Build Coastguard Worker 25*f6dc9357SAndroid Build Coastguard Worker struct CItem 26*f6dc9357SAndroid Build Coastguard Worker { 27*f6dc9357SAndroid Build Coastguard Worker AString Name; 28*f6dc9357SAndroid Build Coastguard Worker UInt32 Offset; 29*f6dc9357SAndroid Build Coastguard Worker UInt32 Size; 30*f6dc9357SAndroid Build Coastguard Worker UInt32 Time; 31*f6dc9357SAndroid Build Coastguard Worker UInt32 FolderIndex; 32*f6dc9357SAndroid Build Coastguard Worker UInt16 Flags; 33*f6dc9357SAndroid Build Coastguard Worker UInt16 Attributes; 34*f6dc9357SAndroid Build Coastguard Worker GetEndOffsetCItem35*f6dc9357SAndroid Build Coastguard Worker UInt64 GetEndOffset() const { return (UInt64)Offset + Size; } GetWinAttribCItem36*f6dc9357SAndroid Build Coastguard Worker UInt32 GetWinAttrib() const { return (UInt32)Attributes & ~(UInt32)NHeader::kFileNameIsUtf8_Mask; } IsNameUTFCItem37*f6dc9357SAndroid Build Coastguard Worker bool IsNameUTF() const { return (Attributes & NHeader::kFileNameIsUtf8_Mask) != 0; } IsDirCItem38*f6dc9357SAndroid Build Coastguard Worker bool IsDir() const { return (Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; } 39*f6dc9357SAndroid Build Coastguard Worker ContinuedFromPrevCItem40*f6dc9357SAndroid Build Coastguard Worker bool ContinuedFromPrev() const 41*f6dc9357SAndroid Build Coastguard Worker { 42*f6dc9357SAndroid Build Coastguard Worker return 43*f6dc9357SAndroid Build Coastguard Worker FolderIndex == NHeader::NFolderIndex::kContinuedFromPrev || 44*f6dc9357SAndroid Build Coastguard Worker FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext; 45*f6dc9357SAndroid Build Coastguard Worker } 46*f6dc9357SAndroid Build Coastguard Worker ContinuedToNextCItem47*f6dc9357SAndroid Build Coastguard Worker bool ContinuedToNext() const 48*f6dc9357SAndroid Build Coastguard Worker { 49*f6dc9357SAndroid Build Coastguard Worker return 50*f6dc9357SAndroid Build Coastguard Worker FolderIndex == NHeader::NFolderIndex::kContinuedToNext || 51*f6dc9357SAndroid Build Coastguard Worker FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext; 52*f6dc9357SAndroid Build Coastguard Worker } 53*f6dc9357SAndroid Build Coastguard Worker GetFolderIndexCItem54*f6dc9357SAndroid Build Coastguard Worker int GetFolderIndex(unsigned numFolders) const 55*f6dc9357SAndroid Build Coastguard Worker { 56*f6dc9357SAndroid Build Coastguard Worker if (ContinuedFromPrev()) 57*f6dc9357SAndroid Build Coastguard Worker return 0; 58*f6dc9357SAndroid Build Coastguard Worker if (ContinuedToNext()) 59*f6dc9357SAndroid Build Coastguard Worker return (int)numFolders - 1; 60*f6dc9357SAndroid Build Coastguard Worker return (int)FolderIndex; 61*f6dc9357SAndroid Build Coastguard Worker } 62*f6dc9357SAndroid Build Coastguard Worker }; 63*f6dc9357SAndroid Build Coastguard Worker 64*f6dc9357SAndroid Build Coastguard Worker }} 65*f6dc9357SAndroid Build Coastguard Worker 66*f6dc9357SAndroid Build Coastguard Worker #endif 67