Source
223
223
/* Array statistics */
224
224
H5F_DECODE_LENGTH(f, p, hdr->cparam.nelmts); /* Number of elements */
225
225
226
226
/* Internal information */
227
227
H5F_addr_decode(f, &p, &hdr->dblk_addr); /* Address of index block */
228
228
229
229
/* Initializations of header info */
230
230
hdr->stats.nelmts = hdr->cparam.nelmts;
231
231
hdr->stats.hdr_size = hdr->size = size; /* Size of header in file */
232
232
233
+
/* Check for data block */
234
+
if(H5F_addr_defined(hdr->dblk_addr)) {
235
+
H5FA_dblock_t dblock; /* Fake data block for computing size */
236
+
size_t dblk_page_nelmts; /* # of elements per data block page */
237
+
238
+
/* Set up fake data block for computing size on disk */
239
+
dblock.hdr = hdr;
240
+
dblock.dblk_page_init_size = 0;
241
+
dblock.npages = 0;
242
+
dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
243
+
if(hdr->cparam.nelmts > dblk_page_nelmts) {
244
+
dblock.npages = (size_t)(((hdr->cparam.nelmts + dblk_page_nelmts) - 1) / dblk_page_nelmts);
245
+
dblock.dblk_page_init_size = (dblock.npages + 7) / 8;
246
+
} /* end if */
247
+
248
+
/* Compute Fixed Array data block size for hdr statistics */
249
+
hdr->stats.dblk_size = (size_t)H5FA_DBLOCK_SIZE(&dblock);
250
+
} /* end if */
251
+
233
252
/* Sanity check */
234
253
/* (allow for checksum not decoded yet) */
235
254
HDassert((size_t)(p - buf) == (size - H5FA_SIZEOF_CHKSUM));
236
255
237
256
/* Compute checksum on entire header */
238
257
/* (including the filter information, if present) */
239
258
computed_chksum = H5_checksum_metadata(buf, (size_t)(p - buf), 0);
240
259
241
260
/* Metadata checksum */
242
261
UINT32DECODE(p, stored_chksum);