From 9c6e021b14daca7e5cc4f9cddce5d943c9280ded Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 28 Jul 2019 18:41:33 +0100 Subject: [PATCH] Decode "CE" system area. --- DiscImageChef.Filesystems/ISO9660/Dir.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/DiscImageChef.Filesystems/ISO9660/Dir.cs b/DiscImageChef.Filesystems/ISO9660/Dir.cs index a8dc76fed..8c256cb9c 100644 --- a/DiscImageChef.Filesystems/ISO9660/Dir.cs +++ b/DiscImageChef.Filesystems/ISO9660/Dir.cs @@ -594,6 +594,25 @@ namespace DiscImageChef.Filesystems.ISO9660 break; case SUSP_CONTINUATION: + byte ceLength = data[systemAreaOff + 2]; + + ContinuationArea ca = + Marshal.ByteArrayToStructureLittleEndian(data, systemAreaOff, + Marshal + .SizeOf()); + + uint caOffSector = ca.offset / 2048; + uint caOff = ca.offset % 2048; + uint caLenInSectors = ca.ca_length / 2048; + if((ca.ca_length + caOff) % 2048 > 0) caLenInSectors++; + + byte[] caData = image.ReadSectors(ca.block + caOffSector, caLenInSectors); + + DecodeSystemArea(caData, (int)caOff, (int)(caOff + ca.ca_length), ref entry, + out hasResourceFork); + + systemAreaOff += ceLength; + break; case SUSP_PADDING: case SUSP_INDICATOR: case SUSP_TERMINATOR: