mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
* DiscImageChef.Filesystems/LisaFS/Dir.cs:
* DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: Added hard disk support. Use tag decoder. * DiscImageChef.Filesystems/LisaFS/Extent.cs: Use tag decoder. * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: Added hard disk support. * DiscImageChef.Filesystems/LisaFS/Structs.cs: Added missing tag fields. * DiscImageChef.Filesystems/LisaFS/Xattr.cs: Added tag decoder.
This commit is contained in:
@@ -97,17 +97,16 @@ namespace DiscImageChef.Filesystems.LisaFS
|
||||
|
||||
for(ulong i = 0; i < device.GetSectors(); i++)
|
||||
{
|
||||
byte[] tag = device.ReadSectorTag(i, SectorTagType.AppleSectorTag);
|
||||
UInt16 id = BigEndianBitConverter.ToUInt16(tag, 0x04);
|
||||
UInt16 pos = BigEndianBitConverter.ToUInt16(tag, 0x06);
|
||||
Tag catTag;
|
||||
DecodeTag(device.ReadSectorTag(i, SectorTagType.AppleSectorTag), out catTag);
|
||||
|
||||
if(id == fileId && pos == 0)
|
||||
if(catTag.fileID == fileId && catTag.relBlock == 0)
|
||||
{
|
||||
firstCatalogBlock = device.ReadSectors(i, 4);
|
||||
break;
|
||||
}
|
||||
|
||||
if(id == -fileId)
|
||||
if(catTag.fileID == -fileId)
|
||||
return Errno.NotDirectory;
|
||||
}
|
||||
|
||||
@@ -119,13 +118,13 @@ namespace DiscImageChef.Filesystems.LisaFS
|
||||
|
||||
while(prevCatalogPointer != 0xFFFFFFFF)
|
||||
{
|
||||
byte[] tag = device.ReadSectorTag(prevCatalogPointer + mddf.mddf_block, SectorTagType.AppleSectorTag);
|
||||
UInt16 id = BigEndianBitConverter.ToUInt16(tag, 0x04);
|
||||
Tag prevTag;
|
||||
DecodeTag(device.ReadSectorTag(prevCatalogPointer + mddf.mddf_block + volumePrefix, SectorTagType.AppleSectorTag), out prevTag);
|
||||
|
||||
if(id != fileId)
|
||||
if(prevTag.fileID != fileId)
|
||||
return Errno.InvalidArgument;
|
||||
|
||||
firstCatalogBlock = device.ReadSectors(prevCatalogPointer + mddf.mddf_block, 4);
|
||||
firstCatalogBlock = device.ReadSectors(prevCatalogPointer + mddf.mddf_block + volumePrefix, 4);
|
||||
prevCatalogPointer = BigEndianBitConverter.ToUInt32(firstCatalogBlock, 0x7F6);
|
||||
}
|
||||
|
||||
@@ -137,13 +136,13 @@ namespace DiscImageChef.Filesystems.LisaFS
|
||||
|
||||
while(nextCatalogPointer != 0xFFFFFFFF)
|
||||
{
|
||||
byte[] tag = device.ReadSectorTag(nextCatalogPointer + mddf.mddf_block, SectorTagType.AppleSectorTag);
|
||||
UInt16 id = BigEndianBitConverter.ToUInt16(tag, 0x04);
|
||||
Tag nextTag;
|
||||
DecodeTag(device.ReadSectorTag(nextCatalogPointer + mddf.mddf_block + volumePrefix, SectorTagType.AppleSectorTag), out nextTag);
|
||||
|
||||
if(id != fileId)
|
||||
if(nextTag.fileID != fileId)
|
||||
return Errno.InvalidArgument;
|
||||
|
||||
byte[] nextCatalogBlock = device.ReadSectors(nextCatalogPointer + mddf.mddf_block, 4);
|
||||
byte[] nextCatalogBlock = device.ReadSectors(nextCatalogPointer + mddf.mddf_block + volumePrefix, 4);
|
||||
nextCatalogPointer = BigEndianBitConverter.ToUInt32(nextCatalogBlock, 0x7FA);
|
||||
catalogBlocks.Add(nextCatalogBlock);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user