diff --git a/DiscImageChef.Filesystems/FATX/File.cs b/DiscImageChef.Filesystems/FATX/File.cs index 64d337dcf..a3c473647 100644 --- a/DiscImageChef.Filesystems/FATX/File.cs +++ b/DiscImageChef.Filesystems/FATX/File.cs @@ -145,20 +145,28 @@ namespace DiscImageChef.Filesystems.FATX stat = new FileEntryInfo { - Attributes = new FileAttributes(), - Blocks = entry.length / bytesPerCluster, - BlockSize = bytesPerCluster, - DeviceNo = 0, - GID = 0, - Length = entry.length, - Inode = entry.firstCluster, - Links = 1, - Mode = (uint)(entry.attributes.HasFlag(Attributes.Directory) ? 0x16D : 0x124), - UID = 0, - CreationTime = DateHandlers.DosToDateTime(entry.creationDate, entry.creationTime).AddYears(20), - AccessTime = DateHandlers.DosToDateTime(entry.lastAccessDate, entry.lastAccessTime).AddYears(20), - LastWriteTime = DateHandlers.DosToDateTime(entry.lastWrittenDate, entry.lastWrittenTime) - .AddYears(20) + Attributes = new FileAttributes(), + Blocks = entry.length / bytesPerCluster, + BlockSize = bytesPerCluster, + DeviceNo = 0, + GID = 0, + Length = entry.length, + Inode = entry.firstCluster, + Links = 1, + Mode = (uint)(entry.attributes.HasFlag(Attributes.Directory) ? 0x16D : 0x124), + UID = 0, + CreationTime = + littleEndian + ? DateHandlers.DosToDateTime(entry.creationDate, entry.creationTime).AddYears(20) + : DateHandlers.DosToDateTime(entry.creationTime, entry.creationDate), + AccessTime = + littleEndian + ? DateHandlers.DosToDateTime(entry.lastAccessDate, entry.lastAccessTime).AddYears(20) + : DateHandlers.DosToDateTime(entry.lastAccessTime, entry.lastAccessDate), + LastWriteTime = littleEndian + ? DateHandlers + .DosToDateTime(entry.lastWrittenDate, entry.lastWrittenTime).AddYears(20) + : DateHandlers.DosToDateTime(entry.lastWrittenTime, entry.lastWrittenDate) }; if(entry.length % bytesPerCluster > 0) stat.Blocks++; diff --git a/DiscImageChef.Tests/Filesystems/FATX.cs b/DiscImageChef.Tests/Filesystems/FATX.cs index 96063062c..8ba2d4f0f 100644 --- a/DiscImageChef.Tests/Filesystems/FATX.cs +++ b/DiscImageChef.Tests/Filesystems/FATX.cs @@ -359,48 +359,47 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(Errno.InvalidArgument, error); } - // TODO: The dates look incorrect [Test] public void Stat() { Errno error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000", out FileEntryInfo stat); - Assert.AreEqual(Errno.NoError, error); - Assert.AreEqual(new DateTime(2055, 1, 23, 8, 25, 50, DateTimeKind.Utc), stat.AccessTimeUtc); - Assert.AreEqual(FileAttributes.Directory, stat.Attributes); - Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc); - Assert.AreEqual(1, stat.Blocks); - Assert.AreEqual(16384, stat.BlockSize); - Assert.AreEqual(new DateTime(2055, 1, 23, 8, 25, 50, DateTimeKind.Utc), stat.CreationTimeUtc); - Assert.AreEqual(0, stat.DeviceNo); - Assert.AreEqual(0, stat.GID); - Assert.AreEqual(12, stat.Inode); - Assert.AreEqual(new DateTime(2055, 1, 23, 8, 25, 50, DateTimeKind.Utc), stat.LastWriteTimeUtc); - Assert.AreEqual(16384, stat.Length); - Assert.AreEqual(1, stat.Links); - Assert.AreEqual(365, stat.Mode); - Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc); - Assert.AreEqual(0, stat.UID); + Assert.AreEqual(Errno.NoError, error); + Assert.AreEqual(new DateTime(2013, 9, 25, 12, 49, 46, DateTimeKind.Utc), stat.AccessTimeUtc); + Assert.AreEqual(FileAttributes.Directory, stat.Attributes); + Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc); + Assert.AreEqual(1, stat.Blocks); + Assert.AreEqual(16384, stat.BlockSize); + Assert.AreEqual(new DateTime(2013, 9, 25, 12, 49, 46, DateTimeKind.Utc), stat.CreationTimeUtc); + Assert.AreEqual(0, stat.DeviceNo); + Assert.AreEqual(0, stat.GID); + Assert.AreEqual(12, stat.Inode); + Assert.AreEqual(new DateTime(2013, 9, 25, 12, 49, 46, DateTimeKind.Utc), stat.LastWriteTimeUtc); + Assert.AreEqual(16384, stat.Length); + Assert.AreEqual(1, stat.Links); + Assert.AreEqual(365, stat.Mode); + Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc); + Assert.AreEqual(0, stat.UID); error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000/ContentCache", out stat); Assert.AreEqual(Errno.NoSuchFile, error); error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000/ContentCache.pkg", out stat); - Assert.AreEqual(Errno.NoError, error); - Assert.AreEqual(new DateTime(2082, 2, 24, 9, 11, 36, DateTimeKind.Utc), stat.AccessTimeUtc); - Assert.AreEqual(FileAttributes.None, stat.Attributes); - Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc); - Assert.AreEqual(6, stat.Blocks); - Assert.AreEqual(16384, stat.BlockSize); - Assert.AreEqual(new DateTime(2082, 2, 24, 9, 11, 36, DateTimeKind.Utc), stat.CreationTimeUtc); - Assert.AreEqual(0, stat.DeviceNo); - Assert.AreEqual(0, stat.GID); - Assert.AreEqual(18, stat.Inode); - Assert.AreEqual(new DateTime(2082, 2, 24, 9, 11, 36, DateTimeKind.Utc), stat.LastWriteTimeUtc); - Assert.AreEqual(86016, stat.Length); - Assert.AreEqual(1, stat.Links); - Assert.AreEqual(292, stat.Mode); - Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc); - Assert.AreEqual(0, stat.UID); + Assert.AreEqual(Errno.NoError, error); + Assert.AreEqual(new DateTime(2016, 11, 18, 20, 34, 48, DateTimeKind.Utc), stat.AccessTimeUtc); + Assert.AreEqual(FileAttributes.None, stat.Attributes); + Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc); + Assert.AreEqual(6, stat.Blocks); + Assert.AreEqual(16384, stat.BlockSize); + Assert.AreEqual(new DateTime(2016, 11, 18, 20, 34, 48, DateTimeKind.Utc), stat.CreationTimeUtc); + Assert.AreEqual(0, stat.DeviceNo); + Assert.AreEqual(0, stat.GID); + Assert.AreEqual(18, stat.Inode); + Assert.AreEqual(new DateTime(2016, 11, 18, 20, 34, 48, DateTimeKind.Utc), stat.LastWriteTimeUtc); + Assert.AreEqual(86016, stat.Length); + Assert.AreEqual(1, stat.Links); + Assert.AreEqual(292, stat.Mode); + Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc); + Assert.AreEqual(0, stat.UID); } [Test]