From 5bfa0a79e4da336e2ef819c3252f1f2f6e0397cd Mon Sep 17 00:00:00 2001 From: TriantaTV Date: Mon, 5 Dec 2022 21:21:13 -0600 Subject: [PATCH] Listing fully works, attempting to fix name issue with add --- src/fsactions.c | 37 +++++++++++++++++-------------------- test/test.c | 3 +++ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/fsactions.c b/src/fsactions.c index 1c9fe68..9bdd448 100644 --- a/src/fsactions.c +++ b/src/fsactions.c @@ -44,24 +44,23 @@ void AddFileToFS(FileSystem* fs, char* fname) // Second: get a number for the next free direct block // Third: get a free inode number // Fourth: set info for direct block - tempname = strndup(fname, splitLocation - 1); - if (IsDirectorySetup(fs->inodes[currentInode], ¤tInode, tempname)) - continue; - for (int i = 0; i < 4; i++) - tempfbl[i] = (currentInode*4) + i; - newDirectBlock = GetFreeBlockNumber(tempfbl, 4); - newInode = GetFreeInodeNumber(fs->inodes); - strcpy(fs->inodes[currentInode].blocks[newDirectBlock].name, tempname); - free(tempname); - fs->inodes[currentInode].blocks[newDirectBlock].isValid = 1; - fs->inodes[currentInode].blocks[newDirectBlock].isDirectory = 1; - fs->inodes[currentInode].blocks[newDirectBlock].inode = newInode; - currentInode = newInode; - fs->inodes[currentInode].isValid = 1; - // SetDirectBlock(fs->inodes[currentInode].blocks[newDirectBlock]); - // SetNewInode(); - // fs->inodes[currentInode].blocks; - // inodeNumber = GetFreeInodeNumber(fs->inodes); + tempname = strndup(fname, splitLocation); + if (!IsDirectorySetup(fs->inodes[currentInode], ¤tInode, tempname)) + { + for (int i = 0; i < 4; i++) + tempfbl[i] = (currentInode*4) + i; + newDirectBlock = GetFreeBlockNumber(tempfbl, 4); + newInode = GetFreeInodeNumber(fs->inodes); + printf("Name held: |%s|\n", tempname); + printf("Block: |%i|\n", newDirectBlock); + strcpy(fs->inodes[currentInode].blocks[newDirectBlock].name, tempname); + free(tempname); + fs->inodes[currentInode].blocks[newDirectBlock].isValid = 1; + fs->inodes[currentInode].blocks[newDirectBlock].isDirectory = 1; + fs->inodes[currentInode].blocks[newDirectBlock].inode = newInode; + currentInode = newInode; + fs->inodes[currentInode].isValid = 1; + } fname = fname + splitLocation + 1; splitLocation = FindNextDirectory(fname); } @@ -71,12 +70,10 @@ void AddFileToFS(FileSystem* fs, char* fname) fs->inodes[currentInode].blocks[newDirectBlock].isValid = 1; fs->inodes[currentInode].blocks[newDirectBlock].size = tempstat.st_size; strcpy(fs->inodes[currentInode].blocks[newDirectBlock].name, fname); - // SetFileInDirectory(); return; } // List path names of all used inodes -// TODO: Fix implementation to print starting at Inode 0 void ListFS(FileSystem* fs) { Inode* fsRoot = &(fs->inodes[0]); diff --git a/test/test.c b/test/test.c index d54c809..549bc63 100644 --- a/test/test.c +++ b/test/test.c @@ -64,6 +64,9 @@ void Test_FileSystem_Should_AddFile(void) argv[1] = "-a"; GetArguments(argc, argv, &dummyFuse); RunFuse(fakefs, &dummyFuse); + argv[2] = "test/files/test2.txt"; + GetArguments(argc, argv, &dummyFuse); + RunFuse(fakefs, &dummyFuse); TEST_ASSERT_EQUAL(1, fakefs->inodes[1].isValid); TEST_ASSERT_EQUAL_CHAR_ARRAY("test1.txt", fakefs->inodes[2].blocks[0].name, 9); }