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