Merge pull request #4852 from FernetMenta/aefixes
[vuplus_xbmc] / lib / UnrarXLib / archive.hpp
1 #ifndef _RAR_ARCHIVE_
2 #define _RAR_ARCHIVE_
3
4 class Pack;
5
6 enum {EN_LOCK=1,EN_VOL=2,EN_FIRSTVOL=4};
7
8 class Archive:public File
9 {
10   private:
11     bool IsSignature(byte *D);
12     void UpdateLatestTime(FileHeader *CurBlock);
13     void Protect(int RecSectors);
14     void ConvertNameCase(char *Name);
15     void ConvertNameCase(wchar *Name);
16     void ConvertUnknownHeader();
17     bool AddArcComment(char *NameToShow);
18     int ReadOldHeader();
19     void PrepareExtraTime(FileHeader *hd,EXTTIME_MODE etm,EXTTIME_MODE etc,EXTTIME_MODE eta,EXTTIME_MODE etarc,Array<byte> &TimeData);
20
21 #if !defined(SHELL_EXT) && !defined(NOCRYPT)
22     CryptData HeadersCrypt;
23     byte HeadersSalt[SALT_SIZE];
24 #endif
25 #ifndef SHELL_EXT
26     ComprDataIO SubDataIO;
27     byte SubDataSalt[SALT_SIZE];
28 #endif
29     RAROptions *Cmd,DummyCmd;
30
31     MarkHeader MarkHead;
32     OldMainHeader OldMhd;
33
34     int RecoverySectors;
35     Int64 RecoveryPos;
36
37     RarTime LatestTime;
38     int LastReadBlock;
39     int CurHeaderType;
40
41     bool SilentOpen;
42   public:
43     Archive(RAROptions *InitCmd=NULL);
44     bool IsArchive(bool EnableBroken);
45     int SearchBlock(int BlockType);
46     int SearchSubBlock(const char *Type);
47     int ReadBlock(int BlockType);
48     void WriteBlock(int BlockType,BaseBlock *wb=NULL);
49     int PrepareNamesToWrite(char *Name,wchar *NameW,char *DestName,byte *DestNameW);
50     void SetLhdSize();
51     int ReadHeader();
52     void CheckArc(bool EnableBroken);
53     void CheckOpen(char *Name,wchar *NameW=NULL);
54     bool WCheckOpen(char *Name,wchar *NameW=NULL);
55     bool TestLock(int Mode);
56     void MakeTemp();
57     void CopyMainHeader(Archive &Src,bool CopySFX=true,char *NameToDisplay=NULL);
58     bool ProcessToFileHead(Archive &Src,bool LastBlockAdded,
59       Pack *Pack=NULL,const char *SkipName=NULL);
60     void TmpToArc(Archive &Src);
61     void CloseNew(int AdjustRecovery,bool CloseVolume);
62     void WriteEndBlock(bool CloseVolume);
63     void CopyFileRecord(Archive &Src);
64     void CopyArchiveData(Archive &Src);
65     bool GetComment(Array<byte> &CmtData);
66     void ViewComment();
67     void ViewFileComment();
68     void SetLatestTime(RarTime *NewTime);
69     void SeekToNext();
70     bool CheckAccess();
71     bool IsArcDir();
72     bool IsArcLabel();
73     void ConvertAttributes();
74     int GetRecoverySize(bool Required);
75     void VolSubtractHeaderSize(int SubSize);
76     void AddSubData(byte *SrcData,int DataSize,File *SrcFile,char *Name,bool AllowSplit);
77     bool ReadSubData(Array<byte> *UnpData,File *DestFile);
78     int GetHeaderType() {return(CurHeaderType);};
79     int ReadCommentData(Array<byte> &CmtData);
80     void WriteCommentData(byte *Data,int DataSize,bool FileComment);
81     RAROptions* GetRAROptions() {return(Cmd);}
82     void SetSilentOpen(bool Mode) {SilentOpen=Mode;}
83
84     BaseBlock ShortBlock;
85     MainHeader NewMhd;
86     FileHeader NewLhd;
87     EndArcHeader EndArcHead;
88     SubBlockHeader SubBlockHead;
89     FileHeader SubHead;
90     CommentHeader CommHead;
91     ProtectHeader ProtectHead;
92     AVHeader AVHead;
93     SignHeader SignHead;
94     UnixOwnersHeader UOHead;
95     MacFInfoHeader MACHead;
96     EAHeader EAHead;
97     StreamHeader StreamHead;
98
99     Int64 CurBlockPos;
100     Int64 NextBlockPos;
101
102     bool OldFormat;
103     bool Solid;
104     bool Volume;
105     bool MainComment;
106     bool Locked;
107     bool Signed;
108     bool NotFirstVolume;
109     bool Protected;
110     bool Encrypted;
111     uint SFXSize;
112     bool BrokenFileHeader;
113
114     bool Splitting;
115
116     ushort HeaderCRC;
117
118     Int64 VolWrite;
119     Int64 AddingFilesSize;
120     uint AddingHeadersSize;
121
122     bool NewArchive;
123
124     char FirstVolumeName[NM];
125     wchar FirstVolumeNameW[NM];
126 };
127
128 #endif