]>
Commit | Line | Data |
---|---|---|
2bd0ea18 | 1 | /* |
da23017d NS |
2 | * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. |
3 | * All Rights Reserved. | |
dfc130f3 | 4 | * |
da23017d NS |
5 | * This program is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU General Public License as | |
2bd0ea18 | 7 | * published by the Free Software Foundation. |
dfc130f3 | 8 | * |
da23017d NS |
9 | * This program is distributed in the hope that it would be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | * GNU General Public License for more details. | |
dfc130f3 | 13 | * |
da23017d NS |
14 | * You should have received a copy of the GNU General Public License |
15 | * along with this program; if not, write the Free Software Foundation, | |
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
2bd0ea18 NS |
17 | */ |
18 | ||
19 | typedef enum fldt { | |
20 | FLDT_AEXTNUM, | |
21 | FLDT_AGBLOCK, | |
22 | FLDT_AGBLOCKNZ, | |
23 | FLDT_AGF, | |
24 | FLDT_AGFL, | |
c2907bd7 | 25 | FLDT_AGFL_CRC, |
2bd0ea18 NS |
26 | FLDT_AGI, |
27 | FLDT_AGINO, | |
28 | FLDT_AGINONN, | |
29 | FLDT_AGNUMBER, | |
ad04ef4a DC |
30 | |
31 | /* attr fields */ | |
2bd0ea18 NS |
32 | FLDT_ATTR, |
33 | FLDT_ATTR_BLKINFO, | |
34 | FLDT_ATTR_LEAF_ENTRY, | |
35 | FLDT_ATTR_LEAF_HDR, | |
36 | FLDT_ATTR_LEAF_MAP, | |
37 | FLDT_ATTR_LEAF_NAME, | |
38 | FLDT_ATTR_NODE_ENTRY, | |
39 | FLDT_ATTR_NODE_HDR, | |
40 | FLDT_ATTR_SF_ENTRY, | |
41 | FLDT_ATTR_SF_HDR, | |
42 | FLDT_ATTRBLOCK, | |
43 | FLDT_ATTRSHORT, | |
ad04ef4a DC |
44 | |
45 | /* attr 3 specific fields */ | |
46 | FLDT_ATTR3, | |
47 | FLDT_ATTR3_LEAF_HDR, | |
48 | FLDT_ATTR3_NODE_HDR, | |
49 | ||
2bd0ea18 | 50 | FLDT_BMAPBTA, |
c2907bd7 | 51 | FLDT_BMAPBTA_CRC, |
2bd0ea18 NS |
52 | FLDT_BMAPBTAKEY, |
53 | FLDT_BMAPBTAPTR, | |
54 | FLDT_BMAPBTAREC, | |
55 | FLDT_BMAPBTD, | |
c2907bd7 | 56 | FLDT_BMAPBTD_CRC, |
2bd0ea18 NS |
57 | FLDT_BMAPBTDKEY, |
58 | FLDT_BMAPBTDPTR, | |
59 | FLDT_BMAPBTDREC, | |
60 | FLDT_BMROOTA, | |
61 | FLDT_BMROOTAKEY, | |
62 | FLDT_BMROOTAPTR, | |
63 | FLDT_BMROOTD, | |
64 | FLDT_BMROOTDKEY, | |
65 | FLDT_BMROOTDPTR, | |
66 | FLDT_BNOBT, | |
c2907bd7 | 67 | FLDT_BNOBT_CRC, |
2bd0ea18 NS |
68 | FLDT_BNOBTKEY, |
69 | FLDT_BNOBTPTR, | |
70 | FLDT_BNOBTREC, | |
71 | FLDT_CEXTFLG, | |
72 | FLDT_CEXTLEN, | |
73 | FLDT_CFILEOFFA, | |
74 | FLDT_CFILEOFFD, | |
75 | FLDT_CFSBLOCK, | |
76 | FLDT_CHARNS, | |
77 | FLDT_CHARS, | |
a9d7b986 DW |
78 | FLDT_REXTLEN, |
79 | FLDT_RFILEOFFD, | |
80 | FLDT_REXTFLG, | |
81 | FLDT_RATTRFORKFLG, | |
82 | FLDT_RBMBTFLG, | |
9fb2cb27 DW |
83 | FLDT_CAGBLOCK, |
84 | FLDT_CCOWFLG, | |
2bd0ea18 | 85 | FLDT_CNTBT, |
c2907bd7 | 86 | FLDT_CNTBT_CRC, |
2bd0ea18 NS |
87 | FLDT_CNTBTKEY, |
88 | FLDT_CNTBTPTR, | |
89 | FLDT_CNTBTREC, | |
a9d7b986 DW |
90 | FLDT_RMAPBT_CRC, |
91 | FLDT_RMAPBTKEY, | |
92 | FLDT_RMAPBTPTR, | |
93 | FLDT_RMAPBTREC, | |
9fb2cb27 DW |
94 | FLDT_REFCBT_CRC, |
95 | FLDT_REFCBTKEY, | |
96 | FLDT_REFCBTPTR, | |
97 | FLDT_REFCBTREC, | |
0522f1cc DC |
98 | |
99 | /* CRC field type */ | |
100 | FLDT_CRC, | |
101 | ||
2bd0ea18 NS |
102 | FLDT_DEV, |
103 | FLDT_DFILOFFA, | |
104 | FLDT_DFILOFFD, | |
105 | FLDT_DFSBNO, | |
106 | FLDT_DINODE_A, | |
107 | FLDT_DINODE_CORE, | |
108 | FLDT_DINODE_FMT, | |
109 | FLDT_DINODE_U, | |
c2907bd7 | 110 | FLDT_DINODE_V3, |
a364668b DC |
111 | |
112 | /* dir v2 fields */ | |
2bd0ea18 NS |
113 | FLDT_DIR2, |
114 | FLDT_DIR2_BLOCK_TAIL, | |
115 | FLDT_DIR2_DATA_FREE, | |
116 | FLDT_DIR2_DATA_HDR, | |
117 | FLDT_DIR2_DATA_OFF, | |
118 | FLDT_DIR2_DATA_OFFNZ, | |
119 | FLDT_DIR2_DATA_UNION, | |
120 | FLDT_DIR2_FREE_HDR, | |
121 | FLDT_DIR2_INO4, | |
122 | FLDT_DIR2_INO8, | |
123 | FLDT_DIR2_INOU, | |
124 | FLDT_DIR2_LEAF_ENTRY, | |
125 | FLDT_DIR2_LEAF_HDR, | |
126 | FLDT_DIR2_LEAF_TAIL, | |
127 | FLDT_DIR2_SF_ENTRY, | |
128 | FLDT_DIR2_SF_HDR, | |
129 | FLDT_DIR2_SF_OFF, | |
130 | FLDT_DIR2SF, | |
a364668b DC |
131 | |
132 | /* dir v3 fields */ | |
133 | FLDT_DIR3, | |
134 | FLDT_DIR3_BLKHDR, | |
135 | FLDT_DIR3_DATA_HDR, | |
136 | FLDT_DIR3_FREE_HDR, | |
137 | FLDT_DIR3_LEAF_HDR, | |
3beed08e DC |
138 | FLDT_DIR3_DATA_UNION, |
139 | FLDT_DIR3_SF_ENTRY, | |
140 | FLDT_DIR3SF, | |
a364668b DC |
141 | |
142 | /* dir v2/3 node fields */ | |
9a048535 DC |
143 | FLDT_DA_BLKINFO, |
144 | FLDT_DA_NODE_ENTRY, | |
145 | FLDT_DA_NODE_HDR, | |
a364668b DC |
146 | FLDT_DA3_BLKINFO, |
147 | FLDT_DA3_NODE_HDR, | |
148 | ||
2bd0ea18 | 149 | FLDT_DIRBLOCK, |
2bd0ea18 NS |
150 | FLDT_DISK_DQUOT, |
151 | FLDT_DQBLK, | |
152 | FLDT_DQID, | |
153 | FLDT_DRFSBNO, | |
154 | FLDT_DRTBNO, | |
155 | FLDT_EXTLEN, | |
156 | FLDT_EXTNUM, | |
157 | FLDT_FSIZE, | |
158 | FLDT_INO, | |
159 | FLDT_INOBT, | |
c2907bd7 | 160 | FLDT_INOBT_CRC, |
061e316e | 161 | FLDT_INOBT_SPCRC, |
2bd0ea18 NS |
162 | FLDT_INOBTKEY, |
163 | FLDT_INOBTPTR, | |
164 | FLDT_INOBTREC, | |
061e316e | 165 | FLDT_INOBTSPREC, |
2bd0ea18 | 166 | FLDT_INODE, |
c2907bd7 | 167 | FLDT_INODE_CRC, |
2bd0ea18 NS |
168 | FLDT_INOFREE, |
169 | FLDT_INT16D, | |
170 | FLDT_INT32D, | |
171 | FLDT_INT64D, | |
172 | FLDT_INT8D, | |
173 | FLDT_NSEC, | |
174 | FLDT_QCNT, | |
175 | FLDT_QWARNCNT, | |
176 | FLDT_SB, | |
3cafd875 DC |
177 | |
178 | /* CRC enabled symlink */ | |
179 | FLDT_SYMLINK_CRC, | |
180 | ||
2bd0ea18 NS |
181 | FLDT_TIME, |
182 | FLDT_TIMESTAMP, | |
183 | FLDT_UINT1, | |
184 | FLDT_UINT16D, | |
185 | FLDT_UINT16O, | |
186 | FLDT_UINT16X, | |
187 | FLDT_UINT32D, | |
188 | FLDT_UINT32O, | |
189 | FLDT_UINT32X, | |
190 | FLDT_UINT64D, | |
191 | FLDT_UINT64O, | |
192 | FLDT_UINT64X, | |
193 | FLDT_UINT8D, | |
194 | FLDT_UINT8O, | |
195 | FLDT_UINT8X, | |
196 | FLDT_UUID, | |
197 | FLDT_ZZZ /* mark last entry */ | |
198 | } fldt_t; | |
199 | ||
200 | typedef int (*offset_fnc_t)(void *obj, int startoff, int idx); | |
ee6cd73e | 201 | #define OI(o) ((offset_fnc_t)(intptr_t)(o)) |
2bd0ea18 NS |
202 | |
203 | typedef int (*count_fnc_t)(void *obj, int startoff); | |
ee6cd73e | 204 | #define CI(c) ((count_fnc_t)(intptr_t)(c)) |
2bd0ea18 NS |
205 | #define C1 CI(1) |
206 | ||
207 | typedef struct field | |
208 | { | |
209 | char *name; | |
210 | fldt_t ftyp; | |
211 | offset_fnc_t offset; | |
212 | count_fnc_t count; | |
213 | int flags; | |
214 | typnm_t next; | |
215 | } field_t; | |
216 | ||
217 | /* | |
218 | * flag values | |
219 | */ | |
220 | #define FLD_ABASE1 1 /* field array base is 1 not 0 */ | |
221 | #define FLD_SKIPALL 2 /* skip this field in an all-fields print */ | |
222 | #define FLD_ARRAY 4 /* this field is an array */ | |
223 | #define FLD_OFFSET 8 /* offset value is a function pointer */ | |
224 | #define FLD_COUNT 16 /* count value is a function pointer */ | |
225 | ||
226 | typedef int (*size_fnc_t)(void *obj, int startoff, int idx); | |
ee6cd73e | 227 | #define SI(s) ((size_fnc_t)(intptr_t)(s)) |
2bd0ea18 NS |
228 | |
229 | typedef struct ftattr | |
230 | { | |
231 | fldt_t ftyp; | |
232 | char *name; | |
233 | prfnc_t prfunc; | |
234 | char *fmtstr; | |
235 | size_fnc_t size; | |
236 | int arg; | |
237 | adfnc_t adfunc; | |
238 | const field_t *subfld; | |
239 | } ftattr_t; | |
240 | extern const ftattr_t ftattrtab[]; | |
241 | ||
242 | /* | |
243 | * arg values | |
244 | */ | |
245 | #define FTARG_SKIPZERO 1 /* skip 0 words */ | |
246 | #define FTARG_DONULL 2 /* make -1 words be "null" */ | |
247 | #define FTARG_SKIPNULL 4 /* skip -1 words */ | |
248 | #define FTARG_SIGNED 8 /* field value is signed */ | |
249 | #define FTARG_SIZE 16 /* size field is a function */ | |
250 | #define FTARG_SKIPNMS 32 /* skip printing names this time */ | |
251 | #define FTARG_OKEMPTY 64 /* ok if this (union type) is empty */ | |
252 | ||
253 | extern int bitoffset(const field_t *f, void *obj, int startoff, | |
254 | int idx); | |
255 | extern int fcount(const field_t *f, void *obj, int startoff); | |
256 | extern const field_t *findfield(char *name, const field_t *fields, | |
dfc130f3 | 257 | void *obj, int startoff); |
2bd0ea18 | 258 | extern int fsize(const field_t *f, void *obj, int startoff, |
dfc130f3 | 259 | int idx); |