diff options
Diffstat (limited to 'src/H5Farray.c')
-rw-r--r-- | src/H5Farray.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/H5Farray.c b/src/H5Farray.c index 98d3022..1f2bb6c 100644 --- a/src/H5Farray.c +++ b/src/H5Farray.c @@ -112,7 +112,7 @@ 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 struct H5O_compress_t *comp, 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[], void *_buf/*out*/) @@ -173,6 +173,14 @@ H5F_arr_read (H5F_t *f, const struct H5O_layout_t *layout, "negative offsets are not valid"); } } + + /* + * Compression cannot be used for contiguous data. + */ + if (comp && H5Z_NONE!=comp->method) { + HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL, + "compression is not allowed for contiguous data"); + } /* * Calculate the strides needed to walk through the array on disk @@ -270,7 +278,8 @@ printf("nelmts=%lu, min=%lu, max=%lu\n", temp, min, max); "unable to copy into a proper hyperslab"); } } - if (H5F_istore_read (f, layout, file_offset, hslab_size, buf)<0) { + if (H5F_istore_read (f, layout, comp, file_offset, hslab_size, + buf)<0) { HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL, "chunked read failed"); } break; @@ -313,9 +322,10 @@ printf("nelmts=%lu, min=%lu, max=%lu\n", temp, min, max); */ herr_t H5F_arr_write (H5F_t *f, const struct H5O_layout_t *layout, - 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 struct H5O_compress_t *comp, 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 */ hssize_t file_stride[H5O_LAYOUT_NDIMS]; /*strides through file */ @@ -369,10 +379,18 @@ H5F_arr_write (H5F_t *f, const struct H5O_layout_t *layout, */ for (i=0; i<ndims; i++) { if (mem_offset[i]<0 || file_offset[i]<0) { - HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL, + HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "negative offsets are not valid"); } } + + /* + * Compression cannot be used for contiguous data + */ + if (comp && H5Z_NONE!=comp->method) { + HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, + "compression is not allowed for contiguous data"); + } /* * Calculate the strides needed to walk through the array on disk. @@ -471,7 +489,8 @@ printf("nelmts=%lu, min=%lu, max=%lu\n", temp, min, max); "unable to copy from a proper hyperslab"); } } - if (H5F_istore_write (f, layout, file_offset, hslab_size, buf)<0) { + if (H5F_istore_write (f, layout, comp, file_offset, hslab_size, + buf)<0) { HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "chunked write failed"); } |