Blame


1 0c98da8b 2005-07-13 devnull typedef struct Super Super;
2 0c98da8b 2005-07-13 devnull typedef struct Group Group;
3 0c98da8b 2005-07-13 devnull typedef struct Inode Inode;
4 0c98da8b 2005-07-13 devnull typedef struct Dirent Dirent;
5 0c98da8b 2005-07-13 devnull typedef struct Ext2 Ext2;
6 0c98da8b 2005-07-13 devnull
7 0c98da8b 2005-07-13 devnull enum
8 0c98da8b 2005-07-13 devnull {
9 0c98da8b 2005-07-13 devnull BYTESPERSEC = 512,
10 0c98da8b 2005-07-13 devnull
11 0c98da8b 2005-07-13 devnull SBOFF = 1024,
12 0c98da8b 2005-07-13 devnull SBSIZE = 1024,
13 0c98da8b 2005-07-13 devnull
14 0c98da8b 2005-07-13 devnull SUPERMAGIC = 0xEF53,
15 0c98da8b 2005-07-13 devnull MINBLOCKSIZE = 1024,
16 0c98da8b 2005-07-13 devnull MAXBLOCKSIZE = 4096,
17 0c98da8b 2005-07-13 devnull ROOTINODE = 2,
18 0c98da8b 2005-07-13 devnull FIRSTINODE = 11,
19 0c98da8b 2005-07-13 devnull VALIDFS = 0x0001,
20 0c98da8b 2005-07-13 devnull ERRORFS = 0x0002,
21 0c98da8b 2005-07-13 devnull
22 0c98da8b 2005-07-13 devnull NDIRBLOCKS = 12,
23 0c98da8b 2005-07-13 devnull INDBLOCK = NDIRBLOCKS,
24 0c98da8b 2005-07-13 devnull DINDBLOCK = INDBLOCK+1,
25 0c98da8b 2005-07-13 devnull TINDBLOCK = DINDBLOCK+1,
26 0c98da8b 2005-07-13 devnull NBLOCKS = TINDBLOCK+1,
27 0c98da8b 2005-07-13 devnull
28 0c98da8b 2005-07-13 devnull NAMELEN = 255,
29 0c98da8b 2005-07-13 devnull
30 079f5e94 2020-05-19 rsc /* some systems have these defined */
31 079f5e94 2020-05-19 rsc #undef IEXEC
32 079f5e94 2020-05-19 rsc #undef IWRITE
33 079f5e94 2020-05-19 rsc #undef IREAD
34 079f5e94 2020-05-19 rsc #undef ISVTX
35 079f5e94 2020-05-19 rsc #undef ISGID
36 079f5e94 2020-05-19 rsc #undef ISUID
37 079f5e94 2020-05-19 rsc #undef IFMT
38 079f5e94 2020-05-19 rsc #undef IFIFO
39 079f5e94 2020-05-19 rsc #undef IFCHR
40 079f5e94 2020-05-19 rsc #undef IFDIR
41 079f5e94 2020-05-19 rsc #undef IFBLK
42 079f5e94 2020-05-19 rsc #undef IFREG
43 079f5e94 2020-05-19 rsc #undef IFLNK
44 079f5e94 2020-05-19 rsc #undef IFSOCK
45 079f5e94 2020-05-19 rsc #undef IFWHT
46 079f5e94 2020-05-19 rsc
47 079f5e94 2020-05-19 rsc #define IEXEC EXT2_IEXEC
48 079f5e94 2020-05-19 rsc #define IWRITE EXT2_IWRITE
49 079f5e94 2020-05-19 rsc #define IREAD EXT2_IREAD
50 079f5e94 2020-05-19 rsc #define ISVTX EXT2_ISVTX
51 079f5e94 2020-05-19 rsc #define ISGID EXT2_ISGID
52 079f5e94 2020-05-19 rsc #define ISUID EXT2_ISUID
53 079f5e94 2020-05-19 rsc #define IFMT EXT2_IFMT
54 079f5e94 2020-05-19 rsc #define IFIFO EXT2_IFIFO
55 079f5e94 2020-05-19 rsc #define IFCHR EXT2_IFCHR
56 079f5e94 2020-05-19 rsc #define IFDIR EXT2_IFDIR
57 079f5e94 2020-05-19 rsc #define IFBLK EXT2_IFBLK
58 079f5e94 2020-05-19 rsc #define IFREG EXT2_IFREG
59 079f5e94 2020-05-19 rsc #define IFLNK EXT2_IFLNK
60 079f5e94 2020-05-19 rsc #define IFSOCK EXT2_IFSOCK
61 079f5e94 2020-05-19 rsc #define IFWHT EXT2_IFWHT
62 079f5e94 2020-05-19 rsc
63 0c98da8b 2005-07-13 devnull /* permissions in Inode.mode */
64 0c98da8b 2005-07-13 devnull IEXEC = 00100,
65 0c98da8b 2005-07-13 devnull IWRITE = 0200,
66 0c98da8b 2005-07-13 devnull IREAD = 0400,
67 0c98da8b 2005-07-13 devnull ISVTX = 01000,
68 0c98da8b 2005-07-13 devnull ISGID = 02000,
69 0c98da8b 2005-07-13 devnull ISUID = 04000,
70 0c98da8b 2005-07-13 devnull
71 0c98da8b 2005-07-13 devnull /* type in Inode.mode */
72 0c98da8b 2005-07-13 devnull IFMT = 0170000,
73 0c98da8b 2005-07-13 devnull IFIFO = 0010000,
74 0c98da8b 2005-07-13 devnull IFCHR = 0020000,
75 0c98da8b 2005-07-13 devnull IFDIR = 0040000,
76 0c98da8b 2005-07-13 devnull IFBLK = 0060000,
77 0c98da8b 2005-07-13 devnull IFREG = 0100000,
78 0c98da8b 2005-07-13 devnull IFLNK = 0120000,
79 0c98da8b 2005-07-13 devnull IFSOCK = 0140000,
80 cbeb0b26 2006-04-01 devnull IFWHT = 0160000
81 0c98da8b 2005-07-13 devnull };
82 0c98da8b 2005-07-13 devnull
83 0c98da8b 2005-07-13 devnull #define DIRLEN(namlen) (((namlen)+8+3)&~3)
84 0c98da8b 2005-07-13 devnull
85 0c98da8b 2005-07-13 devnull
86 0c98da8b 2005-07-13 devnull /*
87 83ab7d88 2007-11-27 rsc * Super block
88 0c98da8b 2005-07-13 devnull */
89 0c98da8b 2005-07-13 devnull struct Super
90 0c98da8b 2005-07-13 devnull {
91 0c98da8b 2005-07-13 devnull u32int ninode; /* Inodes count */
92 0c98da8b 2005-07-13 devnull u32int nblock; /* Blocks count */
93 0c98da8b 2005-07-13 devnull u32int rblockcount; /* Reserved blocks count */
94 0c98da8b 2005-07-13 devnull u32int freeblockcount; /* Free blocks count */
95 0c98da8b 2005-07-13 devnull u32int freeinodecount; /* Free inodes count */
96 0c98da8b 2005-07-13 devnull u32int firstdatablock; /* First Data Block */
97 0c98da8b 2005-07-13 devnull u32int logblocksize; /* Block size */
98 0c98da8b 2005-07-13 devnull u32int logfragsize; /* Fragment size */
99 0c98da8b 2005-07-13 devnull u32int blockspergroup; /* # Blocks per group */
100 0c98da8b 2005-07-13 devnull u32int fragpergroup; /* # Fragments per group */
101 0c98da8b 2005-07-13 devnull u32int inospergroup; /* # Inodes per group */
102 0c98da8b 2005-07-13 devnull u32int mtime; /* Mount time */
103 0c98da8b 2005-07-13 devnull u32int wtime; /* Write time */
104 0c98da8b 2005-07-13 devnull u16int mntcount; /* Mount count */
105 0c98da8b 2005-07-13 devnull u16int maxmntcount; /* Maximal mount count */
106 0c98da8b 2005-07-13 devnull u16int magic; /* Magic signature */
107 0c98da8b 2005-07-13 devnull u16int state; /* File system state */
108 0c98da8b 2005-07-13 devnull u16int errors; /* Behaviour when detecting errors */
109 0c98da8b 2005-07-13 devnull u16int pad;
110 0c98da8b 2005-07-13 devnull u32int lastcheck; /* time of last check */
111 0c98da8b 2005-07-13 devnull u32int checkinterval; /* max. time between checks */
112 0c98da8b 2005-07-13 devnull u32int creatoros; /* OS */
113 0c98da8b 2005-07-13 devnull u32int revlevel; /* Revision level */
114 0c98da8b 2005-07-13 devnull u16int defresuid; /* Default uid for reserved blocks */
115 0c98da8b 2005-07-13 devnull u16int defresgid; /* Default gid for reserved blocks */
116 fa325e9b 2020-01-10 cross
117 d29f5ece 2008-06-01 rsc /* the following are only available with revlevel = 1 */
118 d29f5ece 2008-06-01 rsc u32int firstino; /* First non-reserved inode */
119 d29f5ece 2008-06-01 rsc u16int inosize; /* size of inode structure */
120 d29f5ece 2008-06-01 rsc u16int blockgroupnr; /* block group # of this super block */
121 d29f5ece 2008-06-01 rsc u32int reserved[233]; /* Padding to the end of the block */
122 0c98da8b 2005-07-13 devnull };
123 0c98da8b 2005-07-13 devnull
124 0c98da8b 2005-07-13 devnull /*
125 83ab7d88 2007-11-27 rsc * Block group
126 0c98da8b 2005-07-13 devnull */
127 0c98da8b 2005-07-13 devnull struct Group
128 0c98da8b 2005-07-13 devnull {
129 0c98da8b 2005-07-13 devnull u32int bitblock; /* Blocks bitmap block */
130 0c98da8b 2005-07-13 devnull u32int inodebitblock; /* Inodes bitmap block */
131 0c98da8b 2005-07-13 devnull u32int inodeaddr; /* Inodes table block */
132 0c98da8b 2005-07-13 devnull u16int freeblockscount; /* Free blocks count */
133 0c98da8b 2005-07-13 devnull u16int freeinodescount; /* Free inodes count */
134 0c98da8b 2005-07-13 devnull u16int useddirscount; /* Directories count */
135 0c98da8b 2005-07-13 devnull };
136 0c98da8b 2005-07-13 devnull enum
137 0c98da8b 2005-07-13 devnull {
138 0c98da8b 2005-07-13 devnull GroupSize = 32
139 0c98da8b 2005-07-13 devnull };
140 0c98da8b 2005-07-13 devnull
141 0c98da8b 2005-07-13 devnull /*
142 83ab7d88 2007-11-27 rsc * Inode
143 0c98da8b 2005-07-13 devnull */
144 0c98da8b 2005-07-13 devnull struct Inode
145 0c98da8b 2005-07-13 devnull {
146 0c98da8b 2005-07-13 devnull u16int mode; /* File mode */
147 0c98da8b 2005-07-13 devnull u16int uid; /* Owner Uid */
148 0c98da8b 2005-07-13 devnull u32int size; /* Size in bytes */
149 0c98da8b 2005-07-13 devnull u32int atime; /* Access time */
150 0c98da8b 2005-07-13 devnull u32int ctime; /* Creation time */
151 0c98da8b 2005-07-13 devnull u32int mtime; /* Modification time */
152 0c98da8b 2005-07-13 devnull u32int dtime; /* Deletion Time */
153 0c98da8b 2005-07-13 devnull u16int gid; /* Group Id */
154 0c98da8b 2005-07-13 devnull u16int nlink; /* Links count */
155 0c98da8b 2005-07-13 devnull u32int nblock; /* Blocks count */
156 0c98da8b 2005-07-13 devnull u32int flags; /* File flags */
157 0c98da8b 2005-07-13 devnull u32int block[NBLOCKS];/* Pointers to blocks */
158 0c98da8b 2005-07-13 devnull u32int version; /* File version (for NFS) */
159 0c98da8b 2005-07-13 devnull u32int fileacl; /* File ACL */
160 b109049f 2007-03-25 devnull u32int diracl; /* Directory ACL or high size bits */
161 0c98da8b 2005-07-13 devnull u32int faddr; /* Fragment address */
162 0c98da8b 2005-07-13 devnull };
163 0c98da8b 2005-07-13 devnull
164 0c98da8b 2005-07-13 devnull /*
165 83ab7d88 2007-11-27 rsc * Directory entry
166 0c98da8b 2005-07-13 devnull */
167 0c98da8b 2005-07-13 devnull struct Dirent
168 0c98da8b 2005-07-13 devnull {
169 0c98da8b 2005-07-13 devnull u32int ino; /* Inode number */
170 0c98da8b 2005-07-13 devnull u16int reclen; /* Directory entry length */
171 0c98da8b 2005-07-13 devnull u8int namlen; /* Name length */
172 83ab7d88 2007-11-27 rsc char *name; /* File name */
173 0c98da8b 2005-07-13 devnull };
174 0c98da8b 2005-07-13 devnull enum
175 0c98da8b 2005-07-13 devnull {
176 cbeb0b26 2006-04-01 devnull MinDirentSize = 4+2+1+1
177 0c98da8b 2005-07-13 devnull };
178 0c98da8b 2005-07-13 devnull
179 0c98da8b 2005-07-13 devnull /*
180 0c98da8b 2005-07-13 devnull * In-core fs info.
181 0c98da8b 2005-07-13 devnull */
182 0c98da8b 2005-07-13 devnull struct Ext2
183 0c98da8b 2005-07-13 devnull {
184 0c98da8b 2005-07-13 devnull uint blocksize;
185 0c98da8b 2005-07-13 devnull uint nblock;
186 0c98da8b 2005-07-13 devnull uint ngroup;
187 0c98da8b 2005-07-13 devnull uint inospergroup;
188 0c98da8b 2005-07-13 devnull uint blockspergroup;
189 0c98da8b 2005-07-13 devnull uint inosperblock;
190 d29f5ece 2008-06-01 rsc uint inosize;
191 0c98da8b 2005-07-13 devnull uint groupaddr;
192 0c98da8b 2005-07-13 devnull uint descperblock;
193 0c98da8b 2005-07-13 devnull uint firstblock;
194 0c98da8b 2005-07-13 devnull Disk *disk;
195 0c98da8b 2005-07-13 devnull Fsys *fsys;
196 0c98da8b 2005-07-13 devnull };