From 5c420a91801fb4eaf6b639717ca3f1f2e8f6d4d9 Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Thu, 5 Jul 2007 10:44:30 -0500 Subject: [svn-r13943] Description: Allow H5Dset_extent() to reduce the size of dimensions that aren't unlimited Tested on: Mac OS X/32 10.4.10 (amazon) Linux/32 2.6 (chicago) Linux/64 2.6 (chicago2) --- src/H5S.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/H5S.c b/src/H5S.c index d7708b3..95c4783 100644 --- a/src/H5S.c +++ b/src/H5S.c @@ -2086,28 +2086,30 @@ done: *------------------------------------------------------------------------- */ int -H5S_set_extent( H5S_t *space, const hsize_t *size ) +H5S_set_extent(H5S_t *space, const hsize_t *size) { - unsigned u; - herr_t ret_value=0; + unsigned u; /* Local index variable */ + herr_t ret_value = 0; /* Return value */ - FUNC_ENTER_NOAPI( H5S_set_extent, FAIL ); + FUNC_ENTER_NOAPI(H5S_set_extent, FAIL); /* Check args */ - assert( space && H5S_SIMPLE==H5S_GET_EXTENT_TYPE(space) ); - assert( size); + HDassert(space && H5S_SIMPLE == H5S_GET_EXTENT_TYPE(space)); + HDassert(size); /* Verify that the dimensions being changed are allowed to change */ - for ( u = 0; u < space->extent.rank; u++ ) { - if ( space->extent.max && H5S_UNLIMITED != space->extent.max[u] && - space->extent.max[u]!=size[u] ) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,"dimension cannot be modified") - ret_value++; + for(u = 0; u < space->extent.rank; u++) { + if(space->extent.size[u] != size[u]) { + if(space->extent.max && H5S_UNLIMITED != space->extent.max[u] && + space->extent.max[u] < size[u]) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dimension cannot be modified") + ret_value++; + } /* end if */ } /* end for */ /* Update */ - if (ret_value) - H5S_set_extent_real(space,size); + if(ret_value) + H5S_set_extent_real(space, size); done: FUNC_LEAVE_NOAPI(ret_value); @@ -2186,6 +2188,10 @@ H5S_set_extent_real( H5S_t *space, const hsize_t *size ) if(H5S_select_all(space, FALSE)<0) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection") + /* Mark the dataspace as no longer shared if it was before */ + if(H5O_msg_reset_share(H5O_SDSPACE_ID, space) < 0) + HGOTO_ERROR(H5E_DATASPACE, H5E_CANTRESET, FAIL, "can't stop sharing dataspace") + done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5S_set_extent_real() */ -- cgit v0.12