mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Implement "NM" system area.
This commit is contained in:
@@ -218,12 +218,7 @@ namespace DiscImageChef.Filesystems.ISO9660
|
|||||||
FileUnitSize = 0,
|
FileUnitSize = 0,
|
||||||
Interleave = 0,
|
Interleave = 0,
|
||||||
VolumeSequenceNumber = record.volume_sequence_number,
|
VolumeSequenceNumber = record.volume_sequence_number,
|
||||||
Filename = joliet
|
Filename = entry.Filename,
|
||||||
? Encoding.BigEndianUnicode.GetString(data,
|
|
||||||
entryOff + DirectoryRecordSize,
|
|
||||||
record.name_len)
|
|
||||||
: Encoding.GetString(data, entryOff + DirectoryRecordSize,
|
|
||||||
record.name_len),
|
|
||||||
Timestamp = DecodeIsoDateTime(record.date)
|
Timestamp = DecodeIsoDateTime(record.date)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -248,7 +243,7 @@ namespace DiscImageChef.Filesystems.ISO9660
|
|||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DecodeSystemArea(byte[] data, int start, int end, ref DecodedDirectoryEntry entry,
|
void DecodeSystemArea(byte[] data, int start, int end, ref DecodedDirectoryEntry entry,
|
||||||
out bool hasResourceFork)
|
out bool hasResourceFork)
|
||||||
{
|
{
|
||||||
int systemAreaOff = start;
|
int systemAreaOff = start;
|
||||||
@@ -470,6 +465,50 @@ namespace DiscImageChef.Filesystems.ISO9660
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case RRIP_NAME:
|
case RRIP_NAME:
|
||||||
|
byte nmLength = data[systemAreaOff + 2];
|
||||||
|
|
||||||
|
if(@namespace != Namespace.Rrip)
|
||||||
|
{
|
||||||
|
systemAreaOff += nmLength;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
AlternateName alternateName =
|
||||||
|
Marshal.ByteArrayToStructureLittleEndian<AlternateName>(data, systemAreaOff,
|
||||||
|
Marshal.SizeOf<AlternateName>());
|
||||||
|
|
||||||
|
byte[] nm;
|
||||||
|
if(alternateName.flags.HasFlag(AlternateNameFlags.Networkname))
|
||||||
|
nm = joliet
|
||||||
|
? Encoding.BigEndianUnicode.GetBytes(Environment.MachineName)
|
||||||
|
: Encoding.GetBytes(Environment.MachineName);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nm = new byte[nmLength - Marshal.SizeOf<AlternateName>()];
|
||||||
|
|
||||||
|
Array.Copy(data, systemAreaOff + Marshal.SizeOf<AlternateName>(), nm, 0, nm.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(entry.RockRidgeAlternateName is null) entry.RockRidgeAlternateName = new byte[0];
|
||||||
|
|
||||||
|
byte[] newNm = new byte[entry.RockRidgeAlternateName.Length + nm.Length];
|
||||||
|
Array.Copy(entry.RockRidgeAlternateName, 0, newNm, 0,
|
||||||
|
entry.RockRidgeAlternateName.Length);
|
||||||
|
Array.Copy(nm, 0, newNm, entry.RockRidgeAlternateName.Length,
|
||||||
|
nm.Length);
|
||||||
|
|
||||||
|
entry.RockRidgeAlternateName = newNm;
|
||||||
|
|
||||||
|
if(!alternateName.flags.HasFlag(AlternateNameFlags.Continue))
|
||||||
|
{
|
||||||
|
entry.Filename = joliet
|
||||||
|
? Encoding.BigEndianUnicode.GetString(entry.RockRidgeAlternateName)
|
||||||
|
: Encoding.GetString(entry.RockRidgeAlternateName);
|
||||||
|
entry.RockRidgeAlternateName = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
systemAreaOff += nmLength;
|
||||||
|
break;
|
||||||
case RRIP_CHILDLINK:
|
case RRIP_CHILDLINK:
|
||||||
case RRIP_PARENTLINK:
|
case RRIP_PARENTLINK:
|
||||||
case RRIP_RELOCATED_DIR:
|
case RRIP_RELOCATED_DIR:
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ namespace DiscImageChef.Filesystems.ISO9660
|
|||||||
public PosixAttributesOld? PosixAttributesOld;
|
public PosixAttributesOld? PosixAttributesOld;
|
||||||
public PosixDeviceNumber? PosixDeviceNumber;
|
public PosixDeviceNumber? PosixDeviceNumber;
|
||||||
public DecodedDirectoryEntry ResourceFork;
|
public DecodedDirectoryEntry ResourceFork;
|
||||||
|
public byte[] RockRidgeAlternateName;
|
||||||
public uint Size;
|
public uint Size;
|
||||||
public DateTime? Timestamp;
|
public DateTime? Timestamp;
|
||||||
public ushort VolumeSequenceNumber;
|
public ushort VolumeSequenceNumber;
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ namespace DiscImageChef.Filesystems.ISO9660
|
|||||||
|
|
||||||
XmlFsType.Type = fsFormat;
|
XmlFsType.Type = fsFormat;
|
||||||
|
|
||||||
if(jolietvd != null && this.@namespace == Namespace.Joliet)
|
if(jolietvd != null && (this.@namespace == Namespace.Joliet || this.@namespace == Namespace.Rrip))
|
||||||
{
|
{
|
||||||
rootLocation = jolietvd.Value.root_directory_record.extent;
|
rootLocation = jolietvd.Value.root_directory_record.extent;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user