diff --git a/inode.c b/inode.c index 3f5ecca..90bec61 100644 --- a/inode.c +++ b/inode.c @@ -1,9 +1,11 @@ #include "inode.h" +#include "util.h" Inode* find_inode(char filename[], struct inode_table* itable) { for (uint32_t i = 0; i < itable->size; i++) { - if (strcmp(filename, itable->inodes[i]->name)) { - return itable->inodes[i]; + if (!strcmp(filename, itable->inodes[i].filename)) { + Inode* ret = &itable->inodes[i]; + return ret; } } return NULL; @@ -11,7 +13,7 @@ Inode* find_inode(char filename[], struct inode_table* itable) { bool inode_exists(struct inode_table* itable, char filename[]) { for (uint32_t i = 0; i < itable->size; i++) { - if (strcmp(filename, itable->inodes[i]->name)) { + if (!strcmp(filename, itable->inodes[i].filename)) { return true; } } @@ -23,3 +25,36 @@ void delete_inode(struct inode_table* itable, char filename[]) { free(wanted_inode); wanted_inode = NULL; } + +Inode* create_inode() { + Inode* new_inode = (Inode*) malloc(sizeof(Inode)); + if (new_inode == NULL) { + errno = ENOMEM; + perror("Failed to allocate memory for inode"); + return new_inode; + } + + new_inode->filename = NULL; + new_inode->filesize = 0; + new_inode->owner = 0; + new_inode->group = 0; + new_inode->created = get_local_time(); + new_inode->last_modified = get_local_time(); + new_inode->block_count = 0; + new_inode->first_data_block = NULL; + new_inode->second_data_block = NULL; + new_inode-> third_data_block = NULL; + new_inode->fourth_data_block = NULL; + new_inode->fifth_data_block = NULL; + new_inode->sixth_data_block = NULL; + new_inode->seventh_data_block = NULL; + new_inode->eighth_data_block = NULL; + new_inode->nineth_data_block = NULL; + new_inode->tenth_data_block = NULL; + new_inode->eleventh_data_block = NULL; + new_inode->twelveth_data_block = NULL; + new_inode->file_indirect_data_block = NULL; + new_inode->file_doubly_indirect_data_block = NULL; + new_inode-> file_trebly_indirect_data_block = NULL; + return new_inode; +} diff --git a/inode.h b/inode.h index 805a6cb..cb0801d 100644 --- a/inode.h +++ b/inode.h @@ -7,26 +7,16 @@ typedef struct Inode Inode; enum permissions { - R = 1, - W = 2, - X = 4 + READ = 1, + WRITE = 2, + EXECUTE = 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; -}; +// TODO: 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 { // file information - char name[64]; + char *filename; uint32_t filesize; // ownership and permissions @@ -63,9 +53,19 @@ struct Inode { 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]); +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; +}; + +Inode* create_inode(); +Inode* find_inode(char filename[], struct inode_table* itable); +bool inode_exists(struct inode_table* itable, char filename[]); +void delete_inode(struct inode_table* itable, char filename[]); #endif // INODE_H_ diff --git a/util.h b/util.h index dd377e0..4bdde56 100644 --- a/util.h +++ b/util.h @@ -1,5 +1,5 @@ -#ifndef BLOCK_H_ -#define BLOCK_H_ +#ifndef UTIL_H_ +#define UTIL_H_ #include "emmafs.h" @@ -65,15 +65,21 @@ struct tm *local_time; time_t current_time; // Provide fs size in bytes +<<<<<<< HEAD int find_number_of_inodes(size_t fs_size); tm* get_local_time(); size_t get_file_size(uint16_t block_count); // DEPRECATED? Probably unneeded and will soon be removed. This should not be handled on the fs level. +======= +int find_number_of_inodes(uint64_t fs_size); +tm get_local_time(); +uint32_t get_file_size(uint16_t block_count); +>>>>>>> 18f1037e030fa451566018dfcb8dbdb250787c70 uint16_t bytes_to_kb(uint32_t bytes); uint16_t kb_to_mb(uint16_t kb); uint16_t mb_to_gb(uint16_t mb); uint16_t gb_to_tb(uint16_t gb); uint8_t tb_to_pb(uint16_t tb); -#endif // BLOCK_H_ +#endif // UTIL_H_