GDROMExplorer/Formats/CDI/CDIHeaderConverter.cs

36 lines
1.6 KiB
C#

// Decompiled with JetBrains decompiler
// Type: GDRomExplorer.ImageFileFormat.CDI.CDIHeaderConverter
// Assembly: CDI, Version=1.0.1.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08
// MVID: B71D3BB5-2FC4-43C2-853E-907E3A458120
// Assembly location: Formats\CDI.dll
using SEGATools.DiscFileSystem;
using System;
using System.IO;
namespace GDRomExplorer.ImageFileFormat.CDI
{
internal class CDIHeaderConverter
{
private static readonly byte HEADER_MIN_SIZE = 8;
private static readonly short HEADER_OFFSET = -8;
private static readonly short HEADER_SIZE = 8;
internal static CDIHeader ToCDIHeader(Stream imageStream)
{
if (imageStream.Length < (long) CDIHeaderConverter.HEADER_MIN_SIZE)
throw new DiscFormatException("The stream is too small");
CDIHeader cdiHeader = new CDIHeader();
byte[] buffer = new byte[(int) CDIHeaderConverter.HEADER_SIZE];
imageStream.Seek((long) CDIHeaderConverter.HEADER_OFFSET, SeekOrigin.End);
imageStream.Read(buffer, 0, (int) CDIHeaderConverter.HEADER_SIZE);
cdiHeader.rawCdiVersion = BitConverter.ToUInt32(buffer, 0);
cdiHeader.cdiVersion = cdiHeader.rawCdiVersion == 2147483652U || cdiHeader.rawCdiVersion == 2147483653U || cdiHeader.rawCdiVersion == 2147483654U ? (CDIVersion) cdiHeader.rawCdiVersion : CDIVersion.CDI_VERSION_UNKNOWN;
cdiHeader.headerOffset = BitConverter.ToUInt32(buffer, 4);
if (cdiHeader.cdiVersion > CDIVersion.CDI_VERSION_3)
cdiHeader.headerOffset = (uint) imageStream.Length - cdiHeader.headerOffset;
return cdiHeader;
}
}
}