Implement support for ISO9660 Level 3, multiple extents in files.

This commit is contained in:
2019-07-31 19:39:55 +01:00
parent 838b5f8307
commit 816835e667
5 changed files with 235 additions and 99 deletions

View File

@@ -327,9 +327,13 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add("$",
new DecodedDirectoryEntry
{
Extent = rootLocation,
Extents =
new List<(uint extent, uint size)>
{
(rootLocation, (uint)rootDir.Length)
},
Filename = "$",
Size = 2048,
Size = (uint)rootDir.Length,
Timestamp = decodedVd.CreationTime
});
@@ -337,7 +341,11 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add("$PATH_TABLE.LSB",
new DecodedDirectoryEntry
{
Extent = pathTableLsbLocation,
Extents =
new List<(uint extent, uint size)>
{
(rootLocation, (uint)pathTableData.Length)
},
Filename = "$PATH_TABLE.LSB",
Size = (uint)pathTableData.Length,
Timestamp = decodedVd.CreationTime
@@ -346,7 +354,11 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add("$PATH_TABLE.MSB",
new DecodedDirectoryEntry
{
Extent = pathTableMsbLocation,
Extents =
new List<(uint extent, uint size)>
{
(rootLocation, (uint)pathTableData.Length)
},
Filename = "$PATH_TABLE.MSB",
Size = (uint)pathTableData.Length,
Timestamp = decodedVd.CreationTime
@@ -356,7 +368,7 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add(i == 0 ? "$BOOT" : $"$BOOT_{i}",
new DecodedDirectoryEntry
{
Extent = (uint)i,
Extents = new List<(uint extent, uint size)> {((uint)i, 2048)},
Filename = i == 0 ? "$BOOT" : $"$BOOT_{i}",
Size = 2048,
Timestamp = decodedVd.CreationTime
@@ -366,7 +378,7 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add(i == 0 ? "$PVD" : $"$PVD{i}",
new DecodedDirectoryEntry
{
Extent = (uint)i,
Extents = new List<(uint extent, uint size)> {((uint)i, 2048)},
Filename = i == 0 ? "$PVD" : $"PVD_{i}",
Size = 2048,
Timestamp = decodedVd.CreationTime
@@ -376,7 +388,7 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add(i == 0 ? "$SVD" : $"$SVD_{i}",
new DecodedDirectoryEntry
{
Extent = (uint)i,
Extents = new List<(uint extent, uint size)> {((uint)i, 2048)},
Filename = i == 0 ? "$SVD" : $"$SVD_{i}",
Size = 2048,
Timestamp = decodedVd.CreationTime
@@ -386,7 +398,7 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add(i == 0 ? "$EVD" : $"$EVD_{i}",
new DecodedDirectoryEntry
{
Extent = (uint)i,
Extents = new List<(uint extent, uint size)> {((uint)i, 2048)},
Filename = i == 0 ? "$EVD" : $"$EVD_{i}",
Size = 2048,
Timestamp = decodedVd.CreationTime
@@ -396,7 +408,7 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add(i == 0 ? "$VPD" : $"$VPD_{i}",
new DecodedDirectoryEntry
{
Extent = (uint)i,
Extents = new List<(uint extent, uint size)> {((uint)i, 2048)},
Filename = i == 0 ? "$VPD" : $"$VPD_{i}",
Size = 2048,
Timestamp = decodedVd.CreationTime
@@ -406,7 +418,10 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add("$IP.BIN",
new DecodedDirectoryEntry
{
Extent = 0,
Extents = new List<(uint extent, uint size)>
{
((uint)partition.Start, (uint)Marshal.SizeOf<CD.IPBin>())
},
Filename = "$IP.BIN",
Size = (uint)Marshal.SizeOf<CD.IPBin>(),
Timestamp = decodedVd.CreationTime
@@ -416,7 +431,10 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add("$IP.BIN",
new DecodedDirectoryEntry
{
Extent = 0,
Extents = new List<(uint extent, uint size)>
{
((uint)partition.Start, (uint)Marshal.SizeOf<Saturn.IPBin>())
},
Filename = "$IP.BIN",
Size = (uint)Marshal.SizeOf<Saturn.IPBin>(),
Timestamp = decodedVd.CreationTime
@@ -426,7 +444,11 @@ namespace DiscImageChef.Filesystems.ISO9660
rootDirectoryCache.Add("$IP.BIN",
new DecodedDirectoryEntry
{
Extent = 0,
Extents = new List<(uint extent, uint size)>
{
((uint)partition.Start,
(uint)Marshal.SizeOf<Dreamcast.IPBin>())
},
Filename = "$IP.BIN",
Size = (uint)Marshal.SizeOf<Dreamcast.IPBin>(),
Timestamp = decodedVd.CreationTime