4 \brief EXT2 Filesystem Driver
\r
8 \name Inode Flag Values
\r
11 #define EXT2_S_IFMT 0xF000 //!< Format Mask
\r
12 #define EXT2_S_IFSOCK 0xC000 //!< Socket
\r
13 #define EXT2_S_IFLNK 0xA000 //!< Symbolic Link
\r
14 #define EXT2_S_IFREG 0x8000 //!< Regular File
\r
15 #define EXT2_S_IFBLK 0x6000 //!< Block Device
\r
16 #define EXT2_S_IFDIR 0x4000 //!< Directory
\r
17 #define EXT2_S_IFCHR 0x2000 //!< Character Device
\r
18 #define EXT2_S_IFIFO 0x1000 //!< FIFO
\r
19 #define EXT2_S_ISUID 0x0800 //!< SUID
\r
20 #define EXT2_S_ISGID 0x0400 //!< SGID
\r
21 #define EXT2_S_ISVTX 0x0200 //!< sticky bit
\r
22 #define EXT2_S_IRWXU 0700 //!< user access rights mask
\r
23 #define EXT2_S_IRUSR 0400 //!< Owner Read
\r
24 #define EXT2_S_IWUSR 0200 //!< Owner Write
\r
25 #define EXT2_S_IXUSR 0100 //!< Owner Execute
\r
26 #define EXT2_S_IRWXG 0070 //!< Group Access rights mask
\r
27 #define EXT2_S_IRGRP 0040 //!< Group Read
\r
28 #define EXT2_S_IWGRP 0020 //!< Group Write
\r
29 #define EXT2_S_IXGRP 0010 //!< Group Execute
\r
30 #define EXT2_S_IRWXO 0007 //!< Global Access rights mask
\r
31 #define EXT2_S_IROTH 0004 //!< Global Read
\r
32 #define EXT2_S_IWOTH 0002 //!< Global Write
\r
33 #define EXT2_S_IXOTH 0001 //!< Global Execute
\r
36 #define EXT2_NAME_LEN 255 //!< Maximum Name Length
\r
40 \struct ext2_super_block_s
\r
41 \brief EXT2 Superblock Structure
\r
43 struct ext2_super_block_s {
\r
44 Uint32 s_inodes_count; //!< Inodes count
\r
45 Uint32 s_blocks_count; //!< Blocks count
\r
46 Uint32 s_r_blocks_count; //!< Reserved blocks count
\r
47 Uint32 s_free_blocks_count; //!< Free blocks count
\r
48 Uint32 s_free_inodes_count; //!< Free inodes count
\r
49 Uint32 s_first_data_block; //!< First Data Block
\r
50 Uint32 s_log_block_size; //!< Block size
\r
51 Sint32 s_log_frag_size; //!< Fragment size
\r
52 Uint32 s_blocks_per_group; //!< Number Blocks per group
\r
53 Uint32 s_frags_per_group; //!< Number Fragments per group
\r
54 Uint32 s_inodes_per_group; //!< Number Inodes per group
\r
55 Uint32 s_mtime; //!< Mount time
\r
56 Uint32 s_wtime; //!< Write time
\r
57 Uint16 s_mnt_count; //!< Mount count
\r
58 Sint16 s_max_mnt_count; //!< Maximal mount count
\r
59 Uint16 s_magic; //!< Magic signature
\r
60 Uint16 s_state; //!< File system state
\r
61 Uint16 s_errors; //!< Behaviour when detecting errors
\r
62 Uint16 s_pad; //!< Padding
\r
63 Uint32 s_lastcheck; //!< time of last check
\r
64 Uint32 s_checkinterval; //!< max. time between checks
\r
65 Uint32 s_creator_os; //!< Formatting OS
\r
66 Uint32 s_rev_level; //!< Revision level
\r
67 Uint16 s_def_resuid; //!< Default uid for reserved blocks
\r
68 Uint16 s_def_resgid; //!< Default gid for reserved blocks
\r
69 Uint32 s_reserved[235]; //!< Padding to the end of the block
\r
73 \struct ext2_inode_s
\r
74 \brief EXT2 Inode Definition
\r
76 struct ext2_inode_s {
\r
77 Uint16 i_mode; //!< File mode
\r
78 Uint16 i_uid; //!< Owner Uid
\r
79 Uint32 i_size; //!< Size in bytes
\r
80 Uint32 i_atime; //!< Access time
\r
81 Uint32 i_ctime; //!< Creation time
\r
82 Uint32 i_mtime; //!< Modification time
\r
83 Uint32 i_dtime; //!< Deletion Time
\r
84 Uint16 i_gid; //!< Group Id
\r
85 Uint16 i_links_count; //!< Links count
\r
86 Uint32 i_blocks; //!< Blocks count
\r
87 Uint32 i_flags; //!< File flags
\r
89 Uint32 linux_reserved1; //!< Linux: Reserved
\r
90 Uint32 hurd_translator; //!< HURD: Translator
\r
91 Uint32 masix_reserved1; //!< Masix: Reserved
\r
92 } osd1; //!< OS dependent 1
\r
93 Uint32 i_block[15]; //!< Pointers to blocks
\r
94 Uint32 i_version; //!< File version (for NFS)
\r
95 Uint32 i_file_acl; //!< File ACL
\r
96 Uint32 i_dir_acl; //!< Directory ACL
\r
97 Uint32 i_faddr; //!< Fragment address
\r
100 Uint8 l_i_frag; //!< Fragment number
\r
101 Uint8 l_i_fsize; //!< Fragment size
\r
102 Uint16 i_pad1; //!< Padding
\r
103 Uint32 l_i_reserved2[2]; //!< Reserved
\r
106 Uint8 h_i_frag; //!< Fragment number
\r
107 Uint8 h_i_fsize; //!< Fragment size
\r
108 Uint16 h_i_mode_high; //!< Mode High Bits
\r
109 Uint16 h_i_uid_high; //!< UID High Bits
\r
110 Uint16 h_i_gid_high; //!< GID High Bits
\r
111 Uint32 h_i_author; //!< Creator ID
\r
114 Uint8 m_i_frag; //!< Fragment number
\r
115 Uint8 m_i_fsize; //!< Fragment size
\r
116 Uint16 m_pad1; //!< Padding
\r
117 Uint32 m_i_reserved2[2]; //!< reserved
\r
119 } osd2; //!< OS dependent 2
\r
123 \struct ext2_group_desc_s
\r
124 \brief EXT2 Group Descriptor
\r
126 struct ext2_group_desc_s {
\r
127 Uint32 bg_block_bitmap; //!< Blocks bitmap block
\r
128 Uint32 bg_inode_bitmap; //!< Inodes bitmap block
\r
129 Uint32 bg_inode_table; //!< Inodes table block
\r
130 Uint16 bg_free_blocks_count; //!< Free blocks count
\r
131 Uint16 bg_free_inodes_count; //!< Free inodes count
\r
132 Uint16 bg_used_dirs_count; //!< Directories count
\r
133 Uint16 bg_pad; //!< Padding
\r
134 Uint32 bg_reserved[3]; //!< Reserved
\r
138 \struct ext2_dir_entry
\r
139 \brief EXT2 Directory Entry
\r
140 \note The name may take up less than 255 characters
\r
142 struct ext2_dir_entry_s {
\r
143 Uint32 inode; //!< Inode number
\r
144 Uint16 rec_len; //!< Directory entry length
\r
145 Uint8 name_len; //!< Short Name Length
\r
146 Uint8 type; //!< File Type
\r
147 char name[]; //!< File name
\r
151 typedef struct ext2_inode_s tExt2_Inode; //!< Inode Type
\r
152 typedef struct ext2_super_block_s tExt2_SuperBlock; //!< Superblock Type
\r
153 typedef struct ext2_group_desc_s tExt2_Group; //!< Group Descriptor Type
\r
154 typedef struct ext2_dir_entry_s tExt2_DirEnt; //!< Directory Entry Type
\r