mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Implement decoding High Sierra directories.
This commit is contained in:
6
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
6
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
@@ -6,7 +6,6 @@
|
|||||||
<e p="$APPLICATION_PLUGINS_DIR$/puppet/lib/stubs" t="IncludeRecursive" />
|
<e p="$APPLICATION_PLUGINS_DIR$/puppet/lib/stubs" t="IncludeRecursive" />
|
||||||
<e p="$USER_HOME$/.Rider2019.1/system/extResources" t="IncludeRecursive" />
|
<e p="$USER_HOME$/.Rider2019.1/system/extResources" t="IncludeRecursive" />
|
||||||
<e p="$USER_HOME$/.Rider2019.1/system/resharper-host/local/Transient/ReSharperHost/v191/SolutionCaches/_DiscImageChef.-1491758497.00" t="ExcludeRecursive" />
|
<e p="$USER_HOME$/.Rider2019.1/system/resharper-host/local/Transient/ReSharperHost/v191/SolutionCaches/_DiscImageChef.-1491758497.00" t="ExcludeRecursive" />
|
||||||
<e p="$USER_HOME$/.config/git/ignore" t="IncludeRecursive" />
|
|
||||||
<e p="$USER_HOME$/.nuget/packages/sqlitepclraw.lib.e_sqlite3.linux/1.1.12/runtimes/linux-x64/native/libe_sqlite3.so" t="Include" />
|
<e p="$USER_HOME$/.nuget/packages/sqlitepclraw.lib.e_sqlite3.linux/1.1.12/runtimes/linux-x64/native/libe_sqlite3.so" t="Include" />
|
||||||
<e p="$PROJECT_DIR$" t="IncludeFlat">
|
<e p="$PROJECT_DIR$" t="IncludeFlat">
|
||||||
<e p=".git/info/exclude" t="IncludeRecursive" />
|
<e p=".git/info/exclude" t="IncludeRecursive" />
|
||||||
@@ -36,6 +35,7 @@
|
|||||||
<e p="Entropy.cs" t="Include" />
|
<e p="Entropy.cs" t="Include" />
|
||||||
<e p="ExtractFiles.cs" t="Include" />
|
<e p="ExtractFiles.cs" t="Include" />
|
||||||
<e p="Formats.cs" t="Include" />
|
<e p="Formats.cs" t="Include" />
|
||||||
|
<e p="Gui.cs" t="Include" />
|
||||||
<e p="ImageInfo.cs" t="Include" />
|
<e p="ImageInfo.cs" t="Include" />
|
||||||
<e p="ListDevices.cs" t="Include" />
|
<e p="ListDevices.cs" t="Include" />
|
||||||
<e p="ListEncodings.cs" t="Include" />
|
<e p="ListEncodings.cs" t="Include" />
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<e p="bin" t="ExcludeRecursive" />
|
<e p="bin" t="ExcludeRecursive" />
|
||||||
<e p="obj" t="ExcludeRecursive">
|
<e p="obj" t="ExcludeRecursive">
|
||||||
<e p="Debug" t="Include">
|
<e p="Debug" t="Include">
|
||||||
<e p="netcoreapp2.0" t="Include">
|
<e p="net461" t="Include">
|
||||||
<e p="DiscImageChef.AssemblyInfo.cs" t="Include" />
|
<e p="DiscImageChef.AssemblyInfo.cs" t="Include" />
|
||||||
</e>
|
</e>
|
||||||
</e>
|
</e>
|
||||||
@@ -76,6 +76,7 @@
|
|||||||
<e p="DiscImageChef.Checksums.csproj" t="IncludeRecursive" />
|
<e p="DiscImageChef.Checksums.csproj" t="IncludeRecursive" />
|
||||||
<e p="FletcherContext.cs" t="Include" />
|
<e p="FletcherContext.cs" t="Include" />
|
||||||
<e p="MD5Context.cs" t="Include" />
|
<e p="MD5Context.cs" t="Include" />
|
||||||
|
<e p="RIPEMD160Context.cs" t="Include" />
|
||||||
<e p="ReedSolomon.cs" t="Include" />
|
<e p="ReedSolomon.cs" t="Include" />
|
||||||
<e p="Register.cs" t="Include" />
|
<e p="Register.cs" t="Include" />
|
||||||
<e p="SHA1Context.cs" t="Include" />
|
<e p="SHA1Context.cs" t="Include" />
|
||||||
@@ -2073,6 +2074,7 @@
|
|||||||
<e p="CRC32.cs" t="Include" />
|
<e p="CRC32.cs" t="Include" />
|
||||||
<e p="CRC64.cs" t="Include" />
|
<e p="CRC64.cs" t="Include" />
|
||||||
<e p="MD5.cs" t="Include" />
|
<e p="MD5.cs" t="Include" />
|
||||||
|
<e p="RIPEMD160.cs" t="Include" />
|
||||||
<e p="SHA1.cs" t="Include" />
|
<e p="SHA1.cs" t="Include" />
|
||||||
<e p="SHA256.cs" t="Include" />
|
<e p="SHA256.cs" t="Include" />
|
||||||
<e p="SHA384.cs" t="Include" />
|
<e p="SHA384.cs" t="Include" />
|
||||||
|
|||||||
@@ -132,8 +132,46 @@ namespace DiscImageChef.Filesystems.ISO9660
|
|||||||
Dictionary<string, DecodedDirectoryEntry> DecodeCdiDirectory(byte[] data) =>
|
Dictionary<string, DecodedDirectoryEntry> DecodeCdiDirectory(byte[] data) =>
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
|
|
||||||
Dictionary<string, DecodedDirectoryEntry> DecodeHighSierraDirectory(byte[] data) =>
|
Dictionary<string, DecodedDirectoryEntry> DecodeHighSierraDirectory(byte[] data)
|
||||||
throw new NotImplementedException();
|
{
|
||||||
|
Dictionary<string, DecodedDirectoryEntry> entries = new Dictionary<string, DecodedDirectoryEntry>();
|
||||||
|
int entryOff = 0;
|
||||||
|
|
||||||
|
while(entryOff + DirectoryRecordSize < data.Length)
|
||||||
|
{
|
||||||
|
HighSierraDirectoryRecord record =
|
||||||
|
Marshal.ByteArrayToStructureLittleEndian<HighSierraDirectoryRecord>(data, entryOff,
|
||||||
|
Marshal
|
||||||
|
.SizeOf<DirectoryRecord>());
|
||||||
|
|
||||||
|
if(record.length == 0) break;
|
||||||
|
|
||||||
|
// Special entries for current and parent directories, skip them
|
||||||
|
if(record.name_len == 1)
|
||||||
|
if(data[entryOff + DirectoryRecordSize] == 0 || data[entryOff + DirectoryRecordSize] == 1)
|
||||||
|
{
|
||||||
|
entryOff += record.length;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
DecodedDirectoryEntry entry = new DecodedDirectoryEntry
|
||||||
|
{
|
||||||
|
Extent = record.size == 0 ? 0 : record.extent,
|
||||||
|
Size = record.size,
|
||||||
|
Flags = record.flags,
|
||||||
|
Interleave = record.interleave,
|
||||||
|
VolumeSequenceNumber = record.volume_sequence_number,
|
||||||
|
IsoFilename =
|
||||||
|
Encoding.ASCII.GetString(data, entryOff + DirectoryRecordSize, record.name_len)
|
||||||
|
};
|
||||||
|
|
||||||
|
if(!entries.ContainsKey(entry.IsoFilename)) entries.Add(entry.IsoFilename, entry);
|
||||||
|
|
||||||
|
entryOff += record.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
return entries;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Implement system area
|
// TODO: Implement system area
|
||||||
Dictionary<string, DecodedDirectoryEntry> DecodeIsoDirectory(byte[] data)
|
Dictionary<string, DecodedDirectoryEntry> DecodeIsoDirectory(byte[] data)
|
||||||
|
|||||||
Reference in New Issue
Block a user