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