Removal fully functioning

This commit is contained in:
TriantaTV 2022-12-06 23:49:15 -06:00
parent f80ff37587
commit 6a7068d22a
2 changed files with 25 additions and 4 deletions

View File

@ -87,7 +87,6 @@ void _ListFS_(FileSystem* fs, ino_t inodeNumber, short unsigned numtabs)
} }
// Remove a file from the filesystem // Remove a file from the filesystem
// TODO: Fix function so that it adds directories, then the file after
void RemoveFileFromFS(FileSystem* fs, char* fname) void RemoveFileFromFS(FileSystem* fs, char* fname)
{ {
_RemoveFileFromFS_(fs, 0, fname); _RemoveFileFromFS_(fs, 0, fname);
@ -103,7 +102,12 @@ int _RemoveFileFromFS_(FileSystem* fs, ino_t inodeNumber, char* fname)
if (!(fs->inodes[inodeNumber].blocks[i].isValid)) if (!(fs->inodes[inodeNumber].blocks[i].isValid))
continue; continue;
if (fs->inodes[inodeNumber].blocks[i].isDirectory) if (fs->inodes[inodeNumber].blocks[i].isDirectory)
{
emptyDir =_RemoveFileFromFS_(fs, fs->inodes[inodeNumber].blocks[i].inode, fname + FindNextDirectory(fname) + 1); emptyDir =_RemoveFileFromFS_(fs, fs->inodes[inodeNumber].blocks[i].inode, fname + FindNextDirectory(fname) + 1);
if (emptyDir)
fs->inodes[inodeNumber].blocks[i].isValid = 0;
continue;
}
if (strcmp(fs->inodes[inodeNumber].blocks[i].name, fname) == 0) if (strcmp(fs->inodes[inodeNumber].blocks[i].name, fname) == 0)
fs->inodes[inodeNumber].blocks[i].isValid = 0; fs->inodes[inodeNumber].blocks[i].isValid = 0;
else else
@ -111,6 +115,7 @@ int _RemoveFileFromFS_(FileSystem* fs, ino_t inodeNumber, char* fname)
} }
if (!emptyDir) if (!emptyDir)
return 0; return 0;
fs->inodes[inodeNumber].isValid = 0;
return 1; return 1;
} }
@ -118,7 +123,7 @@ int _RemoveFileFromFS_(FileSystem* fs, ino_t inodeNumber, char* fname)
// TODO: Fix function so that it adds directories, then the file after // TODO: Fix function so that it adds directories, then the file after
void ExtractFileFromFS(FileSystem* fs, char* fname) void ExtractFileFromFS(FileSystem* fs, char* fname)
{ {
} }

View File

@ -106,12 +106,24 @@ void Test_FileSystem_Should_ListContents(void)
TEST_ASSERT_EQUAL_CHAR_ARRAY("test1.txt", fakefs->inodes[2].blocks[0].name, 9); TEST_ASSERT_EQUAL_CHAR_ARRAY("test1.txt", fakefs->inodes[2].blocks[0].name, 9);
TEST_MESSAGE("This only runs the list operation. Check info yourself."); TEST_MESSAGE("This only runs the list operation. Check info yourself.");
} }
void Test_FileSystem_Should_RemoveFile(void) void Test_FileSystem_Should_RemoveFirstFile(void)
{ {
RunFuse(fakefs, &dummyFuse); RunFuse(fakefs, &dummyFuse);
TEST_ASSERT_EQUAL(0, fakefs->inodes[2].blocks[0].isValid); TEST_ASSERT_EQUAL(0, fakefs->inodes[2].blocks[0].isValid);
} }
void Test_FileSystem_Should_RemoveSecondFile(void)
{
RunFuse(fakefs, &dummyFuse);
TEST_ASSERT_EQUAL(0, fakefs->inodes[2].blocks[1].isValid);
}
void Test_FileSystem_Should_RemoveThirdFile(void)
{
RunFuse(fakefs, &dummyFuse);
TEST_ASSERT_EQUAL(0, fakefs->inodes[2].blocks[2].isValid);
}
void Test_FileSystem_Should_RemoveEmptyDirectories(void) void Test_FileSystem_Should_RemoveEmptyDirectories(void)
{ {
TEST_ASSERT_EQUAL(0, fakefs->inodes[2].isValid); TEST_ASSERT_EQUAL(0, fakefs->inodes[2].isValid);
@ -141,8 +153,12 @@ int main(void)
argv[1] = "-l"; argv[1] = "-l";
RUN_TEST(Test_FileSystem_Should_ListContents); RUN_TEST(Test_FileSystem_Should_ListContents);
argv[1] = "-r"; argv[1] = "-r";
argv[2] = "test/files/test1.txt";
RUN_TEST(Test_FileSystem_Should_RemoveFirstFile);
argv[2] = "test/files/test2.txt"; argv[2] = "test/files/test2.txt";
RUN_TEST(Test_FileSystem_Should_RemoveFile); RUN_TEST(Test_FileSystem_Should_RemoveSecondFile);
argv[2] = "test/files/test3.txt";
RUN_TEST(Test_FileSystem_Should_RemoveThirdFile);
RUN_TEST(Test_FileSystem_Should_RemoveEmptyDirectories); RUN_TEST(Test_FileSystem_Should_RemoveEmptyDirectories);
return UNITY_END(); return UNITY_END();
} }