summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5Abtree2.c2
-rw-r--r--src/H5B.c190
-rw-r--r--src/H5B2.c31
-rw-r--r--src/H5B2int.c120
-rw-r--r--src/H5B2pkg.h5
-rw-r--r--src/H5B2private.h4
-rw-r--r--src/H5Bprivate.h21
-rw-r--r--src/H5D.c1
-rw-r--r--src/H5Distore.c94
-rw-r--r--src/H5Doh.c23
-rw-r--r--src/H5Dpkg.h3
-rw-r--r--src/H5F.c80
-rw-r--r--src/H5FS.c96
-rw-r--r--src/H5FSprivate.h4
-rw-r--r--src/H5Fpkg.h3
-rw-r--r--src/H5Fpublic.h9
-rw-r--r--src/H5Fsuper.c30
-rw-r--r--src/H5Gnode.c101
-rw-r--r--src/H5Gobj.c1
-rw-r--r--src/H5Goh.c66
-rw-r--r--src/H5Gpkg.h11
-rw-r--r--src/H5Gprivate.h1
-rw-r--r--src/H5Gstab.c81
-rw-r--r--src/H5HF.c85
-rw-r--r--src/H5HFiblock.c54
-rw-r--r--src/H5HFpkg.h4
-rw-r--r--src/H5HFprivate.h7
-rw-r--r--src/H5HFstat.c79
-rw-r--r--src/H5HL.c27
-rw-r--r--src/H5O.c68
-rw-r--r--src/H5Oattribute.c63
-rw-r--r--src/H5Opkg.h14
-rw-r--r--src/H5Oprivate.h4
-rw-r--r--src/H5Opublic.h7
-rw-r--r--src/H5Oshared.h4
-rwxr-xr-xsrc/H5SM.c51
-rwxr-xr-xsrc/H5SMprivate.h2
-rw-r--r--tools/misc/h5stat.c860
-rw-r--r--tools/misc/testfiles/h5stat_filters-d.ddl18
-rw-r--r--tools/misc/testfiles/h5stat_filters-dT.ddl18
-rw-r--r--tools/misc/testfiles/h5stat_filters.ddl18
-rw-r--r--tools/misc/testfiles/h5stat_newgrat.ddl18
-rw-r--r--tools/misc/testfiles/h5stat_tsohm.ddl18
43 files changed, 1130 insertions, 1266 deletions
diff --git a/src/H5Abtree2.c b/src/H5Abtree2.c
index 97a5a40..b685af7 100644
--- a/src/H5Abtree2.c
+++ b/src/H5Abtree2.c
@@ -273,7 +273,7 @@ H5A_dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
const H5A_dense_bt2_name_rec_t *bt2_rec = (const H5A_dense_bt2_name_rec_t *)_bt2_rec;
herr_t ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5A_dense_btree2_name_compare)
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_dense_btree2_name_compare)
/* Sanity check */
HDassert(bt2_udata);
diff --git a/src/H5B.c b/src/H5B.c
index 23d5eff..9847b7a 100644
--- a/src/H5B.c
+++ b/src/H5B.c
@@ -1827,6 +1827,94 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5B_iterate_size
+ *
+ * Purpose: Return the amount of storage used for the btree.
+ * Keep following the left-most child until reaching the leaf node.
+ * For each level, gather storage for all the nodes on that level.
+ * For 0 level, also gather storage for the SNODs.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi
+ * June 19, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_iterate_size(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
+ H5B_operator_t op, haddr_t addr, H5B_info_ud_t *bh_udata)
+{
+ H5B_t *bt = NULL; /* Pointer to current B-tree node */
+ H5B_shared_t *shared; /* Pointer to shared B-tree info */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5B_iterate_size, FAIL)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(type);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(bh_udata);
+
+ /* Protect the initial/current node */
+ if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, bh_udata->udata, H5AC_READ)))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node")
+ shared = H5RC_GET_OBJ(bt->rc_shared);
+ HDassert(shared);
+
+ /* Keep following the left-most child until we reach a leaf node. */
+ if(bt->level > 0)
+ if(H5B_iterate_size(f, dxpl_id, type, op, bt->child[0], bh_udata) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to list B-tree node")
+
+ /* Iterate through all nodes at this level of the tree */
+ while(bt) {
+ haddr_t next_addr; /* Address of next node to iterate over */
+
+ /* for leaf node with callback, add in the space pointed to by each key */
+ /* (currently only used for symbol table nodes) */
+ if(bt->level == 0 && op) {
+ haddr_t *child; /* Pointer to node's child addresses */
+ uint8_t *key; /* Pointer to node's native keys */
+ unsigned u; /* Local index variable */
+
+ for(u = 0, child = bt->child, key = bt->native; u < bt->nchildren; u++, child++, key += type->sizeof_nkey)
+ if((*op)(f, dxpl_id, key, *child, key + type->sizeof_nkey, bh_udata->btree_size) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "iterator function failed")
+ } /* end if */
+
+ /* count the size of this node */
+ *(bh_udata->btree_size) += H5B_nodesize(f, shared, NULL);
+
+ /* Get the address of the next node to the right */
+ next_addr = bt->right;
+
+ /* Unprotect current node */
+ if(H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
+
+ /* Protect bt's next node to the right, if there is one */
+ if(H5F_addr_defined(next_addr)) {
+ addr = next_addr;
+ if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, bh_udata->udata, H5AC_READ)))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "B-tree node")
+ } /* end if */
+ else
+ bt = NULL;
+ } /* end while */
+
+done:
+ if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B_iterate_size() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5B_debug
*
* Purpose: Prints debugging info about a B-tree.
@@ -2069,106 +2157,4 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
}
#endif /* H5B_DEBUG */
-
-/*-------------------------------------------------------------------------
- * Function: H5B_iterate_btree_size
- *
- * Purpose: Return the amount of storage used for the btree.
- * Keep following the left-most child until reaching the leaf node.
- * For each level, gather storage for all the nodes on that level.
- * For 0 level, also gather storage for the SNODs.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Vailin Choi
- * June 19, 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5B_iterate_btree_size(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t op, haddr_t addr, H5B_info_ud_t *bh_udata)
-{
- H5B_t *bt = NULL; /* Pointer to current B-tree node */
- herr_t ret_value; /* Return value */
- H5B_shared_t *shared; /* Pointer to shared B-tree info */
- H5B_t *start_bt; /* Pointer to next B-tree node */
- haddr_t start_addr; /* Address of next node to iterate over */
-
- haddr_t *child; /* Pointer to node's child addresses */
- uint8_t *key; /* Pointer to node's native keys */
- unsigned u; /* Local index variable */
-
- FUNC_ENTER_NOAPI(H5B_iterate_btree_size, FAIL)
- /*
- * Check arguments.
- */
- HDassert(f);
- HDassert(type);
- HDassert(H5F_addr_defined(addr));
- HDassert(bh_udata);
-
- /* Protect the initial/current node */
- if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, bh_udata->udata, H5AC_READ)))
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node")
- shared = H5RC_GET_OBJ(bt->rc_shared);
- HDassert(shared);
-
- if (bt->level > 0) {
- /* Keep following the left-most child until we reach a leaf node. */
- if((ret_value = H5B_iterate_btree_size(f, dxpl_id, type, op, bt->child[0], bh_udata)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to list B-tree node")
- }
- ret_value = H5_ITER_CONT;
- while(bt && ret_value == H5_ITER_CONT) {
- /* count the SNOD sizes for leaf nodes */
- if (bt->level == 0) { /* for leaf node only */
- for(u = 0, child = bt->child, key = bt->native; u < bt->nchildren && ret_value == H5_ITER_CONT; u++, child++, key += type->sizeof_nkey) {
- if (op != NULL) { /* only for symbol table nodes */
- ret_value = (*op)(f, dxpl_id, key, *child, key + type->sizeof_nkey, bh_udata->btree_size);
- }
- if(ret_value < 0)
- HERROR(H5E_BTREE, H5E_CANTLIST, "iterator function failed");
- } /* end for */
- } /* end if */
-
- /* Check for continuing iteration */
- if(ret_value == H5_ITER_CONT) {
- H5B_t *next_bt; /* Pointer to next B-tree node */
- haddr_t next_addr; /* Address of next node to iterate over */
-
- /* count the size of bt */
- *(bh_udata->btree_size) += H5B_nodesize(f, shared, NULL);
-
- /* Protect bt's next node to the right, if there is one */
- if(H5F_addr_defined(bt->right)) {
- next_addr = bt->right;
- if(NULL == (next_bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, next_addr, type, bh_udata->udata, H5AC_READ)))
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "B-tree node")
- } else {
- next_addr = HADDR_UNDEF;
- next_bt = NULL;
- } /* end if */
-
- /* Unprotect bt */
- if(H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0) {
- if(next_bt) {
- HDassert(H5F_addr_defined(next_addr));
- if(H5AC_unprotect(f, dxpl_id, H5AC_BT, next_addr, next_bt, H5AC__NO_FLAGS_SET) < 0)
- HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
- } /* end if */
- HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
- } /* end if */
-
- /* Advance to the next node */
- bt = next_bt;
- addr = next_addr;
- } /* end if */
- } /* end while */
-
-done:
- if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
- HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5B_iterate_btree_size() */
diff --git a/src/H5B2.c b/src/H5B2.c
index 281408e..4b7d67c 100644
--- a/src/H5B2.c
+++ b/src/H5B2.c
@@ -1187,9 +1187,10 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5B2_modify() */
+
/*-------------------------------------------------------------------------
- * Function: H5B2_info_iterate
+ * Function: H5B2_iterate_size
*
* Purpose: Iterate over all the records in the B-tree, collecting
* storage info.
@@ -1202,18 +1203,17 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B2_info_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr_t addr, hsize_t *btree_size)
+H5B2_iterate_size(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr_t addr, hsize_t *btree_size)
{
- H5B2_t *bt2=NULL; /* Pointer to the B-tree header */
+ H5B2_t *bt2 = NULL; /* Pointer to the B-tree header */
H5B2_shared_t *shared; /* Pointer to B-tree's shared information */
- H5RC_t *bt2_shared=NULL; /* Pointer to ref-counter for shared B-tree info */
- hbool_t incr_rc=FALSE; /* Flag to indicate that we've incremented the B-tree's shared info reference count */
+ H5RC_t *bt2_shared = NULL; /* Pointer to ref-counter for shared B-tree info */
+ hbool_t incr_rc = FALSE; /* Flag to indicate that we've incremented the B-tree's shared info reference count */
H5B2_node_ptr_t root_ptr; /* Node pointer info for root node */
unsigned depth; /* Current depth of the tree */
- herr_t ret_value=SUCCEED;
-
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_NOAPI(H5B2_info_iterate, FAIL)
+ FUNC_ENTER_NOAPI(H5B2_iterate_size, FAIL)
/* Check arguments. */
HDassert(f);
@@ -1225,6 +1225,7 @@ H5B2_info_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr_t add
if(NULL == (bt2 = H5AC_protect(f, dxpl_id, H5AC_BT2_HDR, addr, type, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree header")
+ /* Safely grab pointer to reference counted shared B-tree info, so we can release the B-tree header if necessary */
bt2_shared = bt2->shared;
H5RC_INC(bt2_shared);
incr_rc = TRUE;
@@ -1233,6 +1234,7 @@ H5B2_info_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr_t add
shared = H5RC_GET_OBJ(bt2->shared);
HDassert(shared);
+ /* Add size of header to B-tree metadata total */
*btree_size += H5B2_HEADER_SIZE(f);
/* Make copy of the root node pointer */
@@ -1248,9 +1250,13 @@ H5B2_info_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr_t add
/* Iterate through records */
if(root_ptr.node_nrec > 0) {
- /* Iterate through nodes */
- if((ret_value = H5B2_info_iterate_node(f, dxpl_id, bt2_shared, depth, &root_ptr, btree_size)) < 0)
- HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
+ /* Check for root node being a leaf */
+ if(depth == 0)
+ *btree_size += shared->node_size;
+ else
+ /* Iterate through nodes */
+ if(H5B2_iterate_size_node(f, dxpl_id, bt2_shared, depth, &root_ptr, btree_size) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed");
} /* end if */
done:
@@ -1259,4 +1265,5 @@ done:
H5RC_DEC(bt2_shared);
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_info_iterate() */
+} /* H5B2_iterate_size() */
+
diff --git a/src/H5B2int.c b/src/H5B2int.c
index 20e4300..2625c63 100644
--- a/src/H5B2int.c
+++ b/src/H5B2int.c
@@ -3147,6 +3147,67 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5B2_delete_node() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_iterate_size_node
+ *
+ * Purpose: Iterate over all the records from a B-tree node, collecting
+ * btree storage info.
+ *
+ * Return: non-negative on success, negative on error
+ *
+ * Programmer: Vailin Choi
+ * July 12 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2_iterate_size_node(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared, unsigned depth,
+ const H5B2_node_ptr_t *curr_node, hsize_t *btree_size)
+{
+ H5B2_shared_t *shared; /* Pointer to B-tree's shared information */
+ H5B2_internal_t *internal = NULL; /* Pointer to internal node */
+ herr_t ret_value = SUCCEED; /* Iterator return value */
+
+ FUNC_ENTER_NOAPI(H5B2_iterate_size_node, FAIL)
+
+ /* Check arguments. */
+ HDassert(f);
+ HDassert(bt2_shared);
+ HDassert(curr_node);
+ HDassert(btree_size);
+ HDassert(depth > 0);
+
+ /* Get the pointer to the shared B-tree info */
+ shared = (H5B2_shared_t *)H5RC_GET_OBJ(bt2_shared);
+ HDassert(shared);
+
+ /* Lock the current B-tree node */
+ if(NULL == (internal = H5B2_protect_internal(f, dxpl_id, bt2_shared, curr_node->addr, curr_node->node_nrec, depth, H5AC_READ)))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
+
+ /* Recursively descend into child nodes, if we are above the "twig" level in the B-tree */
+ if(depth > 1) {
+ unsigned u; /* Local index */
+
+ /* Descend into children */
+ for(u = 0; u < internal->nrec + 1; u++)
+ if(H5B2_iterate_size_node(f, dxpl_id, bt2_shared, (depth - 1), &(internal->node_ptrs[u]), btree_size) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
+ } /* end if */
+ else /* depth is 1: count all the leaf nodes from this node */
+ *btree_size += (internal->nrec + 1) * shared->node_size;
+
+ /* Count this node */
+ *btree_size += shared->node_size;
+
+done:
+ if(internal && H5AC_unprotect(f, dxpl_id, H5AC_BT2_INT, curr_node->addr, internal, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_iterate_size_node() */
+
#ifdef H5B2_DEBUG
/*-------------------------------------------------------------------------
@@ -3304,63 +3365,4 @@ H5B2_assert_internal2(hsize_t parent_all_nrec, H5B2_shared_t *shared, H5B2_inter
return(0);
} /* end H5B2_assert_internal2() */
#endif /* H5B2_DEBUG */
-
-/*-------------------------------------------------------------------------
- * Function: H5B2_info_iterate_node
- *
- * Purpose: Iterate over all the records from a B-tree node, collecting
- * btree storage info.
- *
- * Return: non-negative on success, negative on error
- *
- * Programmer: Vailin Choi
- * July 12 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5B2_info_iterate_node(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared, unsigned depth,
-const H5B2_node_ptr_t *curr_node, hsize_t *btree_size)
-{
- H5B2_shared_t *shared; /* Pointer to B-tree's shared information */
- herr_t ret_value = SUCCEED; /* Iterator return value */
- H5B2_internal_t *internal = NULL; /* Pointer to internal node */
- unsigned u; /* Local index */
-
- FUNC_ENTER_NOAPI(H5B2_info_iterate_node, FAIL)
-
- /* Check arguments. */
- HDassert(f);
- HDassert(bt2_shared);
- HDassert(curr_node);
- HDassert(btree_size);
-
- /* Get the pointer to the shared B-tree info */
- shared=(H5B2_shared_t *)H5RC_GET_OBJ(bt2_shared);
- HDassert(shared);
-
- if(depth > 0) {
- /* Lock the current B-tree node */
- if(NULL == (internal = H5B2_protect_internal(f, dxpl_id, bt2_shared, curr_node->addr, curr_node->node_nrec, depth, H5AC_READ)))
- HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
-
- if(depth>1) {
- /* Descend into children */
- for(u=0; u<internal->nrec+1; u++)
- if(H5B2_info_iterate_node(f, dxpl_id, bt2_shared, (depth-1), &(internal->node_ptrs[u]), btree_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
- } /* end if */
- else /* depth is 1: count all the leaf nodes from this node */
- *btree_size += (internal->nrec + 1) * shared->node_size;
- } /* end if */
-
- /* Count this node */
- *btree_size += shared->node_size;
-
-done:
- if(internal && H5AC_unprotect(f, dxpl_id, H5AC_BT2_INT, curr_node->addr, internal, H5AC__NO_FLAGS_SET) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_info_iterate_node() */
diff --git a/src/H5B2pkg.h b/src/H5B2pkg.h
index 956abb1..3dfbe41 100644
--- a/src/H5B2pkg.h
+++ b/src/H5B2pkg.h
@@ -269,12 +269,9 @@ H5_DLL herr_t H5B2_insert_leaf(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared,
H5_DLL herr_t H5B2_iterate_node(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared,
unsigned depth, const H5B2_node_ptr_t *curr_node, H5B2_operator_t op,
void *op_data);
-
-H5_DLL herr_t H5B2_info_iterate_node(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared,
+H5_DLL herr_t H5B2_iterate_size_node(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared,
unsigned depth, const H5B2_node_ptr_t *curr_node, hsize_t *op_data);
-
-
/* Routines for locating records */
H5_DLL int H5B2_locate_record(const H5B2_class_t *type, unsigned nrec,
size_t *rec_off, const uint8_t *native, const void *udata, unsigned *idx);
diff --git a/src/H5B2private.h b/src/H5B2private.h
index 064743f..6d8172c 100644
--- a/src/H5B2private.h
+++ b/src/H5B2private.h
@@ -122,10 +122,8 @@ H5_DLL herr_t H5B2_insert(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
haddr_t addr, void *udata);
H5_DLL herr_t H5B2_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
haddr_t addr, H5B2_operator_t op, void *op_data);
-
-H5_DLL herr_t H5B2_info_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
+H5_DLL herr_t H5B2_iterate_size(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
haddr_t addr, hsize_t *op_data);
-
H5_DLL herr_t H5B2_find(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
haddr_t addr, void *udata, H5B2_found_t op, void *op_data);
H5_DLL herr_t H5B2_index(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
diff --git a/src/H5Bprivate.h b/src/H5Bprivate.h
index 4d726be..4dfea84 100644
--- a/src/H5Bprivate.h
+++ b/src/H5Bprivate.h
@@ -124,11 +124,13 @@ typedef struct H5B_class_t {
herr_t (*debug_key)(FILE*, H5F_t*, hid_t, int, int, const void*, const void*);
} H5B_class_t;
+/* "user data" for iterating over B-tree when collecting B-tree metadata size */
typedef struct H5B_info_ud_t {
- void *udata;
- hsize_t *btree_size;
+ void *udata; /* Node type's 'udata' for loading */
+ hsize_t *btree_size; /* Accumulated size for B-tree metadata */
} H5B_info_ud_t;
+
/*****************************/
/* Library-private Variables */
/*****************************/
@@ -142,21 +144,22 @@ H5FL_EXTERN(H5B_shared_t);
/***************************************/
H5_DLL size_t H5B_nodesize(const H5F_t *f, const H5B_shared_t *shared,
size_t *total_nkey_size);
-H5_DLL herr_t H5B_create (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
+H5_DLL herr_t H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
haddr_t *addr_p/*out*/);
-H5_DLL herr_t H5B_find (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+H5_DLL herr_t H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
void *udata);
-H5_DLL herr_t H5B_insert (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+H5_DLL herr_t H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
void *udata);
-H5_DLL herr_t H5B_iterate (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t
+H5_DLL herr_t H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t
op, haddr_t addr, void *udata);
-H5_DLL herr_t H5B_iterate_btree_size (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t
+H5_DLL herr_t H5B_iterate_size(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t
op, haddr_t addr, H5B_info_ud_t *bh_udata);
H5_DLL herr_t H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
void *udata);
H5_DLL herr_t H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
void *udata);
-H5_DLL herr_t H5B_debug (H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
+H5_DLL herr_t H5B_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
int indent, int fwidth, const H5B_class_t *type,
void *udata);
-#endif
+#endif /* _H5Bprivate_H */
+
diff --git a/src/H5D.c b/src/H5D.c
index 59bd515..526ee27 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -3288,3 +3288,4 @@ H5Ddebug(hid_t dset_id)
done:
FUNC_LEAVE_API(ret_value)
} /* end H5Ddebug() */
+
diff --git a/src/H5Distore.c b/src/H5Distore.c
index 297a480..5d744e5 100644
--- a/src/H5Distore.c
+++ b/src/H5Distore.c
@@ -3883,6 +3883,57 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5D_istore_bh_size
+ *
+ * Purpose: Retrieve the amount of B-tree storage for chunked dataset
+ *
+ * Return: Success: Non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * June 8, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_bh_info(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout, hsize_t *btree_size)
+{
+ H5D_istore_it_ud1_t udata; /* User-data for loading istore nodes */
+ H5B_info_ud_t bh_udata; /* User-data for B-tree size iteration */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI(H5D_istore_bh_info, FAIL)
+
+ /* Check args */
+ HDassert(f);
+ HDassert(layout);
+ HDassert(btree_size);
+
+ /* Initialize the shared info for the B-tree traversal */
+ if(H5D_istore_shared_create(f, layout) < 0)
+ HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
+
+ /* Initialize istore node user-data */
+ HDmemset(&udata, 0, sizeof udata);
+ udata.common.mesg = layout;
+
+ /* Iterate over B-tree, accumulating metadata size */
+ bh_udata.udata = &udata;
+ bh_udata.btree_size = btree_size;
+ if(H5B_iterate_size(f, dxpl_id, H5B_ISTORE, NULL, layout->u.chunk.addr, &bh_udata) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to iterate over chunk B-tree")
+
+done:
+ if(layout->u.chunk.btree_shared == NULL)
+ HDONE_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "ref-counted page nil")
+ if(H5RC_DEC(layout->u.chunk.btree_shared) < 0)
+ HDONE_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted page")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_bh_info() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5D_istore_dump_btree
*
* Purpose: Prints information about the storage B-tree to the specified
@@ -4027,47 +4078,4 @@ H5D_istore_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int inden
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D_istore_debug() */
-
-/*-------------------------------------------------------------------------
- * Function: H5D_istore_btree_size
- *
- * Purpose: Retrieve the amount of B-tree storage for chunked dataset
- *
- * Return: Success: Non-negative
- * Failure: negative
- *
- * Programmer: Vailin Choi
- * June 8, 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5D_obj_istore_bh_info(H5O_loc_t *oloc, H5O_layout_t *layout, hid_t dxpl_id, hsize_t *btree_size)
-{
- H5D_istore_it_ud1_t udata;
- herr_t ret_value=SUCCEED;
- H5B_info_ud_t bh_udata;
-
- FUNC_ENTER_NOAPI(H5D_obj_istore_bh_info, FAIL)
-
- HDassert(oloc);
- HDassert(layout);
- HDassert(btree_size);
-
- if(H5D_istore_shared_create(oloc->file, layout)<0)
- HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
-
- HDmemset(&udata, 0, sizeof udata);
- udata.common.mesg = layout;
- bh_udata.udata = &udata;
- bh_udata.btree_size = btree_size;
- if ((ret_value = H5B_iterate_btree_size(oloc->file, dxpl_id, H5B_ISTORE, NULL, layout->u.chunk.addr, &bh_udata)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to iterate over chunk B-tree")
-done:
- if(layout->u.chunk.btree_shared==NULL)
- HGOTO_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "ref-counted page nil")
- if(H5RC_DEC(layout->u.chunk.btree_shared)<0)
- HGOTO_ERROR(H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted page")
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5D_obj_istore_bh_info() */
diff --git a/src/H5Doh.c b/src/H5Doh.c
index 620554e0..01447a3 100644
--- a/src/H5Doh.c
+++ b/src/H5Doh.c
@@ -327,6 +327,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_dset_get_oloc() */
+
/*-------------------------------------------------------------------------
* Function: H5O_dset_bh_info
*
@@ -342,28 +343,28 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_dset_bh_info(H5O_loc_t *oloc, H5O_t *oh, hid_t dxpl_id, H5_ih_info_t *bh_info)
+H5O_dset_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info)
{
H5O_layout_t layout; /* Data storage layout message */
- herr_t ret_value=SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5O_dset_bh_info, FAIL)
/* Sanity check */
- HDassert(oloc);
+ HDassert(f);
HDassert(oh);
HDassert(bh_info);
- if (NULL==H5O_msg_read_real(oloc->file, dxpl_id, oh, H5O_LAYOUT_ID, &layout))
+ /* Get the layout message from the object header */
+ if(NULL == H5O_msg_read_real(f, dxpl_id, oh, H5O_LAYOUT_ID, &layout))
HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't find LAYOUT message")
- else {
- if ((layout.type == H5D_CHUNKED) && (layout.u.chunk.addr != HADDR_UNDEF)) {
- ret_value = H5D_obj_istore_bh_info(oloc, &layout, dxpl_id, &(bh_info->index_size));
- if (ret_value < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't determine chunked dataset btree info")
- }
- }
+
+ /* Check for chunked dataset storage */
+ if((layout.type == H5D_CHUNKED) && H5F_addr_defined(layout.u.chunk.addr))
+ if(H5D_istore_bh_info(f, dxpl_id, &layout, &(bh_info->index_size)) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't determine chunked dataset btree info")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_dset_bh_info() */
+
diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h
index b1db412..f28a5db 100644
--- a/src/H5Dpkg.h
+++ b/src/H5Dpkg.h
@@ -329,7 +329,8 @@ H5_DLL herr_t H5D_istore_dest (H5D_t *dset, hid_t dxpl_id);
H5_DLL herr_t H5D_istore_allocate (H5D_t *dset, hid_t dxpl_id,
hbool_t full_overwrite);
H5_DLL hsize_t H5D_istore_allocated(H5D_t *dset, hid_t dxpl_id);
-H5_DLL herr_t H5D_obj_istore_bh_info(H5O_loc_t *oloc, H5O_layout_t *layout, hid_t dxpl_id, hsize_t *btree_size);
+H5_DLL herr_t H5D_istore_bh_info(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
+ hsize_t *btree_size);
H5_DLL herr_t H5D_istore_prune_by_extent(const H5D_io_info_t *io_info,
const hsize_t *old_dims);
H5_DLL herr_t H5D_istore_initialize_by_extent(H5D_io_info_t *io_info);
diff --git a/src/H5F.c b/src/H5F.c
index ebbc3f2..f478813 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -31,6 +31,7 @@
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Pprivate.h" /* Property lists */
+#include "H5SMprivate.h" /* Shared Object Header Messages */
#include "H5Tprivate.h" /* Datatypes */
/* Predefined file drivers */
@@ -3488,37 +3489,25 @@ done:
*
*-------------------------------------------------------------------------
*/
-
herr_t
H5Freset_mdc_hit_rate_stats(hid_t file_id)
{
- H5F_t *file=NULL; /* File object for file ID */
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
+ H5F_t *file; /* File object for file ID */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(H5Freset_mdc_hit_rate_stats, FAIL)
H5TRACE1("e", "i", file_id);
/* Check args */
- if ( NULL == (file = H5I_object_verify(file_id, H5I_FILE)) ) {
-
+ if(NULL == (file = H5I_object_verify(file_id, H5I_FILE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
- }
/* Reset the hit rate statistic */
- result = H5AC_reset_cache_hit_rate_stats(file->shared->cache);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5AC_reset_cache_hit_rate_stats() failed.");
- }
-
+ if(H5AC_reset_cache_hit_rate_stats(file->shared->cache) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "can't reset cache hit rate")
done:
-
FUNC_LEAVE_API(ret_value)
-
} /* H5Freset_mdc_hit_rate_stats() */
@@ -3539,8 +3528,6 @@ done:
* Programmer: Raymond Lu
* June 29, 2004
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
ssize_t
@@ -3579,11 +3566,12 @@ H5Fget_name(hid_t obj_id, char *name/*out*/, size_t size)
} /* end if */
/* Set return value */
- ret_value=(ssize_t)len;
+ ret_value = (ssize_t)len;
done:
FUNC_LEAVE_API(ret_value)
} /* end H5Fget_name() */
+
/*-------------------------------------------------------------------------
* Function: H5Fget_info
@@ -3602,31 +3590,47 @@ done:
herr_t
H5Fget_info(hid_t obj_id, H5F_info_t *finfo)
{
- H5F_t *f;
- herr_t ret_value=SUCCEED;
+ H5F_t *f; /* Top file in mount hierarchy */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(H5Fget_info, FAIL)
- HDassert(finfo);
+ /* Check args */
+ if(!finfo)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
- HDmemset(finfo, 0, sizeof(H5F_info_t));
+ /* For file IDs, get the file object directly */
+ /* (This prevents the H5G_loc() call from returning the file pointer for
+ * the top file in a mount hierarchy)
+ */
if(H5I_get_type(obj_id) == H5I_FILE ) {
if(NULL == (f = H5I_object(obj_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file")
- else {
- HDassert(f->shared);
- if (H5F_addr_defined(f->shared->extension_addr)) {
- if (H5F_super_ext_info(f, finfo, H5AC_ind_dxpl_id) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock extension size")
- }
- if(H5F_addr_defined(f->shared->sohm_addr)) {
- if (H5SM_ih_info(f, finfo, H5AC_ind_dxpl_id) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve SOHM btree & heap storage info")
- }
- }
- } else
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a valid object ID")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+ } /* end if */
+ else {
+ H5G_loc_t loc; /* Object location */
+
+ /* Get symbol table entry */
+ if(H5G_loc(obj_id, &loc) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a valid object ID")
+ f = loc.oloc->file;
+ } /* end else */
+ HDassert(f->shared);
+
+ /* Reset file info struct */
+ HDmemset(finfo, 0, sizeof(H5F_info_t));
+
+ /* Check for superblock extension info */
+ if(H5F_addr_defined(f->shared->extension_addr))
+ if(H5F_super_ext_size(f, H5AC_ind_dxpl_id, &finfo->super_ext_size) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock extension size")
+
+ /* Check for SOHM info */
+ if(H5F_addr_defined(f->shared->sohm_addr))
+ if(H5SM_ih_size(f, H5AC_ind_dxpl_id, finfo) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve SOHM btree & heap storage info")
done:
FUNC_LEAVE_API(ret_value)
} /* end H5Fget_info() */
+
diff --git a/src/H5FS.c b/src/H5FS.c
index 1417713..e34f176 100644
--- a/src/H5FS.c
+++ b/src/H5FS.c
@@ -452,50 +452,9 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5FS_new() */
-#ifdef H5FS_DEBUG
/*-------------------------------------------------------------------------
- * Function: H5FS_assert
- *
- * Purpose: Verify that the free space manager is mostly sane
- *
- * Return: Non-negative on success, negative on failure
- *
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Jul 17 2006
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5FS_assert(const H5FS_t *fspace)
-{
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FS_assert)
-#ifdef QAK
-HDfprintf(stderr, "%s: fspace->hdr->tot_sect_count = %Hu\n", "H5FS_assert", fspace->hdr->tot_sect_count);
-#endif /* QAK */
-
- /* Sanity check sections */
- H5FS_sect_assert(fspace);
-
- /* General assumptions about the section size counts */
- HDassert(fspace->sinfo->tot_size_count >= fspace->sinfo->serial_size_count);
- HDassert(fspace->sinfo->tot_size_count >= fspace->sinfo->ghost_size_count);
-
- /* General assumptions about the section counts */
- HDassert(fspace->tot_sect_count >= fspace->serial_sect_count);
- HDassert(fspace->tot_sect_count >= fspace->ghost_sect_count);
- HDassert(fspace->tot_sect_count == (fspace->serial_sect_count + fspace->ghost_sect_count));
-#ifdef QAK
- HDassert(fspace->serial_sect_count > 0 || fspace->ghost_sect_count == 0);
-#endif /* QAK */
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5FS_assert() */
-#endif /* H5FS_DEBUG */
-
-/*-------------------------------------------------------------------------
- * Function: H5FS_meta_info
+ * Function: H5FS_size
*
* Purpose: Collect meta storage info used by the free space manager
*
@@ -508,13 +467,14 @@ HDfprintf(stderr, "%s: fspace->hdr->tot_sect_count = %Hu\n", "H5FS_assert", fspa
*-------------------------------------------------------------------------
*/
herr_t
-H5FS_meta_info(H5F_t *f, hid_t dxpl_id, haddr_t fs_addr, hsize_t *meta_size)
+H5FS_size(H5F_t *f, hid_t dxpl_id, haddr_t fs_addr, hsize_t *meta_size)
{
H5FS_t *fspace = NULL; /* Free space header info */
H5FS_prot_t fs_prot; /* Information for protecting free space manager */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(H5FS_meta_info, FAIL)
+ FUNC_ENTER_NOAPI(H5FS_size, FAIL)
+
/*
* Check arguments.
*/
@@ -533,11 +493,55 @@ H5FS_meta_info(H5F_t *f, hid_t dxpl_id, haddr_t fs_addr, hsize_t *meta_size)
if(NULL == (fspace = H5AC_protect(f, dxpl_id, H5AC_FSPACE_HDR, fs_addr, &fs_prot, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_FSPACE, H5E_CANTLOAD, FAIL, "unable to load free space header")
- *meta_size = H5FS_HEADER_SIZE(f) + fspace->alloc_sect_size;
+ /* Get the free space size info */
+ *meta_size += H5FS_HEADER_SIZE(f) + fspace->alloc_sect_size;
done:
if(fspace && H5AC_unprotect(f, dxpl_id, H5AC_FSPACE_HDR, fs_addr, fspace, H5AC__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_FSPACE, H5E_PROTECT, FAIL, "unable to release free space header")
FUNC_LEAVE_NOAPI(ret_value)
-}
+} /* end H5FS_size() */
+
+#ifdef H5FS_DEBUG
+
+/*-------------------------------------------------------------------------
+ * Function: H5FS_assert
+ *
+ * Purpose: Verify that the free space manager is mostly sane
+ *
+ * Return: Non-negative on success, negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Jul 17 2006
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FS_assert(const H5FS_t *fspace)
+{
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FS_assert)
+#ifdef QAK
+HDfprintf(stderr, "%s: fspace->hdr->tot_sect_count = %Hu\n", "H5FS_assert", fspace->hdr->tot_sect_count);
+#endif /* QAK */
+
+ /* Sanity check sections */
+ H5FS_sect_assert(fspace);
+
+ /* General assumptions about the section size counts */
+ HDassert(fspace->sinfo->tot_size_count >= fspace->sinfo->serial_size_count);
+ HDassert(fspace->sinfo->tot_size_count >= fspace->sinfo->ghost_size_count);
+
+ /* General assumptions about the section counts */
+ HDassert(fspace->tot_sect_count >= fspace->serial_sect_count);
+ HDassert(fspace->tot_sect_count >= fspace->ghost_sect_count);
+ HDassert(fspace->tot_sect_count == (fspace->serial_sect_count + fspace->ghost_sect_count));
+#ifdef QAK
+ HDassert(fspace->serial_sect_count > 0 || fspace->ghost_sect_count == 0);
+#endif /* QAK */
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5FS_assert() */
+#endif /* H5FS_DEBUG */
+
diff --git a/src/H5FSprivate.h b/src/H5FSprivate.h
index e6a3ce4..16f2df6 100644
--- a/src/H5FSprivate.h
+++ b/src/H5FSprivate.h
@@ -158,11 +158,11 @@ H5_DLL H5FS_t *H5FS_create(H5F_t *f, hid_t dxpl_id, haddr_t *fs_addr,
const H5FS_section_class_t *classes[], void *cls_init_udata);
H5_DLL H5FS_t *H5FS_open(H5F_t *f, hid_t dxpl_id, haddr_t fs_addr,
size_t nclasses, const H5FS_section_class_t *classes[], void *cls_init_udata);
+H5_DLL herr_t H5FS_size(H5F_t *f, hid_t dxpl_id, haddr_t fs_addr,
+ hsize_t *meta_size);
H5_DLL herr_t H5FS_delete(H5F_t *f, hid_t dxpl_id, haddr_t fs_addr);
H5_DLL herr_t H5FS_close(H5F_t *f, hid_t dxpl_id, H5FS_t *fspace);
-H5_DLL herr_t H5FS_meta_info(H5F_t *f, hid_t dxpl_id, haddr_t fs_addr, hsize_t *meta_size);
-
/* Free space section routines */
H5_DLL herr_t H5FS_sect_add(H5F_t *f, hid_t dxpl_id, H5FS_t *fspace,
H5FS_section_info_t *node, unsigned flags, void *op_data);
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index 60a81a9..a104e61 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -177,8 +177,7 @@ H5_DLL herr_t H5F_mount_count_ids(H5F_t *f, unsigned *nopen_files, unsigned *nop
H5_DLL herr_t H5F_super_init(H5F_t *f, hid_t dxpl_id);
H5_DLL herr_t H5F_super_write(H5F_t *f, hid_t dxpl_id);
H5_DLL herr_t H5F_super_read(H5F_t *f, hid_t dxpl_id, H5G_loc_t *root_loc);
-
-H5_DLL herr_t H5F_super_ext_info(H5F_t *f, H5F_info_t *finfo, hid_t dxpl_id);
+H5_DLL herr_t H5F_super_ext_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_ext_info);
/* Shared file list related routines */
diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h
index db86101..1d98330 100644
--- a/src/H5Fpublic.h
+++ b/src/H5Fpublic.h
@@ -97,11 +97,13 @@ typedef enum H5F_close_degree_t {
H5F_CLOSE_STRONG = 3
} H5F_close_degree_t;
+/* Current "global" information about file */
+/* (just size info currently) */
typedef struct H5F_info_t {
- hsize_t super_ext_size; /* superblock extension size */
+ hsize_t super_ext_size; /* Superblock extension size */
struct {
- hsize_t hdr_size;
- H5_ih_info_t msgs_info;
+ hsize_t hdr_size; /* Shared object header message header size */
+ H5_ih_info_t msgs_info; /* Shared object header message index & heap size */
} sohm;
} H5F_info_t;
@@ -142,7 +144,6 @@ H5_DLL herr_t H5Freset_mdc_hit_rate_stats(hid_t file_id);
H5_DLL ssize_t H5Fget_name(hid_t obj_id, char *name, size_t size);
H5_DLL herr_t H5Fget_info(hid_t obj_id, H5F_info_t *bh_info);
-
#ifdef __cplusplus
}
#endif
diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c
index 4a516af..7d1a8ad 100644
--- a/src/H5Fsuper.c
+++ b/src/H5Fsuper.c
@@ -965,8 +965,9 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F_super_write() */
+
/*-------------------------------------------------------------------------
- * Function: H5F_super_ext_info
+ * Function: H5F_super_ext_size
* Get storage size of the superblock extension
*
* Return: Success: non-negative on success
@@ -977,18 +978,31 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_super_ext_info(H5F_t *f, H5F_info_t *finfo, hid_t dxpl_id)
+H5F_super_ext_size(H5F_t *f, hid_t dxpl_id, hsize_t *super_ext_size)
{
- herr_t ret_value=SUCCEED;
+ H5O_loc_t ext_loc; /* "Object location" for superblock extension */
+ H5O_info_t oinfo; /* Object info for superblock extension */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(H5F_super_ext_info, FAIL)
+ FUNC_ENTER_NOAPI(H5F_super_ext_size, FAIL)
+ /* Sanity check */
HDassert(f);
- HDassert(finfo);
+ HDassert(super_ext_size);
+
+ /* Set up "fake" object location for superblock extension */
+ H5O_loc_reset(&ext_loc);
+ ext_loc.file = f;
+ ext_loc.addr = f->shared->extension_addr;
- if (H5O_super_ext_size(f, &(finfo->super_ext_size), dxpl_id) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock extension size")
+ /* Get object header info for superblock extension */
+ if(H5O_get_info(&ext_loc, &oinfo, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to retrieve superblock extension info")
+
+ /* Set the superblock extension size */
+ *super_ext_size = oinfo.hdr.space.total;
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5F_super_ext_info() */
+} /* H5F_super_ext_size() */
+
diff --git a/src/H5Gnode.c b/src/H5Gnode.c
index cf49c8b..5aa64c5 100644
--- a/src/H5Gnode.c
+++ b/src/H5Gnode.c
@@ -73,7 +73,7 @@ typedef struct H5G_node_t {
/* PRIVATE PROTOTYPES */
static herr_t H5G_node_serialize(H5F_t *f, H5G_node_t *sym, size_t size, uint8_t *buf);
-static size_t H5G_node_size(const H5F_t *f);
+static size_t H5G_node_size_real(const H5F_t *f);
static herr_t H5G_node_shared_free(void *shared);
/* Metadata cache callbacks */
@@ -83,7 +83,7 @@ static herr_t H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t a
H5G_node_t *sym, unsigned UNUSED * flags_ptr);
static herr_t H5G_node_dest(H5F_t *f, H5G_node_t *sym);
static herr_t H5G_node_clear(H5F_t *f, H5G_node_t *sym, hbool_t destroy);
-static herr_t H5G_compute_size(const H5F_t *f, const H5G_node_t *sym, size_t *size_ptr);
+static herr_t H5G_node_size(const H5F_t *f, const H5G_node_t *sym, size_t *size_ptr);
/* B-tree callbacks */
static H5RC_t *H5G_node_get_shared(const H5F_t *f, const void *_udata);
@@ -119,7 +119,7 @@ const H5AC_class_t H5AC_SNODE[1] = {{
(H5AC_flush_func_t)H5G_node_flush,
(H5AC_dest_func_t)H5G_node_dest,
(H5AC_clear_func_t)H5G_node_clear,
- (H5AC_size_func_t)H5G_compute_size,
+ (H5AC_size_func_t)H5G_node_size,
}};
/* H5G inherits B-tree like properties from H5B */
@@ -294,7 +294,7 @@ H5G_node_debug_key(FILE *stream, H5F_t *f, hid_t UNUSED dxpl_id, int indent,
/*-------------------------------------------------------------------------
- * Function: H5G_node_size
+ * Function: H5G_node_size_real
*
* Purpose: Returns the total size of a symbol table node.
*
@@ -311,9 +311,9 @@ H5G_node_debug_key(FILE *stream, H5F_t *f, hid_t UNUSED dxpl_id, int indent,
*-------------------------------------------------------------------------
*/
static size_t
-H5G_node_size(const H5F_t *f)
+H5G_node_size_real(const H5F_t *f)
{
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_size);
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_size_real);
FUNC_LEAVE_NOAPI(H5G_NODE_SIZEOF_HDR(f) +
(2 * H5F_SYM_LEAF_K(f)) * H5G_SIZEOF_ENTRY(f));
@@ -373,7 +373,7 @@ H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_udata1
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "can't wrap buffer")
/* Compute the size of the serialized symbol table node on disk */
- size = H5G_node_size(f);
+ size = H5G_node_size_real(f);
/* Get a pointer to a buffer that's large enough for node */
if(NULL == (node = H5WB_actual(wb, size)))
@@ -500,7 +500,7 @@ H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't wrap buffer")
/* Compute the size of the serialized symbol table node on disk */
- size = H5G_node_size(f);
+ size = H5G_node_size_real(f);
/* Get a pointer to a buffer that's large enough for node */
if(NULL == (node = H5WB_actual(wb, size)))
@@ -671,7 +671,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5G_compute_size
+ * Function: H5G_node_size
*
* Purpose: Compute the size in bytes of the specified instance of
* H5G_node_t on disk, and return it in *size_ptr. On failure
@@ -687,20 +687,20 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_compute_size(const H5F_t *f, const H5G_node_t UNUSED *sym, size_t *size_ptr)
+H5G_node_size(const H5F_t *f, const H5G_node_t UNUSED *sym, size_t *size_ptr)
{
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_compute_size);
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_size);
/*
* Check arguments.
*/
- assert(f);
- assert(size_ptr);
+ HDassert(f);
+ HDassert(size_ptr);
- *size_ptr = H5G_node_size(f);
+ *size_ptr = H5G_node_size_real(f);
FUNC_LEAVE_NOAPI(SUCCEED);
-} /* H5G_compute_size() */
+} /* H5G_node_size() */
/*-------------------------------------------------------------------------
@@ -742,7 +742,7 @@ H5G_node_create(H5F_t *f, hid_t dxpl_id, H5B_ins_t UNUSED op, void *_lt_key,
if(NULL == (sym = H5FL_CALLOC(H5G_node_t)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- size = H5G_node_size(f);
+ size = H5G_node_size_real(f);
if(HADDR_UNDEF == (*addr_p = H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, size)))
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to allocate file space");
@@ -1297,7 +1297,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
*rt_key = *lt_key;
*rt_key_changed = TRUE;
sn->nsyms = 0;
- if(H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size(f)) < 0
+ if(H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size_real(f)) < 0
|| H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__DIRTIED_FLAG | H5C__DELETED_FLAG) < 0) {
sn = NULL;
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to free symbol table node")
@@ -1369,7 +1369,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
*rt_key = *lt_key;
*rt_key_changed = TRUE;
sn->nsyms = 0;
- if(H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size(f)) < 0
+ if(H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size_real(f)) < 0
|| H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__DIRTIED_FLAG | H5C__DELETED_FLAG) < 0) {
sn = NULL;
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to free symbol table node")
@@ -1928,6 +1928,37 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5G_node_iterate_size
+ *
+ * Purpose: This function gets called by H5B_iterate_btree_size()
+ * to gather storage info for SNODs.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi
+ * Jun 19 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_node_iterate_size(H5F_t *f, hid_t UNUSED dxpl_id, const void UNUSED *_lt_key, haddr_t UNUSED addr,
+ const void UNUSED *_rt_key, void *_udata)
+{
+ hsize_t *stab_size = (hsize_t *)_udata; /* User data */
+
+ FUNC_ENTER_NOAPI_NOFUNC(H5G_node_iterate_size)
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(stab_size);
+
+ *stab_size += H5G_node_size_real(f);
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5G_btree_node_iterate() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5G_node_debug
*
* Purpose: Prints debugging information about a symbol table node
@@ -1984,7 +2015,7 @@ H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
"Dirty:",
sn->cache_info.is_dirty ? "Yes" : "No");
fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "Size of Node (in bytes):", (unsigned)H5G_node_size(f));
+ "Size of Node (in bytes):", (unsigned)H5G_node_size_real(f));
fprintf(stream, "%*s%-*s %u of %u\n", indent, "", fwidth,
"Number of Symbols:",
sn->nsyms, (unsigned)(2 * H5F_SYM_LEAF_K(f)));
@@ -2015,36 +2046,4 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G_node_debug() */
-
-/*-------------------------------------------------------------------------
- * Function: H5G_btree_node_iterate
- *
- * Purpose: This function gets called by H5B_iterate_btree_size()
- * to gather storage info for SNODs.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Vailin Choi
- * Jun 19 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5G_btree_node_iterate(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t UNUSED addr,
- const void UNUSED *_rt_key, void *_udata)
-{
- herr_t ret_value=SUCCEED;
- hsize_t *stab_size=(hsize_t *)_udata;
-
- FUNC_ENTER_NOAPI(H5G_btree_node_iterate, FAIL)
-
- /*
- * Check arguments.
- */
- HDassert(f);
- HDassert(stab_size);
- *stab_size += H5G_node_size(f);
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5G_btree_node_iterate() */
diff --git a/src/H5Gobj.c b/src/H5Gobj.c
index 09eb3b1..a3166ba 100644
--- a/src/H5Gobj.c
+++ b/src/H5Gobj.c
@@ -1247,3 +1247,4 @@ H5G_obj_lookup_by_idx(H5O_loc_t *grp_oloc, H5_index_t idx_type,
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G_obj_lookup_by_idx() */
+
diff --git a/src/H5Goh.c b/src/H5Goh.c
index 9b070a6..4f7dbc6 100644
--- a/src/H5Goh.c
+++ b/src/H5Goh.c
@@ -242,6 +242,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_group_get_oloc() */
+
/*-------------------------------------------------------------------------
* Function: H5O_group_bh_info
*
@@ -256,50 +257,51 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_group_bh_info(H5O_loc_t *oloc, H5O_t *oh, hid_t dxpl_id, H5_ih_info_t *bh_info)
+H5O_group_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info)
{
- herr_t ret_value=SUCCEED; /* Return value */
- hsize_t huge_bt_size=0;
H5O_linfo_t linfo; /* Link info message */
- H5O_stab_t stabinfo; /* Info about symbol table */
-
-
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5O_group_bh_info, FAIL)
/* Sanity check */
- HDassert(oloc);
+ HDassert(f);
HDassert(oh);
HDassert(bh_info);
- if(NULL==H5O_msg_read_real(oloc->file, dxpl_id, oh, H5O_LINFO_ID, &linfo)) {
+ /* Check for "new style" group info */
+ if(NULL == H5O_msg_read_real(f, dxpl_id, oh, H5O_LINFO_ID, &linfo)) {
+ H5O_stab_t stab; /* Info about symbol table */
+
+ /* Must be "old style" group, clear error stack */
H5E_clear_stack(NULL);
- if(NULL==H5O_msg_read_real(oloc->file, dxpl_id, oh, H5O_STAB_ID, &stabinfo)) {
+
+ /* Get symbol table message */
+ if(NULL == H5O_msg_read_real(f, dxpl_id, oh, H5O_STAB_ID, &stab))
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't find LINFO nor STAB messages")
- } else { /* STAB */
- if (H5G_stab_bh_info(oloc, &stabinfo, dxpl_id, bh_info) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve pre-1.8 group btree & heap info")
- }
- } else { /* LINFO */
- if (H5F_addr_defined(linfo.corder_bt2_addr)) {
- if (H5B2_info_iterate(oloc->file, dxpl_id, H5G_BT2_CORDER,
- linfo.corder_bt2_addr, &bh_info->index_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- }
- if (H5F_addr_defined(linfo.name_bt2_addr)) {
- if (H5B2_info_iterate(oloc->file, dxpl_id, H5G_BT2_NAME,
- linfo.name_bt2_addr, &bh_info->index_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- }
- huge_bt_size = 0;
- if (H5F_addr_defined(linfo.fheap_addr)) {
- if (H5HF_fheap_info(oloc->file, dxpl_id, linfo.fheap_addr,
- &bh_info->heap_size, &huge_bt_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve fractal heap storage info")
- }
- bh_info->index_size += huge_bt_size;
- }
+
+ /* Get symbol table size info */
+ if(H5G_stab_bh_size(f, dxpl_id, &stab, bh_info) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve symbol table size info")
+ } /* end if */
+ else { /* LINFO */
+ /* Get creation order B-tree size, if available */
+ if(H5F_addr_defined(linfo.corder_bt2_addr))
+ if(H5B2_iterate_size(f, dxpl_id, H5G_BT2_CORDER, linfo.corder_bt2_addr, &bh_info->index_size) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
+
+ /* Get name order B-tree size, if available */
+ if(H5F_addr_defined(linfo.name_bt2_addr))
+ if(H5B2_iterate_size(f, dxpl_id, H5G_BT2_NAME, linfo.name_bt2_addr, &bh_info->index_size) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
+
+ /* Get fractal heap size, if available */
+ if(H5F_addr_defined(linfo.fheap_addr))
+ if(H5HF_size(f, dxpl_id, linfo.fheap_addr, &bh_info->heap_size) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve fractal heap storage info")
+ } /* end else */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_group_bh_info() */
+
diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h
index cb36a0f..5567782 100644
--- a/src/H5Gpkg.h
+++ b/src/H5Gpkg.h
@@ -372,6 +372,8 @@ H5_DLL herr_t H5G_stab_iterate(const H5O_loc_t *oloc, hid_t dxpl_id,
H5_iter_order_t order, hsize_t skip, hsize_t *last_lnk, hid_t gid,
H5G_link_iterate_t *lnk_op, void *op_data);
H5_DLL herr_t H5G_stab_count(struct H5O_loc_t *oloc, hsize_t *num_objs, hid_t dxpl_id);
+H5_DLL herr_t H5G_stab_bh_size(H5F_t *f, hid_t dxpl_id, const H5O_stab_t *stab,
+ H5_ih_info_t *bh_info);
H5_DLL ssize_t H5G_stab_get_name_by_idx(H5O_loc_t *oloc, H5_iter_order_t order,
hsize_t n, char* name, size_t size, hid_t dxpl_id);
H5_DLL H5G_obj_t H5G_stab_get_type_by_idx(H5O_loc_t *oloc, hsize_t idx,
@@ -385,9 +387,6 @@ H5_DLL herr_t H5G_stab_lookup(H5O_loc_t *grp_oloc, const char *name,
H5_DLL herr_t H5G_stab_lookup_by_idx(H5O_loc_t *grp_oloc, H5_iter_order_t order,
hsize_t n, H5O_link_t *lnk, hid_t dxpl_id);
-H5_DLL herr_t H5G_stab_bh_info(struct H5O_loc_t *grp_oloc, H5O_stab_t *stabinfo,
- hid_t dxpl_id, H5_ih_info_t *bh_info);
-
/*
* Functions that understand symbol table entries.
@@ -408,10 +407,6 @@ H5_DLL herr_t H5G_ent_debug(H5F_t *f, const H5G_entry_t *ent,
H5_DLL herr_t H5G_node_init(H5F_t *f);
H5_DLL int H5G_node_iterate(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
const void *_rt_key, void *_udata);
-
-H5_DLL herr_t H5G_btree_node_iterate(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
- const void *_rt_key, void *_udata);
-
H5_DLL int H5G_node_sumup(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
const void *_rt_key, void *_udata);
H5_DLL int H5G_node_by_idx(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
@@ -420,6 +415,8 @@ H5_DLL int H5G_node_copy(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t a
const void *_rt_key, void *_udata);
H5_DLL int H5G_node_build_table(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
const void *_rt_key, void *_udata);
+H5_DLL herr_t H5G_node_iterate_size(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+ const void *_rt_key, void *_udata);
/* Functions that understand links in groups */
H5_DLL int H5G_link_cmp_name_inc(const void *lnk1, const void *lnk2);
diff --git a/src/H5Gprivate.h b/src/H5Gprivate.h
index 665b597..40d2df8 100644
--- a/src/H5Gprivate.h
+++ b/src/H5Gprivate.h
@@ -175,7 +175,6 @@ H5_DLL herr_t H5G_obj_ent_decode(H5F_t *f, const uint8_t **pp,
H5_DLL herr_t H5G_obj_ent_encode(const H5F_t *f, uint8_t **pp,
const struct H5O_loc_t *oloc);
-
/*
* These functions operate on group hierarchy names.
*/
diff --git a/src/H5Gstab.c b/src/H5Gstab.c
index 9e9f91b..2bc525c 100644
--- a/src/H5Gstab.c
+++ b/src/H5Gstab.c
@@ -604,6 +604,48 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5G_stab_bh_size
+ *
+ * Purpose: Retrieve storage for btree and heap (1.6)
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi
+ * June 25 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_stab_bh_size(H5F_t *f, hid_t dxpl_id, const H5O_stab_t *stab, H5_ih_info_t *bh_info)
+{
+ H5B_info_ud_t bh_udata; /* User-data for B-tree callbacks */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI(H5G_stab_bh_size, FAIL)
+
+ /* Sanity check */
+ HDassert(f);
+ HDassert(stab);
+ HDassert(bh_info);
+
+ /* Set up user data for B-tree callback */
+ bh_udata.udata = NULL;
+ bh_udata.btree_size = &(bh_info->index_size);
+
+ /* Get the B-tree & symbol table node size info */
+ if(H5B_iterate_size(f, dxpl_id, H5B_SNODE, H5G_node_iterate_size, stab->btree_addr, &bh_udata) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "iteration operator failed")
+
+ /* Get the size of the local heap for the group */
+ if(H5HL_heapsize(f, dxpl_id, stab->heap_addr, &(bh_info->heap_size)) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "iteration operator failed")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_stab_bh_size() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5G_stab_get_name_by_idx_cb
*
* Purpose: Callback for B-tree iteration 'by index' info query to
@@ -1046,43 +1088,4 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G_stab_lookup_by_idx() */
-
-/*-------------------------------------------------------------------------
- * Function: H5G_stab_bh_info
- *
- * Purpose: Retrieve storage for btree and heap (1.6)
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Vailin Choi
- * June 25 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5G_stab_bh_info(H5O_loc_t *oloc, H5O_stab_t *stab, hid_t dxpl_id, H5_ih_info_t *bh_info)
-{
- hsize_t stab_size=0; /* storage used for symbol table nodes */
- herr_t ret_value = SUCCEED;
-
- H5B_info_ud_t bh_udata;
- FUNC_ENTER_NOAPI(H5G_stab_bh_info, FAIL)
-
- /* Sanity check */
- HDassert(oloc);
- HDassert(stab);
- HDassert(bh_info);
-
- bh_udata.udata = NULL;
- bh_udata.btree_size = &(bh_info->index_size);
-
- if (H5B_iterate_btree_size(oloc->file, dxpl_id, H5B_SNODE, H5G_btree_node_iterate, stab->btree_addr, &bh_udata) <0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "iteration operator failed")
-
- if (H5HL_heapsize(oloc->file, dxpl_id, stab->heap_addr, &(bh_info->heap_size)) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "iteration operator failed")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5G_stab_bh_info() */
diff --git a/src/H5HF.c b/src/H5HF.c
index 8d65604..768b7e7 100644
--- a/src/H5HF.c
+++ b/src/H5HF.c
@@ -926,88 +926,3 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5HF_delete() */
-
-/*-------------------------------------------------------------------------
- * Function: H5HF_fheap_info
- *
- * Purpose: Retrieve storage info for:
- * 1. fractal heap
- * 2. btree storage used by huge objects in fractal heap
- * 3. free space storage info
- *
- * Return: non-negative on success, negative on error
- *
- * Programmer: Vailin Choi
- * July 12 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5HF_fheap_info(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, hsize_t *heap_size, hsize_t *huge_bt_size)
-{
- H5HF_hdr_t *hdr = NULL;
- herr_t ret_value = SUCCEED;
- hsize_t meta_size = 0;
- int reterr;
-
- FUNC_ENTER_NOAPI(H5HF_fheap_info, FAIL)
-
- /*
- * Check arguments.
- */
- HDassert(f);
- HDassert(H5F_addr_defined(fh_addr));
- HDassert(heap_size);
- HDassert(huge_bt_size);
-
-
- /* Lock the heap header into memory */
- if(NULL == (hdr = H5AC_protect(f, dxpl_id, H5AC_FHEAP_HDR, fh_addr, NULL, NULL, H5AC_READ)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load fractal heap header")
-
- *heap_size += hdr->heap_size;
- *heap_size += hdr->man_alloc_size;
- *heap_size += hdr->huge_size;
-
- if(H5F_addr_defined(hdr->man_dtable.table_addr)) {
- if (hdr->man_dtable.curr_root_rows != 0) {
- reterr = H5HF_indirect_info(f, dxpl_id, hdr, hdr->man_dtable.table_addr, hdr->man_dtable.curr_root_rows, heap_size);
- if (reterr < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to get fractal heap storage info for indirect block")
- }
- }
-
- /* get B-tree storage for huge objects in fractal heap */
- if (H5F_addr_defined(hdr->huge_bt2_addr)) {
- if (hdr->huge_ids_direct) {
- if (hdr->filter_len > 0) {
- if (H5B2_info_iterate(f, dxpl_id, H5HF_BT2_FILT_DIR, hdr->huge_bt2_addr, huge_bt_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- } else {
- if (H5B2_info_iterate(f, dxpl_id, H5HF_BT2_DIR, hdr->huge_bt2_addr, huge_bt_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- }
- } else {
- if (hdr->filter_len > 0) {
- if (H5B2_info_iterate(f, dxpl_id, H5HF_BT2_FILT_INDIR, hdr->huge_bt2_addr, huge_bt_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- } else {
- if (H5B2_info_iterate(f, dxpl_id, H5HF_BT2_INDIR, hdr->huge_bt2_addr, huge_bt_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- }
- }
- }
- if (H5F_addr_defined(hdr->fs_addr)) {
- meta_size = 0;
- if (H5FS_meta_info(f, dxpl_id, hdr->fs_addr, &meta_size) < 0)
- HGOTO_ERROR(H5E_FSPACE, H5E_CANTGET, FAIL, "can't retrieve FS meta storage info")
- *heap_size += meta_size;
- }
-
-done:
- /* Unprotect the header, if an error occurred */
- if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_HDR, fh_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap header")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HF_fheap_info() */
diff --git a/src/H5HFiblock.c b/src/H5HFiblock.c
index 15c998c..70133aa 100644
--- a/src/H5HFiblock.c
+++ b/src/H5HFiblock.c
@@ -1575,10 +1575,11 @@ HDfprintf(stderr, "%s: iblock_addr = %a, iblock_nrows = %u\n", FUNC, iblock_addr
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5HF_man_iblock_delete() */
+
/*-------------------------------------------------------------------------
*
- * Function: H5HF_indirect_info
+ * Function: H5HF_man_iblock_size
*
* Purpose: Gather storage used for the indirect block in fractal heap
*
@@ -1589,15 +1590,15 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5HF_indirect_info(H5F_t *f, hid_t dxpl_id, H5HF_hdr_t *hdr, haddr_t iblock_addr, unsigned nrows, hsize_t *heap_size)
+H5HF_man_iblock_size(H5F_t *f, hid_t dxpl_id, H5HF_hdr_t *hdr, haddr_t iblock_addr,
+ unsigned nrows, hsize_t *heap_size)
{
- hbool_t did_protect;
- H5HF_indirect_t *iblock; /* Pointer to indirect block */
- size_t u, v;
- int reterr;
- int ret_value=SUCCEED;
+ H5HF_indirect_t *iblock = NULL; /* Pointer to indirect block */
+ hbool_t did_protect; /* Whether we protected the indirect block or not */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5HF_man_iblock_size, FAIL)
- FUNC_ENTER_NOAPI(H5HF_indirect_info, FAIL)
/*
* Check arguments.
*/
@@ -1606,34 +1607,39 @@ H5HF_indirect_info(H5F_t *f, hid_t dxpl_id, H5HF_hdr_t *hdr, haddr_t iblock_addr
HDassert(H5F_addr_defined(iblock_addr));
HDassert(heap_size);
- if (NULL == (iblock = H5HF_man_iblock_protect(hdr, dxpl_id, iblock_addr, nrows, NULL, 0, FALSE, H5AC_READ, &did_protect)))
+ /* Protect the indirect block */
+ if(NULL == (iblock = H5HF_man_iblock_protect(hdr, dxpl_id, iblock_addr, nrows, NULL, 0, FALSE, H5AC_READ, &did_protect)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load fractal heap indirect block")
+ /* Accumulate size of this indirect block */
*heap_size += iblock->size;
/* Indirect entries in this indirect block */
if(iblock->nrows > hdr->man_dtable.max_direct_rows) {
- unsigned first_row_bits; /* Number of bits used bit addresses in first row */
- unsigned num_indirect_rows; /* Number of rows of blocks in each indirect block */
+ unsigned first_row_bits; /* Number of bits used bit addresses in first row */
+ unsigned num_indirect_rows; /* Number of rows of blocks in each indirect block */
+ unsigned entry; /* Current entry in row */
+ size_t u; /* Local index variable */
+ entry = hdr->man_dtable.max_direct_rows * hdr->man_dtable.cparam.width;
first_row_bits = H5V_log2_of2((uint32_t)hdr->man_dtable.cparam.start_block_size) +
H5V_log2_of2(hdr->man_dtable.cparam.width);
- for(u = hdr->man_dtable.max_direct_rows; u < iblock->nrows; u++) {
- num_indirect_rows = (H5V_log2_gen(hdr->man_dtable.row_block_size[u]) - first_row_bits) + 1;
- for(v = 0; v < hdr->man_dtable.cparam.width; v++) {
- size_t off = (u * hdr->man_dtable.cparam.width) + v;
-
- if (H5F_addr_defined(iblock->ents[off].addr)) {
- reterr = H5HF_indirect_info(f, dxpl_id, hdr, iblock->ents[off].addr, num_indirect_rows, heap_size);
- if (reterr < 0)
+ num_indirect_rows = (H5V_log2_gen(hdr->man_dtable.row_block_size[u]) - first_row_bits) + 1;
+ for(u = hdr->man_dtable.max_direct_rows; u < iblock->nrows; u++, num_indirect_rows++) {
+ size_t v; /* Local index variable */
+
+ for(v = 0; v < hdr->man_dtable.cparam.width; v++, entry++)
+ if(H5F_addr_defined(iblock->ents[entry].addr))
+ if(H5HF_man_iblock_size(f, dxpl_id, hdr, iblock->ents[entry].addr, num_indirect_rows, heap_size) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to get fractal heap storage info for indirect block")
- } /* end if */
- } /* end for v */
- } /* end for u */
+ } /* end for */
} /* end if */
done:
- if(H5HF_man_iblock_unprotect(iblock, dxpl_id, H5AC__NO_FLAGS_SET, did_protect) < 0)
+ /* Release the indirect block */
+ if(iblock && H5HF_man_iblock_unprotect(iblock, dxpl_id, H5AC__NO_FLAGS_SET, did_protect) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap indirect block")
+
FUNC_LEAVE_NOAPI(ret_value)
-}
+} /* end H5HF_man_iblock_size() */
+
diff --git a/src/H5HFpkg.h b/src/H5HFpkg.h
index bd3c4ec..5bc1f14 100644
--- a/src/H5HFpkg.h
+++ b/src/H5HFpkg.h
@@ -600,6 +600,8 @@ H5_DLL herr_t H5HF_man_iblock_entry_addr(H5HF_indirect_t *iblock, unsigned entry
H5_DLL herr_t H5HF_man_iblock_delete(H5HF_hdr_t *hdr, hid_t dxpl_id,
haddr_t iblock_addr, unsigned iblock_nrows, H5HF_indirect_t *par_iblock,
unsigned par_entry);
+H5_DLL herr_t H5HF_man_iblock_size(H5F_t *f, hid_t dxpl_id, H5HF_hdr_t *hdr,
+ haddr_t iblock_addr, unsigned nrows, hsize_t *heap_size/*out*/);
/* Direct block routines */
H5_DLL herr_t H5HF_man_dblock_new(H5HF_hdr_t *fh, hid_t dxpl_id, size_t request,
@@ -722,8 +724,6 @@ H5_DLL herr_t H5HF_sect_indirect_add(H5HF_hdr_t *hdr, hid_t dxpl_id,
/* Internal operator callbacks */
H5_DLL herr_t H5HF_op_read(const void *obj, size_t obj_len, void *op_data);
H5_DLL herr_t H5HF_op_write(const void *obj, size_t obj_len, void *op_data);
-H5_DLL herr_t H5HF_indirect_info(H5F_t *f, hid_t dxpl_id, H5HF_hdr_t *hdr,
- haddr_t iblock_addr, unsigned nrows, hsize_t *heap_size/*out*/);
/* Testing routines */
#ifdef H5HF_TESTING
diff --git a/src/H5HFprivate.h b/src/H5HFprivate.h
index a8855de..208ab57 100644
--- a/src/H5HFprivate.h
+++ b/src/H5HFprivate.h
@@ -126,13 +126,10 @@ H5_DLL herr_t H5HF_remove(H5HF_t *fh, hid_t dxpl_id, const void *id);
H5_DLL herr_t H5HF_close(H5HF_t *fh, hid_t dxpl_id);
H5_DLL herr_t H5HF_delete(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr);
-/* Routines to gather storage info for fractal heap */
-H5_DLL herr_t H5HF_fheap_info(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr,
- hsize_t *heap_size/*out*/, hsize_t *huge_bt_size/*out*/);
-
-
/* Statistics routines */
H5_DLL herr_t H5HF_stat_info(const H5HF_t *fh, H5HF_stat_t *stats);
+H5_DLL herr_t H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr,
+ hsize_t *heap_size/*out*/);
/* Debugging routines */
#ifdef H5HF_DEBUGGING
diff --git a/src/H5HFstat.c b/src/H5HFstat.c
index 4846cd0..4971394 100644
--- a/src/H5HFstat.c
+++ b/src/H5HFstat.c
@@ -107,3 +107,82 @@ H5HF_stat_info(const H5HF_t *fh, H5HF_stat_t *stats)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5HF_stat_info() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5HF_size
+ *
+ * Purpose: Retrieve storage info for:
+ * 1. fractal heap
+ * 2. btree storage used by huge objects in fractal heap
+ * 3. free space storage info
+ *
+ * Return: non-negative on success, negative on error
+ *
+ * Programmer: Vailin Choi
+ * July 12 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, hsize_t *heap_size)
+{
+ H5HF_hdr_t *hdr = NULL; /* Fractal heap header */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5HF_size, FAIL)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(fh_addr));
+ HDassert(heap_size);
+
+ /* Lock the heap header into memory */
+ if(NULL == (hdr = H5AC_protect(f, dxpl_id, H5AC_FHEAP_HDR, fh_addr, NULL, NULL, H5AC_READ)))
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load fractal heap header")
+
+ /* Add in values already known */
+ *heap_size += hdr->heap_size; /* Heap header */
+ *heap_size += hdr->man_alloc_size; /* Direct block storage for "managed" objects */
+ *heap_size += hdr->huge_size; /* "huge" object storage */
+
+ /* Check for indirect blocks for managed objects */
+ if(H5F_addr_defined(hdr->man_dtable.table_addr) && hdr->man_dtable.curr_root_rows != 0)
+ if(H5HF_man_iblock_size(f, dxpl_id, hdr, hdr->man_dtable.table_addr, hdr->man_dtable.curr_root_rows, heap_size) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to get fractal heap storage info for indirect block")
+
+ /* Get B-tree storage for huge objects in fractal heap */
+ if(H5F_addr_defined(hdr->huge_bt2_addr)) {
+ const H5B2_class_t *huge_bt2_class; /* Class for huge v2 B-tree */
+
+ /* Determine the class of the huge v2 B-tree */
+ if(hdr->huge_ids_direct)
+ if(hdr->filter_len > 0)
+ huge_bt2_class = H5HF_BT2_FILT_DIR;
+ else
+ huge_bt2_class = H5HF_BT2_DIR;
+ else
+ if(hdr->filter_len > 0)
+ huge_bt2_class = H5HF_BT2_FILT_INDIR;
+ else
+ huge_bt2_class = H5HF_BT2_INDIR;
+
+ /* Get the B-tree storage for the appropriate class */
+ if(H5B2_iterate_size(f, dxpl_id, huge_bt2_class, hdr->huge_bt2_addr, heap_size) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
+ } /* end if */
+
+ /* Get storage for free-space tracking info */
+ if(H5F_addr_defined(hdr->fs_addr))
+ if(H5FS_size(f, dxpl_id, hdr->fs_addr, heap_size) < 0)
+ HGOTO_ERROR(H5E_FSPACE, H5E_CANTGET, FAIL, "can't retrieve FS meta storage info")
+
+done:
+ /* Release resources */
+ if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_HDR, fh_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap header")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5HF_size() */
+
diff --git a/src/H5HL.c b/src/H5HL.c
index a50512d..c861978 100644
--- a/src/H5HL.c
+++ b/src/H5HL.c
@@ -63,7 +63,7 @@ static H5HL_t *H5HL_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *udat
static herr_t H5HL_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, H5HL_t *heap, unsigned UNUSED * flags_ptr);
static herr_t H5HL_dest(H5F_t *f, H5HL_t *heap);
static herr_t H5HL_clear(H5F_t *f, H5HL_t *heap, hbool_t destroy);
-static herr_t H5HL_compute_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr);
+static herr_t H5HL_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr);
/*
* H5HL inherits cache-like properties from H5AC
@@ -74,7 +74,7 @@ const H5AC_class_t H5AC_LHEAP[1] = {{
(H5AC_flush_func_t)H5HL_flush,
(H5AC_dest_func_t)H5HL_dest,
(H5AC_clear_func_t)H5HL_clear,
- (H5AC_size_func_t)H5HL_compute_size,
+ (H5AC_size_func_t)H5HL_size,
}};
/* Declare a free list to manage the H5HL_free_t struct */
@@ -682,7 +682,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5HL_compute_size
+ * Function: H5HL_size
*
* Purpose: Compute the size in bytes of the specified instance of
* H5HL_t on disk, and return it in *len_ptr. On failure,
@@ -697,9 +697,9 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5HL_compute_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr)
+H5HL_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr)
{
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HL_compute_size);
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HL_size);
/* check arguments */
HDassert(f);
@@ -709,7 +709,7 @@ H5HL_compute_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr)
*size_ptr = H5HL_SIZEOF_HDR(f) + heap->heap_alloc;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5HL_compute_size() */
+} /* H5HL_size() */
/*-------------------------------------------------------------------------
@@ -1346,12 +1346,13 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5HL_get_size() */
+
/*-------------------------------------------------------------------------
* Function: H5HL_heapsize
*
* Purpose: Compute the size in bytes of the specified instance of
- * H5HL_t via H5HL_compute_size()
+ * H5HL_t via H5HL_size()
*
* Return: Non-negative on success/Negative on failure
*
@@ -1364,8 +1365,8 @@ herr_t
H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size)
{
H5HL_t *heap = NULL; /* Heap to query */
- herr_t ret_value = SUCCEED; /* Return value */
size_t local_heap_size = 0;
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5HL_heapsize, FAIL)
@@ -1378,13 +1379,17 @@ H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size)
if(NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap")
- if (H5HL_compute_size(f, heap, &local_heap_size)<0)
+ /* Get the total size of the local heap */
+ if(H5HL_size(f, heap, &local_heap_size) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to compute size of local heap")
- *heap_size = (hsize_t)local_heap_size;
+
+ /* Accumulate the size of the local heap */
+ *heap_size += (hsize_t)local_heap_size;
done:
if(heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, H5AC__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release local heap")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_get_size() */
+} /* end H5HL_heapsize() */
+
diff --git a/src/H5O.c b/src/H5O.c
index b721352..1b5add7 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -1824,13 +1824,6 @@ done:
* Programmer: Quincey Koziol
* November 21 2006
*
- * Modifications:
- * 12 July 2007 by Vailin Choi
- * Modified to retrieve the following information:
- * 1. GROUP: storage for btree and heap (1.6 and 1.8)
- * 2. DATASET: btree storage for chunked dataset
- * 3. ATTRIBUTE: storage for 1.8 btree and fractal heap
- *
*-------------------------------------------------------------------------
*/
herr_t
@@ -1852,6 +1845,9 @@ H5O_get_info(H5O_loc_t *oloc, H5O_info_t *oinfo, hid_t dxpl_id)
if(NULL == (oh = H5AC_protect(oloc->file, dxpl_id, H5AC_OHDR, oloc->addr, NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header")
+ /* Reset the object info structure */
+ HDmemset(oinfo, 0, sizeof(*oinfo));
+
/* Retrieve the file's fileno */
if(H5F_get_fileno(oloc->file, &oinfo->fileno) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "unable to read fileno")
@@ -1864,12 +1860,11 @@ H5O_get_info(H5O_loc_t *oloc, H5O_info_t *oinfo, hid_t dxpl_id)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to determine object type")
/* Retrieve btree and heap storage info */
- HDmemset(&oinfo->meta_size.obj, 0, sizeof(H5_ih_info_t));
- if (oinfo->type == H5O_TYPE_GROUP) {
- if (H5O_group_bh_info(oloc, oh, dxpl_id, &(oinfo->meta_size.obj)/*out*/) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't retrieve 1.8 group btree & heap info")
- } else if (oinfo->type == H5O_TYPE_DATASET) {
- if (H5O_dset_bh_info(oloc, oh, dxpl_id, &(oinfo->meta_size.obj)/*out*/) < 0)
+ if(oinfo->type == H5O_TYPE_GROUP) {
+ if(H5O_group_bh_info(oloc->file, dxpl_id, oh, &(oinfo->meta_size.obj)/*out*/) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't retrieve group btree & heap info")
+ } else if(oinfo->type == H5O_TYPE_DATASET) {
+ if(H5O_dset_bh_info(oloc->file, dxpl_id, oh, &(oinfo->meta_size.obj)/*out*/) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't retrieve chunked dataset btree info")
}
@@ -1943,8 +1938,7 @@ H5O_get_info(H5O_loc_t *oloc, H5O_info_t *oinfo, hid_t dxpl_id)
/* Retrieve # of attributes */
oinfo->num_attrs = H5O_attr_count_real(oloc->file, dxpl_id, oh);
- HDmemset(&oinfo->meta_size.attr, 0, sizeof(H5_ih_info_t));
- if ((oinfo->num_attrs > 0) && (H5O_attr_bh_info(oloc, oh, dxpl_id, &oinfo->meta_size.attr/*out*/) < 0))
+ if((oinfo->num_attrs > 0) && (H5O_attr_bh_info(oloc->file, dxpl_id, oh, &oinfo->meta_size.attr/*out*/) < 0))
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't retrieve attribute btree & heap info")
/* Iterate over all the chunks, adding any gaps to the free space */
@@ -2140,47 +2134,3 @@ H5O_get_oh_addr(const H5O_t *oh)
FUNC_LEAVE_NOAPI(oh->chunk[0].addr)
} /* end H5O_get_oh_addr() */
-/*-------------------------------------------------------------------------
- * Function: H5O_super_ext_size
- *
- * Purpose: Collect size of the superblock extension
- *
- * Return: Success: non-negative
- * Failure: negative
- *
- * Programmer: Vailin Choi
- * July 12, 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5O_super_ext_size(H5F_t *f, hsize_t *ext_size, hid_t dxpl_id)
-{
- H5O_t *oh = NULL; /* Object header */
- H5O_chunk_t *curr_chunk; /* Pointer to current message being operated on */
- unsigned u; /* Local index variable */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5O_super_ext_size, FAIL)
-
- /* Check args */
- HDassert(f);
- HDassert(ext_size);
- HDassert(H5F_addr_defined(f->shared->extension_addr));
-
- /* Get the object header */
- if(NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, f->shared->extension_addr, NULL, NULL, H5AC_READ)))
- HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header")
-
- *ext_size = 0;
- for(u = 0, curr_chunk = &oh->chunk[0]; u < oh->nchunks; u++, curr_chunk++) {
- /* Accumulate the size of the header on disk */
- *ext_size += curr_chunk->size;
- }
-
-done:
- if(oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, f->shared->extension_addr, oh, H5AC__NO_FLAGS_SET) < 0)
- HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5O_super_ext_size() */
diff --git a/src/H5Oattribute.c b/src/H5Oattribute.c
index f0bafc9..b328f5b 100644
--- a/src/H5Oattribute.c
+++ b/src/H5Oattribute.c
@@ -1687,6 +1687,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_attr_exists */
+
/*-------------------------------------------------------------------------
* Function: H5O_attr_bh_info
@@ -1701,49 +1702,43 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_attr_bh_info(H5O_loc_t *oloc, H5O_t *oh, hid_t dxpl_id, H5_ih_info_t *bh_info)
+H5O_attr_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info)
{
- H5O_ainfo_t ainfo; /* Attribute information for object */
- herr_t ret_value=SUCCEED; /* Return value */
- hsize_t huge_bt_size=0;
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5O_attr_bh_info, FAIL)
- HDassert(oloc);
+ HDassert(f);
HDassert(oh);
HDassert(bh_info);
- /* Check for attribute info stored */
- ainfo.nattrs = 0;
- ainfo.fheap_addr = HADDR_UNDEF;
- ainfo.corder_bt2_addr = HADDR_UNDEF;
- ainfo.name_bt2_addr = HADDR_UNDEF;
- if(oh->version > H5O_VERSION_1 && NULL == H5A_get_ainfo(oloc->file, dxpl_id, oh, &ainfo))
- /* Clear error stack from not finding attribute info */
- H5E_clear_stack(NULL);
-
+ /* Attributes are only stored in fractal heap & indexed w/v2 B-tree in later versions */
if(oh->version > H5O_VERSION_1) {
- if (H5F_addr_defined(ainfo.corder_bt2_addr)) {
- if (H5B2_info_iterate(oloc->file, dxpl_id, H5A_BT2_CORDER,
- ainfo.corder_bt2_addr, &(bh_info->index_size)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- }
-
- if (H5F_addr_defined(ainfo.name_bt2_addr)) {
- if (H5B2_info_iterate(oloc->file, dxpl_id, H5A_BT2_NAME,
- ainfo.name_bt2_addr, &(bh_info->index_size)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- }
-
- huge_bt_size = 0;
- if (H5F_addr_defined(ainfo.fheap_addr)) {
- HDassert(H5O_msg_count_real(oh, H5O_MSG_ATTR) == 0);
- if (H5HF_fheap_info(oloc->file, dxpl_id, ainfo.fheap_addr, &(bh_info->heap_size), &huge_bt_size) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- bh_info->index_size += huge_bt_size;
- }
- }
+ H5O_ainfo_t ainfo; /* Attribute information for object */
+
+ /* Check for attribute info stored */
+ if(NULL == H5A_get_ainfo(f, dxpl_id, oh, &ainfo))
+ /* Clear error stack from not finding attribute info */
+ H5E_clear_stack(NULL);
+ else {
+ /* Get storage size of creation order index, if it's used */
+ if(H5F_addr_defined(ainfo.corder_bt2_addr))
+ if(H5B2_iterate_size(f, dxpl_id, H5A_BT2_CORDER, ainfo.corder_bt2_addr, &(bh_info->index_size)) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
+
+ /* Get storage size of name index, if it's used */
+ if(H5F_addr_defined(ainfo.name_bt2_addr))
+ if(H5B2_iterate_size(f, dxpl_id, H5A_BT2_NAME, ainfo.name_bt2_addr, &(bh_info->index_size)) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
+
+ /* Get storage size of fractal heap, if it's used */
+ if(H5F_addr_defined(ainfo.fheap_addr))
+ if(H5HF_size(f, dxpl_id, ainfo.fheap_addr, &(bh_info->heap_size)) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
+ } /* end else */
+ } /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5O_attr_bh_info() */
+
diff --git a/src/H5Opkg.h b/src/H5Opkg.h
index afde15a..ce60ce4 100644
--- a/src/H5Opkg.h
+++ b/src/H5Opkg.h
@@ -479,13 +479,13 @@ H5_DLL void *H5O_msg_copy_file(const H5O_msg_class_t *type, H5F_t *file_src,
H5_DLL herr_t H5O_msg_iterate_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
const H5O_mesg_operator_t *op, void *op_data, hid_t dxpl_id);
-/* collect storage info for btree and heap */
-H5_DLL herr_t H5O_group_bh_info(H5O_loc_t *oloc, H5O_t *oh, hid_t dxpl_id, H5_ih_info_t *bh_info);
-H5_DLL herr_t H5O_dset_bh_info(H5O_loc_t *oloc, H5O_t *oh, hid_t dxpl_id, H5_ih_info_t *bh_info);
-H5_DLL herr_t H5O_attr_bh_info(H5O_loc_t *oloc, H5O_t *oh, hid_t dxpl_id, H5_ih_info_t *bh_info);
-
-
-
+/* Collect storage info for btree and heap */
+H5_DLL herr_t H5O_group_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+ H5_ih_info_t *bh_info);
+H5_DLL herr_t H5O_dset_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+ H5_ih_info_t *bh_info);
+H5_DLL herr_t H5O_attr_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+ H5_ih_info_t *bh_info);
/* Object header allocation routines */
H5_DLL herr_t H5O_alloc_msgs(H5O_t *oh, size_t min_alloc);
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h
index 584d9d5..2376113 100644
--- a/src/H5Oprivate.h
+++ b/src/H5Oprivate.h
@@ -532,9 +532,6 @@ H5_DLL herr_t H5O_bogus_oh(H5F_t *f, hid_t dxpl_id, struct H5O_t *oh, unsigned m
#endif /* H5O_ENABLE_BOGUS */
H5_DLL herr_t H5O_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
H5_DLL herr_t H5O_get_info(H5O_loc_t *oloc, H5O_info_t *oinfo, hid_t dxpl_id);
-
-H5_DLL herr_t H5O_super_ext_size(H5F_t *f, hsize_t *ext_size, hid_t dxpl_id);
-
H5_DLL herr_t H5O_obj_type(const H5O_loc_t *loc, H5O_type_t *obj_type, hid_t dxpl_id);
H5_DLL herr_t H5O_get_create_plist(const H5O_loc_t *loc, hid_t dxpl_id, struct H5P_genplist_t *oc_plist);
H5_DLL hid_t H5O_open_name(H5G_loc_t *loc, const char *name, hid_t lapl_id);
@@ -621,6 +618,5 @@ H5_DLL herr_t H5O_set_shared(H5O_shared_t *dst, const H5O_shared_t *src);
/* Attribute operators */
H5_DLL hsize_t H5O_attr_count_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh);
-
#endif /* _H5Oprivate_H */
diff --git a/src/H5Opublic.h b/src/H5Opublic.h
index c5f1b21..b10a4e4 100644
--- a/src/H5Opublic.h
+++ b/src/H5Opublic.h
@@ -120,11 +120,10 @@ typedef struct H5O_info_t {
uint64_t shared; /* Flags to indicate message type is shared in header */
} mesg;
} hdr;
- /* btree and heap storage info for obj & attributes */
- /* (B-tree & heap for groups, B-tree for chunked dataset, 1.8 B-tree & heap for attributes) */
+ /* Extra metadata storage for obj & attributes */
struct {
- H5_ih_info_t obj;
- H5_ih_info_t attr;
+ H5_ih_info_t obj; /* v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets */
+ H5_ih_info_t attr; /* v2 B-tree & heap for attributes */
} meta_size;
} H5O_info_t;
diff --git a/src/H5Oshared.h b/src/H5Oshared.h
index 539577f..582d29b 100644
--- a/src/H5Oshared.h
+++ b/src/H5Oshared.h
@@ -373,8 +373,8 @@ done:
*-------------------------------------------------------------------------
*/
static H5_inline herr_t
-H5O_SHARED_POST_COPY_FILE(H5O_loc_t *oloc_src, void *mesg_src, H5O_loc_t *oloc_dst,
- void *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
+H5O_SHARED_POST_COPY_FILE(const H5O_loc_t *oloc_src, const void *mesg_src,
+ H5O_loc_t *oloc_dst, void *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
{
const H5O_shared_t *shared_dst = (const H5O_shared_t *)mesg_dst; /* Alias to shared info in native source */
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5SM.c b/src/H5SM.c
index 1ca4652..1e3ced3 100755
--- a/src/H5SM.c
+++ b/src/H5SM.c
@@ -2474,8 +2474,9 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5SM_list_debug() */
+
/*-------------------------------------------------------------------------
- * Function: H5SM_ih_info
+ * Function: H5SM_ih_size
*
* Purpose: Loop through the master SOHM table (if there is one) to:
* 1. collect storage used for header
@@ -2491,15 +2492,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5SM_ih_info(H5F_t *f, H5F_info_t *finfo, hid_t dxpl_id)
+H5SM_ih_size(H5F_t *f, hid_t dxpl_id, H5F_info_t *finfo)
{
- H5SM_master_table_t *table=NULL; /* SOHM master table */
- herr_t ret_value=SUCCEED; /* Return value */
- unsigned x;
- hsize_t huge_bt_size=0;
-
+ H5SM_master_table_t *table = NULL; /* SOHM master table */
+ unsigned u; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(H5SM_ih_info, FAIL)
+ FUNC_ENTER_NOAPI(H5SM_ih_size, FAIL)
/* Sanity check */
HDassert(f);
@@ -2510,32 +2509,32 @@ H5SM_ih_info(H5F_t *f, H5F_info_t *finfo, hid_t dxpl_id)
if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
+ /* Get SOHM header size */
finfo->sohm.hdr_size = (hsize_t) H5SM_TABLE_SIZE(f) +
(hsize_t)(table->num_indexes * H5SM_INDEX_HEADER_SIZE(f));
- for(x = 0; x < table->num_indexes; x++) {
- if (table->indexes[x].index_type==H5SM_BTREE) {
- if (H5F_addr_defined(table->indexes[x].index_addr)) {
- if (H5B2_info_iterate(f, dxpl_id, H5SM_INDEX,
- table->indexes[x].index_addr, &(finfo->sohm.msgs_info.index_size)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
- }
- }
- if (table->indexes[x].index_type==H5SM_LIST)
- finfo->sohm.msgs_info.index_size += H5SM_LIST_SIZE(f, table->indexes[x].list_max);
-
- huge_bt_size = 0;
- if (H5F_addr_defined(table->indexes[x].heap_addr)) {
- if (H5HF_fheap_info(f, dxpl_id, table->indexes[x].heap_addr, &(finfo->sohm.msgs_info.heap_size), &huge_bt_size) < 0)
+ /* Loop over all the indices for shared messages */
+ for(u = 0; u < table->num_indexes; u++) {
+ /* Get index storage size (for either B-tree or list) */
+ if(table->indexes[u].index_type == H5SM_BTREE) {
+ if(H5F_addr_defined(table->indexes[u].index_addr))
+ if(H5B2_iterate_size(f, dxpl_id, H5SM_INDEX, table->indexes[u].index_addr, &(finfo->sohm.msgs_info.index_size)) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
+ } /* end if */
+ else if(table->indexes[u].index_type == H5SM_LIST)
+ finfo->sohm.msgs_info.index_size += H5SM_LIST_SIZE(f, table->indexes[u].list_max);
+
+ /* Get heap storage size */
+ if(H5F_addr_defined(table->indexes[u].heap_addr))
+ if(H5HF_size(f, dxpl_id, table->indexes[u].heap_addr, &(finfo->sohm.msgs_info.heap_size)) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve fractal heap storage info")
- }
- finfo->sohm.msgs_info.index_size += huge_bt_size;
} /* end for */
+done:
/* Release resources */
if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_CACHE, H5E_CANTRELEASE, FAIL, "unable to close SOHM master table")
-done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5SM_ih_info() */
+} /* end H5SM_ih_size() */
+
diff --git a/src/H5SMprivate.h b/src/H5SMprivate.h
index 763c117..1465357 100755
--- a/src/H5SMprivate.h
+++ b/src/H5SMprivate.h
@@ -56,7 +56,7 @@ H5_DLL herr_t H5SM_reconstitute(H5O_shared_t *sh_mesg, H5F_t *f,
unsigned msg_type_id, H5O_fheap_id_t heap_id);
H5_DLL herr_t H5SM_get_refcount(H5F_t *f, hid_t dxpl_id, unsigned type_id,
const H5O_shared_t *sh_mesg, hsize_t *ref_count);
-H5_DLL herr_t H5SM_ih_info(H5F_t *f, H5F_info_t *bh_info, hid_t dxpl_id);
+H5_DLL herr_t H5SM_ih_size(H5F_t *f, hid_t dxpl_id, H5F_info_t *bh_info);
/* Debugging routines */
diff --git a/tools/misc/h5stat.c b/tools/misc/h5stat.c
index d10e2d1..8f29519 100644
--- a/tools/misc/h5stat.c
+++ b/tools/misc/h5stat.c
@@ -274,33 +274,28 @@ ceil_log10(unsigned long x)
* Programmer: Robb Matzke
* Thursday, January 21, 1999
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
static void
-sym_insert(H5G_stat_t *sb, const char *name)
+sym_insert(H5O_info_t *oi, const char *name)
{
- haddr_t objno; /* Compact form of object's location */
- int n;
-
/* Don't add it if the link count is 1 because such an object can only
* have one name. */
- if (sb->nlink<2) return;
+ if(oi->rc > 1) {
+ int n;
- /* Extend the table */
- if (idtab_g.nobjs>=idtab_g.nalloc) {
- idtab_g.nalloc = MAX(256, 2*idtab_g.nalloc);
- idtab_g.obj = realloc(idtab_g.obj,
- idtab_g.nalloc*sizeof(idtab_g.obj[0]));
- }
+ /* Extend the table */
+ if(idtab_g.nobjs >= idtab_g.nalloc) {
+ idtab_g.nalloc = MAX(256, 2 * idtab_g.nalloc);
+ idtab_g.obj = realloc(idtab_g.obj, idtab_g.nalloc * sizeof(idtab_g.obj[0]));
+ } /* end if */
- /* Insert the entry */
- n = idtab_g.nobjs++;
- objno = (haddr_t)sb->objno[0] | ((haddr_t)sb->objno[1] << (8 * sizeof(long)));
- idtab_g.obj[n].id = objno;
- idtab_g.obj[n].name = strdup(name);
-}
+ /* Insert the entry */
+ n = idtab_g.nobjs++;
+ idtab_g.obj[n].id = oi->addr;
+ idtab_g.obj[n].name = strdup(name);
+ } /* end if */
+} /* end sym_insert() */
/*-------------------------------------------------------------------------
@@ -320,20 +315,20 @@ sym_insert(H5G_stat_t *sb, const char *name)
*-------------------------------------------------------------------------
*/
static char *
-sym_lookup(H5G_stat_t *sb)
+sym_lookup(H5O_info_t *oi)
{
- haddr_t objno; /* Compact form of object's location */
int n;
- if (sb->nlink<2)
- return NULL; /*only one name possible*/
- objno = (haddr_t)sb->objno[0] | ((haddr_t)sb->objno[1] << (8 * sizeof(long)));
- for (n=0; n<idtab_g.nobjs; n++) {
- if (idtab_g.obj[n].id==objno)
+ /*only one name possible*/
+ if(oi->rc < 2)
+ return NULL;
+
+ for(n = 0; n < idtab_g.nobjs; n++)
+ if(idtab_g.obj[n].id == oi->addr)
return idtab_g.obj[n].name;
- }
+
return NULL;
-}
+} /* end sym_lookup() */
/*-------------------------------------------------------------------------
@@ -384,6 +379,57 @@ fix_name(const char *path, const char *base)
s[len] = '\0';
return s;
}
+
+
+/*-------------------------------------------------------------------------
+ * Function: attribute_stats
+ *
+ * Purpose: Gather statistics about attributes on an object
+ *
+ * Return: Success: 0
+ *
+ * Failure: -1
+ *
+ * Programmer: Quincey Koziol
+ * Tuesday, July 17, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+attribute_stats(iter_t *iter, const H5O_info_t *oi)
+{
+ unsigned bin; /* "bin" the number of objects falls in */
+
+ /* Update dataset & attribute metadata info */
+ iter->attrs_btree_storage_size += oi->meta_size.attr.index_size;
+ iter->attrs_heap_storage_size += oi->meta_size.attr.heap_size;
+
+ /* Update small # of attribute count & limits */
+ if(oi->num_attrs < SIZE_SMALL_ATTRS)
+ (iter->num_small_attrs[(size_t)oi->num_attrs])++;
+ if(oi->num_attrs > iter->max_attrs)
+ iter->max_attrs = oi->num_attrs;
+
+ /* Add attribute count to proper bin */
+ bin = ceil_log10((unsigned long)oi->num_attrs);
+ if((bin + 1) > iter->attr_nbins) {
+ iter->attr_bins = realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long));
+ assert(iter->attr_bins);
+
+ /* Initialize counts for intermediate bins */
+ while(iter->attr_nbins < bin)
+ iter->attr_bins[iter->attr_nbins++] = 0;
+ iter->attr_nbins++;
+
+ /* Initialize count for new bin */
+ iter->attr_bins[bin] = 1;
+ } /* end if */
+ else
+ (iter->attr_bins[bin])++;
+
+ return 0;
+} /* end attribute_stats() */
+
/*-------------------------------------------------------------------------
* Function: group_stats
@@ -412,19 +458,14 @@ fix_name(const char *path, const char *base)
*-------------------------------------------------------------------------
*/
static herr_t
-group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t * _sb, H5G_iterate_t _walk, iter_t *_iter)
+group_stats(hid_t group, const char *name, const char *fullname,
+ const H5O_info_t *oi, H5G_iterate_t walk, iter_t *iter)
{
hid_t gid; /* Group ID */
const char *last_container;
hsize_t num_objs;
unsigned bin; /* "bin" the number of objects falls in */
- iter_t *iter = (iter_t*)_iter;
- H5G_stat_t *sb = _sb;
- H5G_iterate_t walk = _walk;
herr_t ret;
- hsize_t num_attrs=0;
- unsigned attr_bin;
- H5O_info_t oinfo;
/* Gather statistics about this type of object */
iter->uniq_groups++;
@@ -432,23 +473,26 @@ group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t *
iter->max_depth = iter->curr_depth;
/* Get object header information */
- iter->group_ohdr_info.total_size += sb->ohdr.size;
- iter->group_ohdr_info.free_size += sb->ohdr.free;
+ iter->group_ohdr_info.total_size += oi->hdr.space.total;
+ iter->group_ohdr_info.free_size += oi->hdr.space.free;
gid = H5Gopen(group, name);
assert(gid > 0);
- H5Gget_num_objs(gid, &num_objs);
+ /* Get number of links in this group */
+ ret = H5Gget_num_objs(gid, &num_objs);
+ assert(ret >= 0);
+ /* Update link stats */
if(num_objs < SIZE_SMALL_GROUPS)
(iter->num_small_groups[(size_t)num_objs])++;
if(num_objs > iter->max_fanout)
iter->max_fanout = num_objs;
/* Add group count to proper bin */
- bin = ceil_log10((unsigned long)num_objs);
- if((bin + 1) > iter->group_nbins) {
- /* Allocate more storage for info about dataset's datatype */
+ bin = ceil_log10((unsigned long)num_objs);
+ if((bin + 1) > iter->group_nbins) {
+ /* Allocate more storage for info about dataset's datatype */
iter->group_bins = realloc(iter->group_bins, (bin + 1) * sizeof(unsigned long));
assert(iter->group_bins);
@@ -459,64 +503,42 @@ group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t *
/* Initialize count for new bin */
iter->group_bins[bin] = 1;
- } /* end if */
- else {
- (iter->group_bins[bin])++;
- } /* end else */
-
- ret = H5Oget_info(gid, ".", &oinfo, H5P_DEFAULT);
- if (ret < 0) {
- warn_msg(progname, "Unable to retrieve object info for \"%s\"\n", name);
- } else {
- num_attrs = oinfo.num_attrs;
- iter->groups_btree_storage_size += oinfo.meta_size.obj.index_size;
- iter->groups_heap_storage_size += oinfo.meta_size.obj.heap_size;
- iter->attrs_btree_storage_size += oinfo.meta_size.attr.index_size;
- iter->attrs_heap_storage_size += oinfo.meta_size.attr.heap_size;
- }
-
- if(num_attrs < SIZE_SMALL_ATTRS)
- (iter->num_small_attrs[(size_t)num_attrs])++;
- if(num_attrs > iter->max_attrs)
- iter->max_attrs = num_attrs;
-
- /* Add attribute count to proper bin */
- attr_bin = ceil_log10((unsigned long)num_attrs);
- if((attr_bin + 1) > iter->attr_nbins) {
- iter->attr_bins = realloc(iter->attr_bins, (attr_bin + 1) * sizeof(unsigned long));
- assert(iter->attr_bins);
+ } /* end if */
+ else
+ (iter->group_bins[bin])++;
- /* Initialize counts for intermediate bins */
- while(iter->attr_nbins < attr_bin)
- iter->attr_bins[iter->attr_nbins++] = 0;
- iter->attr_nbins++;
+ /* Update group metadata info */
+ iter->groups_btree_storage_size += oi->meta_size.obj.index_size;
+ iter->groups_heap_storage_size += oi->meta_size.obj.heap_size;
- /* Initialize count for new bin */
- iter->attr_bins[attr_bin] = 1;
- } /* end if */
- else {
- (iter->attr_bins[attr_bin])++;
- } /* end else */
+ /* Update attribute metadata info */
+ ret = attribute_stats(iter, oi);
+ assert(ret >= 0);
+ /* Close current group */
ret = H5Gclose(gid);
assert(ret >= 0);
+ /* Update current container info */
last_container = iter->container;
iter->container = fullname;
iter->curr_depth++;
+ /* Recursively descend into current group's objects */
H5Giterate(group, name, NULL, walk, iter);
+ /* Revert current container info */
iter->container = last_container;
iter->curr_depth--;
return 0;
-}
+} /* end group_stats() */
+
/*-------------------------------------------------------------------------
* Function: dataset_stats
*
- * Purpose: Gather statistics about the datset
+ * Purpose: Gather statistics about the dataset
*
* Return: Success: 0
*
@@ -540,12 +562,9 @@ group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t *
*-------------------------------------------------------------------------
*/
static herr_t
-dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
+dataset_stats(hid_t group, const char *name, const H5O_info_t *oi, iter_t *iter)
{
unsigned bin; /* "bin" the number of objects falls in */
- iter_t *iter = (iter_t*)_iter;
- H5G_stat_t *sb = _sb;
- herr_t ret;
hid_t did; /* Dataset ID */
hid_t sid; /* Dataspace ID */
hid_t tid; /* Datatype ID */
@@ -560,53 +579,24 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
int num_ext; /* Number of external files for a dataset */
int nfltr; /* Number of filters for a dataset */
H5Z_filter_t fltr; /* Filter identifier */
-
- hsize_t num_attrs = 0;
- unsigned attr_bin;
- H5O_info_t oinfo;
+ herr_t ret;
/* Gather statistics about this type of object */
iter->uniq_dsets++;
/* Get object header information */
- iter->dset_ohdr_info.total_size += sb->ohdr.size;
- iter->dset_ohdr_info.free_size += sb->ohdr.free;
+ iter->dset_ohdr_info.total_size += oi->hdr.space.total;
+ iter->dset_ohdr_info.free_size += oi->hdr.space.free;
did = H5Dopen(group, name);
assert(did > 0);
- ret = H5Oget_info(did, ".", &oinfo, H5P_DEFAULT);
- if (ret < 0) {
- warn_msg(progname, "Unable to retrieve object info for \"%s\"\n", name);
- } else {
- num_attrs = oinfo.num_attrs;
- iter->datasets_btree_storage_size += oinfo.meta_size.obj.index_size;
- iter->attrs_btree_storage_size += oinfo.meta_size.attr.index_size;
- iter->attrs_heap_storage_size += oinfo.meta_size.attr.heap_size;
- }
-
- if(num_attrs < SIZE_SMALL_ATTRS)
- (iter->num_small_attrs[(size_t)num_attrs])++;
- if(num_attrs > iter->max_attrs)
- iter->max_attrs = num_attrs;
-
- /* Add attribute count to proper bin */
- attr_bin = ceil_log10((unsigned long)num_attrs);
- if((attr_bin + 1) > iter->attr_nbins) {
- iter->attr_bins = realloc(iter->attr_bins, (attr_bin + 1) * sizeof(unsigned long));
- assert(iter->attr_bins);
-
- /* Initialize counts for intermediate bins */
- while(iter->attr_nbins < attr_bin)
- iter->attr_bins[iter->attr_nbins++] = 0;
- iter->attr_nbins++;
+ /* Update dataset metadata info */
+ iter->datasets_btree_storage_size += oi->meta_size.obj.index_size;
- /* Initialize count for new bin */
- iter->attr_bins[attr_bin] = 1;
- } /* end if */
- else {
- (iter->attr_bins[attr_bin])++;
- } /* end else */
+ /* Update attribute metadata info */
+ ret = attribute_stats(iter, oi);
+ assert(ret >= 0);
/* Get storage info */
storage = H5Dget_storage_size(did);
@@ -628,7 +618,7 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
/* Only gather dim size statistics on 1-D datasets */
if(ndims == 1) {
- iter->max_dset_dims = dims[0];
+ iter->max_dset_dims = dims[0];
if(dims[0] < SIZE_SMALL_DSETS)
(iter->small_dset_dims[(size_t)dims[0]])++;
@@ -647,9 +637,8 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
/* Initialize count for this bin */
iter->dset_dim_bins[bin] = 1;
} /* end if */
- else {
+ else
(iter->dset_dim_bins[bin])++;
- } /* end else */
} /* end if */
ret = H5Sclose(sid);
@@ -665,9 +654,8 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
type_found = TRUE;
break;
} /* end for */
- if(type_found) {
+ if(type_found)
(iter->dset_type_info[u].count)++;
- } /* end if */
else {
unsigned curr_ntype = iter->dset_ntypes;
@@ -686,48 +674,47 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
/* Set index for later */
u = curr_ntype;
- } /* end else */
+ } /* end else */
- /* Check if the datatype is a named datatype */
- if(H5Tcommitted(tid) > 0)
- (iter->dset_type_info[u].named)++;
+ /* Check if the datatype is a named datatype */
+ if(H5Tcommitted(tid) > 0)
+ (iter->dset_type_info[u].named)++;
- ret = H5Tclose(tid);
- assert(ret >= 0);
+ ret = H5Tclose(tid);
+ assert(ret >= 0);
- /* Gather layout statistics */
- dcpl = H5Dget_create_plist(did);
- assert(dcpl > 0);
+ /* Gather layout statistics */
+ dcpl = H5Dget_create_plist(did);
+ assert(dcpl > 0);
- lout = H5Pget_layout(dcpl);
- assert(lout >= 0);
+ lout = H5Pget_layout(dcpl);
+ assert(lout >= 0);
- /* Track the layout type for dataset */
- (iter->dset_layouts[lout])++;
+ /* Track the layout type for dataset */
+ (iter->dset_layouts[lout])++;
- num_ext = H5Pget_external_count(dcpl);
- assert (num_ext >= 0);
+ num_ext = H5Pget_external_count(dcpl);
+ assert (num_ext >= 0);
- if(num_ext) iter->nexternal = iter->nexternal + num_ext;
+ if(num_ext)
+ iter->nexternal = iter->nexternal + num_ext;
/* Track different filters */
-
- if ((nfltr=H5Pget_nfilters(dcpl)) >= 0) {
-
- if (nfltr == 0) iter->dset_comptype[0]++;
- for (u=0; u < (unsigned) nfltr; u++) {
+ if((nfltr = H5Pget_nfilters(dcpl)) >= 0) {
+ if(nfltr == 0)
+ iter->dset_comptype[0]++;
+ for(u = 0; u < (unsigned)nfltr; u++) {
#ifdef H5_WANT_H5_V1_6_COMPAT
- fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0);
+ fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0);
#else /* H5_WANT_H5_V1_6_COMPAT */
- fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0, NULL);
+ fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0, NULL);
#endif /* H5_WANT_H5_V1_6_COMPAT */
- if (fltr < (H5_NFILTERS_IMPL-1))
- iter->dset_comptype[fltr]++;
- else
- iter->dset_comptype[H5_NFILTERS_IMPL-1]++; /*other filters*/
- }
-
- } /*endif nfltr */
+ if(fltr < (H5_NFILTERS_IMPL - 1))
+ iter->dset_comptype[fltr]++;
+ else
+ iter->dset_comptype[H5_NFILTERS_IMPL - 1]++; /*other filters*/
+ } /* end for */
+ } /* endif nfltr */
ret = H5Pclose(dcpl);
assert(ret >= 0);
@@ -736,7 +723,7 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
assert(ret >= 0);
return 0;
-}
+} /* end dataset_stats() */
/*-------------------------------------------------------------------------
@@ -755,38 +742,39 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter)
*-------------------------------------------------------------------------
*/
static herr_t
-walk (hid_t group, const char *name, void *_iter)
+walk(hid_t group, const char *name, void *_iter)
{
+ iter_t *iter = (iter_t *)_iter;
+ H5O_info_t oi;
char *fullname = NULL;
char *s;
- H5G_stat_t sb;
- iter_t *iter = (iter_t*)_iter;
herr_t ret; /* Generic return value */
/* Get the full object name */
fullname = fix_name(iter->container, name);
+
/* Get object information */
- ret = H5Gget_objinfo(group, name, FALSE, &sb);
+ ret = H5Oget_info(group, name, &oi, H5P_DEFAULT);
assert(ret >= 0);
/* If the object has already been printed then just show the object ID
* and return. */
- if ((s=sym_lookup(&sb))) {
+ if((s = sym_lookup(&oi))) {
printf("%s same as %s\n", name, s);
} else {
- sym_insert(&sb, fullname);
+ sym_insert(&oi, fullname);
/* Gather some statistics about the object */
- if(sb.nlink > iter->max_links)
- iter->max_links = sb.nlink;
+ if(oi.rc > iter->max_links)
+ iter->max_links = oi.rc;
- switch(sb.type) {
+ switch(oi.type) {
case H5G_GROUP:
- group_stats(group, name, fullname, &sb, walk, iter);
+ group_stats(group, name, fullname, &oi, walk, iter);
break;
case H5G_DATASET:
- dataset_stats(group, name, &sb, iter);
+ dataset_stats(group, name, &oi, iter);
break;
case H5G_TYPE:
@@ -806,7 +794,7 @@ walk (hid_t group, const char *name, void *_iter)
} /* end switch */
}
- if (fullname)
+ if(fullname)
free(fullname);
return 0;
@@ -840,7 +828,6 @@ parse_command_line(int argc, const char *argv[])
/* Allocate space to hold the command line info */
hand = calloc((size_t)argc, sizeof(struct handler_t));
-
/* parse command line options */
while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) {
switch ((char)opt) {
@@ -920,87 +907,20 @@ parse_command_line(int argc, const char *argv[])
* Programmer: Elena Pourmal
* Saturday, August 12, 2006
*
- * Modifications:
- * Vailin Choi 12 July 2007
- * Initialized storage info for:
- * 1. btree/heap storage for groups and attributes
- * 2. btree storage for chunked dataset
- * 3. hdr/btree/list/heap storage for SOHM table
- * 4. superblock extension size
- *
*-------------------------------------------------------------------------
*/
static herr_t
-iter_init(iter_t * _iter)
+iter_init(iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
- herr_t ret =0; /* Generic return value */
-
- unsigned u; /* Local index variable */
-
- /* Initilaize file' metadata information */
- iter->container = "/";
- iter->uniq_groups = 0;
- iter->uniq_dsets = 0;
- iter->uniq_types = 0;
- iter->uniq_links = 0;
- iter->uniq_others = 0;
- iter->curr_depth = 0;
- iter->max_depth = 0;
- iter->max_links = 0;
- iter->max_fanout = 0;
- for(u = 0; u < SIZE_SMALL_GROUPS; u++)
- iter->num_small_groups[u] = 0;
-
- /* Initilaize groups' metadata information */
- iter->group_nbins = 0;
- iter->group_bins = NULL;
- iter->group_ohdr_info.total_size = 0;
- iter->group_ohdr_info.free_size = 0;
-
- /* initialize attributes' information for groups and datasets */
- iter->max_attrs = 0;
- for(u = 0; u < SIZE_SMALL_ATTRS; u++)
- iter->num_small_attrs[u] = 0;
- iter->attr_nbins = 0;
- iter->attr_bins = NULL;
-
- /* Initilaize datasets' metadata information */
- iter->max_dset_rank = 0;
- for(u = 0; u < H5S_MAX_RANK; u++)
- iter->dset_rank_count[u] = 0;
- iter->max_dset_dims = 0;
- for(u = 0; u < SIZE_SMALL_DSETS; u++)
- iter->small_dset_dims[u] = 0;
- for(u = 0; u < H5D_NLAYOUTS; u++)
- iter->dset_layouts[u] = 0;
- for(u = 0; u < H5_NFILTERS_IMPL; u++)
- iter->dset_comptype[u] = 0;
-
- iter->dset_ntypes = 0;
- iter->dset_type_info = NULL;
- iter->dset_dim_nbins = 0;
- iter->dset_dim_bins = NULL;
- iter->dset_ohdr_info.total_size = 0;
- iter->dset_ohdr_info.free_size = 0;
- iter->dset_storage_size = 0;
-
- /* Initialize storage info */
- iter->groups_btree_storage_size = 0;
- iter->groups_heap_storage_size = 0;
- iter->attrs_btree_storage_size = 0;
- iter->attrs_heap_storage_size = 0;
- iter->SM_hdr_storage_size = 0;
- iter->SM_index_storage_size = 0;
- iter->SM_heap_storage_size = 0;
- iter->super_ext_size = 0;
- iter->datasets_btree_storage_size = 0;
-
- iter->nexternal = 0;
- iter->local = 0;
-
- return ret;
+ /* Clear everything to zeros */
+ memset(iter, 0, sizeof(*iter));
+
+ /* Initialize non-zero information */
+ iter->container = "/";
+
+ return 0;
}
+
/*-------------------------------------------------------------------------
* Function: print_file_info
@@ -1019,22 +939,19 @@ iter_init(iter_t * _iter)
*-------------------------------------------------------------------------
*/
static herr_t
-print_file_info(iter_t * _iter)
+print_file_info(const iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
- herr_t ret =0; /* Generic return value */
-
- printf("File information\n");
- printf("\t# of unique groups: %lu\n", iter->uniq_groups);
- printf("\t# of unique datasets: %lu\n", iter->uniq_dsets);
- printf("\t# of unique named dataypes: %lu\n", iter->uniq_types);
- printf("\t# of unique links: %lu\n", iter->uniq_links);
- printf("\t# of unique other: %lu\n", iter->uniq_others);
- printf("\tMax. # of links to object: %lu\n", iter->max_links);
- printf("\tMax. depth of hierarchy: %lu\n", iter->max_depth);
- HDfprintf(stdout, "\tMax. # of objects in group: %Hu\n", iter->max_fanout);
-
- return ret;
+ printf("File information\n");
+ printf("\t# of unique groups: %lu\n", iter->uniq_groups);
+ printf("\t# of unique datasets: %lu\n", iter->uniq_dsets);
+ printf("\t# of unique named dataypes: %lu\n", iter->uniq_types);
+ printf("\t# of unique links: %lu\n", iter->uniq_links);
+ printf("\t# of unique other: %lu\n", iter->uniq_others);
+ printf("\tMax. # of links to object: %lu\n", iter->max_links);
+ printf("\tMax. depth of hierarchy: %lu\n", iter->max_depth);
+ HDfprintf(stdout, "\tMax. # of objects in group: %Hu\n", iter->max_fanout);
+
+ return 0;
}
@@ -1061,37 +978,36 @@ print_file_info(iter_t * _iter)
*-------------------------------------------------------------------------
*/
static herr_t
-print_file_metadata(iter_t * _iter)
+print_file_metadata(const iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
- herr_t ret =0; /* Generic return value */
-
- printf("Object header size: (total/unused)\n");
- HDfprintf(stdout, "\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size,
- iter->group_ohdr_info.free_size);
- HDfprintf(stdout, "\tDatasets: %Hu/%Hu\n", iter->dset_ohdr_info.total_size,
- iter->dset_ohdr_info.free_size);
-
- printf("Storage information:\n");
- HDfprintf(stdout, "\tGroups:\n");
- HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size);
- HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->groups_heap_storage_size);
-
- HDfprintf(stdout, "\tAttributes:\n");
- HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->attrs_btree_storage_size);
- HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->attrs_heap_storage_size);
-
- HDfprintf(stdout, "\tChunked datasets:\n");
- HDfprintf(stdout, "\t\tB-tree: %Hu\n", iter->datasets_btree_storage_size);
-
- HDfprintf(stdout, "\tShared Messages:\n");
- HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->SM_hdr_storage_size);
- HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->SM_index_storage_size);
- HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->SM_heap_storage_size);
-
- HDfprintf(stdout, "\tSuperblock extension: %Hu\n", iter->super_ext_size);
- return ret;
+ printf("Object header size: (total/unused)\n");
+ HDfprintf(stdout, "\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size,
+ iter->group_ohdr_info.free_size);
+ HDfprintf(stdout, "\tDatasets: %Hu/%Hu\n", iter->dset_ohdr_info.total_size,
+ iter->dset_ohdr_info.free_size);
+
+ printf("Storage information:\n");
+ HDfprintf(stdout, "\tGroups:\n");
+ HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size);
+ HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->groups_heap_storage_size);
+
+ HDfprintf(stdout, "\tAttributes:\n");
+ HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->attrs_btree_storage_size);
+ HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->attrs_heap_storage_size);
+
+ HDfprintf(stdout, "\tChunked datasets:\n");
+ HDfprintf(stdout, "\t\tB-tree: %Hu\n", iter->datasets_btree_storage_size);
+
+ HDfprintf(stdout, "\tShared Messages:\n");
+ HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->SM_hdr_storage_size);
+ HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->SM_index_storage_size);
+ HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->SM_heap_storage_size);
+
+ HDfprintf(stdout, "\tSuperblock extension: %Hu\n", iter->super_ext_size);
+
+ return 0;
}
+
/*-------------------------------------------------------------------------
* Function: print_group_info
@@ -1110,43 +1026,42 @@ print_file_metadata(iter_t * _iter)
*-------------------------------------------------------------------------
*/
static herr_t
-print_group_info(iter_t * _iter)
+print_group_info(const iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
- herr_t ret =0; /* Generic return value */
- unsigned u; /* Local index variable */
- unsigned long power; /* Temporary "power" for bins */
- unsigned long total; /* Total count for various statistics */
-
- printf("Small groups:\n");
- total = 0;
- for(u = 0; u < SIZE_SMALL_GROUPS; u++) {
- if(iter->num_small_groups[u] > 0) {
- printf("\t# of groups of size %u: %lu\n", u, iter->num_small_groups[u]);
- total += iter->num_small_groups[u];
- } /* end if */
- } /* end for */
- printf("\tTotal # of small groups: %lu\n", total);
-
- printf("Group bins:\n");
- total = 0;
- if(iter->group_bins[0] > 0) {
- printf("\t# of groups of size 0: %lu\n", iter->group_bins[0]);
- total = iter->group_bins[0];
+ unsigned long power; /* Temporary "power" for bins */
+ unsigned long total; /* Total count for various statistics */
+ unsigned u; /* Local index variable */
+
+ printf("Small groups:\n");
+ total = 0;
+ for(u = 0; u < SIZE_SMALL_GROUPS; u++) {
+ if(iter->num_small_groups[u] > 0) {
+ printf("\t# of groups of size %u: %lu\n", u, iter->num_small_groups[u]);
+ total += iter->num_small_groups[u];
} /* end if */
- power = 1;
- for(u = 1; u < iter->group_nbins; u++) {
- if(iter->group_bins[u] > 0) {
- printf("\t# of groups of size %lu - %lu: %lu\n", power, (power * 10) - 1,
- iter->group_bins[u]);
- total += iter->group_bins[u];
- } /* end if */
- power *= 10;
- } /* end for */
- printf("\tTotal # of groups: %lu\n", total);
+ } /* end for */
+ printf("\tTotal # of small groups: %lu\n", total);
+
+ printf("Group bins:\n");
+ total = 0;
+ if(iter->group_bins[0] > 0) {
+ printf("\t# of groups of size 0: %lu\n", iter->group_bins[0]);
+ total = iter->group_bins[0];
+ } /* end if */
+ power = 1;
+ for(u = 1; u < iter->group_nbins; u++) {
+ if(iter->group_bins[u] > 0) {
+ printf("\t# of groups of size %lu - %lu: %lu\n", power, (power * 10) - 1,
+ iter->group_bins[u]);
+ total += iter->group_bins[u];
+ } /* end if */
+ power *= 10;
+ } /* end for */
+ printf("\tTotal # of groups: %lu\n", total);
- return ret;
+ return 0;
}
+
/*-------------------------------------------------------------------------
* Function: print_attr_info
@@ -1165,39 +1080,39 @@ print_group_info(iter_t * _iter)
*-------------------------------------------------------------------------
*/
static herr_t
-print_attr_info(iter_t * _iter)
+print_attr_info(const iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
- herr_t ret =0; /* Generic return value */
- unsigned u; /* Local index variable */
- unsigned long power; /* Temporary "power" for bins */
- unsigned long total; /* Total count for various statistics */
-
- printf("Small # of attributes:\n");
- total = 0;
- for(u = 1; u < SIZE_SMALL_ATTRS; u++) {
- if(iter->num_small_attrs[u] > 0) {
- printf("\t# of objects with %u attributes: %lu\n", u, iter->num_small_attrs[u]);
- total += iter->num_small_attrs[u];
- } /* end if */
- } /* end for */
- printf("\tTotal # of objects with small # of attributes: %lu\n", total);
+ unsigned long power; /* Temporary "power" for bins */
+ unsigned long total; /* Total count for various statistics */
+ unsigned u; /* Local index variable */
+
+ printf("Small # of attributes:\n");
+ total = 0;
+ for(u = 1; u < SIZE_SMALL_ATTRS; u++) {
+ if(iter->num_small_attrs[u] > 0) {
+ printf("\t# of objects with %u attributes: %lu\n", u, iter->num_small_attrs[u]);
+ total += iter->num_small_attrs[u];
+ } /* end if */
+ } /* end for */
+ printf("\tTotal # of objects with small # of attributes: %lu\n", total);
+
+ printf("Attribute bins:\n");
+ total = 0;
+ power = 1;
+ for(u = 1; u < iter->attr_nbins; u++) {
+ if(iter->attr_bins[u] > 0) {
+ printf("\t# of objects with %lu - %lu attributes: %lu\n", power, (power * 10) - 1,
+ iter->attr_bins[u]);
+ total += iter->attr_bins[u];
+ } /* end if */
+ power *= 10;
+ } /* end for */
+ printf("\tTotal # of objects with attributes: %lu\n", total);
+ printf("\tMax. # of attributes to objects: %lu\n", (unsigned long)iter->max_attrs);
- printf("Attribute bins:\n");
- total = 0;
- power = 1;
- for(u = 1; u < iter->attr_nbins; u++) {
- if(iter->attr_bins[u] > 0) {
- printf("\t# of objects with %lu - %lu attributes: %lu\n", power, (power * 10) - 1,
- iter->attr_bins[u]);
- total += iter->attr_bins[u];
- } /* end if */
- power *= 10;
- } /* end for */
- printf("\tTotal # of objects with attributes: %lu\n", total);
- printf("\tMax. # of attributes to objects: %lu\n", (unsigned long)iter->max_attrs);
- return ret;
+ return 0;
}
+
/*-------------------------------------------------------------------------
* Function: print_dataset_info
@@ -1216,101 +1131,94 @@ print_attr_info(iter_t * _iter)
*-------------------------------------------------------------------------
*/
static herr_t
-print_dataset_info(iter_t * _iter)
+print_dataset_info(const iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
- herr_t ret =0; /* Generic return value */
- unsigned u; /* Local index variable */
- unsigned long power; /* Temporary "power" for bins */
- unsigned long total; /* Total count for various statistics */
- size_t dtype_size; /* Size of encoded datatype */
-
- if(iter->uniq_dsets > 0) {
- printf("Dataset dimension information:\n");
- printf("\tMax. rank of datasets: %lu\n", iter->max_dset_rank);
- printf("\tDataset ranks:\n");
- for(u = 0; u < H5S_MAX_RANK; u++)
- if(iter->dset_rank_count[u] > 0)
- printf("\t\t# of dataset with rank %u: %lu\n", u, iter->dset_rank_count[u]);
-
- printf("1-D Dataset information:\n");
- HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %Hu\n", iter->max_dset_dims);
- printf("\tSmall 1-D datasets:\n");
+ unsigned long power; /* Temporary "power" for bins */
+ unsigned long total; /* Total count for various statistics */
+ size_t dtype_size; /* Size of encoded datatype */
+ unsigned u; /* Local index variable */
+
+ if(iter->uniq_dsets > 0) {
+ printf("Dataset dimension information:\n");
+ printf("\tMax. rank of datasets: %lu\n", iter->max_dset_rank);
+ printf("\tDataset ranks:\n");
+ for(u = 0; u < H5S_MAX_RANK; u++)
+ if(iter->dset_rank_count[u] > 0)
+ printf("\t\t# of dataset with rank %u: %lu\n", u, iter->dset_rank_count[u]);
+
+ printf("1-D Dataset information:\n");
+ HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %Hu\n", iter->max_dset_dims);
+ printf("\tSmall 1-D datasets:\n");
+ total = 0;
+ for(u = 0; u < SIZE_SMALL_DSETS; u++) {
+ if(iter->small_dset_dims[u] > 0) {
+ printf("\t\t# of dataset dimensions of size %u: %lu\n", u,
+ iter->small_dset_dims[u]);
+ total += iter->small_dset_dims[u];
+ } /* end if */
+ } /* end for */
+ printf("\t\tTotal small datasets: %lu\n", total);
+
+ /* Protect against no datasets in file */
+ if(iter->dset_dim_nbins > 0) {
+ printf("\t1-D Dataset dimension bins:\n");
total = 0;
- for(u = 0; u < SIZE_SMALL_DSETS; u++) {
- if(iter->small_dset_dims[u] > 0) {
- printf("\t\t# of dataset dimensions of size %u: %lu\n", u,
- iter->small_dset_dims[u]);
- total += iter->small_dset_dims[u];
+ if(iter->dset_dim_bins[0] > 0) {
+ printf("\t\t# of datasets of size 0: %lu\n", iter->dset_dim_bins[0]);
+ total = iter->dset_dim_bins[0];
+ } /* end if */
+ power = 1;
+ for(u = 1; u < iter->dset_dim_nbins; u++) {
+ if(iter->dset_dim_bins[u] > 0) {
+ printf("\t\t# of datasets of size %lu - %lu: %lu\n", power, (power * 10) - 1,
+ iter->dset_dim_bins[u]);
+ total += iter->dset_dim_bins[u];
} /* end if */
+ power *= 10;
} /* end for */
- printf("\t\tTotal small datasets: %lu\n", total);
-
- /* Protect against no datasets in file */
- if(iter->dset_dim_nbins > 0) {
- printf("\t1-D Dataset dimension bins:\n");
- total = 0;
- if(iter->dset_dim_bins[0] > 0) {
- printf("\t\t# of datasets of size 0: %lu\n", iter->dset_dim_bins[0]);
- total = iter->dset_dim_bins[0];
- } /* end if */
- power = 1;
- for(u = 1; u < iter->dset_dim_nbins; u++) {
- if(iter->dset_dim_bins[u] > 0) {
- printf("\t\t# of datasets of size %lu - %lu: %lu\n", power, (power * 10) - 1,
- iter->dset_dim_bins[u]);
- total += iter->dset_dim_bins[u];
- } /* end if */
- power *= 10;
- } /* end for */
- printf("\t\tTotal # of datasets: %lu\n", total);
- } /* end if */
-
- printf("Dataset storage information:\n");
- HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size);
-
- printf("Dataset layout information:\n");
- for(u = 0; u < H5D_NLAYOUTS; u++)
- printf("\tDataset layout counts[%s]: %lu\n", (u == 0 ? "COMPACT" :
- (u == 1 ? "CONTIG" : "CHUNKED")), iter->dset_layouts[u]);
- printf("\tNumber of external files : %lu\n", iter->nexternal);
- printf("Dataset filters information:\n");
- printf("\tNumber of datasets with \n");
-
- printf("\t NO filter: %lu\n", iter->dset_comptype[H5Z_FILTER_ERROR+1]);
-
- printf("\t GZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_DEFLATE]);
-
- printf("\t SHUFFLE filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SHUFFLE]);
-
- printf("\t FLETCHER32 filter: %lu\n", iter->dset_comptype[H5Z_FILTER_FLETCHER32]);
-
- printf("\t SZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SZIP]);
-
- printf("\t NBIT filter: %lu\n", iter->dset_comptype[H5Z_FILTER_NBIT]);
+ printf("\t\tTotal # of datasets: %lu\n", total);
+ } /* end if */
- printf("\t SCALEOFFSET filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SCALEOFFSET]);
+ printf("Dataset storage information:\n");
+ HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size);
- printf("\t USER-DEFINED filter: %lu\n", iter->dset_comptype[H5_NFILTERS_IMPL-1]);
- if(display_dtype_metadata) {
- printf("Dataset datatype information:\n");
- printf("\t# of unique datatypes used by datasets: %lu\n", iter->dset_ntypes);
- total = 0;
- for(u = 0; u < iter->dset_ntypes; u++) {
- H5Tencode(iter->dset_type_info[u].tid, NULL, &dtype_size);
- printf("\tDataset datatype #%u:\n", u);
- printf("\t\tCount (total/named) = (%lu/%lu)\n", iter->dset_type_info[u].count, iter->dset_type_info[u].named);
- printf("\t\tSize (desc./elmt) = (%lu/%lu)\n", (unsigned long)dtype_size,
- (unsigned long)H5Tget_size(iter->dset_type_info[u].tid));
- H5Tclose(iter->dset_type_info[u].tid);
- total += iter->dset_type_info[u].count;
- } /* end for */
- printf("\tTotal dataset datatype count: %lu\n", total);
- }
- } /* end if */
+ printf("Dataset layout information:\n");
+ for(u = 0; u < H5D_NLAYOUTS; u++)
+ printf("\tDataset layout counts[%s]: %lu\n", (u == 0 ? "COMPACT" :
+ (u == 1 ? "CONTIG" : "CHUNKED")), iter->dset_layouts[u]);
+ printf("\tNumber of external files : %lu\n", iter->nexternal);
+
+ printf("Dataset filters information:\n");
+ printf("\tNumber of datasets with:\n");
+ printf("\t\tNO filter: %lu\n", iter->dset_comptype[H5Z_FILTER_ERROR+1]);
+ printf("\t\tGZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_DEFLATE]);
+ printf("\t\tSHUFFLE filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SHUFFLE]);
+ printf("\t\tFLETCHER32 filter: %lu\n", iter->dset_comptype[H5Z_FILTER_FLETCHER32]);
+ printf("\t\tSZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SZIP]);
+ printf("\t\tNBIT filter: %lu\n", iter->dset_comptype[H5Z_FILTER_NBIT]);
+ printf("\t\tSCALEOFFSET filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SCALEOFFSET]);
+ printf("\t\tUSER-DEFINED filter: %lu\n", iter->dset_comptype[H5_NFILTERS_IMPL-1]);
+
+ if(display_dtype_metadata) {
+ printf("Dataset datatype information:\n");
+ printf("\t# of unique datatypes used by datasets: %lu\n", iter->dset_ntypes);
+ total = 0;
+ for(u = 0; u < iter->dset_ntypes; u++) {
+ H5Tencode(iter->dset_type_info[u].tid, NULL, &dtype_size);
+ printf("\tDataset datatype #%u:\n", u);
+ printf("\t\tCount (total/named) = (%lu/%lu)\n", iter->dset_type_info[u].count, iter->dset_type_info[u].named);
+ printf("\t\tSize (desc./elmt) = (%lu/%lu)\n", (unsigned long)dtype_size,
+ (unsigned long)H5Tget_size(iter->dset_type_info[u].tid));
+ H5Tclose(iter->dset_type_info[u].tid);
+ total += iter->dset_type_info[u].count;
+ } /* end for */
+ printf("\tTotal dataset datatype count: %lu\n", total);
+ }
+ } /* end if */
- return ret;
+ return 0;
}
+
/*-------------------------------------------------------------------------
* Function: print_file_statistics
@@ -1329,28 +1237,25 @@ print_dataset_info(iter_t * _iter)
*-------------------------------------------------------------------------
*/
static void
-print_file_statistics(iter_t * _iter)
+print_file_statistics(const iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
-
- if(display_all) {
- display_file = TRUE;
- display_file_metadata = TRUE;
- display_group = TRUE;
- display_group_metadata = TRUE;
- display_dset = TRUE;
- display_dtype_metadata = TRUE;
- display_attr = TRUE;
- }
-
-
- if(display_file) print_file_info(iter);
- if(display_file_metadata) print_file_metadata(iter);
- if(display_group) print_group_info(iter);
- if(display_dset) print_dataset_info(iter);
- if(display_attr) print_attr_info(iter);
+ if(display_all) {
+ display_file = TRUE;
+ display_file_metadata = TRUE;
+ display_group = TRUE;
+ display_group_metadata = TRUE;
+ display_dset = TRUE;
+ display_dtype_metadata = TRUE;
+ display_attr = TRUE;
+ }
+ if(display_file) print_file_info(iter);
+ if(display_file_metadata) print_file_metadata(iter);
+ if(display_group) print_group_info(iter);
+ if(display_dset) print_dataset_info(iter);
+ if(display_attr) print_attr_info(iter);
}
+
/*-------------------------------------------------------------------------
* Function: print_object_statistics
@@ -1369,15 +1274,11 @@ print_file_statistics(iter_t * _iter)
*-------------------------------------------------------------------------
*/
static void
-print_object_statistics(char *name, iter_t UNUSED * _iter)
+print_object_statistics(const char *name)
{
-/* Comment out for now to eliminate warnings since variable is not used
- iter_t *iter = (iter_t*)_iter;
- EIP 11/17/06
-*/
-
- printf("Object name %s\n", name);
+ printf("Object name %s\n", name);
}
+
/*-------------------------------------------------------------------------
* Function: print_statistics
@@ -1396,13 +1297,12 @@ print_object_statistics(char *name, iter_t UNUSED * _iter)
*-------------------------------------------------------------------------
*/
static void
-print_statistics(char *name, iter_t * _iter)
+print_statistics(const char *name, const iter_t *iter)
{
- iter_t *iter = (iter_t*)_iter;
- if(display_object)
- print_object_statistics(name, iter);
- else
- print_file_statistics(iter);
+ if(display_object)
+ print_object_statistics(name);
+ else
+ print_file_statistics(iter);
}
@@ -1413,7 +1313,6 @@ main(int argc, const char *argv[])
const char *fname = NULL;
hid_t fid;
struct handler_t *hand;
- herr_t status, reterr;
char root[] = "/";
int i;
H5F_info_t finfo;
@@ -1443,13 +1342,11 @@ main(int argc, const char *argv[])
leave(EXIT_FAILURE);
}
-
/* Initialize iter structure */
- status = iter_init(&iter);
+ iter_init(&iter);
/* Get storge info for SOHM's btree/list/heap and superblock extension */
- reterr = H5Fget_info(fid, &finfo);
- if (reterr < 0)
+ if(H5Fget_info(fid, &finfo) < 0)
warn_msg(progname, "Unable to retrieve SOHM info\n");
else {
iter.super_ext_size = finfo.super_ext_size;
@@ -1458,20 +1355,19 @@ main(int argc, const char *argv[])
iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size;
}
-
/* Walk the objects or all file */
- for (i = 0; i < argc; i++) {
- if (hand[i].obj) {
+ for(i = 0; i < argc; i++) {
+ if(hand[i].obj) {
if(hand[i].flag) {
walk(fid, hand[i].obj, &iter);
print_statistics(hand[i].obj, &iter);
}
}
-
}
+
free(hand);
- H5Fclose(fid);
- if (fid < 0) {
+
+ if(H5Fclose(fid) < 0) {
error_msg(progname, "unable to close file \"%s\"\n", fname);
leave(EXIT_FAILURE);
}
diff --git a/tools/misc/testfiles/h5stat_filters-d.ddl b/tools/misc/testfiles/h5stat_filters-d.ddl
index ba34ae8..e83c6c4 100644
--- a/tools/misc/testfiles/h5stat_filters-d.ddl
+++ b/tools/misc/testfiles/h5stat_filters-d.ddl
@@ -22,12 +22,12 @@ Dataset layout information:
Dataset layout counts[CHUNKED]: 12
Number of external files : 2
Dataset filters information:
- Number of datasets with
- NO filter: 7
- GZIP filter: 2
- SHUFFLE filter: 2
- FLETCHER32 filter: 2
- SZIP filter: 2
- NBIT filter: 2
- SCALEOFFSET filter: 1
- USER-DEFINED filter: 1
+ Number of datasets with:
+ NO filter: 7
+ GZIP filter: 2
+ SHUFFLE filter: 2
+ FLETCHER32 filter: 2
+ SZIP filter: 2
+ NBIT filter: 2
+ SCALEOFFSET filter: 1
+ USER-DEFINED filter: 1
diff --git a/tools/misc/testfiles/h5stat_filters-dT.ddl b/tools/misc/testfiles/h5stat_filters-dT.ddl
index 5e91577..62735f0 100644
--- a/tools/misc/testfiles/h5stat_filters-dT.ddl
+++ b/tools/misc/testfiles/h5stat_filters-dT.ddl
@@ -22,15 +22,15 @@ Dataset layout information:
Dataset layout counts[CHUNKED]: 12
Number of external files : 2
Dataset filters information:
- Number of datasets with
- NO filter: 7
- GZIP filter: 2
- SHUFFLE filter: 2
- FLETCHER32 filter: 2
- SZIP filter: 2
- NBIT filter: 2
- SCALEOFFSET filter: 1
- USER-DEFINED filter: 1
+ Number of datasets with:
+ NO filter: 7
+ GZIP filter: 2
+ SHUFFLE filter: 2
+ FLETCHER32 filter: 2
+ SZIP filter: 2
+ NBIT filter: 2
+ SCALEOFFSET filter: 1
+ USER-DEFINED filter: 1
Dataset datatype information:
# of unique datatypes used by datasets: 2
Dataset datatype #0:
diff --git a/tools/misc/testfiles/h5stat_filters.ddl b/tools/misc/testfiles/h5stat_filters.ddl
index 11eb76a..4dd6aee 100644
--- a/tools/misc/testfiles/h5stat_filters.ddl
+++ b/tools/misc/testfiles/h5stat_filters.ddl
@@ -53,15 +53,15 @@ Dataset layout information:
Dataset layout counts[CHUNKED]: 12
Number of external files : 2
Dataset filters information:
- Number of datasets with
- NO filter: 7
- GZIP filter: 2
- SHUFFLE filter: 2
- FLETCHER32 filter: 2
- SZIP filter: 2
- NBIT filter: 2
- SCALEOFFSET filter: 1
- USER-DEFINED filter: 1
+ Number of datasets with:
+ NO filter: 7
+ GZIP filter: 2
+ SHUFFLE filter: 2
+ FLETCHER32 filter: 2
+ SZIP filter: 2
+ NBIT filter: 2
+ SCALEOFFSET filter: 1
+ USER-DEFINED filter: 1
Dataset datatype information:
# of unique datatypes used by datasets: 2
Dataset datatype #0:
diff --git a/tools/misc/testfiles/h5stat_newgrat.ddl b/tools/misc/testfiles/h5stat_newgrat.ddl
index 0cf8367..228d565 100644
--- a/tools/misc/testfiles/h5stat_newgrat.ddl
+++ b/tools/misc/testfiles/h5stat_newgrat.ddl
@@ -51,15 +51,15 @@ Dataset layout information:
Dataset layout counts[CHUNKED]: 0
Number of external files : 0
Dataset filters information:
- Number of datasets with
- NO filter: 1
- GZIP filter: 0
- SHUFFLE filter: 0
- FLETCHER32 filter: 0
- SZIP filter: 0
- NBIT filter: 0
- SCALEOFFSET filter: 0
- USER-DEFINED filter: 0
+ Number of datasets with:
+ NO filter: 1
+ GZIP filter: 0
+ SHUFFLE filter: 0
+ FLETCHER32 filter: 0
+ SZIP filter: 0
+ NBIT filter: 0
+ SCALEOFFSET filter: 0
+ USER-DEFINED filter: 0
Dataset datatype information:
# of unique datatypes used by datasets: 1
Dataset datatype #0:
diff --git a/tools/misc/testfiles/h5stat_tsohm.ddl b/tools/misc/testfiles/h5stat_tsohm.ddl
index cdca49a..572965e 100644
--- a/tools/misc/testfiles/h5stat_tsohm.ddl
+++ b/tools/misc/testfiles/h5stat_tsohm.ddl
@@ -50,15 +50,15 @@ Dataset layout information:
Dataset layout counts[CHUNKED]: 2
Number of external files : 0
Dataset filters information:
- Number of datasets with
- NO filter: 2
- GZIP filter: 0
- SHUFFLE filter: 0
- FLETCHER32 filter: 0
- SZIP filter: 0
- NBIT filter: 0
- SCALEOFFSET filter: 0
- USER-DEFINED filter: 0
+ Number of datasets with:
+ NO filter: 2
+ GZIP filter: 0
+ SHUFFLE filter: 0
+ FLETCHER32 filter: 0
+ SZIP filter: 0
+ NBIT filter: 0
+ SCALEOFFSET filter: 0
+ USER-DEFINED filter: 0
Dataset datatype information:
# of unique datatypes used by datasets: 1
Dataset datatype #0: