Split given fuse function into pieces

This commit is contained in:
TriantaTV 2022-12-02 13:35:38 -06:00
parent 565832e1ee
commit 86622536d6
6 changed files with 105 additions and 31 deletions

1
.gitignore vendored
View File

@ -52,3 +52,4 @@ Mkfile.old
dkms.conf dkms.conf
*.test *.test
*.sh *.sh
*.swp

View File

@ -38,6 +38,8 @@ typedef struct BlockStruct
char byte[DEFAULTBLOCKSIZE]; char byte[DEFAULTBLOCKSIZE];
} BlockStruct; } BlockStruct;
// TODO: Adjust Inodes to be 128 inodes with 128 direct block references *each*
// Slides exist for inode structure
typedef struct InodeStruct typedef struct InodeStruct
{ {
char filePath[256]; char filePath[256];
@ -53,7 +55,11 @@ typedef struct FileSystemStruct
} FileSystemStruct; } FileSystemStruct;
void Fuse(int argc, char* argv[]); void Fuse(int argc, char* argv[]);
void FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs); void GetArguments(int argc, char* argv[], fuseArgStruct* fuseArgs);
void OpenFS(fuseArgStruct* fuseArgs, char* programPath);
FileSystemStruct* SetupFS(fuseArgStruct* fuseArgs);
void RunFuse(FileSystemStruct* fs, fuseArgStruct* fuseArgs);
void TearDownFS(void);
void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath); void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath);
void FuseStructInit(fuseArgStruct* fuseStruct); void FuseStructInit(fuseArgStruct* fuseStruct);
void FuseUsageError(char* programPath); void FuseUsageError(char* programPath);

View File

@ -10,10 +10,10 @@ extern unsigned char* tempfs;
void MapFS(int fd); void MapFS(int fd);
void UnmapFS(void); void UnmapFS(void);
void FormatFS(FileSystemStruct* fs); void FormatFS(FileSystemStruct* fs);
void LoadFS(FileSystemStruct* fs); void LoadFS(FileSystemStruct** fs);
void ListFS(FileSystemStruct* fs); void ListFS(FileSystemStruct* fs);
void AddFileToFS(FileSystemStruct* fs, char* fname); void AddFileToFS(FileSystemStruct* fs, char* fname);
void RemoveFileFromFS(FileSystemStruct* fs, char* fname); void RemoveFileFromFS(FileSystemStruct* fs, char* fname);
void ExtractFileFromFS(FileSystemStruct* fs, char* fname); void ExtractFileFromFS(FileSystemStruct* fs, char* fname);
#endif #endif

View File

