Setup FS structure and set fs to point to struct
This commit is contained in:
parent
0b9eb0be9a
commit
4fcd64ea81
@ -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
|
||||||
|
@ -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();
|
||||||
|
15
src/fuse.c
15
src/fuse.c
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
10
test/test.c
10
test/test.c
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user