summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5D.c6
-rw-r--r--src/H5Distore.c8
-rw-r--r--src/H5Fistore.c8
-rw-r--r--src/H5Fprivate.h3
-rw-r--r--src/H5Ofill.c11
-rw-r--r--tools/h5ls.c2
-rw-r--r--tools/h5tools.c69
7 files changed, 62 insertions, 45 deletions
diff --git a/src/H5D.c b/src/H5D.c
index a4d21dd..d8c2a01 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -960,7 +960,8 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL,
"unable to convert fill value to dataset type");
}
- if (H5O_modify(&(new_dset->ent), H5O_FILL, 0, H5O_FLAG_CONSTANT,
+ if (new_dset->create_parms->fill.buf &&
+ H5O_modify(&(new_dset->ent), H5O_FILL, 0, H5O_FLAG_CONSTANT,
&(new_dset->create_parms->fill))<0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL,
"unable to update fill value header message");
@@ -2224,7 +2225,8 @@ H5D_allocate (H5D_t *dataset, const H5D_xfer_t *xfer)
if (H5F_istore_allocate(dataset->ent.file,
(layout), space_dim, xfer->split_ratios,
- &(dataset->create_parms->pline))<0) {
+ &(dataset->create_parms->pline),
+ &(dataset->create_parms->fill))<0) {
HRETURN(FAIL);
}
break;
diff --git a/src/H5Distore.c b/src/H5Distore.c
index ebfb004..8c9dd1b 100644
--- a/src/H5Distore.c
+++ b/src/H5Distore.c
@@ -1625,7 +1625,7 @@ H5F_istore_read(H5F_t *f, const H5D_xfer_t *xfer, const H5O_layout_t *layout,
l.dim[i] = layout->dim[i];
l.addr = udata.addr;
tmp_xfer.xfer_mode = H5D_XFER_DFLT;
- if (H5F_arr_read(f, &tmp_xfer, &l, pline, NULL/*no efl*/,
+ if (H5F_arr_read(f, &tmp_xfer, &l, pline, fill, NULL/*no efl*/,
sub_size, size_m, sub_offset_m, offset_wrt_chunk,
buf)==FAIL){
HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL,
@@ -1802,7 +1802,7 @@ H5F_istore_write(H5F_t *f, const H5D_xfer_t *xfer, const H5O_layout_t *layout,
l.dim[i] = layout->dim[i];
l.addr = udata.addr;
tmp_xfer.xfer_mode = H5D_XFER_DFLT;
- if (H5F_arr_write(f, &tmp_xfer, &l, pline, NULL/*no efl*/,
+ if (H5F_arr_write(f, &tmp_xfer, &l, pline, fill, NULL/*no efl*/,
sub_size, size_m, sub_offset_m, offset_wrt_chunk,
buf)==FAIL){
HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL,
@@ -2080,7 +2080,7 @@ H5F_istore_get_addr (H5F_t *f, const H5O_layout_t *layout,
herr_t
H5F_istore_allocate (H5F_t *f, const H5O_layout_t *layout,
const hsize_t *space_dim, const double split_ratios[],
- const H5O_pline_t *pline)
+ const H5O_pline_t *pline, const H5O_fill_t *fill)
{
intn i, carry;
@@ -2140,7 +2140,7 @@ H5F_istore_allocate (H5F_t *f, const H5O_layout_t *layout,
* chunk.
*/
if (NULL==(chunk=H5F_istore_lock (f, layout, split_ratios, pline,
- chunk_offset, FALSE,
+ fill, chunk_offset, FALSE,
&idx_hint))) {
HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL,
"unable to read raw data chunk");
diff --git a/src/H5Fistore.c b/src/H5Fistore.c
index ebfb004..8c9dd1b 100644
--- a/src/H5Fistore.c
+++ b/src/H5Fistore.c
@@ -1625,7 +1625,7 @@ H5F_istore_read(H5F_t *f, const H5D_xfer_t *xfer, const H5O_layout_t *layout,
l.dim[i] = layout->dim[i];
l.addr = udata.addr;
tmp_xfer.xfer_mode = H5D_XFER_DFLT;
- if (H5F_arr_read(f, &tmp_xfer, &l, pline, NULL/*no efl*/,
+ if (H5F_arr_read(f, &tmp_xfer, &l, pline, fill, NULL/*no efl*/,
sub_size, size_m, sub_offset_m, offset_wrt_chunk,
buf)==FAIL){
HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL,
@@ -1802,7 +1802,7 @@ H5F_istore_write(H5F_t *f, const H5D_xfer_t *xfer, const H5O_layout_t *layout,
l.dim[i] = layout->dim[i];
l.addr = udata.addr;
tmp_xfer.xfer_mode = H5D_XFER_DFLT;
- if (H5F_arr_write(f, &tmp_xfer, &l, pline, NULL/*no efl*/,
+ if (H5F_arr_write(f, &tmp_xfer, &l, pline, fill, NULL/*no efl*/,
sub_size, size_m, sub_offset_m, offset_wrt_chunk,
buf)==FAIL){
HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL,
@@ -2080,7 +2080,7 @@ H5F_istore_get_addr (H5F_t *f, const H5O_layout_t *layout,
herr_t
H5F_istore_allocate (H5F_t *f, const H5O_layout_t *layout,
const hsize_t *space_dim, const double split_ratios[],
- const H5O_pline_t *pline)
+ const H5O_pline_t *pline, const H5O_fill_t *fill)
{
intn i, carry;
@@ -2140,7 +2140,7 @@ H5F_istore_allocate (H5F_t *f, const H5O_layout_t *layout,
* chunk.
*/
if (NULL==(chunk=H5F_istore_lock (f, layout, split_ratios, pline,
- chunk_offset, FALSE,
+ fill, chunk_offset, FALSE,
&idx_hint))) {
HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL,
"unable to read raw data chunk");
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index ca787f7..7f25090 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -569,7 +569,8 @@ herr_t H5F_istore_allocate (H5F_t *f,
const struct H5O_layout_t *layout,
const hsize_t *space_dim,
const double split_ratios[],
- const struct H5O_pline_t *pline);
+ const struct H5O_pline_t *pline,
+ const struct H5O_fill_t *fill);
/* Functions that operate on contiguous storage wrt boot block */
herr_t H5F_block_read(H5F_t *f, const haddr_t *addr, hsize_t size,
diff --git a/src/H5Ofill.c b/src/H5Ofill.c
index 1328307..29e5914 100644
--- a/src/H5Ofill.c
+++ b/src/H5Ofill.c
@@ -75,11 +75,14 @@ H5O_fill_decode(H5F_t *f, const uint8 *p, H5O_shared_t *sh)
"memory allocation failed for fill value message");
}
UINT32DECODE(p, mesg->size);
- if (NULL==(mesg->buf=H5MM_malloc(mesg->size))) {
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed for fill value");
+ if (mesg->size>0) {
+ if (NULL==(mesg->buf=H5MM_malloc(mesg->size))) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL,
+ "memory allocation failed for fill value");
+ }
+ HDmemcpy(mesg->buf, p, mesg->size);
}
- HDmemcpy(mesg->buf, p, mesg->size);
+
ret_value = (void*)mesg;
done:
diff --git a/tools/h5ls.c b/tools/h5ls.c
index a328eb8..39124b8 100644
--- a/tools/h5ls.c
+++ b/tools/h5ls.c
@@ -354,7 +354,7 @@ list (hid_t group, const char *name, void __unused__ *cd)
puts("**NOT FOUND**");
return 0;
} else if (sb.type<0 || sb.type>=H5G_NTYPES) {
- printf("Unknown type=%d", sb.type);
+ printf("Unknown type(%d)\n", sb.type);
return 0;
}
if (dispatch_g[sb.type].name) fputs(dispatch_g[sb.type].name, stdout);
diff --git a/tools/h5tools.c b/tools/h5tools.c
index d3cc110..b4411de 100644
--- a/tools/h5tools.c
+++ b/tools/h5tools.c
@@ -56,30 +56,35 @@ h5dump_prefix(char *s/*out*/, const h5dump_t *info, hsize_t elmtno, int ndims,
hsize_t n, i;
char temp[1024];
- /*
- * Calculate the number of elements represented by a unit change in a
- * certain index position.
- */
- for (i=ndims-1, p_prod[ndims-1]=1; i>0; --i) {
- p_prod[i-1] = (max_idx[i]-min_idx[i]) * p_prod[i];
- }
+ if (ndims>0) {
+ /*
+ * Calculate the number of elements represented by a unit change in a
+ * certain index position.
+ */
+ for (i=ndims-1, p_prod[ndims-1]=1; i>0; --i) {
+ p_prod[i-1] = (max_idx[i]-min_idx[i]) * p_prod[i];
+ }
- /*
- * Calculate the index values from the element number.
- */
- for (i=0, n=elmtno; i<(hsize_t)ndims; i++) {
- p_idx[i] = n / p_prod[i] + min_idx[i];
- n %= p_prod[i];
- }
+ /*
+ * Calculate the index values from the element number.
+ */
+ for (i=0, n=elmtno; i<(hsize_t)ndims; i++) {
+ p_idx[i] = n / p_prod[i] + min_idx[i];
+ n %= p_prod[i];
+ }
- /*
- * Print the index values.
- */
- *temp = '\0';
- for (i=0; i<(hsize_t)ndims; i++) {
- if (i) strcat(temp, OPT(info->idx_sep, ","));
- sprintf(temp+strlen(temp), OPT(info->idx_n_fmt, "%lu"),
- (unsigned long)p_idx[i]);
+ /*
+ * Print the index values.
+ */
+ *temp = '\0';
+ for (i=0; i<(hsize_t)ndims; i++) {
+ if (i) strcat(temp, OPT(info->idx_sep, ","));
+ sprintf(temp+strlen(temp), OPT(info->idx_n_fmt, "%lu"),
+ (unsigned long)p_idx[i]);
+ }
+ } else {
+ /* Scalar */
+ sprintf(temp, OPT(info->idx_n_fmt, "%lu"), (unsigned long)0);
}
/*
@@ -397,16 +402,22 @@ h5dump_simple(FILE *stream, const h5dump_t *info, hid_t dset, hid_t p_type)
for (elmtno=0; elmtno<p_nelmts; elmtno+=hs_nelmts) {
/* Calculate the hyperslab size */
- for (i=0, hs_nelmts=1; i<(hsize_t)ndims; i++) {
- hs_size[i] = MIN(sm_size[i], p_max_idx[i]-hs_offset[i]);
- hs_nelmts *= hs_size[i];
+ if (ndims>0) {
+ for (i=0, hs_nelmts=1; i<(hsize_t)ndims; i++) {
+ hs_size[i] = MIN(sm_size[i], p_max_idx[i]-hs_offset[i]);
+ hs_nelmts *= hs_size[i];
+ }
+ H5Sselect_hyperslab(f_space, H5S_SELECT_SET, hs_offset, NULL,
+ hs_size, NULL);
+ H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, zero, NULL,
+ &hs_nelmts, NULL);
+ } else {
+ H5Sselect_all(f_space);
+ H5Sselect_all(sm_space);
+ hs_nelmts = 1;
}
/* Read the data */
- H5Sselect_hyperslab(f_space, H5S_SELECT_SET, hs_offset, NULL,
- hs_size, NULL);
- H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, zero, NULL,
- &hs_nelmts, NULL);
if (H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf)<0) {
return -1;
}