Refactor ISO9660 and solves bug preventing amiga extensions from being named.

This commit is contained in:
2017-12-22 07:28:54 +00:00
parent 56986338be
commit ef2fff0abd
17 changed files with 419 additions and 434 deletions

View File

@@ -36,8 +36,8 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ushort AAIP_Magic = 0x414C; // "AL"
const ushort AAIP_OldMagic = 0x4141; // "AA"
const ushort AAIP_MAGIC = 0x414C; // "AL"
const ushort AAIP_MAGIC_OLD = 0x4141; // "AA"
[Flags]
enum AAIPFlags : byte

View File

@@ -36,7 +36,7 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ushort Amiga_Magic = 0x4153; // "AS"
const ushort AMIGA_MAGIC = 0x4153; // "AS"
[Flags]
enum AmigaFlags : byte

View File

@@ -34,8 +34,8 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ushort AppleMagic = 0x4141; // "AA"
const ushort AppleMagicOld = 0x4241; // "BA"
const ushort APPLE_MAGIC = 0x4141; // "AA"
const ushort APPLE_MAGIC_OLD = 0x4241; // "BA"
enum AppleId : byte
{

View File

@@ -36,7 +36,7 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
readonly string CdiMagic = "CD-I ";
const string CDI_MAGIC = "CD-I ";
[Flags]
enum CdiVolumeFlags : byte

View File

@@ -36,8 +36,8 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ushort ElToritoMagic = 0xAA55;
const int ElToritoEntrySize = 32;
const ushort EL_TORITO_MAGIC = 0xAA55;
const int EL_TORITO_ENTRY_SIZE = 32;
enum ElToritoIndicator : byte
{

View File

@@ -34,6 +34,6 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
readonly string HighSierraMagic = "CDROM";
const string HIGH_SIERRA_MAGIC = "CDROM";
}
}

View File

@@ -36,7 +36,7 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
readonly string IsoMagic = "CD001";
const string ISO_MAGIC = "CD001";
[Flags]
enum FileFlags : byte

View File

@@ -36,16 +36,16 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ushort RRIP_Magic = 0x5252; // "RR"
const ushort RRIP_PosixAttributes = 0x5058; // "PX"
const ushort RRIP_PosixDevNo = 0x504E; // "PN"
const ushort RRIP_Symlink = 0x534C; // "SL"
const ushort RRIP_Name = 0x4E4D; // "NM"
const ushort RRIP_Childlink = 0x434C; // "CL"
const ushort RRIP_Parentlink = 0x504C; // "PL"
const ushort RRIP_RelocatedDir = 0x5245; // "RE"
const ushort RRIP_Timestamps = 0x5446; // "TF"
const ushort RRIP_Sparse = 0x5346; // "SF"
const ushort RRIP_MAGIC = 0x5252; // "RR"
const ushort RRIP_POSIX_ATTRIBUTES = 0x5058; // "PX"
const ushort RRIP_POSIX_DEV_NO = 0x504E; // "PN"
const ushort RRIP_SYMLINK = 0x534C; // "SL"
const ushort RRIP_NAME = 0x4E4D; // "NM"
const ushort RRIP_CHILDLINK = 0x434C; // "CL"
const ushort RRIP_PARENTLINK = 0x504C; // "PL"
const ushort RRIP_RELOCATED_DIR = 0x5245; // "RE"
const ushort RRIP_TIMESTAMPS = 0x5446; // "TF"
const ushort RRIP_SPARSE = 0x5346; // "SF"
[Flags]
enum PosixMode : uint

View File

@@ -34,12 +34,12 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ushort SUSP_Continuation = 0x4345; // "CE"
const ushort SUSP_Padding = 0x5044; // "PD"
const ushort SUSP_Indicator = 0x5350; // "SP"
const ushort SUSP_Terminator = 0x5354; // "ST"
const ushort SUSP_Reference = 0x4552; // "ER"
const ushort SUSP_Selector = 0x4553; // "ES"
const ushort SUSP_Magic = 0xBEEF;
const ushort SUSP_CONTINUATION = 0x4345; // "CE"
const ushort SUSP_PADDING = 0x5044; // "PD"
const ushort SUSP_INDICATOR = 0x5350; // "SP"
const ushort SUSP_TERMINATOR = 0x5354; // "ST"
const ushort SUSP_REFERENCE = 0x4552; // "ER"
const ushort SUSP_SELECTOR = 0x4553; // "ES"
const ushort SUSP_MAGIC = 0xBEEF;
}
}

View File

@@ -36,7 +36,7 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ushort XaMagic = 0x5841; // "XA"
const ushort XA_MAGIC = 0x5841; // "XA"
[Flags]
enum XaAttributes : ushort

View File

@@ -34,9 +34,9 @@ namespace DiscImageChef.Filesystems.ISO9660
{
public partial class ISO9660
{
const ulong ziso_header_magic = 0x37E45396C9DBD607;
const ulong ziso_header_cigam = 0x07D6DBC99653E437;
const ushort ziso_Magic = 0x5A46; // "ZF"
const ushort ziso_PagedZlib = 0x707A; // "pz"
const ulong ZISO_HEADER_MAGIC = 0x37E45396C9DBD607;
const ulong ZISO_HEADER_CIGAM = 0x07D6DBC99653E437;
const ushort ZISO_MAGIC = 0x5A46; // "ZF"
const ushort ZISO_PAGED_ZLIB = 0x707A; // "pz"
}
}

