ApertureOS
ext2_structs.h
Go to the documentation of this file.
1 #ifndef _EXT2_FS_STRUCTS_H_
2 #define _EXT2_FS_STRUCTS_H_
3 
4 #include "types.h"
5 
6 #define EXT2_SIG 0xEF53
7 #define ROOT_INODE_INDEX 0x2
8 
9 #define GET_BLOCK_INDEX_FROM_INODE(inode_index, inodes_per_group) ( (inode_index - 1)/inodes_per_group )
10 #define GET_BLOCK_INODE_INDEX_FROM_INODE(inode_index, inodes_per_group) ( (inode_index - 1)%inodes_per_group )
11 
12 
13 typedef enum
14 {
18 
19 typedef enum
20 {
24 
25 typedef struct
26 {
28  uint16_t sizeof_inode;
33  uint8_t fs_id[16];
34  uint8_t vol_name[16];
35  uint8_t last_mount_path[64];
36  uint32_t compression;
39  uint16_t unused;
40  uint8_t journal_id[16];
41  uint32_t journal_inode;
42  uint32_t journal_device;
45 
46 typedef struct
47 {
48  uint32_t inode_count;
49  uint32_t block_count;
50  uint32_t superuser_blocks;
53  uint32_t block_number;
54  uint32_t block_size_log2; //Shift 1024 to the left by this to obtain the block size
55  uint32_t fragment_size_log2;//Shift 1024 to the left by this to obtain the fragment size
56  uint32_t blocks_per_group;
58  uint32_t inodes_per_group;
59  uint32_t last_mount_time;
60  uint32_t last_write_time;
62  uint16_t num_mounts_max;
63  uint16_t ext2_sig;
64  uint16_t fs_state;
65  uint16_t error_handling;
66  uint16_t minor_version;
67  uint32_t last_check_time;
69  uint32_t os_id;
70  uint32_t major_version;
75 
76 typedef struct
77 {
83  uint16_t num_dirs;
84  uint8_t unused[32 - 18];
86 
87 typedef struct
88 {
89  uint16_t type_perm;
90  uint16_t uid;
91  uint32_t size_lo;
92  uint32_t last_access_time;
93  uint32_t creation_time;
94  uint32_t last_mod_time;
95  uint32_t deletion_time;
96  uint16_t guid;
97  uint16_t hard_link_count;
99  uint32_t flags;
100  uint32_t os_specific;
101  uint32_t direct_block[15];
102  uint32_t generation_num;
104  uint32_t size_hi;
106  uint8_t os_specific_2[12];
107 } EXT2_Inode;
108 
109 typedef struct EXT2_DriverData_T
110 {
111  uint32_t base_block_num;
112  uint32_t block_size;
113  uint32_t inode_size;
116  uint32_t inode_count;
117  uint32_t block_count;
118  uint32_t group_count;
119  uint32_t major_version;
120  uint8_t vol_name[16];
121  uint64_t last_read_addr;
122 
123  uint32_t f_indir_e_cnt;
124  uint32_t s_indir_e_cnt;
125  uint32_t t_indir_e_cnt;
126 
127  uint8_t *memory_pool;
129 
130 typedef struct
131 {
132  uint32_t inode_index;
133  uint16_t entry_size;
134  uint8_t name_len;
135  uint8_t type;
136  uint8_t name[1];
138 
139 #endif
uint16_t type_perm
Definition: ext2_structs.h:89
EXT2_INODE_EntryTypes
Definition: ext2_structs.h:13
uint32_t group_count
Definition: ext2_structs.h:118
uint32_t unallocated_inode_count
Definition: ext2_structs.h:52
Definition: ext2_structs.h:25
Definition: ext2_structs.h:21
uint16_t num_dirs
Definition: ext2_structs.h:83
uint32_t inode_usage_bitmap_addr
Definition: ext2_structs.h:79
uint32_t interval_forced_checks
Definition: ext2_structs.h:68
uint8_t * memory_pool
Definition: ext2_structs.h:127
Definition: ext2_structs.h:109
uint32_t journal_inode
Definition: ext2_structs.h:41
uint32_t unallocated_block_count
Definition: ext2_structs.h:51
Definition: ext2_structs.h:130
uint32_t fragment_size_log2
Definition: ext2_structs.h:55
uint32_t block_count
Definition: ext2_structs.h:117
uint16_t num_unallocated_blocks
Definition: ext2_structs.h:81
uint32_t required_features
Definition: ext2_structs.h:31
uint16_t minor_version
Definition: ext2_structs.h:66
uint16_t unused
Definition: ext2_structs.h:39
Definition: ext2_structs.h:76
uint32_t os_id
Definition: ext2_structs.h:69
uint32_t inode_table_start_addr
Definition: ext2_structs.h:80
uint32_t optional_features
Definition: ext2_structs.h:30
uint32_t deletion_time
Definition: ext2_structs.h:95
uint16_t num_mounted_since_check
Definition: ext2_structs.h:61
uint16_t entry_size
Definition: ext2_structs.h:133
uint16_t num_mounts_max
Definition: ext2_structs.h:62
uint32_t major_version
Definition: ext2_structs.h:70
uint32_t base_block_num
Definition: ext2_structs.h:111
uint32_t fragments_per_group
Definition: ext2_structs.h:57
uint32_t block_count
Definition: ext2_structs.h:49
uint32_t inode_count
Definition: ext2_structs.h:116
uint32_t last_access_time
Definition: ext2_structs.h:92
uint32_t last_mod_time
Definition: ext2_structs.h:94
Definition: ext2_structs.h:87
uint32_t inode_index
Definition: ext2_structs.h:132
uint32_t first_non_reserved_inode
Definition: ext2_structs.h:27
uint16_t num_unallocated_inodes
Definition: ext2_structs.h:82
Definition: ext2_structs.h:16
uint32_t creation_time
Definition: ext2_structs.h:93
uint32_t read_only_features
Definition: ext2_structs.h:32
uint32_t compression
Definition: ext2_structs.h:36
uint32_t f_indir_e_cnt
Definition: ext2_structs.h:123
uint32_t extended_attr_block
Definition: ext2_structs.h:103
uint32_t inodes_per_group
Definition: ext2_structs.h:115
uint32_t s_indir_e_cnt
Definition: ext2_structs.h:124
uint32_t flags
Definition: ext2_structs.h:99
uint8_t blocks_prealloc_dirs
Definition: ext2_structs.h:38
uint8_t blocks_prealloc_files
Definition: ext2_structs.h:37
uint32_t block_usage_bitmap_addr
Definition: ext2_structs.h:78
EXT2_SuperBlock_Ext ext
Definition: ext2_structs.h:73
uint32_t last_mount_time
Definition: ext2_structs.h:59
uint16_t sizeof_inode
Definition: ext2_structs.h:28
uint32_t major_version
Definition: ext2_structs.h:119
uint32_t last_check_time
Definition: ext2_structs.h:67
Definition: ext2_structs.h:15
EXT2_DIR_TABLE_EntryTypes
Definition: ext2_structs.h:19
uint64_t last_read_addr
Definition: ext2_structs.h:121
uint32_t inodes_per_group
Definition: ext2_structs.h:58
uint16_t ext2_sig
Definition: ext2_structs.h:63
uint16_t guid_reserved_blocks
Definition: ext2_structs.h:72
uint32_t inode_size
Definition: ext2_structs.h:113
Definition: ext2_structs.h:22
uint32_t block_size_log2
Definition: ext2_structs.h:54
uint32_t t_indir_e_cnt
Definition: ext2_structs.h:125
uint32_t generation_num
Definition: ext2_structs.h:102
uint16_t guid
Definition: ext2_structs.h:96
uint32_t superuser_blocks
Definition: ext2_structs.h:50
uint16_t fs_state
Definition: ext2_structs.h:64
uint32_t size_lo
Definition: ext2_structs.h:91
uint32_t fragment_block_addr
Definition: ext2_structs.h:105
uint16_t hard_link_count
Definition: ext2_structs.h:97
uint32_t journal_device
Definition: ext2_structs.h:42
uint32_t size_hi
Definition: ext2_structs.h:104
uint32_t blocks_per_group
Definition: ext2_structs.h:114
uint32_t os_specific
Definition: ext2_structs.h:100
uint16_t error_handling
Definition: ext2_structs.h:65
uint8_t type
Definition: ext2_structs.h:135
uint32_t block_number
Definition: ext2_structs.h:53
uint8_t name_len
Definition: ext2_structs.h:134
uint32_t blocks_per_group
Definition: ext2_structs.h:56
uint16_t uid
Definition: ext2_structs.h:90
Definition: ext2_structs.h:46
uint16_t uid_reserved_blocks
Definition: ext2_structs.h:71
uint32_t inode_count
Definition: ext2_structs.h:48
uint32_t last_write_time
Definition: ext2_structs.h:60
uint32_t block_size
Definition: ext2_structs.h:112
uint32_t head_orphan_inode
Definition: ext2_structs.h:43
uint32_t disk_sector_count
Definition: ext2_structs.h:98
uint16_t block_guid_superblock
Definition: ext2_structs.h:29