diff options
author | Robb Matzke <matzke@llnl.gov> | 1998-04-08 21:43:02 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1998-04-08 21:43:02 (GMT) |
commit | c01750fa740943c0083711b353278143c79d50a3 (patch) | |
tree | fd475b7c7a3639c05b30625b43547850d687b948 /src/H5Farray.c | |
parent | 68fa66bf8130d6a6e607e233da8cc61a154bf172 (diff) | |
download | hdf5-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.c | 62 |
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, |