xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Cab/CabItem.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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