1 Extended 2 filesystem structure definitions for ext2ed.
3 Most of this file is just copied from the ext2 main include file.
5 My parser is very primitive - It only searches for the struct keywords,
6 and uses the variables in there. The rest of the file is just ignored.
8 You will find at the end a few additional types which are not aviable in
9 the original include file, such as the types "file" and "dir". They have
10 no variables, but are necessary due to the way ext2ed binds C commands
15 Here is the original copyright:
18 * linux/include/linux/ext2_fs.h
20 * Copyright (C) 1992, 1993, 1994 Remy Card (card@masi.ibp.fr)
21 * Laboratoire MASI - Institut Blaise Pascal
22 * Universite Pierre et Marie Curie (Paris VI)
26 * linux/include/linux/minix_fs.h
28 * Copyright (C) 1991, 1992 Linus Torvalds
35 struct ext2_acl_header /* Header of Access Control Lists */
37 unsigned long aclh_size;
38 unsigned long aclh_file_count;
39 unsigned long aclh_acle_count;
40 unsigned long aclh_first_acle;
43 struct ext2_acl_entry /* Access Control List Entry */
45 unsigned long acle_size;
46 unsigned short acle_perms; /* Access permissions */
47 unsigned short acle_type; /* Type of entry */
48 unsigned short acle_tag; /* User or group identity */
49 unsigned short acle_pad1;
50 unsigned long acle_next; /* Pointer on next entry for the */
51 /* same inode or on next free entry */
55 * Structure of a blocks group descriptor
58 struct ext2_group_desc
60 __u32 bg_block_bitmap; /* Blocks bitmap block */
61 __u32 bg_inode_bitmap; /* Inodes bitmap block */
62 __u32 bg_inode_table; /* Inodes table block */
63 __u16 bg_free_blocks_count; /* Free blocks count */
64 __u16 bg_free_inodes_count; /* Free inodes count */
65 __u16 bg_used_dirs_count; /* Directories count */
73 * Structure of an inode on the disk
76 __u16 i_mode; /* File mode */
77 __u16 i_uid; /* Owner Uid */
78 __u32 i_size; /* Size in bytes */
79 __u32 i_atime; /* Access time */
80 __u32 i_ctime; /* Creation time */
81 __u32 i_mtime; /* Modification time */
82 __u32 i_dtime; /* Deletion Time */
83 __u16 i_gid; /* Group Id */
84 __u16 i_links_count; /* Links count */
85 __u32 i_blocks; /* Blocks count */
86 __u32 i_flags; /* File flags */
88 __u32 i_block[0]; /* Pointers to blocks */
89 __u32 i_block[1]; /* Pointers to blocks */
90 __u32 i_block[2]; /* Pointers to blocks */
91 __u32 i_block[3]; /* Pointers to blocks */
92 __u32 i_block[4]; /* Pointers to blocks */
93 __u32 i_block[5]; /* Pointers to blocks */
94 __u32 i_block[6]; /* Pointers to blocks */
95 __u32 i_block[7]; /* Pointers to blocks */
96 __u32 i_block[8]; /* Pointers to blocks */
97 __u32 i_block[9]; /* Pointers to blocks */
98 __u32 i_block[10]; /* Pointers to blocks */
99 __u32 i_block[11]; /* Pointers to blocks */
100 __u32 i_block[12]; /* Pointers to blocks */
101 __u32 i_block[13]; /* Pointers to blocks */
102 __u32 i_block[14]; /* Pointers to blocks */
103 __u32 i_version; /* File version (for NFS) */
104 __u32 i_file_acl; /* File ACL */
105 __u32 i_dir_acl; /* Directory ACL */
106 __u32 i_faddr; /* Fragment address */
107 __u8 l_i_frag; /* Fragment number */
108 __u8 l_i_fsize; /* Fragment size */
110 __u16 l_i_uid_high; /* these 2 fields */
111 __u16 l_i_gid_high; /* were reserved2[0] */
116 * Structure of the super block
118 struct ext2_super_block {
119 __u32 s_inodes_count; /* Inodes count */
120 __u32 s_blocks_count; /* Blocks count */
121 __u32 s_r_blocks_count; /* Reserved blocks count */
122 __u32 s_free_blocks_count; /* Free blocks count */
123 __u32 s_free_inodes_count; /* Free inodes count */
124 __u32 s_first_data_block; /* First Data Block */
125 __u32 s_log_block_size; /* Block size */
126 __s32 s_log_frag_size; /* Fragment size */
127 __u32 s_blocks_per_group; /* # Blocks per group */
128 __u32 s_frags_per_group; /* # Fragments per group */
129 __u32 s_inodes_per_group; /* # Inodes per group */
130 __u32 s_mtime; /* Mount time */
131 __u32 s_wtime; /* Write time */
132 __u16 s_mnt_count; /* Mount count */
133 __s16 s_max_mnt_count; /* Maximal mount count */
134 __u16 s_magic; /* Magic signature */
135 __u16 s_state; /* File system state */
136 __u16 s_errors; /* Behaviour when detecting errors */
137 __u16 s_minor_rev_level; /* minor revision level */
138 __u32 s_lastcheck; /* time of last check */
139 __u32 s_checkinterval; /* max. time between checks */
140 __u32 s_creator_os; /* OS */
141 __u32 s_rev_level; /* Revision level */
142 __u16 s_def_resuid; /* Default uid for reserved blocks */
143 __u16 s_def_resgid; /* Default gid for reserved blocks */
144 __u32 s_first_ino; /* First non-reserved inode */
145 __u16 s_inode_size; /* size of inode structure */
146 __u16 s_block_group_nr; /* block group # of this superblock */
147 __u32 s_feature_compat; /* compatible feature set */
148 __u32 s_feature_incompat; /* incompatible feature set */
149 __u32 s_feature_ro_compat; /* readonly-compatible feature set */
150 char[16] s_uuid; /* 128-bit uuid for volume */
151 char[16] s_volume_name; /* volume name */
152 char[64] s_last_mounted; /* directory where last mounted */
153 __u32 s_algorithm_usage_bitmap; /* For compression */
155 * Performance hints. Directory preallocation should only
156 * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
158 __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
159 __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
162 * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
164 char[16] s_journal_uuid; /* uuid of journal superblock */
165 __u32 s_journal_inum; /* inode number of journal file */
166 __u32 s_journal_dev; /* device number of journal file */
167 __u32 s_last_orphan; /* start of list of inodes to delete */
170 __u32 s_reserved[0]; /* Padding to the end of the block */
180 __u32 s_reserved[10];
181 __u32 s_reserved[11];
182 __u32 s_reserved[12];
183 __u32 s_reserved[13];
184 __u32 s_reserved[14];
185 __u32 s_reserved[15];
186 __u32 s_reserved[16];
187 __u32 s_reserved[17];
188 __u32 s_reserved[18];
189 __u32 s_reserved[19];
190 __u32 s_reserved[20];
191 __u32 s_reserved[21];
192 __u32 s_reserved[22];
193 __u32 s_reserved[23];
194 __u32 s_reserved[24];
195 __u32 s_reserved[25];
196 __u32 s_reserved[26];
197 __u32 s_reserved[27];
198 __u32 s_reserved[28];
199 __u32 s_reserved[29];
200 __u32 s_reserved[30];
201 __u32 s_reserved[31];
202 __u32 s_reserved[32];
203 __u32 s_reserved[33];
204 __u32 s_reserved[34];
205 __u32 s_reserved[35];
206 __u32 s_reserved[36];
207 __u32 s_reserved[37];
208 __u32 s_reserved[38];
209 __u32 s_reserved[39];
210 __u32 s_reserved[40];
211 __u32 s_reserved[41];
212 __u32 s_reserved[42];
213 __u32 s_reserved[43];
214 __u32 s_reserved[44];
215 __u32 s_reserved[45];
216 __u32 s_reserved[46];
217 __u32 s_reserved[47];
218 __u32 s_reserved[48];
219 __u32 s_reserved[49];
220 __u32 s_reserved[50];
221 __u32 s_reserved[51];
222 __u32 s_reserved[52];
223 __u32 s_reserved[53];
224 __u32 s_reserved[54];
225 __u32 s_reserved[55];
226 __u32 s_reserved[56];
227 __u32 s_reserved[57];
228 __u32 s_reserved[58];
229 __u32 s_reserved[59];
230 __u32 s_reserved[60];
231 __u32 s_reserved[61];
232 __u32 s_reserved[62];
233 __u32 s_reserved[63];
234 __u32 s_reserved[64];
235 __u32 s_reserved[65];
236 __u32 s_reserved[66];
237 __u32 s_reserved[67];
238 __u32 s_reserved[68];
239 __u32 s_reserved[69];
240 __u32 s_reserved[70];
241 __u32 s_reserved[71];
242 __u32 s_reserved[72];
243 __u32 s_reserved[73];
244 __u32 s_reserved[74];
245 __u32 s_reserved[75];
246 __u32 s_reserved[76];
247 __u32 s_reserved[77];
248 __u32 s_reserved[78];
249 __u32 s_reserved[79];
250 __u32 s_reserved[80];
251 __u32 s_reserved[81];
252 __u32 s_reserved[82];
253 __u32 s_reserved[83];
254 __u32 s_reserved[84];
255 __u32 s_reserved[85];
256 __u32 s_reserved[86];
257 __u32 s_reserved[87];
258 __u32 s_reserved[88];
259 __u32 s_reserved[89];
260 __u32 s_reserved[90];
261 __u32 s_reserved[91];
262 __u32 s_reserved[92];
263 __u32 s_reserved[93];
264 __u32 s_reserved[94];
265 __u32 s_reserved[95];
266 __u32 s_reserved[96];
267 __u32 s_reserved[97];
268 __u32 s_reserved[98];
269 __u32 s_reserved[99];
270 __u32 s_reserved[100];
271 __u32 s_reserved[101];
272 __u32 s_reserved[102];
273 __u32 s_reserved[103];
274 __u32 s_reserved[104];
275 __u32 s_reserved[105];
276 __u32 s_reserved[106];
277 __u32 s_reserved[107];
278 __u32 s_reserved[108];
279 __u32 s_reserved[109];
280 __u32 s_reserved[110];
281 __u32 s_reserved[111];
282 __u32 s_reserved[112];
283 __u32 s_reserved[113];
284 __u32 s_reserved[114];
285 __u32 s_reserved[115];
286 __u32 s_reserved[116];
287 __u32 s_reserved[117];
288 __u32 s_reserved[118];
289 __u32 s_reserved[119];
290 __u32 s_reserved[120];
291 __u32 s_reserved[121];
292 __u32 s_reserved[122];
293 __u32 s_reserved[123];
294 __u32 s_reserved[124];
295 __u32 s_reserved[125];
296 __u32 s_reserved[126];
297 __u32 s_reserved[127];
298 __u32 s_reserved[128];
299 __u32 s_reserved[129];
300 __u32 s_reserved[130];
301 __u32 s_reserved[131];
302 __u32 s_reserved[132];
303 __u32 s_reserved[133];
304 __u32 s_reserved[134];
305 __u32 s_reserved[135];
306 __u32 s_reserved[136];
307 __u32 s_reserved[137];
308 __u32 s_reserved[138];
309 __u32 s_reserved[139];
310 __u32 s_reserved[140];
311 __u32 s_reserved[141];
312 __u32 s_reserved[142];
313 __u32 s_reserved[143];
314 __u32 s_reserved[144];
315 __u32 s_reserved[145];
316 __u32 s_reserved[146];
317 __u32 s_reserved[147];
318 __u32 s_reserved[148];
319 __u32 s_reserved[149];
320 __u32 s_reserved[150];
321 __u32 s_reserved[151];
322 __u32 s_reserved[152];
323 __u32 s_reserved[153];
324 __u32 s_reserved[154];
325 __u32 s_reserved[155];
326 __u32 s_reserved[156];
327 __u32 s_reserved[157];
328 __u32 s_reserved[158];
329 __u32 s_reserved[159];
330 __u32 s_reserved[160];
331 __u32 s_reserved[161];
332 __u32 s_reserved[162];
333 __u32 s_reserved[163];
334 __u32 s_reserved[164];
335 __u32 s_reserved[165];
336 __u32 s_reserved[166];
337 __u32 s_reserved[167];
338 __u32 s_reserved[168];
339 __u32 s_reserved[169];
340 __u32 s_reserved[170];
341 __u32 s_reserved[171];
342 __u32 s_reserved[172];
343 __u32 s_reserved[173];
344 __u32 s_reserved[174];
345 __u32 s_reserved[175];
346 __u32 s_reserved[176];
347 __u32 s_reserved[177];
348 __u32 s_reserved[178];
349 __u32 s_reserved[179];
350 __u32 s_reserved[180];
351 __u32 s_reserved[181];
352 __u32 s_reserved[182];
353 __u32 s_reserved[183];
354 __u32 s_reserved[184];
355 __u32 s_reserved[185];
356 __u32 s_reserved[186];
357 __u32 s_reserved[187];
358 __u32 s_reserved[188];
359 __u32 s_reserved[189];
360 __u32 s_reserved[190];
361 __u32 s_reserved[191];
362 __u32 s_reserved[192];
363 __u32 s_reserved[193];
364 __u32 s_reserved[194];
365 __u32 s_reserved[195];
366 __u32 s_reserved[196];
369 The following is actually not used, due to the variable length of the
370 name field. EXT2ED handles directories through the type "dir" below.
373 * Structure of a directory entry
376 /* struct ext2_dir_entry { */
378 __u32 inode; /* Inode number */
379 __u16 rec_len; /* Directory entry length */
380 __u16 name_len; /* Name length */
381 char name[EXT2_NAME_LEN]; /* File name */
391 struct block_bitmap {
394 struct inode_bitmap {
397 struct ext2_dx_root_node {
404 __u16 dot_dot_rec_len;
405 __u8 dot_dot_name_len;
406 __u8 dot_dot_file_type;
407 char[4] dot_dot_name;
409 __u8 hash_version; /* 0 now, 1 at release */
410 __u8 info_length; /* 8 */
411 __u8 indirect_levels;
692 struct ext2_dx_int_node {