]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - db/field.h
xfsprogs: add crc format support to db
[thirdparty/xfsprogs-dev.git] / db / field.h
1 /*
2 * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc.
3 * All Rights Reserved.
4 *
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
7 * published by the Free Software Foundation.
8 *
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.
13 *
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
17 */
18
19 typedef enum fldt {
20 FLDT_AEXTNUM,
21 FLDT_AGBLOCK,
22 FLDT_AGBLOCKNZ,
23 FLDT_AGF,
24 FLDT_AGFL,
25 FLDT_AGFL_CRC,
26 FLDT_AGI,
27 FLDT_AGINO,
28 FLDT_AGINONN,
29 FLDT_AGNUMBER,
30 FLDT_ATTR,
31 FLDT_ATTR_BLKINFO,
32 FLDT_ATTR_LEAF_ENTRY,
33 FLDT_ATTR_LEAF_HDR,
34 FLDT_ATTR_LEAF_MAP,
35 FLDT_ATTR_LEAF_NAME,
36 FLDT_ATTR_NODE_ENTRY,
37 FLDT_ATTR_NODE_HDR,
38 FLDT_ATTR_SF_ENTRY,
39 FLDT_ATTR_SF_HDR,
40 FLDT_ATTRBLOCK,
41 FLDT_ATTRSHORT,
42 FLDT_BMAPBTA,
43 FLDT_BMAPBTA_CRC,
44 FLDT_BMAPBTAKEY,
45 FLDT_BMAPBTAPTR,
46 FLDT_BMAPBTAREC,
47 FLDT_BMAPBTD,
48 FLDT_BMAPBTD_CRC,
49 FLDT_BMAPBTDKEY,
50 FLDT_BMAPBTDPTR,
51 FLDT_BMAPBTDREC,
52 FLDT_BMROOTA,
53 FLDT_BMROOTAKEY,
54 FLDT_BMROOTAPTR,
55 FLDT_BMROOTD,
56 FLDT_BMROOTDKEY,
57 FLDT_BMROOTDPTR,
58 FLDT_BNOBT,
59 FLDT_BNOBT_CRC,
60 FLDT_BNOBTKEY,
61 FLDT_BNOBTPTR,
62 FLDT_BNOBTREC,
63 FLDT_CEXTFLG,
64 FLDT_CEXTLEN,
65 FLDT_CFILEOFFA,
66 FLDT_CFILEOFFD,
67 FLDT_CFSBLOCK,
68 FLDT_CHARNS,
69 FLDT_CHARS,
70 FLDT_CNTBT,
71 FLDT_CNTBT_CRC,
72 FLDT_CNTBTKEY,
73 FLDT_CNTBTPTR,
74 FLDT_CNTBTREC,
75 FLDT_DEV,
76 FLDT_DFILOFFA,
77 FLDT_DFILOFFD,
78 FLDT_DFSBNO,
79 FLDT_DINODE_A,
80 FLDT_DINODE_CORE,
81 FLDT_DINODE_FMT,
82 FLDT_DINODE_U,
83 FLDT_DINODE_V3,
84 FLDT_DIR2,
85 FLDT_DIR2_BLOCK_TAIL,
86 FLDT_DIR2_DATA_FREE,
87 FLDT_DIR2_DATA_HDR,
88 FLDT_DIR2_DATA_OFF,
89 FLDT_DIR2_DATA_OFFNZ,
90 FLDT_DIR2_DATA_UNION,
91 FLDT_DIR2_FREE_HDR,
92 FLDT_DIR2_INO4,
93 FLDT_DIR2_INO8,
94 FLDT_DIR2_INOU,
95 FLDT_DIR2_LEAF_ENTRY,
96 FLDT_DIR2_LEAF_HDR,
97 FLDT_DIR2_LEAF_TAIL,
98 FLDT_DIR2_SF_ENTRY,
99 FLDT_DIR2_SF_HDR,
100 FLDT_DIR2_SF_OFF,
101 FLDT_DIR2SF,
102 FLDT_DA_BLKINFO,
103 FLDT_DA_NODE_ENTRY,
104 FLDT_DA_NODE_HDR,
105 FLDT_DIRBLOCK,
106 FLDT_DISK_DQUOT,
107 FLDT_DQBLK,
108 FLDT_DQID,
109 FLDT_DRFSBNO,
110 FLDT_DRTBNO,
111 FLDT_EXTLEN,
112 FLDT_EXTNUM,
113 FLDT_FSIZE,
114 FLDT_INO,
115 FLDT_INOBT,
116 FLDT_INOBT_CRC,
117 FLDT_INOBTKEY,
118 FLDT_INOBTPTR,
119 FLDT_INOBTREC,
120 FLDT_INODE,
121 FLDT_INODE_CRC,
122 FLDT_INOFREE,
123 FLDT_INT16D,
124 FLDT_INT32D,
125 FLDT_INT64D,
126 FLDT_INT8D,
127 FLDT_NSEC,
128 FLDT_QCNT,
129 FLDT_QWARNCNT,
130 FLDT_SB,
131 FLDT_TIME,
132 FLDT_TIMESTAMP,
133 FLDT_UINT1,
134 FLDT_UINT16D,
135 FLDT_UINT16O,
136 FLDT_UINT16X,
137 FLDT_UINT32D,
138 FLDT_UINT32O,
139 FLDT_UINT32X,
140 FLDT_UINT64D,
141 FLDT_UINT64O,
142 FLDT_UINT64X,
143 FLDT_UINT8D,
144 FLDT_UINT8O,
145 FLDT_UINT8X,
146 FLDT_UUID,
147 FLDT_ZZZ /* mark last entry */
148 } fldt_t;
149
150 typedef int (*offset_fnc_t)(void *obj, int startoff, int idx);
151 #define OI(o) ((offset_fnc_t)(__psint_t)(o))
152
153 typedef int (*count_fnc_t)(void *obj, int startoff);
154 #define CI(c) ((count_fnc_t)(__psint_t)(c))
155 #define C1 CI(1)
156
157 typedef struct field
158 {
159 char *name;
160 fldt_t ftyp;
161 offset_fnc_t offset;
162 count_fnc_t count;
163 int flags;
164 typnm_t next;
165 } field_t;
166
167 /*
168 * flag values
169 */
170 #define FLD_ABASE1 1 /* field array base is 1 not 0 */
171 #define FLD_SKIPALL 2 /* skip this field in an all-fields print */
172 #define FLD_ARRAY 4 /* this field is an array */
173 #define FLD_OFFSET 8 /* offset value is a function pointer */
174 #define FLD_COUNT 16 /* count value is a function pointer */
175
176 typedef int (*size_fnc_t)(void *obj, int startoff, int idx);
177 #define SI(s) ((size_fnc_t)(__psint_t)(s))
178
179 typedef struct ftattr
180 {
181 fldt_t ftyp;
182 char *name;
183 prfnc_t prfunc;
184 char *fmtstr;
185 size_fnc_t size;
186 int arg;
187 adfnc_t adfunc;
188 const field_t *subfld;
189 } ftattr_t;
190 extern const ftattr_t ftattrtab[];
191
192 /*
193 * arg values
194 */
195 #define FTARG_SKIPZERO 1 /* skip 0 words */
196 #define FTARG_DONULL 2 /* make -1 words be "null" */
197 #define FTARG_SKIPNULL 4 /* skip -1 words */
198 #define FTARG_SIGNED 8 /* field value is signed */
199 #define FTARG_SIZE 16 /* size field is a function */
200 #define FTARG_SKIPNMS 32 /* skip printing names this time */
201 #define FTARG_OKEMPTY 64 /* ok if this (union type) is empty */
202
203 extern int bitoffset(const field_t *f, void *obj, int startoff,
204 int idx);
205 extern int fcount(const field_t *f, void *obj, int startoff);
206 extern const field_t *findfield(char *name, const field_t *fields,
207 void *obj, int startoff);
208 extern int fsize(const field_t *f, void *obj, int startoff,
209 int idx);