| // Archive/CabItem.h |
| |
| #ifndef __ARCHIVE_CAB_ITEM_H |
| #define __ARCHIVE_CAB_ITEM_H |
| |
| #include "Common/Types.h" |
| #include "Common/MyString.h" |
| #include "CabHeader.h" |
| |
| namespace NArchive { |
| namespace NCab { |
| |
| struct CFolder |
| { |
| UInt32 DataStart; // offset of the first CFDATA block in this folder |
| UInt16 NumDataBlocks; // number of CFDATA blocks in this folder |
| Byte CompressionTypeMajor; |
| Byte CompressionTypeMinor; |
| Byte GetCompressionMethod() const { return (Byte)(CompressionTypeMajor & 0xF); } |
| }; |
| |
| struct CItem |
| { |
| AString Name; |
| UInt32 Offset; |
| UInt32 Size; |
| UInt32 Time; |
| UInt16 FolderIndex; |
| UInt16 Flags; |
| UInt16 Attributes; |
| |
| UInt64 GetEndOffset() const { return (UInt64)Offset + Size; } |
| UInt32 GetWinAttributes() const { return (Attributes & ~NHeader::kFileNameIsUTFAttributeMask); } |
| bool IsNameUTF() const { return (Attributes & NHeader::kFileNameIsUTFAttributeMask) != 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(int numFolders) const |
| { |
| if (ContinuedFromPrev()) |
| return 0; |
| if (ContinuedToNext()) |
| return (numFolders - 1); |
| return FolderIndex; |
| } |
| }; |
| |
| }} |
| |
| #endif |