Issue still unresolved, submitting

This commit is contained in:
TriantaTV 2022-12-07 02:38:45 -06:00
parent 4444defd27
commit a96a215147
3 changed files with 22 additions and 14 deletions

View File

@ -12,6 +12,7 @@ void ExtractFileFromFS(FileSystem* fs, char* fname);
ino_t GetFreeInodeNumber(Inode inodes[]); ino_t GetFreeInodeNumber(Inode inodes[]);
ino_t GetFreeBlockNumber(int fbl[], unsigned short size); ino_t GetFreeBlockNumber(int fbl[], unsigned short size);
void UpdateFreeBlockList(int* number, int position);
int FindEmptyBitPosition(int number); int FindEmptyBitPosition(int number);
int FindNextDirectory(char* fname); int FindNextDirectory(char* fname);
int FindDirectory(Inode inode, char* directoryName); int FindDirectory(Inode inode, char* directoryName);

View File

@ -37,7 +37,7 @@ void AddFileToFS(FileSystem* fs, char* fname)
{ {
tempname = strndup(fname, splitLocation); tempname = strndup(fname, splitLocation);
newInode = FindDirectory(fs->inodes[currentInode], tempname); newInode = FindDirectory(fs->inodes[currentInode], tempname);
if (newInode == -1) if ((newInode == -1) || (newInode == currentInode))
{ {
newDirectBlock = GetFreeBlockNumber(fs->fbl.freeList + (currentInode*4), 4); newDirectBlock = GetFreeBlockNumber(fs->fbl.freeList + (currentInode*4), 4);
newInode = GetFreeInodeNumber(fs->inodes); newInode = GetFreeInodeNumber(fs->inodes);
@ -71,6 +71,8 @@ void ListFS(FileSystem* fs)
void _ListFS_(FileSystem* fs, ino_t inodeNumber, short unsigned numtabs) void _ListFS_(FileSystem* fs, ino_t inodeNumber, short unsigned numtabs)
{ {
if (!(fs->inodes[inodeNumber].isValid))
return;
for (int i = 0; i < fs->superBlock.inodeCount; i++) for (int i = 0; i < fs->superBlock.inodeCount; i++)
{ {
if (!(fs->inodes[inodeNumber].blocks[i].isValid)) if (!(fs->inodes[inodeNumber].blocks[i].isValid))
@ -78,9 +80,15 @@ void _ListFS_(FileSystem* fs, ino_t inodeNumber, short unsigned numtabs)
for (int j = 0; j < numtabs; j++) for (int j = 0; j < numtabs; j++)
printf("\t"); printf("\t");
printf("%s\n", fs->inodes[inodeNumber].blocks[i].name); printf("%s\n", fs->inodes[inodeNumber].blocks[i].name);
if (fs->inodes[inodeNumber].blocks[i].isDirectory) if (!(fs->inodes[inodeNumber].blocks[i].isDirectory))
_ListFS_(fs, fs->inodes[inodeNumber].blocks[i].inode, numtabs + 1); continue;
if (!(fs->inodes[fs->inodes[inodeNumber].blocks[i].inode].isValid))
continue;
if (fs->inodes[inodeNumber].blocks[i].inode == inodeNumber)
return;
_ListFS_(fs, fs->inodes[inodeNumber].blocks[i].inode, numtabs + 1);
} }
return;
} }
// Remove a file from the filesystem // Remove a file from the filesystem
@ -106,7 +114,10 @@ int _RemoveFileFromFS_(FileSystem* fs, ino_t inodeNumber, char* fname)
continue; 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;
UpdateFreeBlockList(&(fs->fbl.freeList[inodeNumber * 4]), i);
}
else else
emptyDir = 0; emptyDir = 0;
} }
@ -184,6 +195,13 @@ ino_t GetFreeBlockNumber(int fbl[], unsigned short size)
return -1; return -1;
} }
// Frees the used block in the fbl
void UpdateFreeBlockList(int* number, int position)
{
*number = *number - (1 << position);
return;
}
// Finds next empty bit in Free Block List // Finds next empty bit in Free Block List
int FindEmptyBitPosition(int number) int FindEmptyBitPosition(int number)
{ {

View File

@ -11,17 +11,6 @@
#include "fsactions.h" #include "fsactions.h"
#include "fsinterface.h" #include "fsinterface.h"
/*
* Steps to formatting inodes:
* 1) Check if file exists already in directory
* 2) If file does not exist in directory, provide new inode
* 3) Inodes are placed inside of inodes that are directories
*
*/
// TODO: Take BlockStruct out of InodeStruct
// Make a method for turning names into Inodes
// Main handler for Fuse // Main handler for Fuse
void Fuse(int argc, char* argv[]) void Fuse(int argc, char* argv[])
{ {