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