Setup FS structure and set fs to point to struct

This commit is contained in:
TriantaTV 2022-11-25 18:03:45 -06:00
parent 0b9eb0be9a
commit 4fcd64ea81
5 changed files with 64 additions and 14 deletions

View File

@ -1,6 +1,9 @@
#ifndef FUSE_H #ifndef FUSE_H
#define FUSE_H #define FUSE_H
#define DEFAULTINODEMAX 128
#define DEFAULTBLOCKSIZE 512 // Size in bytes
typedef struct fuseArgStruct typedef struct fuseArgStruct
{ {
int create; int create;
@ -17,12 +20,40 @@ typedef struct fuseArgStruct
int filefsname; int filefsname;
} fuseArgStruct; } fuseArgStruct;
typedef struct BlockStruct
{
char byte[DEFAULTBLOCKSIZE];
} BlockStruct;
typedef struct InodeStruct
{
BlockStruct* dataBlock;
} InodeStruct;
typedef struct SuperBlockStruct
{
int blockCount;
int blockSize;
} SuperBlockStruct;
typedef struct FBLStruct
{
int freeList[DEFAULTINODEMAX/32];
} FBLStruct;
typedef struct FileSystemStruct
{
SuperBlockStruct superBlock;
FBLStruct freeList;
InodeStruct inodes[DEFAULTINODEMAX];
} FileSystemStruct;
void Fuse(int argc, char* argv[]); void Fuse(int argc, char* argv[]);
void FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs); void FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs);
void FuseCheckArgs(int argc, char* argv[], fuseArgStruct* fuseArgs);
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);
int zerosize(int fd); int zerosize(int fd);
int FindEmptyBitPosition(int number);
#endif #endif

View File

@ -1,12 +1,12 @@
#ifndef FUSEACTIONS_H #ifndef FUSEACTIONS_H
#define FUSEACTIONS_H #define FUSEACTIONS_H
#include "fuse.h"
#define FSSIZE 10000000 #define FSSIZE 10000000
extern unsigned char* fs; void MapFS(FileSystemStruct* fs, int fd);
void UnmapFS(FileSystemStruct* fs);
void MapFS(int fd);
void UnmapFS();
void FormatFS(); void FormatFS();
void LoadFS(); void LoadFS();
void ListFS(); void ListFS();

View File

@ -51,6 +51,7 @@ void FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs)
// Given code for default functionality // Given code for default functionality
void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath) void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
{ {
FileSystemStruct fileSystem;
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);
@ -74,7 +75,7 @@ void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
MapFS(fuseArgs->fd); MapFS(&fileSystem, fuseArgs->fd);
if (fuseArgs->newfs) if (fuseArgs->newfs)
FormatFS(); FormatFS();
LoadFS(); LoadFS();
@ -86,7 +87,7 @@ void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
ExtractFileFromFS(fuseArgs->toExtract); ExtractFileFromFS(fuseArgs->toExtract);
if(fuseArgs->list) if(fuseArgs->list)
ListFS(); ListFS();
UnmapFS(); UnmapFS(&fileSystem);
} }
// Initialize entire fuseStruct // Initialize entire fuseStruct
@ -123,3 +124,13 @@ int zerosize(int fd)
return 1; return 1;
return 0; return 0;
} }
// Finds next empty bit in Free Block List
int FindEmptyBitPosition(int number)
{
for (int i = 0; i < 32; i++)
if ((~number & (1 << i)) == (1 << i))
return i;
return -1;
}

View File

@ -4,9 +4,7 @@
#include <sys/mman.h> #include <sys/mman.h>
#include "fuseactions.h" #include "fuseactions.h"
unsigned char* fs; void MapFS(FileSystemStruct* fs, int fd)
void MapFS(int fd)
{ {
fs = mmap(NULL, FSSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); fs = mmap(NULL, FSSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (fs == NULL) if (fs == NULL)
@ -16,22 +14,22 @@ void MapFS(int fd)
} }
} }
void UnmapFS() void UnmapFS(FileSystemStruct* fs)
{ {
munmap(fs, FSSIZE); munmap(fs, FSSIZE);
} }
void FormatFS() void FormatFS(void)
{ {
} }
void LoadFS() void LoadFS(void)
{ {
} }
void ListFS() void ListFS(void)
{ {
} }

View File

@ -39,9 +39,19 @@ void Test_FuseGetArgs_Should_SetDummyArgs(void)
TEST_ASSERT_EQUAL(1, dummyFuse.extract); TEST_ASSERT_EQUAL(1, dummyFuse.extract);
} }
void Test_FindEmptyBitPosition_Should_ReturnPosition(void)
{
TEST_ASSERT_EQUAL(3, FindEmptyBitPosition(7));
TEST_ASSERT_EQUAL(1, FindEmptyBitPosition(29));
TEST_ASSERT_EQUAL(5, FindEmptyBitPosition(95));
TEST_ASSERT_EQUAL(31, FindEmptyBitPosition(2147483647));
TEST_ASSERT_EQUAL(-1, FindEmptyBitPosition(4294967295));
}
int main(void) int main(void)
{ {
UNITY_BEGIN(); UNITY_BEGIN();
RUN_TEST(Test_FuseGetArgs_Should_SetDummyArgs); RUN_TEST(Test_FuseGetArgs_Should_SetDummyArgs);
RUN_TEST(Test_FindEmptyBitPosition_Should_ReturnPosition);
return UNITY_END(); return UNITY_END();
} }