diff --git a/DiscImageChef.Filesystems/FAT/Dir.cs b/DiscImageChef.Filesystems/FAT/Dir.cs index 970f2a977..70b2ca8e0 100644 --- a/DiscImageChef.Filesystems/FAT/Dir.cs +++ b/DiscImageChef.Filesystems/FAT/Dir.cs @@ -103,6 +103,8 @@ namespace DiscImageChef.Filesystems.FAT currentPath = p == 0 ? pieces[0] : $"{currentPath}/{pieces[p]}"; uint currentCluster = entry.Value.start_cluster; + if(fat32) currentCluster += (uint)(entry.Value.ea_handle << 16); + if(directoryCache.TryGetValue(currentPath, out currentDirectory)) continue; uint[] clusters = GetClusters(currentCluster); diff --git a/DiscImageChef.Filesystems/FAT/File.cs b/DiscImageChef.Filesystems/FAT/File.cs index e2a530c79..a99009c7f 100644 --- a/DiscImageChef.Filesystems/FAT/File.cs +++ b/DiscImageChef.Filesystems/FAT/File.cs @@ -130,7 +130,7 @@ namespace DiscImageChef.Filesystems.FAT Blocks = entry.size / bytesPerCluster, BlockSize = bytesPerCluster, Length = entry.size, - Inode = entry.start_cluster, + Inode = (ulong)(fat32 ? (entry.ea_handle << 16) + entry.start_cluster : entry.start_cluster), Links = 1, CreationTime = DateHandlers.DosToDateTime(entry.cdate, entry.ctime), LastWriteTime = DateHandlers.DosToDateTime(entry.mdate, entry.mtime) @@ -143,7 +143,7 @@ namespace DiscImageChef.Filesystems.FAT if(entry.attributes.HasFlag(FatAttributes.Subdirectory)) { stat.Attributes |= FileAttributes.Directory; - stat.Blocks = GetClusters(entry.start_cluster).Length; + stat.Blocks = fat32 ? GetClusters((uint)((entry.ea_handle << 16) + entry.start_cluster)).Length : GetClusters(entry.start_cluster).Length; stat.Length = stat.Blocks * stat.BlockSize; }