diff --git a/DiscImageChef.Filesystems/ISO9660/Dir.cs b/DiscImageChef.Filesystems/ISO9660/Dir.cs index 298ac00ac..f5a114b7b 100644 --- a/DiscImageChef.Filesystems/ISO9660/Dir.cs +++ b/DiscImageChef.Filesystems/ISO9660/Dir.cs @@ -454,6 +454,15 @@ namespace DiscImageChef.Filesystems.ISO9660 systemAreaOff += pxLength; break; case RRIP_POSIX_DEV_NO: + byte pnLength = data[systemAreaOff + 2]; + + entry.PosixDeviceNumber = + Marshal.ByteArrayToStructureLittleEndian(data, systemAreaOff, + Marshal + .SizeOf()); + systemAreaOff += pnLength; + break; case RRIP_SYMLINK: case RRIP_NAME: case RRIP_CHILDLINK: diff --git a/DiscImageChef.Filesystems/ISO9660/File.cs b/DiscImageChef.Filesystems/ISO9660/File.cs index 500093d7e..859ea3c17 100644 --- a/DiscImageChef.Filesystems/ISO9660/File.cs +++ b/DiscImageChef.Filesystems/ISO9660/File.cs @@ -182,6 +182,10 @@ namespace DiscImageChef.Filesystems.ISO9660 stat.Attributes |= FileAttributes.Archive; } + if(entry.PosixDeviceNumber != null) + stat.DeviceNo = (entry.PosixDeviceNumber.Value.dev_t_high << 32) + + entry.PosixDeviceNumber.Value.dev_t_low; + if(entry.AssociatedFile is null || entry.AssociatedFile.Extent == 0 || entry.AssociatedFile.Size == 0) return Errno.NoError; diff --git a/DiscImageChef.Filesystems/ISO9660/Structs/Internal.cs b/DiscImageChef.Filesystems/ISO9660/Structs/Internal.cs index b498d58c7..c0c1095b6 100644 --- a/DiscImageChef.Filesystems/ISO9660/Structs/Internal.cs +++ b/DiscImageChef.Filesystems/ISO9660/Structs/Internal.cs @@ -71,6 +71,7 @@ namespace DiscImageChef.Filesystems.ISO9660 public byte Interleave; public PosixAttributes? PosixAttributes; public PosixAttributesOld? PosixAttributesOld; + public PosixDeviceNumber? PosixDeviceNumber; public DecodedDirectoryEntry ResourceFork; public uint Size; public DateTime? Timestamp;