9 #include "../../utils/utils.h"
13 return sizeof(
struct inode_info)
14 + sizeof(uint16_t) * superblock->fs_info->blocks_count_in_inode;
17 size_t calculate_offset(
const struct superblock* superblock,
23 void init_inode_arrays(
struct inode* inode,
24 const struct superblock* superblock) {
26 (uint16_t*) calloc(superblock->fs_info->blocks_count_in_inode,
30 void init_inode_info(
struct inode* inode) {
31 inode->inode_info = (
struct inode_info*) calloc(1,
sizeof(
struct inode_info));
37 const struct superblock* superblock) {
38 init_inode_info(inode);
39 inode->inode_info->id = id;
40 inode->inode_info->is_file = is_file;
41 inode->inode_info->blocks_count = 0;
42 init_inode_arrays(inode, superblock);
45 free(inode->inode_info);
46 free(inode->block_ids);
52 const struct superblock* superblock) {
53 init_inode_info(inode);
55 calculate_offset(superblock, inode_id),
59 read_while(fd, (
char*) inode->inode_info,
sizeof(
struct inode_info));
61 if (total_read == -1) {
62 fprintf(stderr,
"%s", strerror(errno));
63 free(inode->inode_info);
67 init_inode_arrays(inode, superblock);
70 (
char*) inode->block_ids,
72 * superblock->fs_info->blocks_count_in_inode);
75 fprintf(stderr,
"%s", strerror(errno));
80 return total_read + readed;
85 const struct superblock* superblock) {
87 calculate_offset(superblock, inode->inode_info->id),
91 (
const char*) inode->inode_info,
92 sizeof(
struct inode_info));
93 if (total_written == -1) {
94 fprintf(stderr,
"%s", strerror(errno));
99 (
const char*) inode->block_ids,
101 * superblock->fs_info->blocks_count_in_inode);
104 fprintf(stderr,
"%s", strerror(errno));
108 return total_written + written;
112 return superblock->fs_info->inodes_count *
sizeof_inode(superblock);
ssize_t write_inode(int fd, struct inode *inode, const struct superblock *superblock)
Write inode from memory.
void destroy_inode(struct inode *inode)
Destructor of inode.
int read_while(int fd, char *buffer, size_t to_read)
Properly reading from memory.
Contains descriptors_table struct and its methods.
int write_while(int fd, const char *buffer, size_t to_write)
Properly writing to memory.
uint16_t sizeof_inodes_block(const struct superblock *superblock)
Calculate size of block of all inodes.
uint16_t sizeof_descriptors_table(const struct superblock *superblock)
Sizeof descriptors_table.
size_t sizeof_superblock(const struct superblock *superblock)
Contains inode struct and its methods.
void init_inode(struct inode *inode, uint16_t id, bool is_file, const struct superblock *superblock)
Constructor of inode.
ssize_t read_inode(int fd, struct inode *inode, uint16_t inode_id, const struct superblock *superblock)
Read inode from memory.
size_t sizeof_inode(const struct superblock *superblock)
Count size of inode in bytes.