mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 04:18:43 +00:00
Fix deleting of directories with small offset (most commonly subdirectories)
This commit is contained in:
parent
ec840b04a7
commit
e1bda335ab
2 changed files with 28 additions and 18 deletions
|
|
@ -12,7 +12,6 @@ namespace Cosmos.Kernel.Tests.Fat.System.IO
|
|||
/// </summary>
|
||||
public static void Execute(Debugger mDebugger)
|
||||
{
|
||||
|
||||
mDebugger.Send("START TEST: Delete a directory:");
|
||||
Directory.CreateDirectory(@"0:\TestDir1");
|
||||
Assert.IsTrue(Directory.Exists(@"0:\TestDir1"), "TestDir1 wasn't created!");
|
||||
|
|
@ -97,22 +96,20 @@ namespace Cosmos.Kernel.Tests.Fat.System.IO
|
|||
|
||||
mDebugger.Send("");
|
||||
|
||||
#if false
|
||||
mDebugger.Send("START TEST: Delete a file with Directory.Delete:");
|
||||
File.Create(@"0:\file1.txt");
|
||||
mDebugger.Send("START TEST: Creating a subdirecty with Directory.CreateDirectory:");
|
||||
|
||||
try
|
||||
{
|
||||
Directory.Delete(@"0:\file1.txt");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Assert.IsTrue(File.Exists(@"0:\file1.txt"), "The file was deleted by Directory.Delete.");
|
||||
}
|
||||
Directory.CreateDirectory(@"0:\TestDir1");
|
||||
Assert.IsTrue(Directory.Exists(@"0:\TestDir1"), "TestDir1 was created!");
|
||||
Directory.CreateDirectory(@"0:\TestDir1\test");
|
||||
Assert.IsTrue(Directory.Exists(@"0:\TestDir1\test"), "test subdirectory was created!");
|
||||
Directory.Delete(@"0:\TestDir1\test");
|
||||
Assert.IsFalse(Directory.Exists(@"0:\TestDir1\test"), "test subdirectory was deleted!");
|
||||
Directory.Delete(@"0:\TestDir1");
|
||||
Assert.IsFalse(Directory.Exists(@"0:\TestDir1"), "TestDir1 was deleted!");
|
||||
|
||||
mDebugger.Send("END TEST");
|
||||
mDebugger.Send("");
|
||||
#endif
|
||||
|
||||
|
||||
mDebugger.Send("START TEST: Create a directory with a Long Filename:");
|
||||
Directory.CreateDirectory(@"0:\TestDir1");
|
||||
|
|
|
|||
|
|
@ -512,6 +512,8 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
/// <exception cref="NotSupportedException">Thrown when FAT type is unknown.</exception>
|
||||
public void DeleteDirectoryEntry()
|
||||
{
|
||||
Global.mFileSystemDebugger.SendInternal("-- FatDirectoryEntry.DeleteDirectoryEntry --");
|
||||
|
||||
if (mEntryType == DirectoryEntryTypeEnum.Unknown)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
|
@ -524,12 +526,17 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
|
||||
var xData = ((FatDirectoryEntry)mParent).GetDirectoryEntryData();
|
||||
|
||||
var xEntryOffset = mEntryHeaderDataOffset - 32;
|
||||
|
||||
while (xData[xEntryOffset + 11] == FatDirectoryEntryAttributeConsts.LongName)
|
||||
if(mEntryHeaderDataOffset > 32)
|
||||
{
|
||||
xData[xEntryOffset] = FatDirectoryEntryAttributeConsts.UnusedOrDeletedEntry;
|
||||
xEntryOffset -= 32;
|
||||
var xEntryOffset = mEntryHeaderDataOffset - 32;
|
||||
|
||||
Global.mFileSystemDebugger.SendInternal("xEntryOffset: " + xEntryOffset);
|
||||
|
||||
while (xData[xEntryOffset + 11] == FatDirectoryEntryAttributeConsts.LongName)
|
||||
{
|
||||
xData[xEntryOffset] = FatDirectoryEntryAttributeConsts.UnusedOrDeletedEntry;
|
||||
xEntryOffset -= 32;
|
||||
}
|
||||
}
|
||||
|
||||
((FatDirectoryEntry)mParent).SetDirectoryEntryData(xData);
|
||||
|
|
@ -988,6 +995,7 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
internal void SetDirectoryEntryMetadataValue(FatDirectoryEntryMetadata aEntryMetadata, byte aValue)
|
||||
{
|
||||
Global.mFileSystemDebugger.SendInternal(" -- FatDirectoryEntry.SetDirectoryEntryMetadataValue(uint) --");
|
||||
Global.mFileSystemDebugger.SendInternal("aEntryMetadata = " + aEntryMetadata.DataOffset);
|
||||
Global.mFileSystemDebugger.SendInternal("aValue = " + aValue);
|
||||
|
||||
if (IsRootDirectory())
|
||||
|
|
@ -1043,6 +1051,7 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
internal void SetDirectoryEntryMetadataValue(FatDirectoryEntryMetadata aEntryMetadata, ushort aValue)
|
||||
{
|
||||
Global.mFileSystemDebugger.SendInternal(" -- FatDirectoryEntry.SetDirectoryEntryMetadataValue(uint) --");
|
||||
Global.mFileSystemDebugger.SendInternal("aEntryMetadata = " + aEntryMetadata.DataOffset);
|
||||
Global.mFileSystemDebugger.SendInternal("aValue = " + aValue);
|
||||
|
||||
if (IsRootDirectory())
|
||||
|
|
@ -1054,6 +1063,7 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
|
||||
if (xData.Length > 0)
|
||||
{
|
||||
Global.mFileSystemDebugger.SendInternal("mEntryHeaderDataOffset = " + mEntryHeaderDataOffset);
|
||||
var xValue = new byte[aEntryMetadata.DataLength];
|
||||
xValue.SetUInt16(0, aValue);
|
||||
uint offset = mEntryHeaderDataOffset + aEntryMetadata.DataOffset;
|
||||
|
|
@ -1100,6 +1110,7 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
internal void SetDirectoryEntryMetadataValue(FatDirectoryEntryMetadata aEntryMetadata, uint aValue)
|
||||
{
|
||||
Global.mFileSystemDebugger.SendInternal(" -- FatDirectoryEntry.SetDirectoryEntryMetadataValue(uint) --");
|
||||
Global.mFileSystemDebugger.SendInternal("aEntryMetadata = " + aEntryMetadata.DataOffset);
|
||||
Global.mFileSystemDebugger.SendInternal("aValue = " + aValue);
|
||||
|
||||
if (IsRootDirectory())
|
||||
|
|
@ -1157,6 +1168,7 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
internal void SetDirectoryEntryMetadataValue(FatDirectoryEntryMetadata aEntryMetadata, long aValue)
|
||||
{
|
||||
Global.mFileSystemDebugger.SendInternal("-- FatDirectoryEntry.SetDirectoryEntryMetadataValue(long) --");
|
||||
Global.mFileSystemDebugger.SendInternal("aEntryMetadata = " + aEntryMetadata.DataOffset);
|
||||
Global.mFileSystemDebugger.SendInternal("aValue =");
|
||||
Global.mFileSystemDebugger.SendInternal(aValue);
|
||||
|
||||
|
|
@ -1218,6 +1230,7 @@ namespace Cosmos.System.FileSystem.FAT.Listing
|
|||
internal void SetDirectoryEntryMetadataValue(FatDirectoryEntryMetadata aEntryMetadata, string aValue)
|
||||
{
|
||||
Global.mFileSystemDebugger.SendInternal("-- FatDirectoryEntry.SetDirectoryEntryMetadataValue(string) --");
|
||||
Global.mFileSystemDebugger.SendInternal("aEntryMetadata = " + aEntryMetadata.DataOffset);
|
||||
Global.mFileSystemDebugger.SendInternal($"aValue = {aValue}");
|
||||
|
||||
if (IsRootDirectory())
|
||||
|
|
|
|||
Loading…
Reference in a new issue