#ifndef INODE_H_ #define INODE_H_ #include "emmafs.h" #include "util.h" typedef struct Inode Inode; enum permissions { R = 1, W = 2, X = 4 }; // NOTE: Add handling for the block bitmap for when a file is deleted and created. That's how you solve the issue of when a block is usable. struct inode_table { // the following keyword spam purely exist so I definitely see it with highlighting. // NOTE, TODO, FIXME, DEPRECATED, HACK, IMPORTANT: always initialize all values to be null when the inode table is created!!!! // TODO: Change currently hardcoded value to actually accurately describe the size of the filesystem, only for temporary purposes. Inode* inodes[640000]; uint32_t size; uint32_t used_inodes; uint32_t free_inodes; }; struct Inode { // file information char name[64]; uint32_t filesize; // ownership and permissions uint8_t user_permissions; uint8_t group_permissions; // UID uint16_t owner; // GID uint16_t group; // timestamps tm created; tm last_modified; // needed to determine file size uint16_t block_count; // Data block pointers!! struct data_block* first_data_block; struct data_block* second_data_block; struct data_block* third_data_block; struct data_block* fourth_data_block; struct data_block* fifth_data_block; struct data_block* sixth_data_block; struct data_block* seventh_data_block; struct data_block* eighth_data_block; struct data_block* nineth_data_block; struct data_block* tenth_data_block; struct data_block* eleventh_data_block; struct data_block* twelveth_data_block; struct indirect_data_block* file_indirect_data_block; struct doubly_indirect_data_block* file_doubly_indirect_data_block; struct trebly_indirect_data_block* file_trebly_indirect_data_block; }; Inode* create_empty_inode(char name[64], uint8_t user_permissions, uint8_t group_permissions, uint16_t owner, uint16_t group, struct data_block* data_block); Inode* find_inode(char filename[64], struct inode_table* itable); bool inode_exists(struct inode_table* itable, char filename[64]); void delete_inode(struct inode_table* itable, char filename[64]); #endif // INODE_H_