]>
git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - db/field.c
2 * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc.
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.
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.
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
33 #include "attrshort.h"
39 const ftattr_t ftattrtab
[] = {
40 { FLDT_AEXTNUM
, "aextnum", fp_num
, "%d", SI(bitsz(xfs_aextnum_t
)),
41 FTARG_SIGNED
, NULL
, NULL
},
42 { FLDT_AGBLOCK
, "agblock", fp_num
, "%u", SI(bitsz(xfs_agblock_t
)),
43 FTARG_DONULL
, fa_agblock
, NULL
},
44 { FLDT_AGBLOCKNZ
, "agblocknz", fp_num
, "%u", SI(bitsz(xfs_agblock_t
)),
45 FTARG_SKIPZERO
|FTARG_DONULL
, fa_agblock
, NULL
},
46 { FLDT_AGF
, "agf", NULL
, (char *)agf_flds
, agf_size
, FTARG_SIZE
, NULL
,
48 { FLDT_AGFL
, "agfl", NULL
, (char *)agfl_flds
, agfl_size
, FTARG_SIZE
,
50 { FLDT_AGFL_CRC
, "agfl", NULL
, (char *)agfl_crc_flds
, agfl_size
,
51 FTARG_SIZE
, NULL
, agfl_crc_flds
},
52 { FLDT_AGI
, "agi", NULL
, (char *)agi_flds
, agi_size
, FTARG_SIZE
, NULL
,
54 { FLDT_AGINO
, "agino", fp_num
, "%u", SI(bitsz(xfs_agino_t
)),
55 FTARG_DONULL
, fa_agino
, NULL
},
56 { FLDT_AGINONN
, "aginonn", fp_num
, "%u", SI(bitsz(xfs_agino_t
)),
57 FTARG_SKIPNULL
, fa_agino
, NULL
},
58 { FLDT_AGNUMBER
, "agnumber", fp_num
, "%u", SI(bitsz(xfs_agnumber_t
)),
59 FTARG_DONULL
, NULL
, NULL
},
62 { FLDT_ATTR
, "attr", NULL
, (char *)attr_flds
, attr_size
, FTARG_SIZE
,
64 { FLDT_ATTR_BLKINFO
, "attr_blkinfo", NULL
, (char *)attr_blkinfo_flds
,
65 SI(bitsz(struct xfs_da_blkinfo
)), 0, NULL
, attr_blkinfo_flds
},
66 { FLDT_ATTR_LEAF_ENTRY
, "attr_leaf_entry", fp_sarray
,
67 (char *)attr_leaf_entry_flds
, SI(bitsz(struct xfs_attr_leaf_entry
)),
68 0, NULL
, attr_leaf_entry_flds
},
69 { FLDT_ATTR_LEAF_HDR
, "attr_leaf_hdr", NULL
, (char *)attr_leaf_hdr_flds
,
70 SI(bitsz(struct xfs_attr_leaf_hdr
)), 0, NULL
, attr_leaf_hdr_flds
},
71 { FLDT_ATTR_LEAF_MAP
, "attr_leaf_map", fp_sarray
,
72 (char *)attr_leaf_map_flds
, SI(bitsz(struct xfs_attr_leaf_map
)), 0,
73 NULL
, attr_leaf_map_flds
},
74 { FLDT_ATTR_LEAF_NAME
, "attr_leaf_name", NULL
,
75 (char *)attr_leaf_name_flds
, attr_leaf_name_size
, FTARG_SIZE
, NULL
,
76 attr_leaf_name_flds
},
77 { FLDT_ATTR_NODE_ENTRY
, "attr_node_entry", fp_sarray
,
78 (char *)attr_node_entry_flds
, SI(bitsz(struct xfs_da_node_entry
)), 0,
79 NULL
, attr_node_entry_flds
},
80 { FLDT_ATTR_NODE_HDR
, "attr_node_hdr", NULL
, (char *)attr_node_hdr_flds
,
81 SI(bitsz(struct xfs_da_node_hdr
)), 0, NULL
, attr_node_hdr_flds
},
82 { FLDT_ATTR_SF_ENTRY
, "attr_sf_entry", NULL
, (char *)attr_sf_entry_flds
,
83 attr_sf_entry_size
, FTARG_SIZE
, NULL
, attr_sf_entry_flds
},
84 { FLDT_ATTR_SF_HDR
, "attr_sf_hdr", NULL
, (char *)attr_sf_hdr_flds
,
85 SI(bitsz(struct xfs_attr_sf_hdr
)), 0, NULL
, attr_sf_hdr_flds
},
86 { FLDT_ATTRBLOCK
, "attrblock", fp_num
, "%u", SI(bitsz(uint32_t)), 0,
88 { FLDT_ATTRSHORT
, "attrshort", NULL
, (char *)attr_shortform_flds
,
89 attrshort_size
, FTARG_SIZE
, NULL
, attr_shortform_flds
},
91 /* attr3 specific fields */
92 { FLDT_ATTR3
, "attr3", NULL
, (char *)attr3_flds
, attr_size
, FTARG_SIZE
,
94 { FLDT_ATTR3_BLKINFO
, "attr3_blkinfo", NULL
, (char *)attr3_blkinfo_flds
,
95 SI(bitsz(struct xfs_da3_blkinfo
)), 0, NULL
, attr3_blkinfo_flds
},
96 { FLDT_ATTR3_LEAF_HDR
, "attr3_leaf_hdr", NULL
,
97 (char *)attr3_leaf_hdr_flds
, SI(bitsz(struct xfs_attr3_leaf_hdr
)),
98 0, NULL
, attr3_leaf_hdr_flds
},
99 { FLDT_ATTR3_NODE_HDR
, "attr3_node_hdr", NULL
,
100 (char *)attr3_node_hdr_flds
, SI(bitsz(struct xfs_da3_node_hdr
)),
101 0, NULL
, attr3_node_hdr_flds
},
102 { FLDT_ATTR3_REMOTE_HDR
, "attr3_remote_hdr", NULL
,
103 (char *)attr3_remote_crc_flds
, attr_size
, FTARG_SIZE
, NULL
,
104 attr3_remote_crc_flds
},
106 { FLDT_BMAPBTA
, "bmapbta", NULL
, (char *)bmapbta_flds
, btblock_size
,
107 FTARG_SIZE
, NULL
, bmapbta_flds
},
108 { FLDT_BMAPBTA_CRC
, "bmapbta", NULL
, (char *)bmapbta_crc_flds
,
109 btblock_size
, FTARG_SIZE
, NULL
, bmapbta_crc_flds
},
110 { FLDT_BMAPBTAKEY
, "bmapbtakey", fp_sarray
, (char *)bmapbta_key_flds
,
111 SI(bitsz(xfs_bmbt_key_t
)), 0, NULL
, bmapbta_key_flds
},
112 { FLDT_BMAPBTAPTR
, "bmapbtaptr", fp_num
, "%llu",
113 SI(bitsz(xfs_bmbt_ptr_t
)), 0, fa_dfsbno
, NULL
},
114 { FLDT_BMAPBTAREC
, "bmapbtarec", fp_sarray
, (char *)bmapbta_rec_flds
,
115 SI(bitsz(xfs_bmbt_rec_t
)), 0, NULL
, bmapbta_rec_flds
},
116 { FLDT_BMAPBTD
, "bmapbtd", NULL
, (char *)bmapbtd_flds
, btblock_size
,
117 FTARG_SIZE
, NULL
, bmapbtd_flds
},
118 { FLDT_BMAPBTD_CRC
, "bmapbtd", NULL
, (char *)bmapbtd_crc_flds
,
119 btblock_size
, FTARG_SIZE
, NULL
, bmapbtd_crc_flds
},
120 { FLDT_BMAPBTDKEY
, "bmapbtdkey", fp_sarray
, (char *)bmapbtd_key_flds
,
121 SI(bitsz(xfs_bmbt_key_t
)), 0, NULL
, bmapbtd_key_flds
},
122 { FLDT_BMAPBTDPTR
, "bmapbtdptr", fp_num
, "%llu",
123 SI(bitsz(xfs_bmbt_ptr_t
)), 0, fa_dfsbno
, NULL
},
124 { FLDT_BMAPBTDREC
, "bmapbtdrec", fp_sarray
, (char *)bmapbtd_rec_flds
,
125 SI(bitsz(xfs_bmbt_rec_t
)), 0, NULL
, bmapbtd_rec_flds
},
126 { FLDT_BMROOTA
, "bmroota", NULL
, (char *)bmroota_flds
, bmroota_size
,
127 FTARG_SIZE
, NULL
, bmroota_flds
},
128 { FLDT_BMROOTAKEY
, "bmrootakey", fp_sarray
, (char *)bmroota_key_flds
,
129 SI(bitsz(xfs_bmdr_key_t
)), 0, NULL
, bmroota_key_flds
},
130 { FLDT_BMROOTAPTR
, "bmrootaptr", fp_num
, "%llu",
131 SI(bitsz(xfs_bmdr_ptr_t
)), 0, fa_dfsbno
, NULL
},
132 { FLDT_BMROOTD
, "bmrootd", NULL
, (char *)bmrootd_flds
, bmrootd_size
,
133 FTARG_SIZE
, NULL
, bmrootd_flds
},
134 { FLDT_BMROOTDKEY
, "bmrootdkey", fp_sarray
, (char *)bmrootd_key_flds
,
135 SI(bitsz(xfs_bmdr_key_t
)), 0, NULL
, bmrootd_key_flds
},
136 { FLDT_BMROOTDPTR
, "bmrootdptr", fp_num
, "%llu",
137 SI(bitsz(xfs_bmdr_ptr_t
)), 0, fa_dfsbno
, NULL
},
138 { FLDT_BNOBT
, "bnobt", NULL
, (char *)bnobt_flds
, btblock_size
, FTARG_SIZE
,
140 { FLDT_BNOBT_CRC
, "bnobt", NULL
, (char *)bnobt_crc_flds
, btblock_size
,
141 FTARG_SIZE
, NULL
, bnobt_crc_flds
},
142 { FLDT_BNOBTKEY
, "bnobtkey", fp_sarray
, (char *)bnobt_key_flds
,
143 SI(bitsz(xfs_alloc_key_t
)), 0, NULL
, bnobt_key_flds
},
144 { FLDT_BNOBTPTR
, "bnobtptr", fp_num
, "%u", SI(bitsz(xfs_alloc_ptr_t
)),
145 0, fa_agblock
, NULL
},
146 { FLDT_BNOBTREC
, "bnobtrec", fp_sarray
, (char *)bnobt_rec_flds
,
147 SI(bitsz(xfs_alloc_rec_t
)), 0, NULL
, bnobt_rec_flds
},
148 { FLDT_CEXTFLG
, "cextflag", fp_num
, "%u", SI(BMBT_EXNTFLAG_BITLEN
), 0,
150 { FLDT_CEXTLEN
, "cextlen", fp_num
, "%u", SI(BMBT_BLOCKCOUNT_BITLEN
), 0,
152 { FLDT_CFILEOFFA
, "cfileoffa", fp_num
, "%llu", SI(BMBT_STARTOFF_BITLEN
),
153 0, fa_cfileoffa
, NULL
},
154 { FLDT_CFILEOFFD
, "cfileoffd", fp_num
, "%llu", SI(BMBT_STARTOFF_BITLEN
),
155 0, fa_cfileoffd
, NULL
},
156 { FLDT_CFSBLOCK
, "cfsblock", fp_num
, "%llu", SI(BMBT_STARTBLOCK_BITLEN
),
157 0, fa_cfsblock
, NULL
},
158 { FLDT_CHARNS
, "charns", fp_charns
, NULL
, SI(bitsz(char)), 0, NULL
,
160 { FLDT_CHARS
, "chars", fp_num
, "%c", SI(bitsz(char)), 0, NULL
, NULL
},
161 { FLDT_REXTLEN
, "rextlen", fp_num
, "%u", SI(RMAPBT_BLOCKCOUNT_BITLEN
),
163 { FLDT_RFILEOFFD
, "rfileoffd", fp_num
, "%llu", SI(RMAPBT_OFFSET_BITLEN
),
165 { FLDT_REXTFLG
, "rextflag", fp_num
, "%u", SI(RMAPBT_EXNTFLAG_BITLEN
), 0,
167 { FLDT_RATTRFORKFLG
, "rattrforkflag", fp_num
, "%u", SI(RMAPBT_ATTRFLAG_BITLEN
), 0,
169 { FLDT_RBMBTFLG
, "rbmbtflag", fp_num
, "%u", SI(RMAPBT_BMBTFLAG_BITLEN
), 0,
171 { FLDT_CAGBLOCK
, "cagblock", fp_num
, "%u", SI(REFCNTBT_AGBLOCK_BITLEN
),
172 FTARG_DONULL
, fa_agblock
, NULL
},
173 { FLDT_CCOWFLG
, "ccowflag", fp_num
, "%u", SI(REFCNTBT_COWFLAG_BITLEN
), 0,
175 { FLDT_CNTBT
, "cntbt", NULL
, (char *)cntbt_flds
, btblock_size
, FTARG_SIZE
,
177 { FLDT_CNTBT_CRC
, "cntbt", NULL
, (char *)cntbt_crc_flds
, btblock_size
,
178 FTARG_SIZE
, NULL
, cntbt_crc_flds
},
179 { FLDT_CNTBTKEY
, "cntbtkey", fp_sarray
, (char *)cntbt_key_flds
,
180 SI(bitsz(xfs_alloc_key_t
)), 0, NULL
, cntbt_key_flds
},
181 { FLDT_CNTBTPTR
, "cntbtptr", fp_num
, "%u", SI(bitsz(xfs_alloc_ptr_t
)),
182 0, fa_agblock
, NULL
},
183 { FLDT_CNTBTREC
, "cntbtrec", fp_sarray
, (char *)cntbt_rec_flds
,
184 SI(bitsz(xfs_alloc_rec_t
)), 0, NULL
, cntbt_rec_flds
},
186 { FLDT_RMAPBT_CRC
, "rmapbt", NULL
, (char *)rmapbt_crc_flds
, btblock_size
,
187 FTARG_SIZE
, NULL
, rmapbt_crc_flds
},
188 { FLDT_RMAPBTKEY
, "rmapbtkey", fp_sarray
, (char *)rmapbt_key_flds
,
189 SI(bitize(2 * sizeof(struct xfs_rmap_key
))), 0, NULL
, rmapbt_key_flds
},
190 { FLDT_RMAPBTPTR
, "rmapbtptr", fp_num
, "%u",
191 SI(bitsz(xfs_rmap_ptr_t
)), 0, fa_agblock
, NULL
},
192 { FLDT_RMAPBTREC
, "rmapbtrec", fp_sarray
, (char *)rmapbt_rec_flds
,
193 SI(bitsz(struct xfs_rmap_rec
)), 0, NULL
, rmapbt_rec_flds
},
195 { FLDT_REFCBT_CRC
, "refcntbt", NULL
, (char *)refcbt_crc_flds
, btblock_size
,
196 FTARG_SIZE
, NULL
, refcbt_crc_flds
},
197 { FLDT_REFCBTKEY
, "refcntbtkey", fp_sarray
, (char *)refcbt_key_flds
,
198 SI(bitsz(struct xfs_refcount_key
)), 0, NULL
, refcbt_key_flds
},
199 { FLDT_REFCBTPTR
, "refcntbtptr", fp_num
, "%u", SI(bitsz(xfs_refcount_ptr_t
)),
200 0, fa_agblock
, NULL
},
201 { FLDT_REFCBTREC
, "refcntbtrec", fp_sarray
, (char *)refcbt_rec_flds
,
202 SI(bitsz(struct xfs_refcount_rec
)), 0, NULL
, refcbt_rec_flds
},
205 { FLDT_CRC
, "crc", fp_crc
, "%#x (%s)", SI(bitsz(uint32_t)),
208 { FLDT_DEV
, "dev", fp_num
, "%#x", SI(bitsz(xfs_dev_t
)), 0, NULL
, NULL
},
209 { FLDT_DFILOFFA
, "dfiloffa", fp_num
, "%llu", SI(bitsz(xfs_fileoff_t
)),
210 0, fa_dfiloffa
, NULL
},
211 { FLDT_DFILOFFD
, "dfiloffd", fp_num
, "%llu", SI(bitsz(xfs_fileoff_t
)),
212 0, fa_dfiloffd
, NULL
},
213 { FLDT_DFSBNO
, "dfsbno", fp_num
, "%llu", SI(bitsz(xfs_fsblock_t
)),
214 FTARG_DONULL
, fa_dfsbno
, NULL
},
215 { FLDT_DINODE_A
, "dinode_a", NULL
, (char *)inode_a_flds
, inode_a_size
,
216 FTARG_SIZE
|FTARG_OKEMPTY
, NULL
, inode_a_flds
},
217 { FLDT_DINODE_CORE
, "dinode_core", NULL
, (char *)inode_core_flds
,
218 SI(bitsz(xfs_dinode_t
)), 0, NULL
, inode_core_flds
},
219 { FLDT_DINODE_FMT
, "dinode_fmt", fp_dinode_fmt
, NULL
,
220 SI(bitsz(int8_t)), 0, NULL
, NULL
},
221 { FLDT_DINODE_U
, "dinode_u", NULL
, (char *)inode_u_flds
, inode_u_size
,
222 FTARG_SIZE
|FTARG_OKEMPTY
, NULL
, inode_u_flds
},
223 { FLDT_DINODE_V3
, "dinode_v3", NULL
, (char *)inode_v3_flds
,
224 SI(bitsz(xfs_dinode_t
)), 0, NULL
, inode_v3_flds
},
227 { FLDT_DIR2
, "dir2", NULL
, (char *)dir2_flds
, dir2_size
, FTARG_SIZE
,
229 { FLDT_DIR2_BLOCK_TAIL
, "dir2_block_tail", NULL
,
230 (char *)dir2_block_tail_flds
, SI(bitsz(xfs_dir2_block_tail_t
)), 0,
231 NULL
, dir2_block_tail_flds
},
232 { FLDT_DIR2_DATA_FREE
, "dir2_data_free", NULL
,
233 (char *)dir2_data_free_flds
, SI(bitsz(xfs_dir2_data_free_t
)), 0, NULL
,
234 dir2_data_free_flds
},
235 { FLDT_DIR2_DATA_HDR
, "dir2_data_hdr", NULL
, (char *)dir2_data_hdr_flds
,
236 SI(bitsz(xfs_dir2_data_hdr_t
)), 0, NULL
, dir2_data_hdr_flds
},
237 { FLDT_DIR2_DATA_OFF
, "dir2_data_off", fp_num
, "%#x",
238 SI(bitsz(xfs_dir2_data_off_t
)), 0, NULL
, NULL
},
239 { FLDT_DIR2_DATA_OFFNZ
, "dir2_data_offnz", fp_num
, "%#x",
240 SI(bitsz(xfs_dir2_data_off_t
)), FTARG_SKIPZERO
, NULL
, NULL
},
241 { FLDT_DIR2_DATA_UNION
, "dir2_data_union", NULL
,
242 (char *)dir2_data_union_flds
, dir2_data_union_size
, FTARG_SIZE
, NULL
,
243 dir2_data_union_flds
},
244 { FLDT_DIR2_FREE_HDR
, "dir2_free_hdr", NULL
, (char *)dir2_free_hdr_flds
,
245 SI(bitsz(xfs_dir2_free_hdr_t
)), 0, NULL
, dir2_free_hdr_flds
},
246 { FLDT_DIR2_INO4
, "dir2_ino4", fp_num
, "%u",
247 SI(bitize(XFS_INO32_SIZE
)), 0, fa_ino4
, NULL
},
248 { FLDT_DIR2_INO8
, "dir2_ino8", fp_num
, "%llu",
249 SI(bitize(XFS_INO64_SIZE
)), 0, fa_ino8
, NULL
},
250 { FLDT_DIR2_INOU
, "dir2_inou", NULL
, (char *)dir2_inou_flds
,
251 dir2_inou_size
, FTARG_SIZE
, NULL
, dir2_inou_flds
},
252 { FLDT_DIR2_LEAF_ENTRY
, "dir2_leaf_entry", NULL
,
253 (char *)dir2_leaf_entry_flds
, SI(bitsz(xfs_dir2_leaf_entry_t
)), 0,
254 NULL
, dir2_leaf_entry_flds
},
255 { FLDT_DIR2_LEAF_HDR
, "dir2_leaf_hdr", NULL
, (char *)dir2_leaf_hdr_flds
,
256 SI(bitsz(xfs_dir2_leaf_hdr_t
)), 0, NULL
, dir2_leaf_hdr_flds
},
257 { FLDT_DIR2_LEAF_TAIL
, "dir2_leaf_tail", NULL
,
258 (char *)dir2_leaf_tail_flds
, SI(bitsz(xfs_dir2_leaf_tail_t
)), 0, NULL
,
259 dir2_leaf_tail_flds
},
260 { FLDT_DIR2_SF_ENTRY
, "dir2_sf_entry", NULL
, (char *)dir2_sf_entry_flds
,
261 dir2_sf_entry_size
, FTARG_SIZE
, NULL
, dir2_sf_entry_flds
},
262 { FLDT_DIR2_SF_HDR
, "dir2_sf_hdr", NULL
, (char *)dir2_sf_hdr_flds
,
263 dir2_sf_hdr_size
, FTARG_SIZE
, NULL
, dir2_sf_hdr_flds
},
264 { FLDT_DIR2_SF_OFF
, "dir2_sf_off", fp_num
, "%#x",
265 SI(bitize(2*sizeof(__u8
))), 0, NULL
, NULL
},
266 { FLDT_DIR2SF
, "dir2sf", NULL
, (char *)dir2sf_flds
, dir2sf_size
,
267 FTARG_SIZE
, NULL
, dir2sf_flds
},
270 { FLDT_DIR3
, "dir3", NULL
, (char *)dir3_flds
, dir2_size
, FTARG_SIZE
,
272 { FLDT_DIR3_BLKHDR
, "dir3_blk_hdr", NULL
, (char *)dir3_blkhdr_flds
,
273 SI(bitsz(struct xfs_dir3_blk_hdr
)), 0, NULL
, dir3_blkhdr_flds
},
274 { FLDT_DIR3_DATA_HDR
, "dir3_data_hdr", NULL
, (char *)dir3_data_hdr_flds
,
275 SI(bitsz(struct xfs_dir3_data_hdr
)), 0, NULL
, dir3_data_hdr_flds
},
276 { FLDT_DIR3_FREE_HDR
, "dir3_free_hdr", NULL
, (char *)dir3_free_hdr_flds
,
277 SI(bitsz(struct xfs_dir3_free_hdr
)), 0, NULL
, dir3_free_hdr_flds
},
278 { FLDT_DIR3_LEAF_HDR
, "dir3_leaf_hdr", NULL
, (char *)dir3_leaf_hdr_flds
,
279 SI(bitsz(struct xfs_dir3_leaf_hdr
)), 0, NULL
, dir3_leaf_hdr_flds
},
280 { FLDT_DIR3_DATA_UNION
, "dir3_data_union", NULL
,
281 (char *)dir3_data_union_flds
, dir2_data_union_size
, FTARG_SIZE
, NULL
,
282 dir3_data_union_flds
},
283 { FLDT_DIR3_SF_ENTRY
, "dir3_sf_entry", NULL
, (char *)dir3_sf_entry_flds
,
284 dir2_sf_entry_size
, FTARG_SIZE
, NULL
, dir3_sf_entry_flds
},
285 { FLDT_DIR3SF
, "dir3sf", NULL
, (char *)dir3sf_flds
, dir2sf_size
,
286 FTARG_SIZE
, NULL
, dir3sf_flds
},
288 /* dir v2/3 node fields */
289 { FLDT_DA_BLKINFO
, "dir_blkinfo", NULL
, (char *)da_blkinfo_flds
,
290 SI(bitsz(struct xfs_da_blkinfo
)), 0, NULL
, da_blkinfo_flds
},
291 { FLDT_DA_NODE_ENTRY
, "dir_node_entry", fp_sarray
,
292 (char *)da_node_entry_flds
, SI(bitsz(struct xfs_da_node_entry
)), 0,
293 NULL
, da_node_entry_flds
},
294 { FLDT_DA_NODE_HDR
, "dir_node_hdr", NULL
, (char *)da_node_hdr_flds
,
295 SI(bitsz(struct xfs_da_node_hdr
)), 0, NULL
, da_node_hdr_flds
},
296 { FLDT_DA3_BLKINFO
, "dir_blkinfo", NULL
, (char *)da3_blkinfo_flds
,
297 SI(bitsz(struct xfs_da3_blkinfo
)), 0, NULL
, da3_blkinfo_flds
},
298 { FLDT_DA3_NODE_HDR
, "dir_node_hdr", NULL
, (char *)da3_node_hdr_flds
,
299 SI(bitsz(struct xfs_da3_node_hdr
)), 0, NULL
, da3_node_hdr_flds
},
301 { FLDT_DIRBLOCK
, "dirblock", fp_num
, "%u", SI(bitsz(uint32_t)), 0,
303 { FLDT_DISK_DQUOT
, "disk_dquot", NULL
, (char *)disk_dquot_flds
,
304 SI(bitsz(xfs_disk_dquot_t
)), 0, NULL
, disk_dquot_flds
},
305 { FLDT_DQBLK
, "dqblk", NULL
, (char *)dqblk_flds
, SI(bitsz(xfs_dqblk_t
)),
306 0, NULL
, dqblk_flds
},
307 { FLDT_DQID
, "dqid", fp_num
, "%d", SI(bitsz(xfs_dqid_t
)), 0, NULL
,
309 { FLDT_DRFSBNO
, "drfsbno", fp_num
, "%llu", SI(bitsz(xfs_rfsblock_t
)),
310 FTARG_DONULL
, fa_drfsbno
, NULL
},
311 { FLDT_DRTBNO
, "drtbno", fp_num
, "%llu", SI(bitsz(xfs_rtblock_t
)),
312 FTARG_DONULL
, fa_drtbno
, NULL
},
313 { FLDT_EXTLEN
, "extlen", fp_num
, "%u", SI(bitsz(xfs_extlen_t
)), 0, NULL
,
315 { FLDT_EXTNUM
, "extnum", fp_num
, "%d", SI(bitsz(xfs_extnum_t
)),
316 FTARG_SIGNED
, NULL
, NULL
},
317 { FLDT_FSIZE
, "fsize", fp_num
, "%lld", SI(bitsz(xfs_fsize_t
)),
318 FTARG_SIGNED
, NULL
, NULL
},
319 { FLDT_INO
, "ino", fp_num
, "%llu", SI(bitsz(xfs_ino_t
)), FTARG_DONULL
,
321 { FLDT_INOBT
, "inobt", NULL
, (char *)inobt_flds
, btblock_size
,
322 FTARG_SIZE
, NULL
, inobt_flds
},
323 { FLDT_INOBT_CRC
, "inobt", NULL
, (char *)inobt_crc_flds
, btblock_size
,
324 FTARG_SIZE
, NULL
, inobt_crc_flds
},
325 { FLDT_INOBT_SPCRC
, "inobt", NULL
, (char *)inobt_spcrc_flds
,
326 btblock_size
, FTARG_SIZE
, NULL
, inobt_spcrc_flds
},
327 { FLDT_INOBTKEY
, "inobtkey", fp_sarray
, (char *)inobt_key_flds
,
328 SI(bitsz(xfs_inobt_key_t
)), 0, NULL
, inobt_key_flds
},
329 { FLDT_INOBTPTR
, "inobtptr", fp_num
, "%u", SI(bitsz(xfs_inobt_ptr_t
)),
330 0, fa_agblock
, NULL
},
331 { FLDT_INOBTREC
, "inobtrec", fp_sarray
, (char *)inobt_rec_flds
,
332 SI(bitsz(xfs_inobt_rec_t
)), 0, NULL
, inobt_rec_flds
},
333 { FLDT_INOBTSPREC
, "inobtsprec", fp_sarray
, (char *) inobt_sprec_flds
,
334 SI(bitsz(xfs_inobt_rec_t
)), 0, NULL
, inobt_sprec_flds
},
335 { FLDT_INODE
, "inode", NULL
, (char *)inode_flds
, inode_size
, FTARG_SIZE
,
337 { FLDT_INODE_CRC
, "inode", NULL
, (char *)inode_crc_flds
, inode_size
,
338 FTARG_SIZE
, NULL
, inode_crc_flds
},
339 { FLDT_INOFREE
, "inofree", fp_num
, "%#llx", SI(bitsz(xfs_inofree_t
)), 0,
341 { FLDT_INT16D
, "int16d", fp_num
, "%d", SI(bitsz(int16_t)),
342 FTARG_SIGNED
, NULL
, NULL
},
343 { FLDT_INT32D
, "int32d", fp_num
, "%d", SI(bitsz(int32_t)),
344 FTARG_SIGNED
, NULL
, NULL
},
345 { FLDT_INT64D
, "int64d", fp_num
, "%lld", SI(bitsz(int64_t)),
346 FTARG_SIGNED
, NULL
, NULL
},
347 { FLDT_INT8D
, "int8d", fp_num
, "%d", SI(bitsz(int8_t)), FTARG_SIGNED
,
349 { FLDT_NSEC
, "nsec", fp_num
, "%09d", SI(bitsz(int32_t)), FTARG_SIGNED
,
351 { FLDT_QCNT
, "qcnt", fp_num
, "%llu", SI(bitsz(xfs_qcnt_t
)), 0, NULL
,
353 { FLDT_QWARNCNT
, "qwarncnt", fp_num
, "%u", SI(bitsz(xfs_qwarncnt_t
)), 0,
355 { FLDT_SB
, "sb", NULL
, (char *)sb_flds
, sb_size
, FTARG_SIZE
, NULL
,
358 /* CRC enabled symlink */
359 { FLDT_SYMLINK_CRC
, "symlink", NULL
, (char *)symlink_crc_flds
,
360 symlink_size
, FTARG_SIZE
, NULL
, symlink_crc_flds
},
362 { FLDT_TIME
, "time", fp_time
, NULL
, SI(bitsz(int32_t)), FTARG_SIGNED
,
364 { FLDT_TIMESTAMP
, "timestamp", NULL
, (char *)timestamp_flds
,
365 SI(bitsz(xfs_timestamp_t
)), 0, NULL
, timestamp_flds
},
366 { FLDT_UINT1
, "uint1", fp_num
, "%u", SI(1), 0, NULL
, NULL
},
367 { FLDT_UINT16D
, "uint16d", fp_num
, "%u", SI(bitsz(uint16_t)), 0, NULL
,
369 { FLDT_UINT16O
, "uint16o", fp_num
, "%#o", SI(bitsz(uint16_t)), 0,
371 { FLDT_UINT16X
, "uint16x", fp_num
, "%#x", SI(bitsz(uint16_t)), 0,
373 { FLDT_UINT32D
, "uint32d", fp_num
, "%u", SI(bitsz(uint32_t)), 0, NULL
,
375 { FLDT_UINT32O
, "uint32o", fp_num
, "%#o", SI(bitsz(uint32_t)), 0,
377 { FLDT_UINT32X
, "uint32x", fp_num
, "%#x", SI(bitsz(uint32_t)), 0,
379 { FLDT_UINT64D
, "uint64d", fp_num
, "%llu", SI(bitsz(uint64_t)), 0,
381 { FLDT_UINT64O
, "uint64o", fp_num
, "%#llo", SI(bitsz(uint64_t)), 0,
383 { FLDT_UINT64X
, "uint64x", fp_num
, "%#llx", SI(bitsz(uint64_t)), 0,
385 { FLDT_UINT8D
, "uint8d", fp_num
, "%u", SI(bitsz(uint8_t)), 0, NULL
,
387 { FLDT_UINT8O
, "uint8o", fp_num
, "%#o", SI(bitsz(uint8_t)), 0, NULL
,
389 { FLDT_UINT8X
, "uint8x", fp_num
, "%#x", SI(bitsz(uint8_t)), 0, NULL
,
391 { FLDT_UUID
, "uuid", fp_uuid
, NULL
, SI(bitsz(uuid_t
)), 0, NULL
, NULL
},
403 if (!(f
->flags
& FLD_OFFSET
)) {
404 if (f
->flags
& FLD_ARRAY
) {
407 const ftattr_t
*fa
= &ftattrtab
[f
->ftyp
];
410 abase
= (f
->flags
& FLD_ABASE1
) != 0;
411 ASSERT(fa
->ftyp
== f
->ftyp
);
412 ASSERT((fa
->arg
& FTARG_SIZE
) == 0);
413 return (int)(intptr_t)f
->offset
+
414 (idx
- abase
) * fsize(f
, obj
, startoff
, idx
);
416 return (int)(intptr_t)f
->offset
;
418 return (*f
->offset
)(obj
, startoff
, idx
);
427 if (!(f
->flags
& FLD_COUNT
))
428 return (int)(intptr_t)f
->count
;
430 return (*f
->count
)(obj
, startoff
);
436 const field_t
*fields
,
442 /* we only match if this field name matches and has a non-zero count */
443 for (f
= fields
; f
->name
; f
++)
444 if (strcmp(f
->name
, name
) == 0 && fcount(f
, obj
, startoff
))
458 fa
= &ftattrtab
[f
->ftyp
];
459 ASSERT(fa
->ftyp
== f
->ftyp
);
460 if (!(fa
->arg
& FTARG_SIZE
))
461 return (int)(intptr_t)fa
->size
;
463 return (*fa
->size
)(obj
, startoff
, idx
);