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