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
#define FUSE_H
#define DEFAULTINODEMAX 128
#define DEFAULTBLOCKSIZE 512 // Size in bytes
typedef struct fuseArgStruct
{
int create;
@ -17,12 +20,40 @@ typedef struct fuseArgStruct
int filefsname;
} 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 FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs);
void FuseCheckArgs(int argc, char* argv[], fuseArgStruct* fuseArgs);
void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath);
void FuseStructInit(fuseArgStruct* fuseStruct);
void FuseUsageError(char* programPath);
int zerosize(int fd);
int FindEmptyBitPosition(int number);
#endif

View File

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

View File

@ -51,6 +51,7 @@ void FuseGetArgs(int argc, char* argv[], fuseArgStruct* fuseArgs)
// Given code for default functionality
void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
{
FileSystemStruct fileSystem;
if (!fuseArgs->filefsname)
FuseUsageError(programPath);
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);
}
}
MapFS(fuseArgs->fd);
MapFS(&fileSystem, fuseArgs->fd);
if (fuseArgs->newfs)
FormatFS();
LoadFS();
@ -86,7 +87,7 @@ void FuseGivenTest(fuseArgStruct* fuseArgs, char* programPath)
ExtractFileFromFS(fuseArgs->toExtract);
if(fuseArgs->list)
ListFS();
UnmapFS();
UnmapFS(&fileSystem);
}
// Initialize entire fuseStruct
@ -123,3 +124,13 @@ int zerosize(int fd)
return 1;
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 "fuseactions.h"
unsigned char* fs;
void MapFS(int fd)
void MapFS(FileSystemStruct* fs, int fd)
{
fs = mmap(NULL, FSSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (fs == NULL)
@ -16,22 +14,22 @@ void MapFS(int fd)
}
}
void UnmapFS()
void UnmapFS(FileSystemStruct* fs)
{
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);
}
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)
{
UNITY_BEGIN();
RUN_TEST(Test_FuseGetArgs_Should_SetDummyArgs);
RUN_TEST(Test_FindEmptyBitPosition_Should_ReturnPosition);
return UNITY_END();
}