summaryrefslogtreecommitdiffstats
path: root/src/H5Farray.c
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1998-04-08 21:43:02 (GMT)
committerRobb Matzke <matzke@llnl.gov>1998-04-08 21:43:02 (GMT)
commitc01750fa740943c0083711b353278143c79d50a3 (patch)
treefd475b7c7a3639c05b30625b43547850d687b948 /src/H5Farray.c
parent68fa66bf8130d6a6e607e233da8cc61a154bf172 (diff)
downloadhdf5-c01750fa740943c0083711b353278143c79d50a3.zip
hdf5-c01750fa740943c0083711b353278143c79d50a3.tar.gz
hdf5-c01750fa740943c0083711b353278143c79d50a3.tar.bz2
[svn-r338] Changes since 19980407
---------------------- ./src/H5B.c ./src/H5D.c ./src/H5Dprivate.h ./src/H5Dpublic.h ./src/H5F.c ./src/H5Farray.c ./src/H5Fcore.c ./src/H5Ffamily.c ./src/H5Fistore.c ./src/H5Flow.c ./src/H5Fprivate.h ./src/H5Fpublic.h ./src/H5Fsec2.c ./src/H5Fsplit.c ./src/H5Fstdio.c ./src/H5G.c ./src/H5Gent.c ./src/H5Gnode.c ./src/H5HG.c ./src/H5HL.c ./src/H5MF.c ./src/H5MFprivate.h ./src/H5O.c ./src/H5Ocont.c ./src/H5Odtype.c ./src/H5Oefl.c ./src/H5Olayout.c ./src/H5Oname.c ./src/H5Oprivate.h ./src/H5Osdspace.c ./src/H5Oshared.c ./src/H5Ostab.c ./src/H5P.c ./src/H5Ppublic.h ./src/H5S.c ./src/H5Sprivate.h ./src/H5Spublic.h ./src/H5Ssimp.c ./src/H5Tconv.c ./src/H5Tpkg.h ./src/H5V.c ./src/H5Vprivate.h ./src/H5private.h ./src/H5public.h ./src/h5ls.c ./test/cmpd_dset.c ./test/dsets.c ./test/extend.c ./test/external.c ./test/hyperslab.c ./test/iopipe.c ./test/istore.c ./test/shtype.c ./test/tfile.c ./test/th5s.c Anything having to do with the size of a dataset now uses the types `hsize_t' and `hssize_t' which must be the same size and at least as large as `size_t'. This isn't fully tested yet, so hsize_t and hssize_t are defined as size_t and ssize_t in H5public.h. Setting them to larger values will trip up gcc versions less than 2.8.1 on x86 platforms. Documented unused function formals with `__unused__' before the formal name. This also has the effect of supressing warning messages for gcc since it's defined to be `__attribute__((unused))' in the H5private.h file. ./src/debug.c ./src/h5ls.c If the file name contains a `%' then the file is opened as a file family with H5P_DEFAULT for the file member access property list. ./src/h5ls.c The group name is optional, defaulting to `/'. ./src/hdf5.h Added some missing public header files.
Diffstat (limited to 'src/H5Farray.c')
-rw-r--r--src/H5Farray.c62
1 files changed, 42 insertions, 20 deletions
diff --git a/src/H5Farray.c b/src/H5Farray.c
index 08aeac4..138a20f 100644
--- a/src/H5Farray.c
+++ b/src/H5Farray.c
@@ -46,7 +46,7 @@ herr_t
H5F_arr_create (H5F_t *f, struct H5O_layout_t *layout/*in,out*/)
{
intn i;
- size_t nbytes;
+ hsize_t nbytes;
FUNC_ENTER (H5F_arr_create, FAIL);
@@ -113,17 +113,18 @@ H5F_arr_create (H5F_t *f, struct H5O_layout_t *layout/*in,out*/)
herr_t
H5F_arr_read (H5F_t *f, const struct H5O_layout_t *layout,
const struct H5O_efl_t *efl,
- const size_t _hslab_size[], const size_t mem_size[],
- const size_t mem_offset[], const size_t file_offset[],
+ const hsize_t _hslab_size[], const hsize_t mem_size[],
+ const hssize_t mem_offset[], const hssize_t file_offset[],
void *_buf/*out*/)
{
uint8 *buf = (uint8 *)_buf; /*cast for arithmetic */
- ssize_t file_stride[H5O_LAYOUT_NDIMS]; /*strides through file */
- ssize_t mem_stride[H5O_LAYOUT_NDIMS]; /*strides through memory*/
- size_t hslab_size[H5O_LAYOUT_NDIMS]; /*hyperslab size */
- size_t idx[H5O_LAYOUT_NDIMS]; /*multi-dim counter */
- size_t mem_start, file_start; /*byte offsets to start */
- size_t elmt_size = 1; /*bytes per element */
+ hssize_t file_stride[H5O_LAYOUT_NDIMS]; /*strides through file */
+ hssize_t mem_stride[H5O_LAYOUT_NDIMS]; /*strides through memory*/
+ hsize_t hslab_size[H5O_LAYOUT_NDIMS]; /*hyperslab size */
+ hsize_t idx[H5O_LAYOUT_NDIMS]; /*multi-dim counter */
+ size_t mem_start; /*byte offset to start */
+ hsize_t file_start; /*byte offset to start */
+ hsize_t elmt_size = 1; /*bytes per element */
size_t nelmts, z; /*number of elements */
intn ndims; /*stride dimensionality */
haddr_t addr; /*address in file */
@@ -146,12 +147,22 @@ H5F_arr_read (H5F_t *f, const struct H5O_layout_t *layout,
switch (layout->type) {
case H5D_CONTIGUOUS:
+ ndims = layout->ndims;
+ /*
+ * Offsets must not be negative for this type of storage.
+ */
+ for (i=0; i<ndims; i++) {
+ if (mem_offset[i]<0 || file_offset[i]<0) {
+ HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL,
+ "negative offsets are not valid");
+ }
+ }
+
/*
* Calculate the strides needed to walk through the array on disk
* and memory. Optimize the strides to result in the fewest number of
* I/O requests.
*/
- ndims = layout->ndims;
mem_start = H5V_hyper_stride (ndims, hslab_size, mem_size,
mem_offset, mem_stride/*out*/);
file_start = H5V_hyper_stride (ndims, hslab_size, layout->dim,
@@ -263,17 +274,18 @@ H5F_arr_read (H5F_t *f, const struct H5O_layout_t *layout,
*/
herr_t
H5F_arr_write (H5F_t *f, const struct H5O_layout_t *layout,
- const struct H5O_efl_t *efl, const size_t _hslab_size[],
- const size_t mem_size[], const size_t mem_offset[],
- const size_t file_offset[], const void *_buf)
+ const struct H5O_efl_t *efl, const hsize_t _hslab_size[],
+ const hsize_t mem_size[], const hssize_t mem_offset[],
+ const hssize_t file_offset[], const void *_buf)
{
const uint8 *buf = (const uint8 *)_buf; /*cast for arithmetic */
- ssize_t file_stride[H5O_LAYOUT_NDIMS]; /*strides through file */
- ssize_t mem_stride[H5O_LAYOUT_NDIMS]; /*strides through memory*/
- size_t hslab_size[H5O_LAYOUT_NDIMS]; /*hyperslab size */
- size_t idx[H5O_LAYOUT_NDIMS]; /*multi-dim counter */
- size_t mem_start, file_start; /*byte offsets to start */
- size_t elmt_size = 1; /*bytes per element */
+ hssize_t file_stride[H5O_LAYOUT_NDIMS]; /*strides through file */
+ hssize_t mem_stride[H5O_LAYOUT_NDIMS]; /*strides through memory*/
+ hsize_t hslab_size[H5O_LAYOUT_NDIMS]; /*hyperslab size */
+ hsize_t idx[H5O_LAYOUT_NDIMS]; /*multi-dim counter */
+ hsize_t mem_start; /*byte offset to start */
+ hsize_t file_start; /*byte offset to start */
+ hsize_t elmt_size = 1; /*bytes per element */
size_t nelmts, z; /*number of elements */
intn ndims; /*dimensionality */
haddr_t addr; /*address in file */
@@ -297,12 +309,22 @@ H5F_arr_write (H5F_t *f, const struct H5O_layout_t *layout,
switch (layout->type) {
case H5D_CONTIGUOUS:
+ ndims = layout->ndims;
+ /*
+ * Offsets must not be negative for this type of storage.
+ */
+ for (i=0; i<ndims; i++) {
+ if (mem_offset[i]<0 || file_offset[i]<0) {
+ HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL,
+ "negative offsets are not valid");
+ }
+ }
+
/*
* Calculate the strides needed to walk through the array on disk.
* Optimize the strides to result in the fewest number of I/O
* requests.
*/
- ndims = layout->ndims;
mem_start = H5V_hyper_stride (ndims, hslab_size, mem_size,
mem_offset, mem_stride/*out*/);
file_start = H5V_hyper_stride (ndims, hslab_size, layout->dim,