diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/H5Aint.c | 5 | ||||
-rw-r--r-- | src/H5S.c | 25 |
2 files changed, 23 insertions, 7 deletions
diff --git a/src/H5Aint.c b/src/H5Aint.c index 3ffc6d3..a47ee14 100644 --- a/src/H5Aint.c +++ b/src/H5Aint.c @@ -888,8 +888,9 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to reset datatype sharing") } /* end else */ - /* Copy the dataspace for the attribute */ - attr_dst->shared->ds = H5S_copy(attr_src->shared->ds, FALSE, FALSE); + /* Copy the dataspace for the attribute. Make sure the maximal dimension is also copied. + * Otherwise the comparison in the test may complain about it. SLU 2011/4/12 */ + attr_dst->shared->ds = H5S_copy(attr_src->shared->ds, FALSE, TRUE); HDassert(attr_dst->shared->ds); /* Reset the dataspace's sharing in the source file before trying to share @@ -1163,6 +1163,11 @@ H5Sis_simple(hid_t space_id) Raymond Lu 03/30/2011 We allow 0-dimension for non-unlimited dimension starting from 1.8.7 release. + + Raymond Lu 04/11/2011 + I added a condition check to make sure the new size won't exceed the + current maximal size when this function is called to change the + dimension size of an existent dataspace. --------------------------------------------------------------------------*/ herr_t H5Sset_extent_simple(hid_t space_id, int rank, const hsize_t dims[/*rank*/], @@ -1197,6 +1202,14 @@ H5Sset_extent_simple(hid_t space_id, int rank, const hsize_t dims[/*rank*/], } } + /* Check through all the dimensions to see if the new dimension size exceeds the current + * size or if the new maximal size exceeds the current maximal size */ + for(u = 0; u < space->extent.rank; u++) { + if(space->extent.max && H5S_UNLIMITED!=space->extent.max[u] && + (space->extent.max[u]<dims[u] || (max && space->extent.max[u]<max[u]))) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "new size exceeds current maximal size") + } /* end for */ + /* Do it */ if (H5S_set_extent_simple(space, (unsigned)rank, dims, max)<0) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to set simple extent") @@ -1259,13 +1272,15 @@ H5S_set_extent_simple(H5S_t *space, unsigned rank, const hsize_t *dims, } /* end for */ space->extent.nelem = nelem; - /* Copy the maximum dimensions if specified */ + /* Copy the maximum dimensions if specified. Otherwise, the maximal dimensions are the + * same as the dimension */ + space->extent.max = (hsize_t *)H5FL_ARR_MALLOC(hsize_t, (size_t)rank); if(max != NULL) { - space->extent.max = (hsize_t *)H5FL_ARR_MALLOC(hsize_t, (size_t)rank); HDmemcpy(space->extent.max, max, sizeof(hsize_t) * rank); - } /* end if */ - else - space->extent.max = NULL; + } else { + for(u = 0; u < space->extent.rank; u++) + space->extent.max[u] = dims[u]; + } } /* end else */ /* Selection related cleanup */ |