summaryrefslogtreecommitdiffstats
path: root/tools/src
diff options
context:
space:
mode:
authorAllen Byrne <byrn@hdfgroup.org>2020-03-01 22:58:14 (GMT)
committerAllen Byrne <byrn@hdfgroup.org>2020-03-01 22:58:14 (GMT)
commitf59050ee2c0b6178563a62f07f962109b8fca664 (patch)
tree570391752af51f1f06baa7ee3a93a8c8af9b6b99 /tools/src
parenteae9f6b209c998c1f6a24adbcfb7c49f25203ebb (diff)
downloadhdf5-f59050ee2c0b6178563a62f07f962109b8fca664.zip
hdf5-f59050ee2c0b6178563a62f07f962109b8fca664.tar.gz
hdf5-f59050ee2c0b6178563a62f07f962109b8fca664.tar.bz2
Fix h5ls attrreg
Diffstat (limited to 'tools/src')
-rw-r--r--tools/src/h5ls/h5ls.c48
1 files changed, 38 insertions, 10 deletions
diff --git a/tools/src/h5ls/h5ls.c b/tools/src/h5ls/h5ls.c
index 4d22df5..f363b83 100644
--- a/tools/src/h5ls/h5ls.c
+++ b/tools/src/h5ls/h5ls.c
@@ -1289,9 +1289,10 @@ print_type(h5tools_str_t *buffer, hid_t type, int ind)
*
*/
static void
-dump_reference(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t container, void *ref_buf, int ndims)
+dump_reference(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t container, hid_t f_type, void *ref_buf, int ndims)
{
- hid_t f_type = H5I_INVALID_HID;
+ hid_t region_id = H5I_INVALID_HID;
+ hid_t region_space = H5I_INVALID_HID;
size_t nsize;
hsize_t elmt_counter = 0; /*counts the # elements printed. */
size_t ncols = 80; /* available output width */
@@ -1303,7 +1304,6 @@ dump_reference(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx
H5TOOLS_START_DEBUG("");
- f_type = H5Dget_type(container);
nsize = H5Tget_size(f_type);
datactx = *ctx; /* print context */
/* Assume entire data space to be printed */
@@ -1324,17 +1324,45 @@ dump_reference(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx
h5tools_str_sprint(&buffer, info, container, f_type, memref, &datactx);
h5tools_render_element(stream, info, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)i, (hsize_t)ndims);
- if (H5Tequal(f_type, H5T_STD_REF_DSETREG)) {
- datactx.indent_level++;
- h5tools_dump_dset(stream, info, &datactx, container);
- datactx.indent_level--;
+ /* region data */
+ if ((region_id = H5Rdereference2(container, H5P_DEFAULT, H5R_DATASET_REGION, memref)) >= 0) {
+ if ((region_space = H5Rget_region(container, H5R_DATASET_REGION, memref)) >= 0) {
+ H5S_sel_type region_type;
+
+ region_type = H5Sget_select_type(region_space);
+ if(region_type == H5S_SEL_POINTS) {
+ /* Print point information */
+ H5TOOLS_DEBUG("H5S_SEL_POINTS H5R_DATASET_REGION");
+ h5tools_dump_region_data_points(
+ region_space, region_id, stream, info, &datactx,
+ &buffer, &curr_pos, ncols, (hsize_t)i, elmt_counter);
+ }
+ else if(region_type == H5S_SEL_HYPERSLABS) {
+ /* Print block information */
+ H5TOOLS_DEBUG("H5S_SEL_HYPERSLABS H5R_DATASET_REGION");
+ h5tools_dump_region_data_blocks(
+ region_space, region_id, stream, info, &datactx,
+ &buffer, &curr_pos, ncols, (hsize_t)i, elmt_counter);
+ }
+ else
+ H5TOOLS_INFO("invalid region type");
+ if(H5Sclose(region_space) < 0)
+ H5TOOLS_INFO("H5Sclose H5R_DATASET_REGION failed");
+ } /* end if (region_space >= 0) */
+ else
+ H5TOOLS_INFO("H5Rget_region H5R_DATASET_REGION failed");
+ if(H5Dclose(region_id) < 0)
+ H5TOOLS_INFO("H5Dclose H5R_DATASET_REGION failed");
+ } /* if (region_id >= 0) */
+ else {
+ /* if (region_id < 0) - could mean that no reference was written do not throw failure */
+ H5Epush2(H5tools_ERR_STACK_g, __FILE__, FUNC, __LINE__, H5tools_ERR_CLS_g, H5E_tools_g, H5E_tools_min_id_g, "H5Rdereference failed");
}
H5TOOLS_DEBUG("finished reference loop:%d",i);
} /* end for(i = 0; i < ndims; i++, ctx->cur_elmt++, elmt_counter++) */
h5tools_str_close(&buffer);
- H5Tclose(f_type);
PRINTVALSTREAM(stream, "\n");
@@ -1489,7 +1517,7 @@ dump_dataset_values(hid_t dset)
H5TOOLS_INFO("H5Dread reference failed");
H5TOOLS_GOTO_DONE_NO_RET();
}
- dump_reference(rawoutstream, info, &ctx, dset, region_buf, ndims);
+ dump_reference(rawoutstream, info, &ctx, dset, f_type, region_buf, ndims);
HDfree(region_buf);
}
}
@@ -1662,7 +1690,7 @@ dump_attribute_values(hid_t attr)
H5TOOLS_GOTO_DONE_NO_RET();
}
ctx.indent_level++;
- dump_reference(rawoutstream, info, &ctx, attr, region_buf, ndims);
+ dump_reference(rawoutstream, info, &ctx, attr, f_type, region_buf, ndims);
ctx.indent_level--;
HDfree(region_buf);
}