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);