xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Iso/IsoIn.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Archive/IsoIn.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_ISO_IN_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_ISO_IN_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../IStream.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "IsoHeader.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "IsoItem.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
14*f6dc9357SAndroid Build Coastguard Worker namespace NIso {
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker struct CDir: public CDirRecord
17*f6dc9357SAndroid Build Coastguard Worker {
18*f6dc9357SAndroid Build Coastguard Worker   CDir *Parent;
19*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CDir> _subItems;
20*f6dc9357SAndroid Build Coastguard Worker 
ClearCDir21*f6dc9357SAndroid Build Coastguard Worker   void Clear()
22*f6dc9357SAndroid Build Coastguard Worker   {
23*f6dc9357SAndroid Build Coastguard Worker     Parent = NULL;
24*f6dc9357SAndroid Build Coastguard Worker     _subItems.Clear();
25*f6dc9357SAndroid Build Coastguard Worker   }
26*f6dc9357SAndroid Build Coastguard Worker 
GetPathCDir27*f6dc9357SAndroid Build Coastguard Worker   AString GetPath(bool checkSusp, unsigned skipSize) const
28*f6dc9357SAndroid Build Coastguard Worker   {
29*f6dc9357SAndroid Build Coastguard Worker     AString s;
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker     unsigned len = 0;
32*f6dc9357SAndroid Build Coastguard Worker     const CDir *cur = this;
33*f6dc9357SAndroid Build Coastguard Worker 
34*f6dc9357SAndroid Build Coastguard Worker     for (;;)
35*f6dc9357SAndroid Build Coastguard Worker     {
36*f6dc9357SAndroid Build Coastguard Worker       unsigned curLen;
37*f6dc9357SAndroid Build Coastguard Worker       cur->GetNameCur(checkSusp, skipSize, curLen);
38*f6dc9357SAndroid Build Coastguard Worker       len += curLen;
39*f6dc9357SAndroid Build Coastguard Worker       cur = cur->Parent;
40*f6dc9357SAndroid Build Coastguard Worker       if (!cur || !cur->Parent)
41*f6dc9357SAndroid Build Coastguard Worker         break;
42*f6dc9357SAndroid Build Coastguard Worker       len++;
43*f6dc9357SAndroid Build Coastguard Worker     }
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker     char *p = s.GetBuf_SetEnd(len) + len;
46*f6dc9357SAndroid Build Coastguard Worker 
47*f6dc9357SAndroid Build Coastguard Worker     cur = this;
48*f6dc9357SAndroid Build Coastguard Worker 
49*f6dc9357SAndroid Build Coastguard Worker     for (;;)
50*f6dc9357SAndroid Build Coastguard Worker     {
51*f6dc9357SAndroid Build Coastguard Worker       unsigned curLen;
52*f6dc9357SAndroid Build Coastguard Worker       const Byte *name = cur->GetNameCur(checkSusp, skipSize, curLen);
53*f6dc9357SAndroid Build Coastguard Worker       p -= curLen;
54*f6dc9357SAndroid Build Coastguard Worker       if (curLen != 0)
55*f6dc9357SAndroid Build Coastguard Worker         memcpy(p, name, curLen);
56*f6dc9357SAndroid Build Coastguard Worker       cur = cur->Parent;
57*f6dc9357SAndroid Build Coastguard Worker       if (!cur || !cur->Parent)
58*f6dc9357SAndroid Build Coastguard Worker         break;
59*f6dc9357SAndroid Build Coastguard Worker       p--;
60*f6dc9357SAndroid Build Coastguard Worker       *p = CHAR_PATH_SEPARATOR;
61*f6dc9357SAndroid Build Coastguard Worker     }
62*f6dc9357SAndroid Build Coastguard Worker 
63*f6dc9357SAndroid Build Coastguard Worker     return s;
64*f6dc9357SAndroid Build Coastguard Worker   }
65*f6dc9357SAndroid Build Coastguard Worker 
GetPathUCDir66*f6dc9357SAndroid Build Coastguard Worker   void GetPathU(UString &s) const
67*f6dc9357SAndroid Build Coastguard Worker   {
68*f6dc9357SAndroid Build Coastguard Worker     s.Empty();
69*f6dc9357SAndroid Build Coastguard Worker 
70*f6dc9357SAndroid Build Coastguard Worker     unsigned len = 0;
71*f6dc9357SAndroid Build Coastguard Worker     const CDir *cur = this;
72*f6dc9357SAndroid Build Coastguard Worker 
73*f6dc9357SAndroid Build Coastguard Worker     for (;;)
74*f6dc9357SAndroid Build Coastguard Worker     {
75*f6dc9357SAndroid Build Coastguard Worker       unsigned curLen = (unsigned)(cur->FileId.Size() / 2);
76*f6dc9357SAndroid Build Coastguard Worker       const Byte *fid = cur->FileId;
77*f6dc9357SAndroid Build Coastguard Worker 
78*f6dc9357SAndroid Build Coastguard Worker       unsigned i;
79*f6dc9357SAndroid Build Coastguard Worker       for (i = 0; i < curLen; i++)
80*f6dc9357SAndroid Build Coastguard Worker         if (fid[i * 2] == 0 && fid[i * 2 + 1] == 0)
81*f6dc9357SAndroid Build Coastguard Worker           break;
82*f6dc9357SAndroid Build Coastguard Worker       len += i;
83*f6dc9357SAndroid Build Coastguard Worker       cur = cur->Parent;
84*f6dc9357SAndroid Build Coastguard Worker       if (!cur || !cur->Parent)
85*f6dc9357SAndroid Build Coastguard Worker         break;
86*f6dc9357SAndroid Build Coastguard Worker       len++;
87*f6dc9357SAndroid Build Coastguard Worker     }
88*f6dc9357SAndroid Build Coastguard Worker 
89*f6dc9357SAndroid Build Coastguard Worker     wchar_t *p = s.GetBuf_SetEnd(len) + len;
90*f6dc9357SAndroid Build Coastguard Worker 
91*f6dc9357SAndroid Build Coastguard Worker     cur = this;
92*f6dc9357SAndroid Build Coastguard Worker 
93*f6dc9357SAndroid Build Coastguard Worker     for (;;)
94*f6dc9357SAndroid Build Coastguard Worker     {
95*f6dc9357SAndroid Build Coastguard Worker       unsigned curLen = (unsigned)(cur->FileId.Size() / 2);
96*f6dc9357SAndroid Build Coastguard Worker       const Byte *fid = cur->FileId;
97*f6dc9357SAndroid Build Coastguard Worker 
98*f6dc9357SAndroid Build Coastguard Worker       unsigned i;
99*f6dc9357SAndroid Build Coastguard Worker       for (i = 0; i < curLen; i++)
100*f6dc9357SAndroid Build Coastguard Worker         if (fid[i * 2] == 0 && fid[i * 2 + 1] == 0)
101*f6dc9357SAndroid Build Coastguard Worker           break;
102*f6dc9357SAndroid Build Coastguard Worker       curLen = i;
103*f6dc9357SAndroid Build Coastguard Worker 
104*f6dc9357SAndroid Build Coastguard Worker       p -= curLen;
105*f6dc9357SAndroid Build Coastguard Worker       for (i = 0; i < curLen; i++)
106*f6dc9357SAndroid Build Coastguard Worker         p[i] = (wchar_t)(((wchar_t)fid[i * 2] << 8) | fid[i * 2 + 1]);
107*f6dc9357SAndroid Build Coastguard Worker       cur = cur->Parent;
108*f6dc9357SAndroid Build Coastguard Worker       if (!cur || !cur->Parent)
109*f6dc9357SAndroid Build Coastguard Worker         break;
110*f6dc9357SAndroid Build Coastguard Worker       p--;
111*f6dc9357SAndroid Build Coastguard Worker       *p = WCHAR_PATH_SEPARATOR;
112*f6dc9357SAndroid Build Coastguard Worker     }
113*f6dc9357SAndroid Build Coastguard Worker   }
114*f6dc9357SAndroid Build Coastguard Worker };
115*f6dc9357SAndroid Build Coastguard Worker 
116*f6dc9357SAndroid Build Coastguard Worker struct CDateTime
117*f6dc9357SAndroid Build Coastguard Worker {
118*f6dc9357SAndroid Build Coastguard Worker   UInt16 Year;
119*f6dc9357SAndroid Build Coastguard Worker   Byte Month;
120*f6dc9357SAndroid Build Coastguard Worker   Byte Day;
121*f6dc9357SAndroid Build Coastguard Worker   Byte Hour;
122*f6dc9357SAndroid Build Coastguard Worker   Byte Minute;
123*f6dc9357SAndroid Build Coastguard Worker   Byte Second;
124*f6dc9357SAndroid Build Coastguard Worker   Byte Hundredths;
125*f6dc9357SAndroid Build Coastguard Worker   signed char GmtOffset; // min intervals from -48 (West) to +52 (East) recorded.
126*f6dc9357SAndroid Build Coastguard Worker 
NotSpecifiedCDateTime127*f6dc9357SAndroid Build Coastguard Worker   bool NotSpecified() const { return Year == 0 && Month == 0 && Day == 0 &&
128*f6dc9357SAndroid Build Coastguard Worker       Hour == 0 && Minute == 0 && Second == 0 && GmtOffset == 0; }
129*f6dc9357SAndroid Build Coastguard Worker 
GetFileTimeCDateTime130*f6dc9357SAndroid Build Coastguard Worker   bool GetFileTime(NWindows::NCOM::CPropVariant &prop) const
131*f6dc9357SAndroid Build Coastguard Worker   {
132*f6dc9357SAndroid Build Coastguard Worker     UInt64 v;
133*f6dc9357SAndroid Build Coastguard Worker     const bool res = NWindows::NTime::GetSecondsSince1601(Year, Month, Day, Hour, Minute, Second, v);
134*f6dc9357SAndroid Build Coastguard Worker     if (res)
135*f6dc9357SAndroid Build Coastguard Worker     {
136*f6dc9357SAndroid Build Coastguard Worker       v = (UInt64)((Int64)v - (Int64)((Int32)GmtOffset * 15 * 60));
137*f6dc9357SAndroid Build Coastguard Worker       v *= 10000000;
138*f6dc9357SAndroid Build Coastguard Worker       if (Hundredths < 100)
139*f6dc9357SAndroid Build Coastguard Worker         v += (UInt32)Hundredths * 100000;
140*f6dc9357SAndroid Build Coastguard Worker       prop.SetAsTimeFrom_Ft64_Prec(v, k_PropVar_TimePrec_Base + 2);
141*f6dc9357SAndroid Build Coastguard Worker     }
142*f6dc9357SAndroid Build Coastguard Worker     return res;
143*f6dc9357SAndroid Build Coastguard Worker   }
144*f6dc9357SAndroid Build Coastguard Worker };
145*f6dc9357SAndroid Build Coastguard Worker 
146*f6dc9357SAndroid Build Coastguard Worker struct CBootRecordDescriptor
147*f6dc9357SAndroid Build Coastguard Worker {
148*f6dc9357SAndroid Build Coastguard Worker   Byte BootSystemId[32];  // a-characters
149*f6dc9357SAndroid Build Coastguard Worker   Byte BootId[32];        // a-characters
150*f6dc9357SAndroid Build Coastguard Worker   Byte BootSystemUse[1977];
151*f6dc9357SAndroid Build Coastguard Worker };
152*f6dc9357SAndroid Build Coastguard Worker 
153*f6dc9357SAndroid Build Coastguard Worker struct CBootValidationEntry
154*f6dc9357SAndroid Build Coastguard Worker {
155*f6dc9357SAndroid Build Coastguard Worker   Byte PlatformId;
156*f6dc9357SAndroid Build Coastguard Worker   Byte Id[24]; // to identify the manufacturer/developer of the CD-ROM.
157*f6dc9357SAndroid Build Coastguard Worker };
158*f6dc9357SAndroid Build Coastguard Worker 
159*f6dc9357SAndroid Build Coastguard Worker struct CBootInitialEntry
160*f6dc9357SAndroid Build Coastguard Worker {
161*f6dc9357SAndroid Build Coastguard Worker   bool Bootable;
162*f6dc9357SAndroid Build Coastguard Worker   Byte BootMediaType;
163*f6dc9357SAndroid Build Coastguard Worker   UInt16 LoadSegment;
164*f6dc9357SAndroid Build Coastguard Worker   /* This is the load segment for the initial boot image. If this
165*f6dc9357SAndroid Build Coastguard Worker      value is 0 the system will use the traditional segment of 7C0. If this value
166*f6dc9357SAndroid Build Coastguard Worker      is non-zero the system will use the specified segment. This applies to x86
167*f6dc9357SAndroid Build Coastguard Worker      architectures only. For "flat" model architectures (such as Motorola) this
168*f6dc9357SAndroid Build Coastguard Worker      is the address divided by 10. */
169*f6dc9357SAndroid Build Coastguard Worker   Byte SystemType;    // This must be a copy of byte 5 (System Type) from the
170*f6dc9357SAndroid Build Coastguard Worker                       // Partition Table found in the boot image.
171*f6dc9357SAndroid Build Coastguard Worker   UInt16 SectorCount; // This is the number of virtual/emulated sectors the system
172*f6dc9357SAndroid Build Coastguard Worker                       // will store at Load Segment during the initial boot procedure.
173*f6dc9357SAndroid Build Coastguard Worker   UInt32 LoadRBA;     // This is the start address of the virtual disk. CDs use
174*f6dc9357SAndroid Build Coastguard Worker                       // Relative/Logical block addressing.
175*f6dc9357SAndroid Build Coastguard Worker 
176*f6dc9357SAndroid Build Coastguard Worker   Byte VendorSpec[20];
177*f6dc9357SAndroid Build Coastguard Worker 
GetSizeCBootInitialEntry178*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetSize() const
179*f6dc9357SAndroid Build Coastguard Worker   {
180*f6dc9357SAndroid Build Coastguard Worker     // if (BootMediaType == NBootMediaType::k1d44Floppy) (1440 << 10);
181*f6dc9357SAndroid Build Coastguard Worker     return (UInt32)SectorCount * 512;
182*f6dc9357SAndroid Build Coastguard Worker   }
183*f6dc9357SAndroid Build Coastguard Worker 
184*f6dc9357SAndroid Build Coastguard Worker   bool Parse(const Byte *p);
185*f6dc9357SAndroid Build Coastguard Worker   AString GetName() const;
186*f6dc9357SAndroid Build Coastguard Worker };
187*f6dc9357SAndroid Build Coastguard Worker 
188*f6dc9357SAndroid Build Coastguard Worker struct CVolumeDescriptor
189*f6dc9357SAndroid Build Coastguard Worker {
190*f6dc9357SAndroid Build Coastguard Worker   Byte VolFlags;
191*f6dc9357SAndroid Build Coastguard Worker   Byte SystemId[32]; // a-characters. An identification of a system
192*f6dc9357SAndroid Build Coastguard Worker                      // which can recognize and act upon the content of the Logical
193*f6dc9357SAndroid Build Coastguard Worker                      // Sectors with logical Sector Numbers 0 to 15 of the volume.
194*f6dc9357SAndroid Build Coastguard Worker   Byte VolumeId[32]; // d-characters. An identification of the volume.
195*f6dc9357SAndroid Build Coastguard Worker   UInt32 VolumeSpaceSize; // the number of Logical Blocks in which the Volume Space of the volume is recorded
196*f6dc9357SAndroid Build Coastguard Worker   Byte EscapeSequence[32];
197*f6dc9357SAndroid Build Coastguard Worker   UInt16 VolumeSetSize;
198*f6dc9357SAndroid Build Coastguard Worker   UInt16 VolumeSequenceNumber; // the ordinal number of the volume in the Volume Set of which the volume is a member.
199*f6dc9357SAndroid Build Coastguard Worker   UInt16 LogicalBlockSize;
200*f6dc9357SAndroid Build Coastguard Worker   UInt32 PathTableSize;
201*f6dc9357SAndroid Build Coastguard Worker   UInt32 LPathTableLocation;
202*f6dc9357SAndroid Build Coastguard Worker   UInt32 LOptionalPathTableLocation;
203*f6dc9357SAndroid Build Coastguard Worker   UInt32 MPathTableLocation;
204*f6dc9357SAndroid Build Coastguard Worker   UInt32 MOptionalPathTableLocation;
205*f6dc9357SAndroid Build Coastguard Worker   CDirRecord RootDirRecord;
206*f6dc9357SAndroid Build Coastguard Worker   Byte VolumeSetId[128];
207*f6dc9357SAndroid Build Coastguard Worker   Byte PublisherId[128];
208*f6dc9357SAndroid Build Coastguard Worker   Byte DataPreparerId[128];
209*f6dc9357SAndroid Build Coastguard Worker   Byte ApplicationId[128];
210*f6dc9357SAndroid Build Coastguard Worker   Byte CopyrightFileId[37];
211*f6dc9357SAndroid Build Coastguard Worker   Byte AbstractFileId[37];
212*f6dc9357SAndroid Build Coastguard Worker   Byte BibFileId[37];
213*f6dc9357SAndroid Build Coastguard Worker   CDateTime CTime;
214*f6dc9357SAndroid Build Coastguard Worker   CDateTime MTime;
215*f6dc9357SAndroid Build Coastguard Worker   CDateTime ExpirationTime;
216*f6dc9357SAndroid Build Coastguard Worker   CDateTime EffectiveTime;
217*f6dc9357SAndroid Build Coastguard Worker   // Byte FileStructureVersion; // = 1;
218*f6dc9357SAndroid Build Coastguard Worker   Byte ApplicationUse[512];
219*f6dc9357SAndroid Build Coastguard Worker 
IsJolietCVolumeDescriptor220*f6dc9357SAndroid Build Coastguard Worker   bool IsJoliet() const
221*f6dc9357SAndroid Build Coastguard Worker   {
222*f6dc9357SAndroid Build Coastguard Worker     if ((VolFlags & 1) != 0)
223*f6dc9357SAndroid Build Coastguard Worker       return false;
224*f6dc9357SAndroid Build Coastguard Worker     const Byte b = EscapeSequence[2];
225*f6dc9357SAndroid Build Coastguard Worker     return (EscapeSequence[0] == 0x25 && EscapeSequence[1] == 0x2F &&
226*f6dc9357SAndroid Build Coastguard Worker       (b == 0x40 || b == 0x43 || b == 0x45));
227*f6dc9357SAndroid Build Coastguard Worker   }
228*f6dc9357SAndroid Build Coastguard Worker 
Get_VolumeSpaceSize_inBytesCVolumeDescriptor229*f6dc9357SAndroid Build Coastguard Worker   UInt64 Get_VolumeSpaceSize_inBytes() const { return (UInt64)VolumeSpaceSize * LogicalBlockSize; }
230*f6dc9357SAndroid Build Coastguard Worker };
231*f6dc9357SAndroid Build Coastguard Worker 
232*f6dc9357SAndroid Build Coastguard Worker struct CRef
233*f6dc9357SAndroid Build Coastguard Worker {
234*f6dc9357SAndroid Build Coastguard Worker   const CDir *Dir;
235*f6dc9357SAndroid Build Coastguard Worker   UInt32 Index;
236*f6dc9357SAndroid Build Coastguard Worker   UInt32 NumExtents;
237*f6dc9357SAndroid Build Coastguard Worker   UInt64 TotalSize;
238*f6dc9357SAndroid Build Coastguard Worker };
239*f6dc9357SAndroid Build Coastguard Worker 
240*f6dc9357SAndroid Build Coastguard Worker const UInt32 kBlockSize = 1 << 11;
241*f6dc9357SAndroid Build Coastguard Worker 
242*f6dc9357SAndroid Build Coastguard Worker class CInArchive
243*f6dc9357SAndroid Build Coastguard Worker {
244*f6dc9357SAndroid Build Coastguard Worker   IInStream *_stream;
245*f6dc9357SAndroid Build Coastguard Worker   UInt64 _position;
246*f6dc9357SAndroid Build Coastguard Worker 
247*f6dc9357SAndroid Build Coastguard Worker   UInt32 m_BufferPos;
248*f6dc9357SAndroid Build Coastguard Worker 
249*f6dc9357SAndroid Build Coastguard Worker   void Skip(size_t size);
250*f6dc9357SAndroid Build Coastguard Worker   void SkipZeros(size_t size);
251*f6dc9357SAndroid Build Coastguard Worker   Byte ReadByte();
252*f6dc9357SAndroid Build Coastguard Worker   void ReadBytes(Byte *data, UInt32 size);
253*f6dc9357SAndroid Build Coastguard Worker   UInt16 ReadUInt16();
254*f6dc9357SAndroid Build Coastguard Worker   UInt32 ReadUInt32Le();
255*f6dc9357SAndroid Build Coastguard Worker   UInt32 ReadUInt32Be();
256*f6dc9357SAndroid Build Coastguard Worker   UInt32 ReadUInt32();
257*f6dc9357SAndroid Build Coastguard Worker   UInt64 ReadUInt64();
258*f6dc9357SAndroid Build Coastguard Worker   UInt32 ReadDigits(int numDigits);
259*f6dc9357SAndroid Build Coastguard Worker   void ReadDateTime(CDateTime &d);
260*f6dc9357SAndroid Build Coastguard Worker   void ReadRecordingDateTime(CRecordingDateTime &t);
261*f6dc9357SAndroid Build Coastguard Worker   void ReadDirRecord2(CDirRecord &r, Byte len);
262*f6dc9357SAndroid Build Coastguard Worker   void ReadDirRecord(CDirRecord &r);
263*f6dc9357SAndroid Build Coastguard Worker 
264*f6dc9357SAndroid Build Coastguard Worker   void ReadBootRecordDescriptor(CBootRecordDescriptor &d);
265*f6dc9357SAndroid Build Coastguard Worker   void ReadVolumeDescriptor(CVolumeDescriptor &d);
266*f6dc9357SAndroid Build Coastguard Worker 
267*f6dc9357SAndroid Build Coastguard Worker   void SeekToBlock(UInt32 blockIndex);
268*f6dc9357SAndroid Build Coastguard Worker   void ReadDir(CDir &d, int level);
269*f6dc9357SAndroid Build Coastguard Worker   void CreateRefs(CDir &d);
270*f6dc9357SAndroid Build Coastguard Worker 
271*f6dc9357SAndroid Build Coastguard Worker   void ReadBootInfo();
272*f6dc9357SAndroid Build Coastguard Worker   HRESULT Open2();
273*f6dc9357SAndroid Build Coastguard Worker public:
274*f6dc9357SAndroid Build Coastguard Worker   HRESULT Open(IInStream *inStream);
275*f6dc9357SAndroid Build Coastguard Worker   void Clear();
276*f6dc9357SAndroid Build Coastguard Worker 
277*f6dc9357SAndroid Build Coastguard Worker   UInt64 _fileSize;
278*f6dc9357SAndroid Build Coastguard Worker   UInt64 PhySize;
279*f6dc9357SAndroid Build Coastguard Worker 
280*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<CRef> Refs;
281*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CVolumeDescriptor> VolDescs;
282*f6dc9357SAndroid Build Coastguard Worker   int MainVolDescIndex;
283*f6dc9357SAndroid Build Coastguard Worker   // UInt32 BlockSize;
284*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CBootInitialEntry> BootEntries;
285*f6dc9357SAndroid Build Coastguard Worker 
286*f6dc9357SAndroid Build Coastguard Worker private:
287*f6dc9357SAndroid Build Coastguard Worker   bool _bootIsDefined;
288*f6dc9357SAndroid Build Coastguard Worker public:
289*f6dc9357SAndroid Build Coastguard Worker   bool IsArc;
290*f6dc9357SAndroid Build Coastguard Worker   bool UnexpectedEnd;
291*f6dc9357SAndroid Build Coastguard Worker   bool HeadersError;
292*f6dc9357SAndroid Build Coastguard Worker   bool IncorrectBigEndian;
293*f6dc9357SAndroid Build Coastguard Worker   bool TooDeepDirs;
294*f6dc9357SAndroid Build Coastguard Worker   bool SelfLinkedDirs;
295*f6dc9357SAndroid Build Coastguard Worker   bool IsSusp;
296*f6dc9357SAndroid Build Coastguard Worker   unsigned SuspSkipSize;
297*f6dc9357SAndroid Build Coastguard Worker 
298*f6dc9357SAndroid Build Coastguard Worker   int _expand_BootEntries_index;
299*f6dc9357SAndroid Build Coastguard Worker 
300*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<UInt32> UniqStartLocations;
301*f6dc9357SAndroid Build Coastguard Worker 
UpdatePhySize(const UInt32 blockIndex,const UInt64 size)302*f6dc9357SAndroid Build Coastguard Worker   void UpdatePhySize(const UInt32 blockIndex, const UInt64 size)
303*f6dc9357SAndroid Build Coastguard Worker   {
304*f6dc9357SAndroid Build Coastguard Worker     const UInt64 alignedSize = (size + kBlockSize - 1) & ~((UInt64)kBlockSize - 1);
305*f6dc9357SAndroid Build Coastguard Worker     const UInt64 end = (UInt64)blockIndex * kBlockSize + alignedSize;
306*f6dc9357SAndroid Build Coastguard Worker     if (PhySize < end)
307*f6dc9357SAndroid Build Coastguard Worker       PhySize = end;
308*f6dc9357SAndroid Build Coastguard Worker   }
309*f6dc9357SAndroid Build Coastguard Worker 
IsJoliet()310*f6dc9357SAndroid Build Coastguard Worker   bool IsJoliet() const { return VolDescs[MainVolDescIndex].IsJoliet(); }
311*f6dc9357SAndroid Build Coastguard Worker 
312*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetBootItemSize(unsigned index) const;
313*f6dc9357SAndroid Build Coastguard Worker 
314*f6dc9357SAndroid Build Coastguard Worker private:
315*f6dc9357SAndroid Build Coastguard Worker   CDir _rootDir;
316*f6dc9357SAndroid Build Coastguard Worker   Byte m_Buffer[kBlockSize];
317*f6dc9357SAndroid Build Coastguard Worker   CBootRecordDescriptor _bootDesc;
318*f6dc9357SAndroid Build Coastguard Worker };
319*f6dc9357SAndroid Build Coastguard Worker 
320*f6dc9357SAndroid Build Coastguard Worker }}
321*f6dc9357SAndroid Build Coastguard Worker 
322*f6dc9357SAndroid Build Coastguard Worker #endif
323