Changed behavior of the inode table. Changed inode behavior. Implemented a function to create an empty inode. Fixed bug caused by strcmp() weirdness.
This commit is contained in:
parent
b2cac5bd2d
commit
18f1037e03
2 changed files with 56 additions and 19 deletions
41
inode.c
41
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;
|
||||
}
|
||||
|
|
34
inode.h
34
inode.h
|
@ -5,32 +5,24 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
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
|
||||
|
@ -67,7 +59,17 @@ struct Inode {
|
|||
struct trebly_indirect_data_block* file_trebly_indirect_data_block;
|
||||
};
|
||||
|
||||
Inode* create_inode(char name[64], uint8_t user_permissions, uint8_t group_permissions, uint16_t owner, uint16_t group, block* data_block);
|
||||
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[]);
|
||||
|
|
Loading…
Reference in a new issue