View File

@@ -51,16 +51,14 @@ namespace DiscImageChef.Filesystems.ISO9660
{
Name = "ISO9660 Filesystem";
PluginUUID = new Guid("d812f4d3-c357-400d-90fd-3b22ef786aa8");
if(encoding == null) CurrentEncoding = Encoding.ASCII;
else CurrentEncoding = encoding;
CurrentEncoding = encoding ?? Encoding.ASCII;
}
public ISO9660(ImagePlugin imagePlugin, Partition partition, Encoding encoding)
{
Name = "ISO9660 Filesystem";
PluginUUID = new Guid("d812f4d3-c357-400d-90fd-3b22ef786aa8");
if(encoding == null) CurrentEncoding = Encoding.ASCII;
else CurrentEncoding = encoding;
CurrentEncoding = encoding ?? Encoding.ASCII;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -118,15 +118,16 @@ namespace DiscImageChef.Filesystems.ISO9660
static DecodedVolumeDescriptor DecodeVolumeDescriptor(FileStructureVolumeDescriptor pvd)
{
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor
{
SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim('\0'),
VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim('\0'),
VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim('\0'),
PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim('\0'),
DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim('\0'),
ApplicationIdentifier = Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim('\0')
};
decodedVD.SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim('\0');
decodedVD.VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim('\0');
decodedVD.VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim('\0');
decodedVD.PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim('\0');
decodedVD.DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim('\0');
decodedVD.ApplicationIdentifier =
Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim('\0');
if(pvd.creation_date[0] == '0' || pvd.creation_date[0] == 0x00)
decodedVD.CreationTime = DateTime.MinValue;
else decodedVD.CreationTime = DateHandlers.HighSierraToDateTime(pvd.creation_date);

View File

@@ -110,15 +110,16 @@ namespace DiscImageChef.Filesystems.ISO9660
static DecodedVolumeDescriptor DecodeVolumeDescriptor(HighSierraPrimaryVolumeDescriptor pvd)
{
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor
{
SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim('\0'),
VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim('\0'),
VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim('\0'),
PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim('\0'),
DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim('\0'),
ApplicationIdentifier = Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim('\0')
};
decodedVD.SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim('\0');
decodedVD.VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim('\0');
decodedVD.VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim('\0');
decodedVD.PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim('\0');
decodedVD.DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim('\0');
decodedVD.ApplicationIdentifier =
Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim('\0');
if(pvd.creation_date[0] == '0' || pvd.creation_date[0] == 0x00)
decodedVD.CreationTime = DateTime.MinValue;
else decodedVD.CreationTime = DateHandlers.HighSierraToDateTime(pvd.creation_date);

View File

@@ -168,15 +168,16 @@ namespace DiscImageChef.Filesystems.ISO9660
static DecodedVolumeDescriptor DecodeVolumeDescriptor(PrimaryVolumeDescriptor pvd)
{
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor
{
SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim('\0'),
VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim('\0'),
VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim('\0'),
PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim('\0'),
DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim('\0'),
ApplicationIdentifier = Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim('\0')
};
decodedVD.SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim('\0');
decodedVD.VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim('\0');
decodedVD.VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim('\0');
decodedVD.PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim('\0');
decodedVD.DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim('\0');
decodedVD.ApplicationIdentifier =
Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim('\0');
if(pvd.creation_date[0] == '0' || pvd.creation_date[0] == 0x00)
decodedVD.CreationTime = DateTime.MinValue;
else decodedVD.CreationTime = DateHandlers.ISO9660ToDateTime(pvd.creation_date);

View File

@@ -39,20 +39,20 @@ namespace DiscImageChef.Filesystems.ISO9660
{
static DecodedVolumeDescriptor DecodeJolietDescriptor(PrimaryVolumeDescriptor jolietvd)
{
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor
{
SystemIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.system_id).TrimEnd().Trim('\u0000'),
VolumeIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.volume_id).TrimEnd().Trim('\u0000'),
VolumeSetIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.volume_set_id).TrimEnd().Trim('\u0000'),
PublisherIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.publisher_id).TrimEnd().Trim('\u0000'),
DataPreparerIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.preparer_id).TrimEnd().Trim('\u0000'),
ApplicationIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.application_id).TrimEnd().Trim('\u0000')
};
decodedVD.SystemIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.system_id).TrimEnd().Trim('\u0000');
decodedVD.VolumeIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.volume_id).TrimEnd().Trim('\u0000');
decodedVD.VolumeSetIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.volume_set_id).TrimEnd()
.Trim('\u0000');
decodedVD.PublisherIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.publisher_id).TrimEnd().Trim('\u0000');
decodedVD.DataPreparerIdentifier =
Encoding.BigEndianUnicode.GetString(jolietvd.preparer_id).TrimEnd().Trim('\u0000');
decodedVD.ApplicationIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.application_id).TrimEnd()
.Trim('\u0000');
if(jolietvd.creation_date[0] < 0x31 || jolietvd.creation_date[0] > 0x39)
decodedVD.CreationTime = DateTime.MinValue;
else decodedVD.CreationTime = DateHandlers.ISO9660ToDateTime(jolietvd.creation_date);