#include #include #include #include #include #include #include #include #include "fuseactions.h" unsigned char* tempfs; void MapFS(FileSystemStruct* fs, int fd) { tempfs = mmap(NULL, FSSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (fs == NULL) { perror("mmap failed"); exit(EXIT_FAILURE); } return; } void UnmapFS(FileSystemStruct* fs) { munmap(fs, FSSIZE); return; } void FormatFS(FileSystemStruct* fs) { fs->superBlock = (SuperBlockStruct*) tempfs; fs->fbl = (FBLStruct*) (tempfs + sizeof(SuperBlockStruct)); fs->inodes = (InodeStruct*) (tempfs + sizeof(SuperBlockStruct) + sizeof(FBLStruct)); SetFileSystemDefaults(fs); return; } void LoadFS(FileSystemStruct* fs) { } void ListFS(FileSystemStruct* fs) { for (int i = 0; i < 4; i++) for (int j = 0; j < 32; j++) if ((fs->fbl->freeList[i] & (1 << j)) == (1 << j)) printf("%s\n", fs->inodes[i*32 + j].filePath); return; } void AddFileToFS(FileSystemStruct* fs, char* fname) { struct stat statBuffer; ino_t inodeNumber = GetFreeInodeNumber(fs->fbl->freeList); strcpy(fs->inodes[inodeNumber].filePath, fname); stat(fname, &statBuffer); fs->inodes[inodeNumber].fileSize = statBuffer.st_size; int fd = open(fname, O_RDONLY); if (fd < 0) { perror(fname); exit(1); } read(fd, fs->inodes[inodeNumber].dataBlock.byte, sizeof(BlockStruct)); close(fd); } void RemoveFileFromFS(FileSystemStruct* fs, char* fname) { } void ExtractFileFromFS(FileSystemStruct* fs, char* fname) { }