xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Rar/RarItem.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // RarItem.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_RAR_ITEM_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_RAR_ITEM_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "RarHeader.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
11*f6dc9357SAndroid Build Coastguard Worker namespace NRar {
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker struct CRarTime
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker   UInt32 DosTime;
16*f6dc9357SAndroid Build Coastguard Worker   Byte LowSecond;
17*f6dc9357SAndroid Build Coastguard Worker   Byte SubTime[3];
18*f6dc9357SAndroid Build Coastguard Worker };
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker struct CItem
21*f6dc9357SAndroid Build Coastguard Worker {
22*f6dc9357SAndroid Build Coastguard Worker   UInt64 Size;
23*f6dc9357SAndroid Build Coastguard Worker   UInt64 PackSize;
24*f6dc9357SAndroid Build Coastguard Worker 
25*f6dc9357SAndroid Build Coastguard Worker   CRarTime CTime;
26*f6dc9357SAndroid Build Coastguard Worker   CRarTime ATime;
27*f6dc9357SAndroid Build Coastguard Worker   CRarTime MTime;
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker   UInt32 FileCRC;
30*f6dc9357SAndroid Build Coastguard Worker   UInt32 Attrib;
31*f6dc9357SAndroid Build Coastguard Worker 
32*f6dc9357SAndroid Build Coastguard Worker   UInt16 Flags;
33*f6dc9357SAndroid Build Coastguard Worker   Byte HostOS;
34*f6dc9357SAndroid Build Coastguard Worker   Byte UnPackVersion;
35*f6dc9357SAndroid Build Coastguard Worker   Byte Method;
36*f6dc9357SAndroid Build Coastguard Worker 
37*f6dc9357SAndroid Build Coastguard Worker   bool CTimeDefined;
38*f6dc9357SAndroid Build Coastguard Worker   bool ATimeDefined;
39*f6dc9357SAndroid Build Coastguard Worker 
40*f6dc9357SAndroid Build Coastguard Worker   AString Name;
41*f6dc9357SAndroid Build Coastguard Worker   UString UnicodeName;
42*f6dc9357SAndroid Build Coastguard Worker 
43*f6dc9357SAndroid Build Coastguard Worker   Byte Salt[8];
44*f6dc9357SAndroid Build Coastguard Worker 
Is_Size_DefinedCItem45*f6dc9357SAndroid Build Coastguard Worker   bool Is_Size_Defined() const { return Size != (UInt64)(Int64)-1; }
46*f6dc9357SAndroid Build Coastguard Worker 
IsEncryptedCItem47*f6dc9357SAndroid Build Coastguard Worker   bool IsEncrypted()   const { return (Flags & NHeader::NFile::kEncrypted) != 0; }
IsSolidCItem48*f6dc9357SAndroid Build Coastguard Worker   bool IsSolid()       const { return (Flags & NHeader::NFile::kSolid) != 0; }
IsCommentedCItem49*f6dc9357SAndroid Build Coastguard Worker   bool IsCommented()   const { return (Flags & NHeader::NFile::kComment) != 0; }
IsSplitBeforeCItem50*f6dc9357SAndroid Build Coastguard Worker   bool IsSplitBefore() const { return (Flags & NHeader::NFile::kSplitBefore) != 0; }
IsSplitAfterCItem51*f6dc9357SAndroid Build Coastguard Worker   bool IsSplitAfter()  const { return (Flags & NHeader::NFile::kSplitAfter) != 0; }
HasSaltCItem52*f6dc9357SAndroid Build Coastguard Worker   bool HasSalt()       const { return (Flags & NHeader::NFile::kSalt) != 0; }
HasExtTimeCItem53*f6dc9357SAndroid Build Coastguard Worker   bool HasExtTime()    const { return (Flags & NHeader::NFile::kExtTime) != 0; }
HasUnicodeNameCItem54*f6dc9357SAndroid Build Coastguard Worker   bool HasUnicodeName()const { return (Flags & NHeader::NFile::kUnicodeName) != 0; }
IsOldVersionCItem55*f6dc9357SAndroid Build Coastguard Worker   bool IsOldVersion()  const { return (Flags & NHeader::NFile::kOldVersion) != 0; }
56*f6dc9357SAndroid Build Coastguard Worker 
GetDictSizeCItem57*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetDictSize() const { return (Flags >> NHeader::NFile::kDictBitStart) & NHeader::NFile::kDictMask; }
58*f6dc9357SAndroid Build Coastguard Worker   bool IsDir() const;
59*f6dc9357SAndroid Build Coastguard Worker   bool IgnoreItem() const;
60*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetWinAttrib() const;
61*f6dc9357SAndroid Build Coastguard Worker 
62*f6dc9357SAndroid Build Coastguard Worker   UInt64 Position;
63*f6dc9357SAndroid Build Coastguard Worker   unsigned MainPartSize;
64*f6dc9357SAndroid Build Coastguard Worker   UInt16 CommentSize;
65*f6dc9357SAndroid Build Coastguard Worker   UInt16 AlignSize;
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker   // int BaseFileIndex;
68*f6dc9357SAndroid Build Coastguard Worker   // bool IsAltStream;
69*f6dc9357SAndroid Build Coastguard Worker 
GetNameCItem70*f6dc9357SAndroid Build Coastguard Worker   UString GetName() const
71*f6dc9357SAndroid Build Coastguard Worker   {
72*f6dc9357SAndroid Build Coastguard Worker     if (( /* IsAltStream || */ HasUnicodeName()) && !UnicodeName.IsEmpty())
73*f6dc9357SAndroid Build Coastguard Worker       return UnicodeName;
74*f6dc9357SAndroid Build Coastguard Worker     return MultiByteToUnicodeString(Name, CP_OEMCP);
75*f6dc9357SAndroid Build Coastguard Worker   }
76*f6dc9357SAndroid Build Coastguard Worker 
ClearCItem77*f6dc9357SAndroid Build Coastguard Worker   void Clear()
78*f6dc9357SAndroid Build Coastguard Worker   {
79*f6dc9357SAndroid Build Coastguard Worker     CTimeDefined = false;
80*f6dc9357SAndroid Build Coastguard Worker     ATimeDefined = false;
81*f6dc9357SAndroid Build Coastguard Worker     Name.Empty();
82*f6dc9357SAndroid Build Coastguard Worker     UnicodeName.Empty();
83*f6dc9357SAndroid Build Coastguard Worker     // IsAltStream = false;
84*f6dc9357SAndroid Build Coastguard Worker     // BaseFileIndex = -1;
85*f6dc9357SAndroid Build Coastguard Worker   }
86*f6dc9357SAndroid Build Coastguard Worker 
CItemCItem87*f6dc9357SAndroid Build Coastguard Worker   CItem() { Clear(); }
88*f6dc9357SAndroid Build Coastguard Worker 
GetFullSizeCItem89*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetFullSize()  const { return MainPartSize + CommentSize + AlignSize + PackSize; }
90*f6dc9357SAndroid Build Coastguard Worker   //  DWORD GetHeaderWithCommentSize()  const { return MainPartSize + CommentSize; }
GetCommentPositionCItem91*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetCommentPosition() const { return Position + MainPartSize; }
GetDataPositionCItem92*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetDataPosition()    const { return GetCommentPosition() + CommentSize + AlignSize; }
93*f6dc9357SAndroid Build Coastguard Worker };
94*f6dc9357SAndroid Build Coastguard Worker 
95*f6dc9357SAndroid Build Coastguard Worker }}
96*f6dc9357SAndroid Build Coastguard Worker 
97*f6dc9357SAndroid Build Coastguard Worker #endif
98