diff options
author | Marvin Borner | 2020-04-16 19:06:33 +0200 |
---|---|---|
committer | Marvin Borner | 2020-04-16 19:06:33 +0200 |
commit | 4014a36377ff69f6433e7b0af2144bc3a7d29ca7 (patch) | |
tree | 9440ac3749d406c6df9917d4bb3a19de6ea99655 /src/kernel/fs/ext2/ext2.h | |
parent | fc26e84ef8c6255926811fe639e3e466b756e581 (diff) |
Many fix attempts for the divide by zero exception
Diffstat (limited to 'src/kernel/fs/ext2/ext2.h')
-rw-r--r-- | src/kernel/fs/ext2/ext2.h | 211 |
1 files changed, 0 insertions, 211 deletions
diff --git a/src/kernel/fs/ext2/ext2.h b/src/kernel/fs/ext2/ext2.h deleted file mode 100644 index 3996ba5..0000000 --- a/src/kernel/fs/ext2/ext2.h +++ /dev/null @@ -1,211 +0,0 @@ -#ifndef MELVIX_EXT2_H -#define MELVIX_EXT2_H - -#include <stdint.h> -#include <kernel/fs/vfs/vfs.h> - -#define EXT2_DIRECT_BLOCKS 12 - -#define SUPERBLOCK_SIZE 1024 -#define ROOT_INODE_NUMBER 2 - -#define EXT2_S_IFSOCK 0xC000 -#define EXT2_S_IFLNK 0xA000 -#define EXT2_S_IFREG 0x8000 -#define EXT2_S_IFBLK 0x6000 -#define EXT2_S_IFDIR 0x4000 -#define EXT2_S_IFCHR 0x2000 -#define EXT2_S_IFIFO 0x1000 - -// http://wiki.osdev.org/Ext2#Locating_the_Superblock -typedef struct superblock { - uint32_t total_inodes; - uint32_t total_blocks; - uint32_t su_blocks; - uint32_t free_blocks; - uint32_t free_inodes; - uint32_t superblock_idx; - uint32_t log2block_size; - uint32_t log2frag_size; - uint32_t blocks_per_group; - uint32_t frags_per_group; - uint32_t inodes_per_group; - - uint32_t mtime; - uint32_t wtime; - - uint16_t mount_count; - uint16_t mount_allowed_count; - uint16_t ext2_magic; - uint16_t fs_state; - uint16_t err; - uint16_t minor; - - uint32_t last_check; - uint32_t interval; - uint32_t os_id; - uint32_t major; - - uint16_t r_userid; - uint16_t r_groupid; - - // Extensions - uint32_t first_inode; - uint16_t inode_size; - uint16_t superblock_group; - uint32_t optional_feature; - uint32_t required_feature; - uint32_t readonly_feature; - char fs_id[16]; - char vol_name[16]; - char last_mount_path[64]; - uint32_t compression_method; - uint8_t file_pre_alloc_blocks; - uint8_t dir_pre_alloc_blocks; - uint16_t unused1; - char journal_id[16]; - uint32_t journal_inode; - uint32_t journal_device; - uint32_t orphan_head; - - char unused2[1024 - 236]; -} __attribute__((packed)) superblock_t; - -typedef struct bgd { - uint32_t block_bitmap; - uint32_t inode_bitmap; - uint32_t inode_table; - uint32_t free_blocks; - uint32_t free_inodes; - uint32_t num_dirs; - uint32_t unused1; - uint32_t unused2; -} __attribute__((packed)) bgd_t; - -typedef struct direntry { - uint32_t inode; - uint16_t size; - uint8_t name_len; - uint8_t type; - char name[]; -} __attribute__((packed)) direntry_t; - -typedef struct inode { - uint16_t permission; - uint16_t userid; - uint32_t size; - uint32_t atime; - uint32_t ctime; - uint32_t mtime; - uint32_t dtime; - uint16_t gid; - uint16_t hard_links; - uint32_t num_sectors; - uint32_t flags; - uint32_t os_specific1; - uint32_t blocks[EXT2_DIRECT_BLOCKS + 3]; - uint32_t generation; - uint32_t file_acl; - union { - uint32_t dir_acl; - uint32_t size_high; - }; - uint32_t f_block_addr; - char os_specific2[12]; -} __attribute__((packed)) inode_t; - -typedef struct ext2_cache { - uint32_t block; - uint32_t times; - uint8_t dirty; - char *block_data; -} ext2_cache_t; - -typedef struct ext2_fs { - vfs_node_t *disk_device; - - superblock_t *sb; - bgd_t *bgds; - uint32_t block_size; - uint32_t blocks_per_group; - uint32_t inodes_per_group; - uint32_t total_groups; - - uint32_t bgd_blocks; -} ext2_fs_t; - -uint32_t ext2_file_size(vfs_node_t *node); - -void ext2_mkdir(vfs_node_t *parent, char *name, uint16_t permission); - -void ext2_mkfile(vfs_node_t *parent, char *name, uint16_t permission); - -void ext2_create_entry(vfs_node_t *parent, char *entry_name, uint32_t entry_inode); - -void ext2_unlink(vfs_node_t *parent, char *name); - -char **ext2_listdir(vfs_node_t *parent); - -vfs_node_t *ext2_finddir(vfs_node_t *parent, char *name); - -void ext2_create_entry(vfs_node_t *parent, char *entry_name, uint32_t entry_inode); - -void ext2_remove_entry(vfs_node_t *parent, char *entry_name); - -void ext2_chmod(vfs_node_t *file, uint32_t mode); - -uint32_t ext2_read(vfs_node_t *file, uint32_t offset, uint32_t size, char *buf); - -uint32_t ext2_write(vfs_node_t *file, uint32_t offset, uint32_t size, char *buf); - -void ext2_open(vfs_node_t *file, uint32_t flags); - -void ext2_close(); - -void read_inode_metadata(ext2_fs_t *ext2fs, inode_t *inode, uint32_t inode_idx); - -void write_inode_metadata(ext2_fs_t *ext2fs, inode_t *inode, uint32_t inode_idx); - -uint32_t read_inode_filedata(ext2_fs_t *ext2fs, inode_t *inode, uint32_t offset, uint32_t size, - char *buf); - -void write_inode_filedata(ext2_fs_t *ext2fs, inode_t *inode, uint32_t inode_idx, uint32_t offset, - uint32_t size, char *buf); - -char *read_inode_block(ext2_fs_t *ext2fs, inode_t *inode, uint32_t iblock); - -void write_inode_block(ext2_fs_t *ext2fs, inode_t *inode, uint32_t iblock, char *buf); - -void read_disk_block(ext2_fs_t *ext2fs, uint32_t block, char *buf); - -void write_disk_block(ext2_fs_t *ext2fs, uint32_t block, char *buf); - -void rewrite_bgds(ext2_fs_t *ext2fs); - -void rewrite_superblock(ext2_fs_t *ext2fs); - -int alloc_inode_metadata_block(uint32_t *block_ptr, ext2_fs_t *ext2fs, inode_t *inode, - uint32_t inode_idx, char *buffer, unsigned int block_overwrite); - -uint32_t get_disk_block_number(ext2_fs_t *ext2fs, inode_t *inode, uint32_t inode_block); - -void set_disk_block_number(ext2_fs_t *ext2fs, inode_t *inode, uint32_t inode_idx, - uint32_t inode_block, uint32_t disk_block); - -uint32_t ext2_alloc_block(ext2_fs_t *ext2fs); - -void ext2_free_block(ext2_fs_t *ext2fs, uint32_t block); - -void alloc_inode_block(ext2_fs_t *ext2fs, inode_t *inode, uint32_t inode_idx, uint32_t block); - -void free_inode_block(ext2_fs_t *ext2fs, inode_t *inode, uint32_t inode_idx, uint32_t block); - -uint32_t alloc_inode(ext2_fs_t *ext2fs); - -void free_inode(ext2_fs_t *ext2fs, uint32_t inode); - -vfs_node_t *get_ext2_root(ext2_fs_t *ext2fs, inode_t *inode); - -void ext2_init(char *device_path, char *mountpoint); - -#endif
\ No newline at end of file |