@ -13,13 +13,19 @@
// Main handler for Fuse // Main handler for Fuse
void Fuse(int argc, char* argv[]) void Fuse(int argc, char* argv[])
{ {
FileSystemStruct* fsptr;
fuseArgStruct fuseArgs; fuseArgStruct fuseArgs;
FuseGetArgs(argc, argv, &fuseArgs); GetArguments(argc, argv, &fuseArgs);
FuseGivenTest(&fuseArgs, argv[0]); OpenFS(&fuseArgs, argv[0]);
fsptr = SetupFS(&fuseArgs);
RunFuse(fsptr, &fuseArgs);
TearDownFS();
// FuseGivenTest(&fuseArgs, argv[0]);
} }
// Gets command line arguments and puts information into fuseArgs
// New method for getting arguments // New method for getting arguments
void FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs) void GetArguments(int argc, char* argv[], fuseArgStruct* fuseArgs)
{ {
for (int i = 0; i < argc; i++) for (int i = 0; i < argc; i++)
{ {
@ -48,10 +54,8 @@ void FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs)
} }
} }
// Given code for default functionality void OpenFS(fuseArgStruct* fuseArgs, char* programPath)
void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
{ {
FileSystemStruct* fsptr;
if (!fuseArgs->filefsname) if (!fuseArgs->filefsname)
FuseUsageError(programPath); FuseUsageError(programPath);
fuseArgs->fd = open(fuseArgs->fsname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); fuseArgs->fd = open(fuseArgs->fsname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
@ -75,21 +79,79 @@ void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
return;
}
FileSystemStruct* SetupFS(fuseArgStruct* fuseArgs)
{
FileSystemStruct* fs;
MapFS(fuseArgs->fd); MapFS(fuseArgs->fd);
LoadFS(&fs);
if (fuseArgs->newfs) if (fuseArgs->newfs)
FormatFS(fsptr); FormatFS(fs);
fsptr = (FileSystemStruct*) tempfs; return fs;
// LoadFS(fsptr); }
printf("first free list:%i\n", fsptr->fbl.freeList[0]);
void RunFuse(FileSystemStruct* fs, fuseArgStruct* fuseArgs)
{
if (fuseArgs->add) if (fuseArgs->add)
AddFileToFS(fsptr, fuseArgs->toAdd); AddFileToFS(fs, fuseArgs->toAdd);
if (fuseArgs->remove) if (fuseArgs->remove)
RemoveFileFromFS(fsptr, fuseArgs->toRemove); RemoveFileFromFS(fs, fuseArgs->toRemove);
if (fuseArgs->extract) if (fuseArgs->extract)
ExtractFileFromFS(fsptr, fuseArgs->toExtract); ExtractFileFromFS(fs, fuseArgs->toExtract);
if(fuseArgs->list) if(fuseArgs->list)
ListFS(fsptr); ListFS(fs);
return;
}
void TearDownFS(void)
{
UnmapFS(); UnmapFS();
return;
}
// Given code for default functionality
void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
{
// FileSystemStruct* fsptr;
// if (!fuseArgs->filefsname)
// FuseUsageError(programPath);
// fuseArgs->fd = open(fuseArgs->fsname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
// if (fuseArgs->fd == -1)
// {
// perror("open failed");
// exit(EXIT_FAILURE);
// }
// if (zerosize(fuseArgs->fd))
// fuseArgs->newfs = 1;
// if (fuseArgs->newfs)
// {
// if (lseek(fuseArgs->fd, FSSIZE-1, SEEK_SET) == -1)
// {
// perror("seek failed");
// exit(EXIT_FAILURE);
// }
// if (write(fuseArgs->fd, "\0", 1) == -1)
// {
// perror("write failed");
// exit(EXIT_FAILURE);
// }
// }
// MapFS(fuseArgs->fd);
// if (fuseArgs->newfs)
// FormatFS();
// LoadFS(&fsptr);
// if (fuseArgs->add)
// AddFileToFS(fsptr, fuseArgs->toAdd);
// if (fuseArgs->remove)
// RemoveFileFromFS(fsptr, fuseArgs->toRemove);
// if (fuseArgs->extract)
// ExtractFileFromFS(fsptr, fuseArgs->toExtract);
// if(fuseArgs->list)
// ListFS(fsptr);
// UnmapFS();
} }
// Initialize entire fuseStruct // Initialize entire fuseStruct
@ -136,6 +198,7 @@ int FindEmptyBitPosition(int number)
return -1; return -1;
} }
// Gets next free inode number and returns it
ino_t GetFreeInodeNumber(int fbl[]) ino_t GetFreeInodeNumber(int fbl[])
{ {
int bitPosition; int bitPosition;
@ -151,6 +214,7 @@ ino_t GetFreeInodeNumber(int fbl[])
return -1; return -1;
} }
// Function for setting all defaults of filesystem
void SetFileSystemDefaults(FileSystemStruct* fs) void SetFileSystemDefaults(FileSystemStruct* fs)
{ {
fs->superBlock.blockSize = DEFAULTBLOCKSIZE; fs->superBlock.blockSize = DEFAULTBLOCKSIZE;

View File

@ -10,6 +10,7 @@
unsigned char* tempfs; unsigned char* tempfs;
// Map filesystem to memory
void MapFS(int fd) void MapFS(int fd)
{ {
tempfs = mmap(NULL, FSSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); tempfs = mmap(NULL, FSSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
@ -18,32 +19,33 @@ void MapFS(int fd)
perror("mmap failed"); perror("mmap failed");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
close(fd);
return; return;
} }
// Unmap filesystem from memory
void UnmapFS(void) void UnmapFS(void)
{ {
munmap(tempfs, FSSIZE); munmap(tempfs, FSSIZE);
return; return;
} }
// Sets defaults of a new filesystem
void FormatFS(FileSystemStruct* fs) void FormatFS(FileSystemStruct* fs)
{ {
SetFileSystemDefaults(tempfs); SetFileSystemDefaults(fs);
// fs->superBlock = (FileSystemStruct*) tempfs->superBlock;
// fs->fbl = (FileSystemStruct*) tempfs->fbl;
// fs->inodes = (FileSystemStruct*) tempfs->inodes;
// for (int i = 0; i < DEFAULTINODEMAX; i++)
// fs->inodes[i] = *(InodeStruct*) (tempfs + sizeof(SuperBlockStruct) + sizeof(FBLStruct) + sizeof(InodeStruct) * i);
return; return;
} }
void LoadFS(FileSystemStruct* fs) // Load existing filesystem
// Depreciated Function
void LoadFS(FileSystemStruct** fs)
{ {
fs = (FileSystemStruct*) tempfs; *fs = (FileSystemStruct*) (tempfs);
return; return;
} }
// List path names of all used inodes
void ListFS(FileSystemStruct* fs) void ListFS(FileSystemStruct* fs)
{ {
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
@ -53,11 +55,10 @@ void ListFS(FileSystemStruct* fs)
return; return;
} }
// Adds a file to the filesystem
void AddFileToFS(FileSystemStruct* fs, char* fname) void AddFileToFS(FileSystemStruct* fs, char* fname)
{ {
struct stat statBuffer; struct stat statBuffer;
printf("Check\n");
printf("Bit: %i\n", fs->fbl.freeList[0]);
ino_t inodeNumber = GetFreeInodeNumber(fs->fbl.freeList); ino_t inodeNumber = GetFreeInodeNumber(fs->fbl.freeList);
strcpy(fs->inodes[inodeNumber].filePath, fname); strcpy(fs->inodes[inodeNumber].filePath, fname);
stat(fname, &statBuffer); stat(fname, &statBuffer);
@ -72,11 +73,13 @@ void AddFileToFS(FileSystemStruct* fs, char* fname)
close(fd); close(fd);
} }
// Remove a file from the filesystem
void RemoveFileFromFS(FileSystemStruct* fs, char* fname) void RemoveFileFromFS(FileSystemStruct* fs, char* fname)
{ {
} }
// Extract a file from the filesystem
void ExtractFileFromFS(FileSystemStruct* fs, char* fname) void ExtractFileFromFS(FileSystemStruct* fs, char* fname)
{ {

View File

@ -26,16 +26,16 @@ void tearDown(void)
void Test_FuseGetArgs_Should_SetDummyArgs(void) void Test_FuseGetArgs_Should_SetDummyArgs(void)
{ {
FuseGetArgs(argc, argv, &dummyFuse); GetArguments(argc, argv, &dummyFuse);
TEST_ASSERT_EQUAL(1, dummyFuse.list); TEST_ASSERT_EQUAL(1, dummyFuse.list);
argv[1] = "-a"; argv[1] = "-a";
FuseGetArgs(argc, argv, &dummyFuse); GetArguments(argc, argv, &dummyFuse);
TEST_ASSERT_EQUAL(1, dummyFuse.add); TEST_ASSERT_EQUAL(1, dummyFuse.add);
argv[1] = "-r"; argv[1] = "-r";
FuseGetArgs(argc, argv, &dummyFuse); GetArguments(argc, argv, &dummyFuse);
TEST_ASSERT_EQUAL(1, dummyFuse.remove); TEST_ASSERT_EQUAL(1, dummyFuse.remove);
argv[1] = "-e"; argv[1] = "-e";
FuseGetArgs(argc, argv, &dummyFuse); GetArguments(argc, argv, &dummyFuse);
TEST_ASSERT_EQUAL(1, dummyFuse.extract); TEST_ASSERT_EQUAL(1, dummyFuse.extract);
} }