diff --git a/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj b/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj
index e78dcfa9..f6967055 100644
--- a/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj
+++ b/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj
@@ -48,7 +48,6 @@
-
@@ -137,6 +136,14 @@
+
+
+
+
+
+
+
+
@@ -179,6 +186,7 @@
+
@@ -194,7 +202,7 @@
-
+
diff --git a/DiscImageChef.Filesystems/ISO9660/Dir.cs b/DiscImageChef.Filesystems/ISO9660/Dir.cs
new file mode 100644
index 00000000..002d71e0
--- /dev/null
+++ b/DiscImageChef.Filesystems/ISO9660/Dir.cs
@@ -0,0 +1,48 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : Dir.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Component
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Description
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2017 Natalia Portillo
+// ****************************************************************************/
+using System.Collections.Generic;
+
+namespace DiscImageChef.Filesystems.ISO9660
+{
+ public partial class ISO9660 : Filesystem
+ {
+ public override Errno ReadLink(string path, ref string dest)
+ {
+ return Errno.NotImplemented;
+ }
+
+ public override Errno ReadDir(string path, ref List contents)
+ {
+ return Errno.NotImplemented;
+ }
+ }
+}
diff --git a/DiscImageChef.Filesystems/ISO9660/Extent.cs b/DiscImageChef.Filesystems/ISO9660/Extent.cs
new file mode 100644
index 00000000..00431ae2
--- /dev/null
+++ b/DiscImageChef.Filesystems/ISO9660/Extent.cs
@@ -0,0 +1,42 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : Extent.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Component
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Description
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2017 Natalia Portillo
+// ****************************************************************************/
+
+namespace DiscImageChef.Filesystems.ISO9660
+{
+ public partial class ISO9660 : Filesystem
+ {
+ public override Errno MapBlock(string path, long fileBlock, ref long deviceBlock)
+ {
+ return Errno.NotImplemented;
+ }
+ }
+}
diff --git a/DiscImageChef.Filesystems/ISO9660/File.cs b/DiscImageChef.Filesystems/ISO9660/File.cs
new file mode 100644
index 00000000..b5fd9c32
--- /dev/null
+++ b/DiscImageChef.Filesystems/ISO9660/File.cs
@@ -0,0 +1,52 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : File.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Component
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Description
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2017 Natalia Portillo
+// ****************************************************************************/
+
+namespace DiscImageChef.Filesystems.ISO9660
+{
+ public partial class ISO9660 : Filesystem
+ {
+ public override Errno GetAttributes(string path, ref FileAttributes attributes)
+ {
+ return Errno.NotImplemented;
+ }
+
+ public override Errno Read(string path, long offset, long size, ref byte[] buf)
+ {
+ return Errno.NotImplemented;
+ }
+
+ public override Errno Stat(string path, ref FileEntryInfo stat)
+ {
+ return Errno.NotImplemented;
+ }
+ }
+}
diff --git a/DiscImageChef.Filesystems/ISO9660/ISO9660.cs b/DiscImageChef.Filesystems/ISO9660/ISO9660.cs
new file mode 100644
index 00000000..9a1b0ee7
--- /dev/null
+++ b/DiscImageChef.Filesystems/ISO9660/ISO9660.cs
@@ -0,0 +1,58 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : ISO9660.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Component
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Description
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2017 Natalia Portillo
+// ****************************************************************************/
+using System;
+using System.Text;
+using DiscImageChef.CommonTypes;
+
+namespace DiscImageChef.Filesystems.ISO9660
+{
+ // This is coded following ECMA-119.
+ // TODO: Differentiate ISO Level 1, 2, 3 and ISO 9660:1999
+ // TODO: Apple extensiones, requires XA or advance RR interpretation.
+ public partial class ISO9660 : Filesystem
+ {
+ public ISO9660()
+ {
+ Name = "ISO9660 Filesystem";
+ PluginUUID = new Guid("d812f4d3-c357-400d-90fd-3b22ef786aa8");
+ CurrentEncoding = Encoding.ASCII;
+ }
+
+ public ISO9660(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding)
+ {
+ Name = "ISO9660 Filesystem";
+ PluginUUID = new Guid("d812f4d3-c357-400d-90fd-3b22ef786aa8");
+ if(encoding == null)
+ CurrentEncoding = Encoding.ASCII;
+ }
+ }
+}
diff --git a/DiscImageChef.Filesystems/ISO9660.cs b/DiscImageChef.Filesystems/ISO9660/Info.cs
similarity index 62%
rename from DiscImageChef.Filesystems/ISO9660.cs
rename to DiscImageChef.Filesystems/ISO9660/Info.cs
index 7a4a7464..0356b012 100644
--- a/DiscImageChef.Filesystems/ISO9660.cs
+++ b/DiscImageChef.Filesystems/ISO9660/Info.cs
@@ -2,14 +2,14 @@
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
-// Filename : ISO9660.cs
+// Filename : Info.cs
// Author(s) : Natalia Portillo
//
-// Component : ISO 9660 filesystem plugin.
+// Component : Component
//
// --[ Description ] ----------------------------------------------------------
//
-// Identifies the ISO 9660 filesystem and shows information.
+// Description
//
// --[ License ] --------------------------------------------------------------
//
@@ -29,136 +29,18 @@
// ----------------------------------------------------------------------------
// Copyright © 2011-2017 Natalia Portillo
// ****************************************************************************/
-
using System;
-using System.Collections.Generic;
-using System.Globalization;
using System.Runtime.InteropServices;
using System.Text;
using DiscImageChef.CommonTypes;
using DiscImageChef.Console;
-namespace DiscImageChef.Filesystems
+namespace DiscImageChef.Filesystems.ISO9660
{
- // This is coded following ECMA-119.
- // TODO: Differentiate ISO Level 1, 2, 3 and ISO 9660:1999
- // TODO: Apple extensiones, requires XA or advance RR interpretation.
- // TODO: Needs a major rewrite
- public class ISO9660Plugin : Filesystem
+ public partial class ISO9660 : Filesystem
{
- //static bool alreadyLaunched;
-
- public ISO9660Plugin()
- {
- Name = "ISO9660 Filesystem";
- PluginUUID = new Guid("d812f4d3-c357-400d-90fd-3b22ef786aa8");
- CurrentEncoding = Encoding.ASCII;
- }
-
- public ISO9660Plugin(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding)
- {
- Name = "ISO9660 Filesystem";
- PluginUUID = new Guid("d812f4d3-c357-400d-90fd-3b22ef786aa8");
- if(encoding == null)
- CurrentEncoding = Encoding.ASCII;
- }
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct PrimaryVolumeDescriptor
- {
- public byte type;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
- public byte[] id;
- public byte version;
- // Only used in SVDs
- public byte flags;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] system_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] volume_id;
- public ulong reserved2;
- public ulong volume_space_size;
- // Only used in SVDs
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] escape_sequences;
- public uint volume_set_size;
- public uint volume_sequence_number;
- public uint logical_block_size;
- public ulong path_table_size;
- public uint type_1_path_table;
- public uint opt_type_1_path_table;
- public uint type_m_path_table;
- public uint opt_type_m_path_table;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 34)]
- public byte[] root_directory_record;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
- public byte[] volume_set_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
- public byte[] publisher_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
- public byte[] preparer_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
- public byte[] application_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 37)]
- public byte[] copyright_file_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 37)]
- public byte[] abstract_file_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 37)]
- public byte[] bibliographic_file_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
- public byte[] creation_date;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
- public byte[] modification_date;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
- public byte[] expiration_date;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
- public byte[] effective_date;
- public byte file_structure_version;
- public byte reserved4;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
- public byte[] application_data;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 653)]
- public byte[] reserved5;
- }
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct BootRecord
- {
- public byte type;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
- public byte[] id;
- public byte version;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] system_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] boot_id;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1977)]
- public byte[] boot_use;
- }
-
- struct DecodedVolumeDescriptor
- {
- public string SystemIdentifier;
- public string VolumeIdentifier;
- public string VolumeSetIdentifier;
- public string PublisherIdentifier;
- public string DataPreparerIdentifier;
- public string ApplicationIdentifier;
- public DateTime CreationTime;
- public bool HasModificationTime;
- public DateTime ModificationTime;
- public bool HasExpirationTime;
- public DateTime ExpirationTime;
- public bool HasEffectiveTime;
- public DateTime EffectiveTime;
- }
-
public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition)
{
- /* if (alreadyLaunched)
- return false;
- alreadyLaunched = true;*/
-
byte VDType;
// ISO9660 is designed for 2048 bytes/sector devices
@@ -505,161 +387,5 @@ namespace DiscImageChef.Filesystems
information = ISOMetadata.ToString();
}
-
- static DecodedVolumeDescriptor DecodeJolietDescriptor(PrimaryVolumeDescriptor jolietvd)
- {
- DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
-
- decodedVD.SystemIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.system_id).TrimEnd().Trim(new[] { '\u0000' });
- decodedVD.VolumeIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.volume_id).TrimEnd().Trim(new[] { '\u0000' });
- decodedVD.VolumeSetIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.volume_set_id).TrimEnd().Trim(new[] { '\u0000' });
- decodedVD.PublisherIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.publisher_id).TrimEnd().Trim(new[] { '\u0000' });
- decodedVD.DataPreparerIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.preparer_id).TrimEnd().Trim(new[] { '\u0000' });
- decodedVD.ApplicationIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.application_id).TrimEnd().Trim(new[] { '\u0000' });
- if(jolietvd.creation_date[0] < 0x31 || jolietvd.creation_date[0] > 0x39)
- decodedVD.CreationTime = DateTime.MinValue;
- else
- decodedVD.CreationTime = DateHandlers.ISO9660ToDateTime(jolietvd.creation_date);
-
- if(jolietvd.modification_date[0] < 0x31 || jolietvd.modification_date[0] > 0x39)
- {
- decodedVD.HasModificationTime = false;
- }
- else
- {
- decodedVD.HasModificationTime = true;
- decodedVD.ModificationTime = DateHandlers.ISO9660ToDateTime(jolietvd.modification_date);
- }
-
- if(jolietvd.expiration_date[0] < 0x31 || jolietvd.expiration_date[0] > 0x39)
- {
- decodedVD.HasExpirationTime = false;
- }
- else
- {
- decodedVD.HasExpirationTime = true;
- decodedVD.ExpirationTime = DateHandlers.ISO9660ToDateTime(jolietvd.expiration_date);
- }
-
- if(jolietvd.effective_date[0] < 0x31 || jolietvd.effective_date[0] > 0x39)
- {
- decodedVD.HasEffectiveTime = false;
- }
- else
- {
- decodedVD.HasEffectiveTime = true;
- decodedVD.EffectiveTime = DateHandlers.ISO9660ToDateTime(jolietvd.effective_date);
- }
-
- return decodedVD;
- }
-
- static DecodedVolumeDescriptor DecodeVolumeDescriptor(PrimaryVolumeDescriptor pvd)
- {
- DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
-
- decodedVD.SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim(new[] { '\0' });
- decodedVD.VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim(new[] { '\0' });
- decodedVD.VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim(new[] { '\0' });
- decodedVD.PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim(new[] { '\0' });
- decodedVD.DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim(new[] { '\0' });
- decodedVD.ApplicationIdentifier = Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim(new[] { '\0' });
- if(pvd.creation_date[0] == '0' || pvd.creation_date[0] == 0x00)
- decodedVD.CreationTime = DateTime.MinValue;
- else
- decodedVD.CreationTime = DateHandlers.ISO9660ToDateTime(pvd.creation_date);
-
- if(pvd.modification_date[0] == '0' || pvd.modification_date[0] == 0x00)
- {
- decodedVD.HasModificationTime = false;
- }
- else
- {
- decodedVD.HasModificationTime = true;
- decodedVD.ModificationTime = DateHandlers.ISO9660ToDateTime(pvd.modification_date);
- }
-
- if(pvd.expiration_date[0] == '0' || pvd.expiration_date[0] == 0x00)
- {
- decodedVD.HasExpirationTime = false;
- }
- else
- {
- decodedVD.HasExpirationTime = true;
- decodedVD.ExpirationTime = DateHandlers.ISO9660ToDateTime(pvd.expiration_date);
- }
-
- if(pvd.effective_date[0] == '0' || pvd.effective_date[0] == 0x00)
- {
- decodedVD.HasEffectiveTime = false;
- }
- else
- {
- decodedVD.HasEffectiveTime = true;
- decodedVD.EffectiveTime = DateHandlers.ISO9660ToDateTime(pvd.effective_date);
- }
-
- return decodedVD;
- }
-
- public override Errno Mount()
- {
- return Errno.NotImplemented;
- }
-
- public override Errno Mount(bool debug)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno Unmount()
- {
- return Errno.NotImplemented;
- }
-
- public override Errno MapBlock(string path, long fileBlock, ref long deviceBlock)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno GetAttributes(string path, ref FileAttributes attributes)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno ListXAttr(string path, ref List xattrs)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno GetXattr(string path, string xattr, ref byte[] buf)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno Read(string path, long offset, long size, ref byte[] buf)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno ReadDir(string path, ref List contents)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno StatFs(ref FileSystemInfo stat)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno Stat(string path, ref FileEntryInfo stat)
- {
- return Errno.NotImplemented;
- }
-
- public override Errno ReadLink(string path, ref string dest)
- {
- return Errno.NotImplemented;
- }
}
-}
\ No newline at end of file
+}
diff --git a/DiscImageChef.Filesystems/ISO9660/Structs.cs b/DiscImageChef.Filesystems/ISO9660/Structs.cs
new file mode 100644
index 00000000..a22168af
--- /dev/null
+++ b/DiscImageChef.Filesystems/ISO9660/Structs.cs
@@ -0,0 +1,226 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : Structs.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Component
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Description
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2017 Natalia Portillo
+// ****************************************************************************/
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace DiscImageChef.Filesystems.ISO9660
+{
+ public partial class ISO9660 : Filesystem
+ {
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct PrimaryVolumeDescriptor
+ {
+ public byte type;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
+ public byte[] id;
+ public byte version;
+ // Only used in SVDs
+ public byte flags;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] system_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] volume_id;
+ public ulong reserved2;
+ public ulong volume_space_size;
+ // Only used in SVDs
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] escape_sequences;
+ public uint volume_set_size;
+ public uint volume_sequence_number;
+ public uint logical_block_size;
+ public ulong path_table_size;
+ public uint type_1_path_table;
+ public uint opt_type_1_path_table;
+ public uint type_m_path_table;
+ public uint opt_type_m_path_table;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 34)]
+ public byte[] root_directory_record;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
+ public byte[] volume_set_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
+ public byte[] publisher_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
+ public byte[] preparer_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
+ public byte[] application_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 37)]
+ public byte[] copyright_file_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 37)]
+ public byte[] abstract_file_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 37)]
+ public byte[] bibliographic_file_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
+ public byte[] creation_date;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
+ public byte[] modification_date;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
+ public byte[] expiration_date;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
+ public byte[] effective_date;
+ public byte file_structure_version;
+ public byte reserved4;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
+ public byte[] application_data;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 653)]
+ public byte[] reserved5;
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct BootRecord
+ {
+ public byte type;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
+ public byte[] id;
+ public byte version;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] system_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] boot_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1977)]
+ public byte[] boot_use;
+ }
+
+ struct DecodedVolumeDescriptor
+ {
+ public string SystemIdentifier;
+ public string VolumeIdentifier;
+ public string VolumeSetIdentifier;
+ public string PublisherIdentifier;
+ public string DataPreparerIdentifier;
+ public string ApplicationIdentifier;
+ public DateTime CreationTime;
+ public bool HasModificationTime;
+ public DateTime ModificationTime;
+ public bool HasExpirationTime;
+ public DateTime ExpirationTime;
+ public bool HasEffectiveTime;
+ public DateTime EffectiveTime;
+ }
+
+ static DecodedVolumeDescriptor DecodeJolietDescriptor(PrimaryVolumeDescriptor jolietvd)
+ {
+ DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
+
+ decodedVD.SystemIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.system_id).TrimEnd().Trim(new[] { '\u0000' });
+ decodedVD.VolumeIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.volume_id).TrimEnd().Trim(new[] { '\u0000' });
+ decodedVD.VolumeSetIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.volume_set_id).TrimEnd().Trim(new[] { '\u0000' });
+ decodedVD.PublisherIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.publisher_id).TrimEnd().Trim(new[] { '\u0000' });
+ decodedVD.DataPreparerIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.preparer_id).TrimEnd().Trim(new[] { '\u0000' });
+ decodedVD.ApplicationIdentifier = Encoding.BigEndianUnicode.GetString(jolietvd.application_id).TrimEnd().Trim(new[] { '\u0000' });
+ if(jolietvd.creation_date[0] < 0x31 || jolietvd.creation_date[0] > 0x39)
+ decodedVD.CreationTime = DateTime.MinValue;
+ else
+ decodedVD.CreationTime = DateHandlers.ISO9660ToDateTime(jolietvd.creation_date);
+
+ if(jolietvd.modification_date[0] < 0x31 || jolietvd.modification_date[0] > 0x39)
+ {
+ decodedVD.HasModificationTime = false;
+ }
+ else
+ {
+ decodedVD.HasModificationTime = true;
+ decodedVD.ModificationTime = DateHandlers.ISO9660ToDateTime(jolietvd.modification_date);
+ }
+
+ if(jolietvd.expiration_date[0] < 0x31 || jolietvd.expiration_date[0] > 0x39)
+ {
+ decodedVD.HasExpirationTime = false;
+ }
+ else
+ {
+ decodedVD.HasExpirationTime = true;
+ decodedVD.ExpirationTime = DateHandlers.ISO9660ToDateTime(jolietvd.expiration_date);
+ }
+
+ if(jolietvd.effective_date[0] < 0x31 || jolietvd.effective_date[0] > 0x39)
+ {
+ decodedVD.HasEffectiveTime = false;
+ }
+ else
+ {
+ decodedVD.HasEffectiveTime = true;
+ decodedVD.EffectiveTime = DateHandlers.ISO9660ToDateTime(jolietvd.effective_date);
+ }
+
+ return decodedVD;
+ }
+
+ static DecodedVolumeDescriptor DecodeVolumeDescriptor(PrimaryVolumeDescriptor pvd)
+ {
+ DecodedVolumeDescriptor decodedVD = new DecodedVolumeDescriptor();
+
+ decodedVD.SystemIdentifier = Encoding.ASCII.GetString(pvd.system_id).TrimEnd().Trim(new[] { '\0' });
+ decodedVD.VolumeIdentifier = Encoding.ASCII.GetString(pvd.volume_id).TrimEnd().Trim(new[] { '\0' });
+ decodedVD.VolumeSetIdentifier = Encoding.ASCII.GetString(pvd.volume_set_id).TrimEnd().Trim(new[] { '\0' });
+ decodedVD.PublisherIdentifier = Encoding.ASCII.GetString(pvd.publisher_id).TrimEnd().Trim(new[] { '\0' });
+ decodedVD.DataPreparerIdentifier = Encoding.ASCII.GetString(pvd.preparer_id).TrimEnd().Trim(new[] { '\0' });
+ decodedVD.ApplicationIdentifier = Encoding.ASCII.GetString(pvd.application_data).TrimEnd().Trim(new[] { '\0' });
+ if(pvd.creation_date[0] == '0' || pvd.creation_date[0] == 0x00)
+ decodedVD.CreationTime = DateTime.MinValue;
+ else
+ decodedVD.CreationTime = DateHandlers.ISO9660ToDateTime(pvd.creation_date);
+
+ if(pvd.modification_date[0] == '0' || pvd.modification_date[0] == 0x00)
+ {
+ decodedVD.HasModificationTime = false;
+ }
+ else
+ {
+ decodedVD.HasModificationTime = true;
+ decodedVD.ModificationTime = DateHandlers.ISO9660ToDateTime(pvd.modification_date);
+ }
+
+ if(pvd.expiration_date[0] == '0' || pvd.expiration_date[0] == 0x00)
+ {
+ decodedVD.HasExpirationTime = false;
+ }
+ else
+ {
+ decodedVD.HasExpirationTime = true;
+ decodedVD.ExpirationTime = DateHandlers.ISO9660ToDateTime(pvd.expiration_date);
+ }
+
+ if(pvd.effective_date[0] == '0' || pvd.effective_date[0] == 0x00)
+ {
+ decodedVD.HasEffectiveTime = false;
+ }
+ else
+ {
+ decodedVD.HasEffectiveTime = true;
+ decodedVD.EffectiveTime = DateHandlers.ISO9660ToDateTime(pvd.effective_date);
+ }
+
+ return decodedVD;
+ }
+ }
+}
diff --git a/DiscImageChef.Filesystems/ISO9660/Super.cs b/DiscImageChef.Filesystems/ISO9660/Super.cs
new file mode 100644
index 00000000..1e4a8dfa
--- /dev/null
+++ b/DiscImageChef.Filesystems/ISO9660/Super.cs
@@ -0,0 +1,57 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : Super.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Component
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Description
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2017 Natalia Portillo
+// ****************************************************************************/
+
+namespace DiscImageChef.Filesystems.ISO9660
+{
+ public partial class ISO9660 : Filesystem
+ {
+ public override Errno Mount()
+ {
+ return Errno.NotImplemented;
+ }
+
+ public override Errno Mount(bool debug)
+ {
+ return Errno.NotImplemented;
+ }
+
+ public override Errno Unmount()
+ {
+ return Errno.NotImplemented;
+ }
+
+ public override Errno StatFs(ref FileSystemInfo stat)
+ {
+ return Errno.NotImplemented;
+ }
+ }
+}
diff --git a/DiscImageChef.Filesystems/ISO9660/Xattr.cs b/DiscImageChef.Filesystems/ISO9660/Xattr.cs
new file mode 100644
index 00000000..9c0a3d14
--- /dev/null
+++ b/DiscImageChef.Filesystems/ISO9660/Xattr.cs
@@ -0,0 +1,48 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : Xattr.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Component
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Description
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2017 Natalia Portillo
+// ****************************************************************************/
+using System.Collections.Generic;
+
+namespace DiscImageChef.Filesystems.ISO9660
+{
+ public partial class ISO9660 : Filesystem
+ {
+ public override Errno ListXAttr(string path, ref List xattrs)
+ {
+ return Errno.NotImplemented;
+ }
+
+ public override Errno GetXattr(string path, string xattr, ref byte[] buf)
+ {
+ return Errno.NotImplemented;
+ }
+ }
+}
diff --git a/DiscImageChef.Tests/Filesystems/ISO9660.cs b/DiscImageChef.Tests/Filesystems/ISO9660.cs
index 9ddd5dbe..b1339827 100644
--- a/DiscImageChef.Tests/Filesystems/ISO9660.cs
+++ b/DiscImageChef.Tests/Filesystems/ISO9660.cs
@@ -142,7 +142,7 @@ namespace DiscImageChef.Tests.Filesystems
Assert.AreEqual(mediatypes[i], image.ImageInfo.mediaType, testfiles[i]);
Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]);
Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]);
- Filesystem fs = new ISO9660Plugin();
+ Filesystem fs = new DiscImageChef.Filesystems.ISO9660.ISO9660();
Partition wholePart = new Partition
{
Name = "Whole device",