]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blame - db/field.h
xfs_db: print transaction reservation type information
[thirdparty/xfsprogs-dev.git] / db / field.h
CommitLineData
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
19typedef 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,
73a423b1 47 FLDT_ATTR3_BLKINFO,
ad04ef4a
DC
48 FLDT_ATTR3_LEAF_HDR,
49 FLDT_ATTR3_NODE_HDR,
29b90b5b 50 FLDT_ATTR3_REMOTE_HDR,
ad04ef4a 51
2bd0ea18 52 FLDT_BMAPBTA,
c2907bd7 53 FLDT_BMAPBTA_CRC,
2bd0ea18
NS
54 FLDT_BMAPBTAKEY,
55 FLDT_BMAPBTAPTR,
56 FLDT_BMAPBTAREC,
57 FLDT_BMAPBTD,
c2907bd7 58 FLDT_BMAPBTD_CRC,
2bd0ea18
NS
59 FLDT_BMAPBTDKEY,
60 FLDT_BMAPBTDPTR,
61 FLDT_BMAPBTDREC,
62 FLDT_BMROOTA,
63 FLDT_BMROOTAKEY,
64 FLDT_BMROOTAPTR,
65 FLDT_BMROOTD,
66 FLDT_BMROOTDKEY,
67 FLDT_BMROOTDPTR,
68 FLDT_BNOBT,
c2907bd7 69 FLDT_BNOBT_CRC,
2bd0ea18
NS
70 FLDT_BNOBTKEY,
71 FLDT_BNOBTPTR,
72 FLDT_BNOBTREC,
73 FLDT_CEXTFLG,
74 FLDT_CEXTLEN,
75 FLDT_CFILEOFFA,
76 FLDT_CFILEOFFD,
77 FLDT_CFSBLOCK,
78 FLDT_CHARNS,
79 FLDT_CHARS,
a9d7b986
DW
80 FLDT_REXTLEN,
81 FLDT_RFILEOFFD,
82 FLDT_REXTFLG,
83 FLDT_RATTRFORKFLG,
84 FLDT_RBMBTFLG,
9fb2cb27
DW
85 FLDT_CAGBLOCK,
86 FLDT_CCOWFLG,
2bd0ea18 87 FLDT_CNTBT,
c2907bd7 88 FLDT_CNTBT_CRC,
2bd0ea18
NS
89 FLDT_CNTBTKEY,
90 FLDT_CNTBTPTR,
91 FLDT_CNTBTREC,
a9d7b986
DW
92 FLDT_RMAPBT_CRC,
93 FLDT_RMAPBTKEY,
94 FLDT_RMAPBTPTR,
95 FLDT_RMAPBTREC,
9fb2cb27
DW
96 FLDT_REFCBT_CRC,
97 FLDT_REFCBTKEY,
98 FLDT_REFCBTPTR,
99 FLDT_REFCBTREC,
0522f1cc
DC
100
101 /* CRC field type */
102 FLDT_CRC,
103
2bd0ea18
NS
104 FLDT_DEV,
105 FLDT_DFILOFFA,
106 FLDT_DFILOFFD,
107 FLDT_DFSBNO,
108 FLDT_DINODE_A,
109 FLDT_DINODE_CORE,
110 FLDT_DINODE_FMT,
111 FLDT_DINODE_U,
c2907bd7 112 FLDT_DINODE_V3,
a364668b
DC
113
114 /* dir v2 fields */
2bd0ea18
NS
115 FLDT_DIR2,
116 FLDT_DIR2_BLOCK_TAIL,
117 FLDT_DIR2_DATA_FREE,
118 FLDT_DIR2_DATA_HDR,
119 FLDT_DIR2_DATA_OFF,
120 FLDT_DIR2_DATA_OFFNZ,
121 FLDT_DIR2_DATA_UNION,
122 FLDT_DIR2_FREE_HDR,
123 FLDT_DIR2_INO4,
124 FLDT_DIR2_INO8,
125 FLDT_DIR2_INOU,
126 FLDT_DIR2_LEAF_ENTRY,
127 FLDT_DIR2_LEAF_HDR,
128 FLDT_DIR2_LEAF_TAIL,
129 FLDT_DIR2_SF_ENTRY,
130 FLDT_DIR2_SF_HDR,
131 FLDT_DIR2_SF_OFF,
132 FLDT_DIR2SF,
a364668b
DC
133
134 /* dir v3 fields */
135 FLDT_DIR3,
136 FLDT_DIR3_BLKHDR,
137 FLDT_DIR3_DATA_HDR,
138 FLDT_DIR3_FREE_HDR,
139 FLDT_DIR3_LEAF_HDR,
3beed08e
DC
140 FLDT_DIR3_DATA_UNION,
141 FLDT_DIR3_SF_ENTRY,
142 FLDT_DIR3SF,
a364668b
DC
143
144 /* dir v2/3 node fields */
9a048535
DC
145 FLDT_DA_BLKINFO,
146 FLDT_DA_NODE_ENTRY,
147 FLDT_DA_NODE_HDR,
a364668b
DC
148 FLDT_DA3_BLKINFO,
149 FLDT_DA3_NODE_HDR,
150
2bd0ea18 151 FLDT_DIRBLOCK,
2bd0ea18
NS
152 FLDT_DISK_DQUOT,
153 FLDT_DQBLK,
154 FLDT_DQID,
155 FLDT_DRFSBNO,
156 FLDT_DRTBNO,
157 FLDT_EXTLEN,
158 FLDT_EXTNUM,
159 FLDT_FSIZE,
160 FLDT_INO,
161 FLDT_INOBT,
c2907bd7 162 FLDT_INOBT_CRC,
061e316e 163 FLDT_INOBT_SPCRC,
2bd0ea18
NS
164 FLDT_INOBTKEY,
165 FLDT_INOBTPTR,
166 FLDT_INOBTREC,
061e316e 167 FLDT_INOBTSPREC,
2bd0ea18 168 FLDT_INODE,
c2907bd7 169 FLDT_INODE_CRC,
2bd0ea18
NS
170 FLDT_INOFREE,
171 FLDT_INT16D,
172 FLDT_INT32D,
173 FLDT_INT64D,
174 FLDT_INT8D,
175 FLDT_NSEC,
176 FLDT_QCNT,
177 FLDT_QWARNCNT,
178 FLDT_SB,
3cafd875
DC
179
180 /* CRC enabled symlink */
181 FLDT_SYMLINK_CRC,
182
2bd0ea18
NS
183 FLDT_TIME,
184 FLDT_TIMESTAMP,
185 FLDT_UINT1,
186 FLDT_UINT16D,
187 FLDT_UINT16O,
188 FLDT_UINT16X,
189 FLDT_UINT32D,
190 FLDT_UINT32O,
191 FLDT_UINT32X,
192 FLDT_UINT64D,
193 FLDT_UINT64O,
194 FLDT_UINT64X,
195 FLDT_UINT8D,
196 FLDT_UINT8O,
197 FLDT_UINT8X,
198 FLDT_UUID,
199 FLDT_ZZZ /* mark last entry */
200} fldt_t;
201
202typedef int (*offset_fnc_t)(void *obj, int startoff, int idx);
ee6cd73e 203#define OI(o) ((offset_fnc_t)(intptr_t)(o))
2bd0ea18
NS
204
205typedef int (*count_fnc_t)(void *obj, int startoff);
ee6cd73e 206#define CI(c) ((count_fnc_t)(intptr_t)(c))
2bd0ea18
NS
207#define C1 CI(1)
208
209typedef struct field
210{
211 char *name;
212 fldt_t ftyp;
213 offset_fnc_t offset;
214 count_fnc_t count;
215 int flags;
216 typnm_t next;
217} field_t;
218
219/*
220 * flag values
221 */
222#define FLD_ABASE1 1 /* field array base is 1 not 0 */
223#define FLD_SKIPALL 2 /* skip this field in an all-fields print */
224#define FLD_ARRAY 4 /* this field is an array */
225#define FLD_OFFSET 8 /* offset value is a function pointer */
226#define FLD_COUNT 16 /* count value is a function pointer */
227
228typedef int (*size_fnc_t)(void *obj, int startoff, int idx);
ee6cd73e 229#define SI(s) ((size_fnc_t)(intptr_t)(s))
2bd0ea18
NS
230
231typedef struct ftattr
232{
233 fldt_t ftyp;
234 char *name;
235 prfnc_t prfunc;
236 char *fmtstr;
237 size_fnc_t size;
238 int arg;
239 adfnc_t adfunc;
240 const field_t *subfld;
241} ftattr_t;
242extern const ftattr_t ftattrtab[];
243
244/*
245 * arg values
246 */
247#define FTARG_SKIPZERO 1 /* skip 0 words */
248#define FTARG_DONULL 2 /* make -1 words be "null" */
249#define FTARG_SKIPNULL 4 /* skip -1 words */
250#define FTARG_SIGNED 8 /* field value is signed */
251#define FTARG_SIZE 16 /* size field is a function */
252#define FTARG_SKIPNMS 32 /* skip printing names this time */
253#define FTARG_OKEMPTY 64 /* ok if this (union type) is empty */
254
255extern int bitoffset(const field_t *f, void *obj, int startoff,
256 int idx);
257extern int fcount(const field_t *f, void *obj, int startoff);
258extern const field_t *findfield(char *name, const field_t *fields,
dfc130f3 259 void *obj, int startoff);
2bd0ea18 260extern int fsize(const field_t *f, void *obj, int startoff,
dfc130f3 261 int idx);