mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Fix Xbox 360 FAT date conversion.
This commit is contained in:
@@ -145,20 +145,28 @@ namespace DiscImageChef.Filesystems.FATX
|
|||||||
|
|
||||||
stat = new FileEntryInfo
|
stat = new FileEntryInfo
|
||||||
{
|
{
|
||||||
Attributes = new FileAttributes(),
|
Attributes = new FileAttributes(),
|
||||||
Blocks = entry.length / bytesPerCluster,
|
Blocks = entry.length / bytesPerCluster,
|
||||||
BlockSize = bytesPerCluster,
|
BlockSize = bytesPerCluster,
|
||||||
DeviceNo = 0,
|
DeviceNo = 0,
|
||||||
GID = 0,
|
GID = 0,
|
||||||
Length = entry.length,
|
Length = entry.length,
|
||||||
Inode = entry.firstCluster,
|
Inode = entry.firstCluster,
|
||||||
Links = 1,
|
Links = 1,
|
||||||
Mode = (uint)(entry.attributes.HasFlag(Attributes.Directory) ? 0x16D : 0x124),
|
Mode = (uint)(entry.attributes.HasFlag(Attributes.Directory) ? 0x16D : 0x124),
|
||||||
UID = 0,
|
UID = 0,
|
||||||
CreationTime = DateHandlers.DosToDateTime(entry.creationDate, entry.creationTime).AddYears(20),
|
CreationTime =
|
||||||
AccessTime = DateHandlers.DosToDateTime(entry.lastAccessDate, entry.lastAccessTime).AddYears(20),
|
littleEndian
|
||||||
LastWriteTime = DateHandlers.DosToDateTime(entry.lastWrittenDate, entry.lastWrittenTime)
|
? DateHandlers.DosToDateTime(entry.creationDate, entry.creationTime).AddYears(20)
|
||||||
.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++;
|
if(entry.length % bytesPerCluster > 0) stat.Blocks++;
|
||||||
|
|||||||
@@ -359,48 +359,47 @@ namespace DiscImageChef.Tests.Filesystems
|
|||||||
Assert.AreEqual(Errno.InvalidArgument, error);
|
Assert.AreEqual(Errno.InvalidArgument, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: The dates look incorrect
|
|
||||||
[Test]
|
[Test]
|
||||||
public void Stat()
|
public void Stat()
|
||||||
{
|
{
|
||||||
Errno error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000", out FileEntryInfo stat);
|
Errno error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000", out FileEntryInfo stat);
|
||||||
Assert.AreEqual(Errno.NoError, error);
|
Assert.AreEqual(Errno.NoError, error);
|
||||||
Assert.AreEqual(new DateTime(2055, 1, 23, 8, 25, 50, DateTimeKind.Utc), stat.AccessTimeUtc);
|
Assert.AreEqual(new DateTime(2013, 9, 25, 12, 49, 46, DateTimeKind.Utc), stat.AccessTimeUtc);
|
||||||
Assert.AreEqual(FileAttributes.Directory, stat.Attributes);
|
Assert.AreEqual(FileAttributes.Directory, stat.Attributes);
|
||||||
Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc);
|
Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc);
|
||||||
Assert.AreEqual(1, stat.Blocks);
|
Assert.AreEqual(1, stat.Blocks);
|
||||||
Assert.AreEqual(16384, stat.BlockSize);
|
Assert.AreEqual(16384, stat.BlockSize);
|
||||||
Assert.AreEqual(new DateTime(2055, 1, 23, 8, 25, 50, DateTimeKind.Utc), stat.CreationTimeUtc);
|
Assert.AreEqual(new DateTime(2013, 9, 25, 12, 49, 46, DateTimeKind.Utc), stat.CreationTimeUtc);
|
||||||
Assert.AreEqual(0, stat.DeviceNo);
|
Assert.AreEqual(0, stat.DeviceNo);
|
||||||
Assert.AreEqual(0, stat.GID);
|
Assert.AreEqual(0, stat.GID);
|
||||||
Assert.AreEqual(12, stat.Inode);
|
Assert.AreEqual(12, stat.Inode);
|
||||||
Assert.AreEqual(new DateTime(2055, 1, 23, 8, 25, 50, DateTimeKind.Utc), stat.LastWriteTimeUtc);
|
Assert.AreEqual(new DateTime(2013, 9, 25, 12, 49, 46, DateTimeKind.Utc), stat.LastWriteTimeUtc);
|
||||||
Assert.AreEqual(16384, stat.Length);
|
Assert.AreEqual(16384, stat.Length);
|
||||||
Assert.AreEqual(1, stat.Links);
|
Assert.AreEqual(1, stat.Links);
|
||||||
Assert.AreEqual(365, stat.Mode);
|
Assert.AreEqual(365, stat.Mode);
|
||||||
Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc);
|
Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc);
|
||||||
Assert.AreEqual(0, stat.UID);
|
Assert.AreEqual(0, stat.UID);
|
||||||
|
|
||||||
error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000/ContentCache", out stat);
|
error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000/ContentCache", out stat);
|
||||||
Assert.AreEqual(Errno.NoSuchFile, error);
|
Assert.AreEqual(Errno.NoSuchFile, error);
|
||||||
|
|
||||||
error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000/ContentCache.pkg", out stat);
|
error = fs.Stat("Content/0000000000000000/FFFE07DF/00040000/ContentCache.pkg", out stat);
|
||||||
Assert.AreEqual(Errno.NoError, error);
|
Assert.AreEqual(Errno.NoError, error);
|
||||||
Assert.AreEqual(new DateTime(2082, 2, 24, 9, 11, 36, DateTimeKind.Utc), stat.AccessTimeUtc);
|
Assert.AreEqual(new DateTime(2016, 11, 18, 20, 34, 48, DateTimeKind.Utc), stat.AccessTimeUtc);
|
||||||
Assert.AreEqual(FileAttributes.None, stat.Attributes);
|
Assert.AreEqual(FileAttributes.None, stat.Attributes);
|
||||||
Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc);
|
Assert.AreEqual(DateTime.MinValue, stat.BackupTimeUtc);
|
||||||
Assert.AreEqual(6, stat.Blocks);
|
Assert.AreEqual(6, stat.Blocks);
|
||||||
Assert.AreEqual(16384, stat.BlockSize);
|
Assert.AreEqual(16384, stat.BlockSize);
|
||||||
Assert.AreEqual(new DateTime(2082, 2, 24, 9, 11, 36, DateTimeKind.Utc), stat.CreationTimeUtc);
|
Assert.AreEqual(new DateTime(2016, 11, 18, 20, 34, 48, DateTimeKind.Utc), stat.CreationTimeUtc);
|
||||||
Assert.AreEqual(0, stat.DeviceNo);
|
Assert.AreEqual(0, stat.DeviceNo);
|
||||||
Assert.AreEqual(0, stat.GID);
|
Assert.AreEqual(0, stat.GID);
|
||||||
Assert.AreEqual(18, stat.Inode);
|
Assert.AreEqual(18, stat.Inode);
|
||||||
Assert.AreEqual(new DateTime(2082, 2, 24, 9, 11, 36, DateTimeKind.Utc), stat.LastWriteTimeUtc);
|
Assert.AreEqual(new DateTime(2016, 11, 18, 20, 34, 48, DateTimeKind.Utc), stat.LastWriteTimeUtc);
|
||||||
Assert.AreEqual(86016, stat.Length);
|
Assert.AreEqual(86016, stat.Length);
|
||||||
Assert.AreEqual(1, stat.Links);
|
Assert.AreEqual(1, stat.Links);
|
||||||
Assert.AreEqual(292, stat.Mode);
|
Assert.AreEqual(292, stat.Mode);
|
||||||
Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc);
|
Assert.AreEqual(DateTime.MinValue, stat.StatusChangeTimeUtc);
|
||||||
Assert.AreEqual(0, stat.UID);
|
Assert.AreEqual(0, stat.UID);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
|||||||
Reference in New Issue
Block a user