summaryrefslogtreecommitdiffstats
path: root/src/H5Farray.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Farray.c')
-rw-r--r--src/H5Farray.c33
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");
}