diff options
Diffstat (limited to 'src/H5Distore.c')
-rw-r--r-- | src/H5Distore.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/H5Distore.c b/src/H5Distore.c index 7e27d1e..297a480 100644 --- a/src/H5Distore.c +++ b/src/H5Distore.c @@ -4027,3 +4027,47 @@ 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() */ |