summaryrefslogtreecommitdiffstats
path: root/tools/lib
diff options
context:
space:
mode:
authorkmu <kmu@hdfgroup.org>2020-01-14 17:28:27 (GMT)
committerkmu <kmu@hdfgroup.org>2020-01-14 17:28:27 (GMT)
commitd46ea2d08af456f1cfaf6c6fd3060f39b92be8de (patch)
tree3b7ce8804ae917fd71e995a39b4ccb08d2aa7169 /tools/lib
parent156baee37112996291f9ff07760be047d0e03c76 (diff)
parent71b817038d8cd82163cf71119873b2ba65a2c81b (diff)
downloadhdf5-d46ea2d08af456f1cfaf6c6fd3060f39b92be8de.zip
hdf5-d46ea2d08af456f1cfaf6c6fd3060f39b92be8de.tar.gz
hdf5-d46ea2d08af456f1cfaf6c6fd3060f39b92be8de.tar.bz2
merge and fix conflicts
Diffstat (limited to 'tools/lib')
-rw-r--r--tools/lib/CMakeLists.txt4
-rw-r--r--tools/lib/h5diff.c275
-rw-r--r--tools/lib/h5diff.h56
-rw-r--r--tools/lib/h5diff_array.c494
-rw-r--r--tools/lib/h5diff_attr.c524
-rw-r--r--tools/lib/h5diff_dset.c205
-rw-r--r--tools/lib/h5diff_util.c7
-rw-r--r--tools/lib/h5tools.c306
-rw-r--r--tools/lib/h5tools.h67
-rw-r--r--tools/lib/h5tools_dump.c1799
-rw-r--r--tools/lib/h5tools_dump.h37
-rw-r--r--tools/lib/h5tools_error.h250
-rw-r--r--tools/lib/h5tools_filters.c27
-rw-r--r--tools/lib/h5tools_str.c269
-rw-r--r--tools/lib/h5tools_str.h9
-rw-r--r--tools/lib/h5tools_utils.c34
-rw-r--r--tools/lib/h5tools_utils.h74
-rw-r--r--tools/lib/h5trav.c68
-rw-r--r--tools/lib/io_timer.c85
19 files changed, 2786 insertions, 1804 deletions
diff --git a/tools/lib/CMakeLists.txt b/tools/lib/CMakeLists.txt
index 75ed627..2acfab0 100644
--- a/tools/lib/CMakeLists.txt
+++ b/tools/lib/CMakeLists.txt
@@ -38,7 +38,8 @@ if (NOT ONLY_SHARED_LIBS)
PRIVATE "${HDF5_TOOLS_LIB_SOURCE_DIR};${HDF5_SRC_DIR};${HDF5_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>"
INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
)
- #target_compile_definitions(${HDF5_TOOLS_LIB_TARGET} PRIVATE H5DIFF_DEBUG>)
+ #target_compile_definitions(${HDF5_TOOLS_LIB_TARGET} PRIVATE H5_TOOLS_DEBUG)
+ #target_compile_definitions(${HDF5_TOOLS_LIB_TARGET} PRIVATE H5DIFF_DEBUG)
TARGET_C_PROPERTIES (${HDF5_TOOLS_LIB_TARGET} STATIC)
target_link_libraries (${HDF5_TOOLS_LIB_TARGET}
PUBLIC ${HDF5_LIB_TARGET}
@@ -58,6 +59,7 @@ if (BUILD_SHARED_LIBS)
)
target_compile_definitions(${HDF5_TOOLS_LIBSH_TARGET}
PUBLIC "H5_BUILT_AS_DYNAMIC_LIB"
+ #PRIVATE H5_TOOLS_DEBUG
#PRIVATE H5DIFF_DEBUG
)
TARGET_C_PROPERTIES (${HDF5_TOOLS_LIBSH_TARGET} SHARED)
diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c
index 03d7941..92d2769 100644
--- a/tools/lib/h5diff.c
+++ b/tools/lib/h5diff.c
@@ -143,20 +143,19 @@ is_valid_options(diff_opt_t *opts)
* no -q(quiet) with -v (verbose) or -r (report) */
if(opts->m_quiet && (opts->m_verbose || opts->m_report)) {
parallel_print("Error: -q (quiet mode) cannot be added to verbose or report modes\n");
- opts->err_stat = 1;
- HGOTO_DONE(0);
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_GOTO_DONE(0);
}
/* -------------------------------------------------------
* only allow --no-dangling-links along with --follow-symlinks */
if(opts->no_dangle_links && !opts->follow_links) {
parallel_print("Error: --no-dangling-links must be used along with --follow-symlinks option.\n");
- opts->err_stat = 1;
- HGOTO_DONE(0);
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_GOTO_DONE(0);
}
done:
-
return ret_value;
}
@@ -178,7 +177,7 @@ is_exclude_path (char * path, h5trav_type_t type, diff_opt_t *opts)
/* check if exclude path option is given */
if (!opts->exclude_path)
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
/* assign to local exclude list pointer */
exclude_path_ptr = opts->exclude;
@@ -275,13 +274,14 @@ build_match_list (const char *objname1, trav_info_t *info1, const char *objname2
trav_table_t *table = NULL;
size_t idx;
- h5difftrace("build_match_list start\n");
+ H5TOOLS_DEBUG("build_match_list start - errstat:%d", opts->err_stat);
/* init */
trav_table_init(&table);
if (table == NULL) {
- H5TOOLS_INFO(H5E_tools_min_id_g, "Cannot create traverse table");
- goto done;
+ H5TOOLS_INFO("Cannot create traverse table");
+ H5TOOLS_GOTO_DONE_NO_RET();
}
+
/*
* This is necessary for the case that given objects are group and
* have different names (ex: obj1 is /grp1 and obj2 is /grp5).
@@ -371,7 +371,8 @@ build_match_list (const char *objname1, trav_info_t *info1, const char *objname2
done:
*table_out = table;
- h5difftrace("build_match_list finish\n");
+
+ H5TOOLS_ENDDEBUG("exit");
}
@@ -398,80 +399,80 @@ trav_grp_objs(const char *path, const H5O_info_t *oinfo,
static herr_t
trav_grp_symlinks(const char *path, const H5L_info_t *linfo, void *udata)
{
- herr_t ret_value = 0;
trav_info_t *tinfo = (trav_info_t *)udata;
diff_opt_t *opts = (diff_opt_t *)tinfo->opts;
h5tool_link_info_t lnk_info;
const char *ext_fname;
const char *ext_path;
+ herr_t ret_value = SUCCEED;
/* init linkinfo struct */
HDmemset(&lnk_info, 0, sizeof(h5tool_link_info_t));
if (!opts->follow_links) {
trav_info_visit_lnk(path, linfo, tinfo);
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(SUCCEED);
}
switch(linfo->type) {
case H5L_TYPE_SOFT:
if((ret_value = H5tools_get_symlink_info(tinfo->fid, path, &lnk_info, opts->follow_links)) < 0) {
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
}
else if (ret_value == 0) {
- /* no dangling link option given and detect dangling link */
- tinfo->symlink_visited.dangle_link = TRUE;
+ /* no dangling link option given and detect dangling link */
+ tinfo->symlink_visited.dangle_link = TRUE;
trav_info_visit_lnk(path, linfo, tinfo);
if (opts->no_dangle_links)
- opts->err_stat = 1; /* make dangling link is error */
- HGOTO_DONE(0);
+ opts->err_stat = H5DIFF_ERR; /* make dangling link is error */
+ H5TOOLS_GOTO_DONE(SUCCEED);
}
/* check if already visit the target object */
if(symlink_is_visited( &(tinfo->symlink_visited), linfo->type, NULL, lnk_info.trg_path))
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(SUCCEED);
/* add this link as visited link */
if(symlink_visit_add( &(tinfo->symlink_visited), linfo->type, NULL, lnk_info.trg_path) < 0)
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(SUCCEED);
if(h5trav_visit(tinfo->fid, path, TRUE, TRUE,
trav_grp_objs,trav_grp_symlinks, tinfo, H5O_INFO_BASIC) < 0) {
parallel_print("Error: Could not get file contents\n");
- opts->err_stat = 1;
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Error: Could not get file contents");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_GOTO_ERROR(FAIL, "Error: Could not get file contents");
}
break;
case H5L_TYPE_EXTERNAL:
if ((ret_value = H5tools_get_symlink_info(tinfo->fid, path, &lnk_info, opts->follow_links)) < 0) {
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
}
else if (ret_value == 0) {
/* no dangling link option given and detect dangling link */
tinfo->symlink_visited.dangle_link = TRUE;
trav_info_visit_lnk(path, linfo, tinfo);
if (opts->no_dangle_links)
- opts->err_stat = 1; /* make dangling link is error */
- HGOTO_DONE(0);
+ opts->err_stat = H5DIFF_ERR; /* make dangling link is error */
+ H5TOOLS_GOTO_DONE(SUCCEED);
}
if(H5Lunpack_elink_val(lnk_info.trg_path, linfo->u.val_size, NULL, &ext_fname, &ext_path) < 0)
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(SUCCEED);
/* check if already visit the target object */
if(symlink_is_visited( &(tinfo->symlink_visited), linfo->type, ext_fname, ext_path))
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(SUCCEED);
/* add this link as visited link */
if(symlink_visit_add( &(tinfo->symlink_visited), linfo->type, ext_fname, ext_path) < 0)
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(SUCCEED);
if(h5trav_visit(tinfo->fid, path, TRUE, TRUE,
trav_grp_objs,trav_grp_symlinks, tinfo, H5O_INFO_BASIC) < 0) {
parallel_print("Error: Could not get file contents\n");
- opts->err_stat = 1;
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Error: Could not get file contents\n");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_GOTO_ERROR(FAIL, "Error: Could not get file contents\n");
}
break;
@@ -480,14 +481,15 @@ trav_grp_symlinks(const char *path, const H5L_info_t *linfo, void *udata)
case H5L_TYPE_ERROR:
default:
parallel_print("Error: Invalid link type\n");
- opts->err_stat = 1;
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Error: Invalid link type");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_GOTO_ERROR(FAIL, "Error: Invalid link type");
break;
} /* end of switch */
done:
if (lnk_info.trg_path)
HDfree(lnk_info.trg_path);
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -508,7 +510,6 @@ h5diff(const char *fname1,
const char *objname2,
diff_opt_t *opts)
{
- int ret_value = 0;
hid_t file1_id = -1;
hid_t file2_id = -1;
char filenames[2][MAX_FILENAME];
@@ -539,8 +540,9 @@ h5diff(const char *fname1,
h5tool_link_info_t trg_linfo2;
/* list for common objects */
trav_table_t *match_list = NULL;
+ diff_err_t ret_value = H5DIFF_NO_ERR;
- h5difftrace("h5diff start\n");
+ H5TOOLS_DEBUG("h5diff start");
/* init filenames */
HDmemset(filenames, 0, MAX_FILENAME * 2);
/* init link info struct */
@@ -551,10 +553,10 @@ h5diff(const char *fname1,
* check invalid combination of options
*-----------------------------------------------------------------------*/
if(!is_valid_options(opts))
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
opts->cmn_objs = 1; /* eliminate warning */
- opts->err_stat = 0; /* initialize error status */
+ opts->err_stat = H5DIFF_NO_ERR; /* initialize error status */
/*-------------------------------------------------------------------------
* open the files first; if they are not valid, no point in continuing
@@ -563,15 +565,16 @@ h5diff(const char *fname1,
/* open file 1 */
if((file1_id = h5tools_fopen(fname1, H5F_ACC_RDONLY, H5P_DEFAULT, NULL, NULL, (size_t)0)) < 0) {
parallel_print("h5diff: <%s>: unable to open file\n", fname1);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "<%s>: unable to open file\n", fname1);
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "<%s>: unable to open file\n", fname1);
} /* end if */
-
+ H5TOOLS_DEBUG("file1_id = %s", fname1);
/* open file 2 */
if((file2_id = h5tools_fopen(fname2, H5F_ACC_RDONLY, H5P_DEFAULT, NULL, NULL, (size_t)0)) < 0) {
parallel_print("h5diff: <%s>: unable to open file\n", fname2);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "<%s>: unable to open file\n", fname2);
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "<%s>: unable to open file\n", fname2);
} /* end if */
+ H5TOOLS_DEBUG("file2_id = %s", fname2);
/*-------------------------------------------------------------------------
* Initialize the info structs
@@ -580,7 +583,7 @@ h5diff(const char *fname1,
trav_info_init(fname1, file1_id, &info1_obj);
trav_info_init(fname2, file2_id, &info2_obj);
- h5difftrace("trav_info_init initialized\n");
+ H5TOOLS_DEBUG("trav_info_init initialized");
/* if any object is specified */
if (objname1) {
/* make the given object1 fullpath, start with "/" */
@@ -588,11 +591,11 @@ h5diff(const char *fname1,
#ifdef H5_HAVE_ASPRINTF
/* Use the asprintf() routine, since it does what we're trying to do below */
if(HDasprintf(&obj1fullname, "/%s", objname1) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "name buffer allocation failed");
#else /* H5_HAVE_ASPRINTF */
/* (malloc 2 more for "/" and end-of-line) */
if ((obj1fullname = (char*)HDmalloc(HDstrlen(objname1) + 2)) == NULL)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "name buffer allocation failed");
HDstrcpy(obj1fullname, "/");
HDstrcat(obj1fullname, objname1);
@@ -606,11 +609,11 @@ h5diff(const char *fname1,
#ifdef H5_HAVE_ASPRINTF
/* Use the asprintf() routine, since it does what we're trying to do below */
if(HDasprintf(&obj2fullname, "/%s", objname2) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "name buffer allocation failed");
#else /* H5_HAVE_ASPRINTF */
/* (malloc 2 more for "/" and end-of-line) */
if ((obj2fullname = (char*)HDmalloc(HDstrlen(objname2) + 2)) == NULL)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "name buffer allocation failed");
HDstrcpy(obj2fullname, "/");
HDstrcat(obj2fullname, objname2);
#endif /* H5_HAVE_ASPRINTF */
@@ -621,7 +624,7 @@ h5diff(const char *fname1,
/*----------------------------------------------------------
* check if obj1 is root, group, single object or symlink
*/
- h5difftrace("h5diff check if obj1 is root, group, single object or symlink\n");
+ H5TOOLS_DEBUG("h5diff check if obj1=%s is root, group, single object or symlink", obj1fullname);
if(!HDstrcmp(obj1fullname, "/")) {
obj1type = H5TRAV_TYPE_GROUP;
}
@@ -629,12 +632,12 @@ h5diff(const char *fname1,
/* check if link itself exist */
if(H5Lexists(file1_id, obj1fullname, H5P_DEFAULT) <= 0) {
parallel_print ("Object <%s> could not be found in <%s>\n", obj1fullname, fname1);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Error: Object could not be found");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Error: Object could not be found");
}
/* get info from link */
if(H5Lget_info(file1_id, obj1fullname, &src_linfo1, H5P_DEFAULT) < 0) {
parallel_print("Unable to get link info from <%s>\n", obj1fullname);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Lget_info failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Lget_info failed");
}
info1_lp = info1_obj;
@@ -650,7 +653,7 @@ h5diff(const char *fname1,
if(H5Oget_info_by_name2(file1_id, obj1fullname, &oinfo1, H5O_INFO_BASIC, H5P_DEFAULT) < 0) {
parallel_print("Error: Could not get file contents\n");
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Error: Could not get file contents");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Error: Could not get file contents");
}
obj1type = (h5trav_type_t)oinfo1.type;
trav_info_add(info1_obj, obj1fullname, obj1type);
@@ -671,7 +674,7 @@ h5diff(const char *fname1,
/*----------------------------------------------------------
* check if obj2 is root, group, single object or symlink
*/
- h5difftrace("h5diff check if obj2 is root, group, single object or symlink\n");
+ H5TOOLS_DEBUG("h5diff check if obj2=%s is root, group, single object or symlink", obj2fullname);
if(!HDstrcmp(obj2fullname, "/")) {
obj2type = H5TRAV_TYPE_GROUP;
}
@@ -679,12 +682,12 @@ h5diff(const char *fname1,
/* check if link itself exist */
if(H5Lexists(file2_id, obj2fullname, H5P_DEFAULT) <= 0) {
parallel_print ("Object <%s> could not be found in <%s>\n", obj2fullname, fname2);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Error: Object could not be found");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Error: Object could not be found");
}
/* get info from link */
if(H5Lget_info(file2_id, obj2fullname, &src_linfo2, H5P_DEFAULT) < 0) {
parallel_print("Unable to get link info from <%s>\n", obj2fullname);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Lget_info failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Lget_info failed");
}
info2_lp = info2_obj;
@@ -700,7 +703,7 @@ h5diff(const char *fname1,
if(H5Oget_info_by_name2(file2_id, obj2fullname, &oinfo2, H5O_INFO_BASIC, H5P_DEFAULT) < 0) {
parallel_print("Error: Could not get file contents\n");
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Error: Could not get file contents");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Error: Could not get file contents");
}
obj2type = (h5trav_type_t)oinfo2.type;
trav_info_add(info2_obj, obj2fullname, obj2type);
@@ -720,7 +723,7 @@ h5diff(const char *fname1,
}
/* if no object specified */
else {
- h5difftrace("h5diff no object specified\n");
+ H5TOOLS_DEBUG("h5diff no object specified");
/* set root group */
obj1fullname = (char*)HDstrdup("/");
obj1type = H5TRAV_TYPE_GROUP;
@@ -728,7 +731,7 @@ h5diff(const char *fname1,
obj2type = H5TRAV_TYPE_GROUP;
}
- h5diffdebug2("get any symbolic links info - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("get any symbolic links info - errstat:%d", opts->err_stat);
/* get any symbolic links info */
l_ret1 = H5tools_get_symlink_info(file1_id, obj1fullname, &trg_linfo1, opts->follow_links);
l_ret2 = H5tools_get_symlink_info(file2_id, obj2fullname, &trg_linfo2, opts->follow_links);
@@ -744,15 +747,15 @@ h5diff(const char *fname1,
/*-------------------------------
* check symbolic link (object1)
*/
- h5difftrace("h5diff check symbolic link (object1)\n");
+ H5TOOLS_DEBUG("h5diff check symbolic link (object1)");
/* dangling link */
if (l_ret1 == 0) {
- h5difftrace("h5diff ... dangling link\n");
+ H5TOOLS_DEBUG("h5diff ... dangling link");
if (opts->no_dangle_links) {
/* treat dangling link as error */
if(opts->m_verbose)
parallel_print("Warning: <%s> is a dangling link.\n", obj1fullname);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "treat dangling link as error");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "treat dangling link as error");
}
else {
if(opts->m_verbose)
@@ -760,40 +763,40 @@ h5diff(const char *fname1,
if (l_ret1 != 0 || l_ret2 != 0) {
nfound++;
print_found(nfound);
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(H5DIFF_NO_ERR);
}
}
}
else if(l_ret1 < 0) { /* fail */
parallel_print ("Object <%s> could not be found in <%s>\n", obj1fullname, fname1);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Object could not be found");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Object could not be found");
}
else if(l_ret1 != 2) { /* symbolic link */
obj1type = (h5trav_type_t)trg_linfo1.trg_type;
- h5difftrace("h5diff ... ... trg_linfo1.trg_type == H5L_TYPE_HARD\n");
+ H5TOOLS_DEBUG("h5diff ... ... trg_linfo1.trg_type == H5L_TYPE_HARD");
if (info1_lp != NULL) {
size_t idx = info1_lp->nused - 1;
- h5difftrace("h5diff ... ... ... info1_obj not null\n");
+ H5TOOLS_DEBUG("h5diff ... ... ... info1_obj not null");
info1_lp->paths[idx].type = (h5trav_type_t)trg_linfo1.trg_type;
info1_lp->paths[idx].objno = trg_linfo1.objno;
info1_lp->paths[idx].fileno = trg_linfo1.fileno;
}
- h5difftrace("h5diff check symbolic link (object1) finished\n");
+ H5TOOLS_DEBUG("h5diff check symbolic link (object1) finished");
}
/*-------------------------------
* check symbolic link (object2)
*/
- h5difftrace("h5diff check symbolic link (object2)\n");
+ H5TOOLS_DEBUG("h5diff check symbolic link (object2)");
/* dangling link */
if (l_ret2 == 0) {
- h5difftrace("h5diff ... dangling link\n");
+ H5TOOLS_DEBUG("h5diff ... dangling link");
if (opts->no_dangle_links) {
/* treat dangling link as error */
if(opts->m_verbose)
parallel_print("Warning: <%s> is a dangling link.\n", obj2fullname);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "treat dangling link as error");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "treat dangling link as error");
}
else {
if(opts->m_verbose)
@@ -801,25 +804,25 @@ h5diff(const char *fname1,
if (l_ret1 != 0 || l_ret2 != 0) {
nfound++;
print_found(nfound);
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(H5DIFF_NO_ERR);
}
}
}
else if(l_ret2 < 0) { /* fail */
parallel_print ("Object <%s> could not be found in <%s>\n", obj2fullname, fname2);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Object could not be found");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Object could not be found");
}
else if(l_ret2 != 2) { /* symbolic link */
obj2type = (h5trav_type_t)trg_linfo2.trg_type;
if (info2_lp != NULL) {
size_t idx = info2_lp->nused - 1;
- h5difftrace("h5diff ... ... ... info2_obj not null\n");
+ H5TOOLS_DEBUG("h5diff ... ... ... info2_obj not null");
info2_lp->paths[idx].type = (h5trav_type_t)trg_linfo2.trg_type;
info2_lp->paths[idx].objno = trg_linfo2.objno;
info2_lp->paths[idx].fileno = trg_linfo2.fileno;
}
- h5difftrace("h5diff check symbolic link (object1) finished\n");
+ H5TOOLS_DEBUG("h5diff check symbolic link (object1) finished");
}
} /* end of if follow symlinks */
@@ -831,16 +834,16 @@ h5diff(const char *fname1,
*/
if(!(opts->m_verbose || opts->m_report)) {
- h5difftrace("h5diff NOT (opts->m_verbose || opts->m_report)\n");
+ H5TOOLS_DEBUG("h5diff NOT (opts->m_verbose || opts->m_report)");
/* if no danglink links */
if (l_ret1 > 0 && l_ret2 > 0)
if (h5tools_is_obj_same(file1_id, obj1fullname, file2_id, obj2fullname) != 0)
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(H5DIFF_NO_ERR);
}
both_objs_grp = (obj1type == H5TRAV_TYPE_GROUP && obj2type == H5TRAV_TYPE_GROUP);
if (both_objs_grp) {
- h5difftrace("h5diff both_objs_grp TRUE\n");
+ H5TOOLS_DEBUG("h5diff both_objs_grp TRUE");
/*
* traverse group1
*/
@@ -851,7 +854,7 @@ h5diff(const char *fname1,
if(h5trav_visit(file1_id, obj1fullname, TRUE, TRUE,
trav_grp_objs, trav_grp_symlinks, info1_grp, H5O_INFO_BASIC) < 0) {
parallel_print("Error: Could not get file contents\n");
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Could not get file contents");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Could not get file contents");
}
info1_lp = info1_grp;
@@ -865,11 +868,11 @@ h5diff(const char *fname1,
if(h5trav_visit(file2_id, obj2fullname, TRUE, TRUE,
trav_grp_objs, trav_grp_symlinks, info2_grp, H5O_INFO_BASIC) < 0) {
parallel_print("Error: Could not get file contents\n");
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Could not get file contents");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Could not get file contents");
} /* end if */
info2_lp = info2_grp;
}
- h5diffdebug2("groups traversed - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("groups traversed - errstat:%d", opts->err_stat);
#ifdef H5_HAVE_PARALLEL
if(g_Parallel) {
@@ -889,8 +892,10 @@ h5diff(const char *fname1,
} /* end if */
#endif
+ H5TOOLS_DEBUG("build_match_list next - errstat:%d", opts->err_stat);
/* process the objects */
build_match_list (obj1fullname, info1_lp, obj2fullname, info2_lp, &match_list, opts);
+ H5TOOLS_DEBUG("build_match_list finished - errstat:%d", opts->err_stat);
if (both_objs_grp) {
/*------------------------------------------------------
* print the list
@@ -906,7 +911,7 @@ h5diff(const char *fname1,
parallel_print("file1 file2\n");
parallel_print("---------------------------------------\n");
for(u = 0; u < match_list->nobjs; u++) {
- char c1, c2;
+ int c1, c2;
c1 = (match_list->objs[u].flags[0]) ? 'x' : ' ';
c2 = (match_list->objs[u].flags[1]) ? 'x' : ' ';
parallel_print("%5c %6c %-15s\n", c1, c2, match_list->objs[u].name);
@@ -914,6 +919,7 @@ h5diff(const char *fname1,
parallel_print ("\n");
} /* end if */
}
+ H5TOOLS_DEBUG("diff_match next - errstat:%d", opts->err_stat);
nfound = diff_match(file1_id, obj1fullname, info1_lp,
file2_id, obj2fullname, info2_lp,
match_list, opts);
@@ -956,8 +962,9 @@ done:
H5Fclose(file2_id);
} H5E_END_TRY;
- h5difftrace("h5diff finish\n");
+ H5TOOLS_DEBUG("h5diff finish - errstat:%d", opts->err_stat);
+ H5TOOLS_ENDDEBUG("exit");
return nfound;
}
@@ -986,7 +993,6 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
{
hsize_t nfound = 0;
unsigned i;
- int ret_value = opts->err_stat;
const char *grp1_path = "";
const char *grp2_path = "";
char *obj1_fullpath = NULL;
@@ -994,8 +1000,9 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
diff_args_t argdata;
size_t idx1 = 0;
size_t idx2 = 0;
+ diff_err_t ret_value = opts->err_stat;
- h5difftrace("diff_match start\n");
+ H5TOOLS_DEBUG("diff_match start - errstat:%d", opts->err_stat);
/*
* if not root, prepare object name to be pre-appended to group path to
* make full path
@@ -1048,41 +1055,41 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
#endif
for(i = 0; i < table->nobjs; i++) {
- h5diffdebug3("diff for common objects[%d] - errstat:%d\n", i, opts->err_stat);
+ H5TOOLS_DEBUG("diff for common objects[%d] - errstat:%d", i, opts->err_stat);
if(table->objs[i].flags[0] && table->objs[i].flags[1]) {
/* make full path for obj1 */
#ifdef H5_HAVE_ASPRINTF
/* Use the asprintf() routine, since it does what we're trying to do below */
if(HDasprintf(&obj1_fullpath, "%s%s", grp1_path, table->objs[i].name) < 0) {
- HERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_ERROR(H5DIFF_ERR, "name buffer allocation failed");
}
#else /* H5_HAVE_ASPRINTF */
if((obj1_fullpath = (char*)HDmalloc(HDstrlen(grp1_path) + HDstrlen(table->objs[i].name) + 1)) == NULL) {
- HERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_ERROR(H5DIFF_ERR, "name buffer allocation failed");
}
else {
HDstrcpy(obj1_fullpath, grp1_path);
HDstrcat(obj1_fullpath, table->objs[i].name);
}
#endif /* H5_HAVE_ASPRINTF */
- h5diffdebug2("diff_match path1 - %s\n", obj1_fullpath);
+ H5TOOLS_DEBUG("diff_match path1 - %s", obj1_fullpath);
/* make full path for obj2 */
#ifdef H5_HAVE_ASPRINTF
/* Use the asprintf() routine, since it does what we're trying to do below */
if(HDasprintf(&obj2_fullpath, "%s%s", grp2_path, table->objs[i].name) < 0) {
- HERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_ERROR(H5DIFF_ERR, "name buffer allocation failed");
}
#else /* H5_HAVE_ASPRINTF */
if((obj2_fullpath = (char*)HDmalloc(HDstrlen(grp2_path) + HDstrlen(table->objs[i].name) + 1)) == NULL) {
- HERROR(1, H5E_tools_min_id_g, "name buffer allocation failed");
+ H5TOOLS_ERROR(H5DIFF_ERR, "name buffer allocation failed");
}
else {
HDstrcpy(obj2_fullpath, grp2_path);
HDstrcat(obj2_fullpath, table->objs[i].name);
}
#endif /* H5_HAVE_ASPRINTF */
- h5diffdebug2("diff_match path2 - %s\n", obj2_fullpath);
+ H5TOOLS_DEBUG("diff_match path2 - %s", obj2_fullpath);
/* get index to figure out type of the object in file1 */
while(info1->paths[idx1].path && (HDstrcmp(obj1_fullpath, info1->paths[idx1].path) != 0))
@@ -1098,6 +1105,7 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
opts->cmn_objs = 1;
if(!g_Parallel) {
+ H5TOOLS_DEBUG("diff paths - errstat:%d", opts->err_stat);
nfound += diff(file1_id, obj1_fullpath,
file2_id, obj2_fullpath,
opts, &argdata);
@@ -1106,7 +1114,7 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
else {
int workerFound = 0;
- h5difftrace("Beginning of big else block\n");
+ H5TOOLS_DEBUG("Beginning of big else block");
/* We're in parallel mode */
/* Since the data type of diff value is hsize_t which can
* be arbitary large such that there is no MPI type that
@@ -1260,7 +1268,7 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
HDfree(obj2_fullpath);
} /* end if */
} /* end for */
- h5diffdebug2("done with for loop - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("done with for loop - errstat:%d", opts->err_stat);
#ifdef H5_HAVE_PARALLEL
if(g_Parallel) {
@@ -1337,7 +1345,7 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
/* Print any final data waiting in our queue */
print_incoming_data();
} /* end if */
- h5difftrace("done with if block\n");
+ H5TOOLS_DEBUG("done with if block");
HDfree(workerTasks);
}
@@ -1345,11 +1353,13 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
opts->err_stat = opts->err_stat | ret_value;
-/* free table */
+ /* free table */
if (table)
trav_table_free(table);
- h5diffdebug2("diff_match finish:%d\n", nfound);
+ H5TOOLS_DEBUG("diff_match finish diffs=%d - errstat:%d", nfound, opts->err_stat);
+
+ H5TOOLS_ENDDEBUG("exit");
return nfound;
}
@@ -1375,25 +1385,25 @@ diff(hid_t file1_id,
diff_opt_t * opts,
diff_args_t *argdata)
{
- int ret_value = opts->err_stat;
int status = -1;
- hid_t dset1_id = -1;
- hid_t dset2_id = -1;
- hid_t type1_id = -1;
- hid_t type2_id = -1;
- hid_t grp1_id = -1;
- hid_t grp2_id = -1;
+ hid_t dset1_id = H5I_INVALID_HID;
+ hid_t dset2_id = H5I_INVALID_HID;
+ hid_t type1_id = H5I_INVALID_HID;
+ hid_t type2_id = H5I_INVALID_HID;
+ hid_t grp1_id = H5I_INVALID_HID;
+ hid_t grp2_id = H5I_INVALID_HID;
hbool_t is_dangle_link1 = FALSE;
hbool_t is_dangle_link2 = FALSE;
hbool_t is_hard_link = FALSE;
hsize_t nfound = 0;
h5trav_type_t object_type;
+ diff_err_t ret_value = opts->err_stat;
/* to get link info */
h5tool_link_info_t linkinfo1;
h5tool_link_info_t linkinfo2;
- h5difftrace("diff start\n");
+ H5TOOLS_DEBUG("diff start - errstat:%d", opts->err_stat);
/*init link info struct */
HDmemset(&linkinfo1, 0, sizeof(h5tool_link_info_t));
@@ -1413,9 +1423,10 @@ diff(hid_t file1_id,
* check dangling links for path1 and path2
*/
+ H5TOOLS_DEBUG("diff links");
/* target object1 - get type and name */
if ((status = H5tools_get_symlink_info(file1_id, path1, &linkinfo1, opts->follow_links)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5tools_get_symlink_info failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5tools_get_symlink_info failed");
/* dangling link */
if (status == 0) {
@@ -1423,7 +1434,7 @@ diff(hid_t file1_id,
/* dangling link is error */
if(opts->m_verbose)
parallel_print("Warning: <%s> is a dangling link.\n", path1);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "dangling link is error");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "dangling link is error");
}
else
is_dangle_link1 = TRUE;
@@ -1431,14 +1442,14 @@ diff(hid_t file1_id,
/* target object2 - get type and name */
if ((status = H5tools_get_symlink_info(file2_id, path2, &linkinfo2, opts->follow_links)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5tools_get_symlink_info failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5tools_get_symlink_info failed");
/* dangling link */
if (status == 0) {
if (opts->no_dangle_links) {
/* dangling link is error */
if(opts->m_verbose)
parallel_print("Warning: <%s> is a dangling link.\n", path2);
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "dangling link is error");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "dangling link is error");
}
else
is_dangle_link2 = TRUE;
@@ -1446,7 +1457,7 @@ diff(hid_t file1_id,
/* found dangling link */
if (is_dangle_link1 || is_dangle_link2) {
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(H5DIFF_NO_ERR);
}
/* follow symbolic link option */
@@ -1461,6 +1472,7 @@ diff(hid_t file1_id,
}
/* if objects are not the same type */
if (argdata->type[0] != argdata->type[1]) {
+ H5TOOLS_DEBUG("diff objects are not the same");
if (opts->m_verbose||opts->m_list_not_cmp) {
parallel_print("Not comparable: <%s> is of type %s and <%s> is of type %s\n",
path1, get_type(argdata->type[0]),
@@ -1470,7 +1482,7 @@ diff(hid_t file1_id,
/* TODO: will need to update non-comparable is different
* opts->contents = 0;
*/
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(H5DIFF_NO_ERR);
}
else /* now both object types are same */
object_type = argdata->type[0];
@@ -1484,7 +1496,7 @@ diff(hid_t file1_id,
* Perform this to match the outputs as bypassing.
*/
if (argdata->is_same_trgobj) {
- h5difftrace("argdata->is_same_trgobj\n");
+ H5TOOLS_DEBUG("argdata->is_same_trgobj");
is_hard_link = (object_type == H5TRAV_TYPE_DATASET ||
object_type == H5TRAV_TYPE_NAMED_DATATYPE ||
object_type == H5TRAV_TYPE_GROUP);
@@ -1522,7 +1534,7 @@ diff(hid_t file1_id,
} /* if(opts->m_verbose || opts->m_report) */
/* exact same, so comparison is done */
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(H5DIFF_NO_ERR);
}
}
@@ -1532,13 +1544,15 @@ diff(hid_t file1_id,
*----------------------------------------------------------------------
*/
case H5TRAV_TYPE_DATASET:
+ H5TOOLS_DEBUG("diff object type H5TRAV_TYPE_DATASET - errstat:%d", opts->err_stat);
if((dset1_id = H5Dopen2(file1_id, path1, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dopen2 failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dopen2 failed");
if((dset2_id = H5Dopen2(file2_id, path2, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dopen2 failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dopen2 failed");
/* verbose (-v) and report (-r) mode */
if(opts->m_verbose || opts->m_report) {
do_print_objname("dataset", path1, path2, opts);
+ H5TOOLS_DEBUG("call diff_dataset 1:%s 2:%s ", path1, path2);
nfound = diff_dataset(file1_id, file2_id, path1, path2, opts);
print_found(nfound);
}
@@ -1555,7 +1569,7 @@ diff(hid_t file1_id,
print_found(nfound);
}
}
- h5diffdebug2("diff after dataset:%d\n", nfound);
+ H5TOOLS_DEBUG("diff after dataset:%d - errstat:%d", nfound, opts->err_stat);
/*---------------------------------------------------------
* compare attributes
@@ -1563,14 +1577,15 @@ diff(hid_t file1_id,
* referenced object
*---------------------------------------------------------
*/
- if(path1)
+ if(path1) {
+ H5TOOLS_DEBUG( "call diff_attr 1:%s 2:%s ", path1, path2);
nfound += diff_attr(dset1_id, dset2_id, path1, path2, opts);
-
+ }
if(H5Dclose(dset1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dclose failed");
if(H5Dclose(dset2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dclose failed");
break;
/*----------------------------------------------------------------------
@@ -1578,13 +1593,14 @@ diff(hid_t file1_id,
*----------------------------------------------------------------------
*/
case H5TRAV_TYPE_NAMED_DATATYPE:
+ H5TOOLS_DEBUG("H5TRAV_TYPE_NAMED_DATATYPE 1:%s 2:%s ", path1, path2);
if((type1_id = H5Topen2(file1_id, path1, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Topen2 failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Topen2 failed");
if((type2_id = H5Topen2(file2_id, path2, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Topen2 failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Topen2 failed");
if((status = H5Tequal(type1_id, type2_id)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tequal failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tequal failed");
/* if H5Tequal is > 0 then the datatypes refer to the same datatype */
nfound = (status > 0) ? 0 : 1;
@@ -1602,13 +1618,15 @@ diff(hid_t file1_id,
* referenced object
*-----------------------------------------------------------------
*/
- if(path1)
+ if(path1) {
+ H5TOOLS_DEBUG("call diff_attr 1:%s 2:%s ", path1, path2);
nfound += diff_attr(type1_id, type2_id, path1, path2, opts);
+ }
if(H5Tclose(type1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tclose failed");
if(H5Tclose(type2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tclose failed");
break;
/*----------------------------------------------------------------------
@@ -1616,6 +1634,7 @@ diff(hid_t file1_id,
*----------------------------------------------------------------------
*/
case H5TRAV_TYPE_GROUP:
+ H5TOOLS_DEBUG("H5TRAV_TYPE_GROUP 1:%s 2:%s ", path1, path2);
if(print_objname(opts, nfound))
do_print_objname("group", path1, path2, opts);
@@ -1624,9 +1643,9 @@ diff(hid_t file1_id,
print_found(nfound);
if((grp1_id = H5Gopen2(file1_id, path1, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Gclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Gclose failed");
if((grp2_id = H5Gopen2(file2_id, path2, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Gclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Gclose failed");
/*-----------------------------------------------------------------
* compare attributes
@@ -1634,13 +1653,15 @@ diff(hid_t file1_id,
* referenced object
*-----------------------------------------------------------------
*/
- if(path1)
+ if(path1) {
+ H5TOOLS_DEBUG("call diff_attr 1:%s 2:%s ", path1, path2);
nfound += diff_attr(grp1_id, grp2_id, path1, path2, opts);
+ }
if(H5Gclose(grp1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Gclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Gclose failed");
if(H5Gclose(grp2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Gclose failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Gclose failed");
break;
@@ -1650,6 +1671,7 @@ diff(hid_t file1_id,
*/
case H5TRAV_TYPE_LINK:
{
+ H5TOOLS_DEBUG("H5TRAV_TYPE_LINK 1:%s 2:%s ", path1, path2);
status = HDstrcmp(linkinfo1.trg_path, linkinfo2.trg_path);
/* if the target link name is not same then the links are "different" */
@@ -1661,7 +1683,6 @@ diff(hid_t file1_id,
/* always print the number of differences found in verbose mode */
if(opts->m_verbose)
print_found(nfound);
-
}
break;
@@ -1671,6 +1692,7 @@ diff(hid_t file1_id,
*/
case H5TRAV_TYPE_UDLINK:
{
+ H5TOOLS_DEBUG("H5TRAV_TYPE_UDLINK 1:%s 2:%s ", path1, path2);
/* Only external links will have a query function registered */
if(linkinfo1.linfo.type == H5L_TYPE_EXTERNAL && linkinfo2.linfo.type == H5L_TYPE_EXTERNAL) {
/* If the buffers are the same size, compare them */
@@ -1771,8 +1793,9 @@ done:
/* enable error reporting */
} H5E_END_TRY;
- h5diffdebug3("diff finish:%d - errstat:%d\n", nfound, opts->err_stat);
+ H5TOOLS_DEBUG("diff finish:%d - errstat:%d", nfound, opts->err_stat);
+ H5TOOLS_ENDDEBUG("exit");
return nfound;
}
diff --git a/tools/lib/h5diff.h b/tools/lib/h5diff.h
index 26bcd95..b04ec23 100644
--- a/tools/lib/h5diff.h
+++ b/tools/lib/h5diff.h
@@ -57,28 +57,35 @@ struct exclude_path_list {
struct exclude_path_list * next;
};
+/* Enumeration value for keeping track of whether an error occurred or differences were found */
+typedef enum {
+ H5DIFF_NO_ERR, /* No error occurred */
+ H5DIFF_ERR_DIFF, /* Differences were found */
+ H5DIFF_ERR /* An error occurred */
+} diff_err_t;
+
typedef struct {
- int m_quiet; /* quiet mide: no output at all */
- int m_report; /* report mode: print the data */
- int m_verbose; /* verbose mode: print the data, list of objcets, warnings */
- int m_verbose_level; /* control verbose details */
- int d; /* delta, absolute value to compare */
- double delta; /* delta value */
- int p; /* relative error to compare*/
- int use_system_epsilon; /* flag to use system epsilon (1 or 0) */
- double percent; /* relative error value */
- int n; /* count, compare up to count */
- hsize_t count; /* count value */
- hbool_t follow_links; /* follow symbolic links */
- int no_dangle_links; /* return error when find dangling link */
- int err_stat; /* an error ocurred (1, error, 0, no error) */
- int cmn_objs; /* do we have common objects */
- int not_cmp; /* are the objects comparable */
- int contents; /* equal contents */
- int do_nans; /* consider Nans while diffing floats */
- int m_list_not_cmp; /* list not comparable messages */
- int exclude_path; /* exclude path to an object */
- struct exclude_path_list * exclude; /* keep exclude path list */
+ int m_quiet; /* quiet mode: no output at all */
+ int m_report; /* report mode: print the data */
+ int m_verbose; /* verbose mode: print the data, list of objcets, warnings */
+ int m_verbose_level; /* control verbose details */
+ int d; /* delta, absolute value to compare */
+ double delta; /* delta value */
+ int p; /* relative error to compare*/
+ int use_system_epsilon; /* flag to use system epsilon (1 or 0) */
+ double percent; /* relative error value */
+ int n; /* count, compare up to count */
+ hsize_t count; /* count value */
+ hbool_t follow_links; /* follow symbolic links */
+ int no_dangle_links; /* return error when find dangling link */
+ diff_err_t err_stat; /* an error ocurred (2, error, 1, differences, 0, no error) */
+ int cmn_objs; /* do we have common objects */
+ int not_cmp; /* are the objects comparable */
+ int contents; /* equal contents */
+ int do_nans; /* consider Nans while diffing floats */
+ int m_list_not_cmp; /* list not comparable messages */
+ int exclude_path; /* exclude path to an object */
+ struct exclude_path_list * exclude; /* keep exclude path list */
} diff_opt_t;
@@ -165,6 +172,13 @@ int diff_can_type( hid_t f_type1, /* file data type */
diff_opt_t *opts,
int is_compound);
+hsize_t diff_attr_data(hid_t attr1_id,
+ hid_t attr2_id,
+ const char *attr1_name,
+ const char *attr2_name,
+ const char *path1,
+ const char *path2,
+ diff_opt_t *opts);
hsize_t diff_attr(hid_t loc1_id,
hid_t loc2_id,
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c
index 2a45913..98b9db3 100644
--- a/tools/lib/h5diff_array.c
+++ b/tools/lib/h5diff_array.c
@@ -17,6 +17,8 @@
#include "h5diff.h"
#include "ph5diff.h"
+#define ATTR_NAME_MAX 255
+
/*-------------------------------------------------------------------------
* printf formatting
*-------------------------------------------------------------------------
@@ -285,7 +287,7 @@ hsize_t diff_array(
mcomp_t members;
H5T_class_t type_class;
- h5diffdebug2("diff_array start - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("diff_array start - errstat:%d", opts->err_stat);
/* get the size. */
size = H5Tget_size(m_type);
type_class = H5Tget_class(m_type);
@@ -310,6 +312,7 @@ hsize_t diff_array(
pos[j] = 0;
}
+ H5TOOLS_DEBUG("diff_array type_class:%d", type_class);
switch (type_class) {
case H5T_NO_CLASS:
case H5T_TIME:
@@ -370,6 +373,7 @@ hsize_t diff_array(
case H5T_REFERENCE:
HDmemset(&members, 0, sizeof(mcomp_t));
get_member_types(m_type, &members);
+ H5TOOLS_DEBUG("call diff_datum nelmts:%d - errstat:%d", nelmts, opts->err_stat);
for (i = 0; i < nelmts; i++) {
nfound += diff_datum(mem1 + i * size, mem2 + i * size, m_type, i, rank, dims, acc, pos, opts,
name1, name2, container1_id, container2_id, &ph, &members);
@@ -378,8 +382,9 @@ hsize_t diff_array(
} /* i */
close_member_types(&members);
} /* switch */
- h5diffdebug3("diff_array finish:%d - errstat:%d\n", nfound, opts->err_stat);
+ H5TOOLS_DEBUG("diff_array finish:%d - errstat:%d", nfound, opts->err_stat);
+ H5TOOLS_ENDDEBUG("exit: %d", nfound);
return nfound;
}
@@ -447,11 +452,11 @@ static hsize_t diff_datum(
hbool_t iszero1;
hbool_t iszero2;
hsize_t nfound = 0; /* differences found */
- hsize_t ret_value = opts->err_stat;
double per;
hbool_t both_zero;
+ diff_err_t ret_value = opts->err_stat;
- h5difftrace("diff_datum start\n");
+ H5TOOLS_DEBUG("diff_datum start - errstat:%d", opts->err_stat);
type_size = H5Tget_size(m_type);
type_class = H5Tget_class(m_type);
@@ -465,14 +470,14 @@ static hsize_t diff_datum(
type_class != H5T_STRING &&
type_class != H5T_VLEN &&
HDmemcmp(mem1, mem2, type_size) == 0)
- HGOTO_DONE(opts->err_stat);
+ H5TOOLS_GOTO_DONE(opts->err_stat);
switch (H5Tget_class(m_type)) {
case H5T_NO_CLASS:
case H5T_TIME:
case H5T_NCLASSES:
default:
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Invalid type class");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Invalid type class");
break;
/*-------------------------------------------------------------------------
@@ -480,7 +485,7 @@ static hsize_t diff_datum(
*-------------------------------------------------------------------------
*/
case H5T_COMPOUND:
- h5difftrace("diff_datum H5T_COMPOUND\n");
+ H5TOOLS_DEBUG("diff_datum H5T_COMPOUND");
{
hid_t memb_type = -1;
nmembs = members->n;
@@ -500,7 +505,7 @@ static hsize_t diff_datum(
*-------------------------------------------------------------------------
*/
case H5T_STRING:
- h5difftrace("diff_datum H5T_STRING\n");
+ H5TOOLS_DEBUG("diff_datum H5T_STRING");
{
char *s = NULL;
char *sx = NULL;
@@ -514,7 +519,7 @@ static hsize_t diff_datum(
/* if variable length string */
if (H5Tis_variable_str(m_type)) {
- h5difftrace("diff_datum H5T_STRING variable\n");
+ H5TOOLS_DEBUG("diff_datum H5T_STRING variable");
/* Get pointer to first string */
s1 = *(char **)((void *)mem1);
if (s1)
@@ -530,7 +535,7 @@ static hsize_t diff_datum(
size2 = 0;
}
else if (H5T_STR_NULLTERM == pad) {
- h5difftrace("diff_datum H5T_STRING null term\n");
+ H5TOOLS_DEBUG("diff_datum H5T_STRING null term");
/* Get pointer to first string */
s1 = (char*) mem1;
if (s1)
@@ -567,10 +572,10 @@ static hsize_t diff_datum(
* of length of strings.
* For now mimic the previous way.
*/
- h5diffdebug2("diff_datum string size:%d\n", size1);
- h5diffdebug2("diff_datum string size:%d\n", size2);
+ H5TOOLS_DEBUG("diff_datum string size:%d", size1);
+ H5TOOLS_DEBUG("diff_datum string size:%d", size2);
if (size1 != size2) {
- h5difftrace("diff_datum string sizes\n");
+ H5TOOLS_DEBUG("diff_datum string sizes difference");
nfound++;
}
if (size1 < size2) {
@@ -607,7 +612,7 @@ static hsize_t diff_datum(
*-------------------------------------------------------------------------
*/
case H5T_BITFIELD:
- h5difftrace("diff_datum H5T_BITFIELD\n");
+ H5TOOLS_DEBUG("diff_datum H5T_BITFIELD");
/* byte-by-byte comparison */
for (u = 0; u < type_size; u++)
nfound += character_compare_opt(mem1 + u, mem2 + u, index, rank, dims, acc, pos, opts, obj1, obj2, ph);
@@ -618,7 +623,7 @@ static hsize_t diff_datum(
*-------------------------------------------------------------------------
*/
case H5T_OPAQUE:
- h5difftrace("diff_datum H5T_OPAQUE\n");
+ H5TOOLS_DEBUG("diff_datum H5T_OPAQUE");
/* byte-by-byte comparison */
for (u = 0; u < type_size; u++)
nfound += character_compare_opt(mem1 + u, mem2 + u, index, rank, dims, acc, pos, opts, obj1, obj2, ph);
@@ -634,7 +639,7 @@ static hsize_t diff_datum(
* compared, we convert both bit patterns to their corresponding
* enumeration constant and do a string comparison
*/
- h5difftrace("diff_datum H5T_ENUM\n");
+ H5TOOLS_DEBUG("diff_datum H5T_ENUM");
{
char enum_name1[1024];
char enum_name2[1024];
@@ -697,6 +702,7 @@ static hsize_t diff_datum(
hsize_t adims[H5S_MAX_RANK];
int ndims;
+ H5TOOLS_DEBUG("diff_datum H5T_ARRAY");
/* get the array's base datatype for each element */
memb_type = H5Tget_super(m_type);
size = H5Tget_size(memb_type);
@@ -720,40 +726,324 @@ static hsize_t diff_datum(
*-------------------------------------------------------------------------
*/
case H5T_REFERENCE:
+ H5TOOLS_DEBUG("diff_datum H5T_REFERENCE");
iszero1 = all_zero(_mem1, H5Tget_size(m_type));
iszero2 = all_zero(_mem2, H5Tget_size(m_type));
if (iszero1 != iszero2) {
nfound++;
- HGOTO_DONE (opts->err_stat);
+ H5TOOLS_GOTO_DONE(opts->err_stat);
}
else if (!iszero1 && !iszero2) {
+ hid_t obj1_id = -1;
+ hid_t obj2_id = -1;
+
+ /*-------------------------------------------------------------------------
+ * H5T_STD_REF
+ * Reference
+ *-------------------------------------------------------------------------
+ */
+ if (H5Tequal(m_type, H5T_STD_REF)) {
+ /* if (type_size == H5R_STD_REF_SIZE) */
+ hid_t region1_id = -1;
+ hid_t region2_id = -1;
+ H5R_ref_t *ref1_buf = (const H5R_ref_t *)_mem1;
+ H5R_ref_t *ref2_buf = (const H5R_ref_t *)_mem2;
+ H5O_type_t obj1_type = -1; /* Object type */
+ H5O_type_t obj2_type = -1; /* Object type */
+ H5R_type_t ref_type; /* Reference type */
+
+ H5TOOLS_DEBUG("diff_datum H5T_REFERENCE - H5T_STD_REF");
+ ref_type = H5Rget_type(ref1_buf);
+ switch (ref_type) {
+ case H5R_OBJECT1:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT1");
+ if (H5Rget_obj_type3(ref1_buf, H5P_DEFAULT, &obj1_type) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_obj_type3 object 1 failed");
+ }
+ if (H5Rget_obj_type3(ref2_buf, H5P_DEFAULT, &obj2_type) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_obj_type3 object 2 failed");
+ }
+
+ /* check object type */
+ if (obj1_type != obj2_type) {
+ parallel_print("Different object types referenced: <%s> and <%s>", obj1, obj2);
+ opts->not_cmp = 1;
+ H5TOOLS_GOTO_DONE(opts->err_stat);
+ }
+
+ if((obj1_id = H5Ropen_object(ref1_buf, H5P_DEFAULT, H5P_DEFAULT)) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Ropen_object object 1 failed");
+ }
+ if((obj2_id = H5Ropen_object(ref2_buf, H5P_DEFAULT, H5P_DEFAULT)) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Ropen_object object 2 failed");
+ }
+
+ switch (obj1_type) {
+ case H5O_TYPE_DATASET:
+ nfound = diff_datasetid(obj1_id, obj2_id, NULL, NULL, opts);
+ break;
+
+ case H5O_TYPE_GROUP:
+ case H5O_TYPE_NAMED_DATATYPE:
+ case H5O_TYPE_MAP:
+ case H5O_TYPE_UNKNOWN:
+ case H5O_TYPE_NTYPES:
+ default:
+ if (opts->m_verbose)
+ parallel_print("Warning: Comparison not possible of object types referenced: <%s> and <%s>\n", obj1, obj2);
+ opts->not_cmp = 1;
+ break;
+ } /* end switch */
+ if(obj1_id >= 0)
+ if(H5Oclose(obj1_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Oclose H5R_OBJECT1 failed");
+ }
+ if(obj2_id >= 0)
+ if(H5Oclose(obj2_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Oclose H5R_OBJECT1 failed");
+ }
+ if(H5Rdestroy(ref2_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_OBJECT1 failed");
+ if(H5Rdestroy(ref1_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_OBJECT1 failed");
+ break;
+ case H5R_DATASET_REGION1:
+ H5TOOLS_DEBUG("ref_type is H5R_DATASET_REGION1");
+ if((obj1_id = H5Ropen_object(ref1_buf, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ if((obj2_id = H5Ropen_object(ref2_buf, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ if((region1_id = H5Ropen_region(ref1_buf, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ if((region2_id = H5Ropen_region(ref2_buf, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ nfound = diff_region(obj1_id, obj2_id, region1_id, region2_id, opts);
+ if(H5Sclose(region2_id) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Sclose H5R_DATASET_REGION1 failed");
+ }
+ if(H5Sclose(region1_id) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Sclose H5R_DATASET_REGION1 failed");
+ }
+ if(H5Oclose(obj2_id) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Oclose H5R_DATASET_REGION1 failed");
+ }
+ else {
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Ropen_object H5R_DATASET_REGION1 failed");
+ }
+ if(H5Oclose(obj1_id) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Oclose H5R_DATASET_REGION1 failed");
+ }
+ else {
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Ropen_object H5R_DATASET_REGION1 failed");
+ }
+ if(H5Rdestroy(ref2_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_DATASET_REGION1 failed");
+ if(H5Rdestroy(ref1_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_DATASET_REGION1 failed");
+ break;
+ case H5R_OBJECT2:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT2");
+ if (H5Rget_obj_type3(ref1_buf, H5P_DEFAULT, &obj1_type) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_obj_type3 object 1 failed");
+ }
+ if (H5Rget_obj_type3(ref2_buf, H5P_DEFAULT, &obj2_type) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_obj_type3 object 2 failed");
+ }
+
+ /* check object type */
+ if (obj1_type != obj2_type) {
+ parallel_print("Different object types referenced: <%s> and <%s>", obj1, obj2);
+ opts->not_cmp = 1;
+ H5TOOLS_GOTO_DONE(opts->err_stat);
+ }
+
+ if((obj1_id = H5Ropen_object(ref1_buf, H5P_DEFAULT, H5P_DEFAULT)) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Ropen_object object 1 failed");
+ }
+ if((obj2_id = H5Ropen_object(ref2_buf, H5P_DEFAULT, H5P_DEFAULT)) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Ropen_object object 2 failed");
+ }
+
+ switch (obj1_type) {
+ case H5O_TYPE_DATASET:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT2 : DATASET");
+ nfound = diff_datasetid(obj1_id, obj2_id, NULL, NULL, opts);
+ break;
+
+ case H5O_TYPE_GROUP:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT2 : GROUP");
+ if (opts->m_verbose)
+ parallel_print("Warning: Comparison not possible of group object types referenced: <%s> and <%s>\n", obj1, obj2);
+ opts->not_cmp = 1;
+ break;
+
+ case H5O_TYPE_NAMED_DATATYPE:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT2 : NAMED");
+ if (opts->m_verbose)
+ parallel_print("Warning: Comparison not possible of named datatypes object types referenced: <%s> and <%s>\n", obj1, obj2);
+ opts->not_cmp = 1;
+ break;
+
+ case H5O_TYPE_MAP:
+ case H5O_TYPE_UNKNOWN:
+ case H5O_TYPE_NTYPES:
+ default:
+ if (opts->m_verbose)
+ parallel_print("Warning: Comparison not possible of object types referenced: <%s> and <%s>\n", obj1, obj2);
+ opts->not_cmp = 1;
+ break;
+ } /* end switch */
+ if(obj1_id >= 0)
+ if(H5Oclose(obj1_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Oclose H5R_OBJECT2 failed");
+ }
+ if(obj2_id >= 0)
+ if(H5Oclose(obj2_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Oclose H5R_OBJECT2 failed");
+ }
+ if(H5Rdestroy(ref2_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_OBJECT2 failed");
+ if(H5Rdestroy(ref1_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_OBJECT2 failed");
+ break;
+ case H5R_DATASET_REGION2:
+ H5TOOLS_DEBUG("ref_type is H5R_DATASET_REGION2");
+
+ /* if (obj_id < 0) - could mean that no reference was written do not throw failure */
+ obj1_id = H5Ropen_object(ref1_buf, H5P_DEFAULT, H5P_DEFAULT);
+ obj2_id = H5Ropen_object(ref2_buf, H5P_DEFAULT, H5P_DEFAULT);
+ if((obj1_id < 0) || (obj1_id < 0)) {
+ H5TOOLS_INFO("H5Ropen_object H5R_DATASET_REGION2 failed");
+ }
+ else {
+ H5TOOLS_DEBUG("open_region - H5R_DATASET_REGION2");
+ if((region1_id = H5Ropen_region(ref1_buf, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ if (h5tools_is_zero(ref1_buf, H5Tget_size(H5T_STD_REF))) {
+ H5TOOLS_DEBUG("NULL H5R_DATASET_REGION2");
+ }
+ else {
+ if((region2_id = H5Ropen_region(ref2_buf, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ if (h5tools_is_zero(ref2_buf, H5Tget_size(H5T_STD_REF))) {
+ H5TOOLS_DEBUG("NULL H5R_DATASET_REGION2");
+ }
+ else {
+ nfound = diff_region(obj1_id, obj2_id, region1_id, region2_id, opts);
+ }
+ if(H5Sclose(region2_id) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Sclose H5R_DATASET_REGION2 failed");
+ }
+ else
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Ropen_region H5R_DATASET_REGION2 failed");
+ } /* end else to if (h5tools_is_zero(... */
+ if(H5Sclose(region1_id) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Sclose H5R_DATASET_REGION2 failed");
+ }
+ else
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Ropen_region H5R_DATASET_REGION2 failed");
+ if (obj1_id >= 0)
+ if(H5Dclose(obj1_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Dclose H5R_DATASET_REGION2 failed");
+ }
+ if (obj2_id >= 0)
+ if(H5Dclose(obj2_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Dclose H5R_DATASET_REGION2 failed");
+ }
+ if(H5Rdestroy(ref1_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_DATASET_REGION2 failed");
+ if(H5Rdestroy(ref2_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_DATASET_REGION2 failed");
+ }
+ break;
+ case H5R_ATTR:
+ {
+ char name1[ATTR_NAME_MAX];
+ char name2[ATTR_NAME_MAX];
+
+ H5TOOLS_DEBUG("ref_type is H5R_ATTR");
+ if((obj1_id = H5Ropen_attr(ref1_buf, H5P_DEFAULT, H5P_DEFAULT)) < 0) {
+ parallel_print("Warning: Cannot open referenced attribute: attribute 1\n");
+ H5TOOLS_INFO("H5Ropen_attr object 1 failed");
+ }
+ if((obj2_id = H5Ropen_attr(ref2_buf, H5P_DEFAULT, H5P_DEFAULT)) < 0) {
+ parallel_print("Warning: Cannot open referenced attribute: attribute 2\n");
+ H5TOOLS_INFO("H5Ropen_attr object 2 failed");
+ }
+
+ if((obj1_id < 0) || (obj1_id < 0)) {
+ H5TOOLS_INFO("H5Ropen_attr H5R_ATTR failed");
+ }
+ else {
+ /* get name */
+ if(H5Aget_name(obj1_id, (size_t)ATTR_NAME_MAX, name1) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_name first attribute failed");
+ /* get name */
+ if(H5Aget_name(obj2_id, (size_t)ATTR_NAME_MAX, name2) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_name second attribute failed");
+
+ H5TOOLS_DEBUG("H5R_ATTR diff_attr_data - name1=%s, name2=%s", name1, name2);
+ nfound = diff_attr_data(obj1_id, obj2_id, name1, name2, NULL, NULL, opts);
+ }
+
+ if(obj1_id >= 0)
+ if(H5Aclose(obj1_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Aclose H5R_ATTR failed");
+ }
+ if(obj2_id >= 0)
+ if(H5Aclose(obj2_id) < 0) {
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Aclose H5R_ATTR failed");
+ }
+ if(H5Rdestroy(ref2_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_ATTR failed");
+ if(H5Rdestroy(ref1_buf) < 0)
+ H5TOOLS_ERROR(H5DIFF_ERR, "H5Rdestroy H5R_ATTR failed");
+ }
+ break;
+ case H5R_BADTYPE:
+ case H5R_MAXTYPE:
+ default:
+ break;
+ } /* end switch */
+ H5TOOLS_DEBUG("diff_datum H5T_REFERENCE - H5T_STD_REF complete nfound:%d - errstat:%d", nfound, opts->err_stat);
+ }
/*-------------------------------------------------------------------------
* H5T_STD_REF_DSETREG
* Dataset region reference
*-------------------------------------------------------------------------
*/
- hid_t obj1_id = -1;
- hid_t obj2_id = -1;
-
- if (type_size == H5R_DSET_REG_REF_BUF_SIZE) {
+ else if (H5Tequal(m_type, H5T_STD_REF_DSETREG)) {
+ /* if (type_size == H5R_DSET_REG_REF_BUF_SIZE) */
hid_t region1_id = -1;
hid_t region2_id = -1;
+ H5TOOLS_INFO("H5T_STD_REF_DSETREG reference type");
+
if ((obj1_id = H5Rdereference2(container1_id, H5P_DEFAULT, H5R_DATASET_REGION, _mem1)) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rdereference2 object 1 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rdereference2 object 1 failed");
}
if ((obj2_id = H5Rdereference2(container2_id, H5P_DEFAULT, H5R_DATASET_REGION, _mem2)) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rdereference2 object 2 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rdereference2 object 2 failed");
}
if ((region1_id = H5Rget_region(container1_id, H5R_DATASET_REGION, _mem1)) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rget_region object 1 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_region object 1 failed");
}
if ((region2_id = H5Rget_region(container2_id, H5R_DATASET_REGION, _mem2)) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rget_region object 2 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_region object 2 failed");
}
nfound = diff_region(obj1_id, obj2_id, region1_id, region2_id, opts);
@@ -769,33 +1059,36 @@ static hsize_t diff_datum(
* Object references. get the type and OID of the referenced object
*-------------------------------------------------------------------------
*/
- else if (type_size == H5R_OBJ_REF_BUF_SIZE) {
+ else if (H5Tequal(m_type, H5T_STD_REF_OBJ)) {
+ /* if (type_size == H5R_OBJ_REF_BUF_SIZE) */
H5O_type_t obj1_type;
H5O_type_t obj2_type;
+ H5TOOLS_INFO("H5T_STD_REF_OBJ reference type");
+
if (H5Rget_obj_type2(container1_id, H5R_OBJECT, _mem1, &obj1_type) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rget_obj_type2 object 1 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_obj_type2 object 1 failed");
}
if (H5Rget_obj_type2(container2_id, H5R_OBJECT, _mem2, &obj2_type) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rget_obj_type2 object 2 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rget_obj_type2 object 2 failed");
}
/* check object type */
if (obj1_type != obj2_type) {
parallel_print("Different object types referenced: <%s> and <%s>", obj1, obj2);
opts->not_cmp = 1;
- HGOTO_DONE (opts->err_stat);
+ H5TOOLS_GOTO_DONE(opts->err_stat);
}
if ((obj1_id = H5Rdereference2(container1_id, H5P_DEFAULT, H5R_OBJECT, _mem1)) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rdereference2 object 1 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rdereference2 object 1 failed");
}
if ((obj2_id = H5Rdereference2(container2_id, H5P_DEFAULT, H5R_OBJECT, _mem2)) < 0) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "H5Rdereference2 object 2 failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("H5Rdereference2 object 2 failed");
}
/* compare */
@@ -803,9 +1096,7 @@ static hsize_t diff_datum(
nfound = diff_datasetid(obj1_id, obj2_id, NULL, NULL, opts);
else {
if (opts->m_verbose)
- parallel_print(
- "Warning: Comparison not possible of object types referenced: <%s> and <%s>\n",
- obj1, obj2);
+ parallel_print("Warning: Comparison not possible of object types referenced: <%s> and <%s>\n", obj1, obj2);
opts->not_cmp = 1;
}
@@ -813,6 +1104,7 @@ static hsize_t diff_datum(
H5Oclose(obj2_id);
}/*object reference*/
}/*is zero*/
+ H5TOOLS_DEBUG("diff_datum H5T_REFERENCE complete");
break;
/*-------------------------------------------------------------------------
@@ -823,6 +1115,7 @@ static hsize_t diff_datum(
{
hid_t memb_type = -1;
+ H5TOOLS_DEBUG("diff_datum H5T_VLEN");
/* get the VL sequences's base datatype for each element */
memb_type = H5Tget_super(m_type);
size = H5Tget_size(memb_type);
@@ -843,6 +1136,7 @@ static hsize_t diff_datum(
*-------------------------------------------------------------------------
*/
case H5T_INTEGER:
+ H5TOOLS_DEBUG("diff_datum H5T_INTEGER");
type_sign = H5Tget_sign(m_type);
/*-------------------------------------------------------------------------
* H5T_NATIVE_SCHAR
@@ -853,7 +1147,7 @@ static hsize_t diff_datum(
char temp2_char;
if(type_size != sizeof(char))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not char size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not char size");
HDmemcpy(&temp1_char, mem1, sizeof(char));
HDmemcpy(&temp2_char, mem2, sizeof(char));
/* -d and !-p */
@@ -928,7 +1222,7 @@ static hsize_t diff_datum(
unsigned char temp2_uchar;
if(type_size != sizeof(unsigned char))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not unsigned char size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not unsigned char size");
HDmemcpy(&temp1_uchar, mem1, sizeof(unsigned char));
HDmemcpy(&temp2_uchar, mem2, sizeof(unsigned char));
@@ -1004,7 +1298,7 @@ static hsize_t diff_datum(
short temp2_short;
if(type_size != sizeof(short))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not short size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not short size");
HDmemcpy(&temp1_short, mem1, sizeof(short));
HDmemcpy(&temp2_short, mem2, sizeof(short));
@@ -1080,7 +1374,7 @@ static hsize_t diff_datum(
unsigned short temp2_ushort;
if(type_size != sizeof(unsigned short))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not unsigned short size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not unsigned short size");
HDmemcpy(&temp1_ushort, mem1, sizeof(unsigned short));
HDmemcpy(&temp2_ushort, mem2, sizeof(unsigned short));
@@ -1156,7 +1450,7 @@ static hsize_t diff_datum(
int temp2_int;
if(type_size != sizeof(int))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not int size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not int size");
HDmemcpy(&temp1_int, mem1, sizeof(int));
HDmemcpy(&temp2_int, mem2, sizeof(int));
@@ -1232,7 +1526,7 @@ static hsize_t diff_datum(
unsigned int temp2_uint;
if(type_size != sizeof(unsigned int))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not unsigned int size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not unsigned int size");
HDmemcpy(&temp1_uint, mem1, sizeof(unsigned int));
HDmemcpy(&temp2_uint, mem2, sizeof(unsigned int));
@@ -1308,7 +1602,7 @@ static hsize_t diff_datum(
long temp2_long;
if(type_size != sizeof(long))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not long size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not long size");
HDmemcpy(&temp1_long, mem1, sizeof(long));
HDmemcpy(&temp2_long, mem2, sizeof(long));
@@ -1384,7 +1678,7 @@ static hsize_t diff_datum(
unsigned long temp2_ulong;
if(type_size != sizeof(unsigned long))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not unsigned long size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not unsigned long size");
HDmemcpy(&temp1_ulong, mem1, sizeof(unsigned long));
HDmemcpy(&temp2_ulong, mem2, sizeof(unsigned long));
@@ -1461,6 +1755,7 @@ static hsize_t diff_datum(
* H5T_NATIVE_FLOAT
*-------------------------------------------------------------------------
*/
+ H5TOOLS_DEBUG("diff_datum H5T_FLOAT");
if (type_size == 4) {
float temp1_float;
float temp2_float;
@@ -1468,7 +1763,7 @@ static hsize_t diff_datum(
hbool_t isnan2 = FALSE;
if(type_size != sizeof(float))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not float size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not float size");
HDmemcpy(&temp1_float, mem1, sizeof(float));
HDmemcpy(&temp2_float, mem2, sizeof(float));
@@ -1627,7 +1922,7 @@ static hsize_t diff_datum(
hbool_t isnan2 = FALSE;
if(type_size != sizeof(double))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not double size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not double size");
HDmemcpy(&temp1_double, mem1, sizeof(double));
HDmemcpy(&temp2_double, mem2, sizeof(double));
@@ -1786,7 +2081,7 @@ static hsize_t diff_datum(
hbool_t isnan2 = FALSE;
if(type_size != sizeof(long double)) {
- HGOTO_ERROR(1, H5E_tools_min_id_g, "Type size is not long double size");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "Type size is not long double size");
}
HDmemcpy(&temp1_double, mem1, sizeof(long double));
@@ -1941,8 +2236,9 @@ static hsize_t diff_datum(
done:
opts->err_stat = opts->err_stat | ret_value;
- h5diffdebug3("diff_datum finish:%d - errstat:%d\n", nfound, opts->err_stat);
+ H5TOOLS_DEBUG("diff_datum finish:%d - errstat:%d", nfound, opts->err_stat);
+ H5TOOLS_ENDDEBUG("exit");
return nfound;
}
@@ -2019,7 +2315,6 @@ void print_points(int i, hsize_t *ptdata, int ndims) {
static hsize_t diff_region(hid_t obj1_id, hid_t obj2_id, hid_t region1_id, hid_t region2_id, diff_opt_t *opts)
{
- hsize_t ret_value = 0;
hssize_t nblocks1, npoints1;
hssize_t nblocks2, npoints2;
hsize_t alloc_size;
@@ -2030,6 +2325,9 @@ static hsize_t diff_region(hid_t obj1_id, hid_t obj2_id, hid_t region1_id, hid_t
int i, j;
hsize_t nfound_b = 0; /* block differences found */
hsize_t nfound_p = 0; /* point differences found */
+ hsize_t ret_value = 0;
+
+ H5TOOLS_DEBUG("diff_region start");
ndims1 = H5Sget_simple_extent_ndims(region1_id);
ndims2 = H5Sget_simple_extent_ndims(region2_id);
@@ -2046,10 +2344,12 @@ static hsize_t diff_region(hid_t obj1_id, hid_t obj2_id, hid_t region1_id, hid_t
npoints1 = H5Sget_select_elem_npoints(region1_id);
npoints2 = H5Sget_select_elem_npoints(region2_id);
} H5E_END_TRY;
+ H5TOOLS_DEBUG("diff_region blocks: 1=%ld-2=%ld", nblocks1, nblocks2);
+ H5TOOLS_DEBUG("diff_region points: 1=%ld-2=%ld", npoints1, npoints2);
if (nblocks1 != nblocks2 || npoints1 != npoints2 || ndims1 != ndims2) {
opts->not_cmp = 1;
- HGOTO_DONE (0);
+ H5TOOLS_GOTO_DONE(0);
}
/*-------------------------------------------------------------------------
@@ -2057,21 +2357,22 @@ static hsize_t diff_region(hid_t obj1_id, hid_t obj2_id, hid_t region1_id, hid_t
*-------------------------------------------------------------------------
*/
if (nblocks1 > 0) {
+ H5TOOLS_DEBUG("region compare blocks");
HDassert(ndims1 > 0);
alloc_size = (hsize_t) nblocks1 * (unsigned) ndims1 * 2 * sizeof(ptdata1[0]);
HDassert(alloc_size == (hsize_t)((size_t )alloc_size)); /*check for overflow*/
if((ptdata1 = (hsize_t *) HDmalloc((size_t )alloc_size)) == NULL) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "Buffer allocation failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("Buffer allocation failed");
}
else {
H5_CHECK_OVERFLOW(nblocks1, hssize_t, hsize_t);
H5Sget_select_hyper_blocklist(region1_id, (hsize_t) 0, (hsize_t) nblocks1, ptdata1);
if((ptdata2 = (hsize_t *) HDmalloc((size_t )alloc_size)) == NULL) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "Buffer allocation failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("Buffer allocation failed");
}
else {
H5_CHECK_OVERFLOW(nblocks2, hssize_t, hsize_t);
@@ -2121,20 +2422,21 @@ static hsize_t diff_region(hid_t obj1_id, hid_t obj2_id, hid_t region1_id, hid_t
*-------------------------------------------------------------------------
*/
if (npoints1 > 0) {
+ H5TOOLS_DEBUG("region compare points");
alloc_size = (hsize_t) npoints1 * (unsigned) ndims1 * sizeof(ptdata1[0]);
HDassert(alloc_size == (hsize_t)((size_t )alloc_size)); /*check for overflow*/
if((ptdata1 = (hsize_t *) HDmalloc((size_t )alloc_size)) == NULL) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "Buffer allocation failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("Buffer allocation failed");
}
else {
H5_CHECK_OVERFLOW(npoints1, hssize_t, hsize_t);
H5Sget_select_elem_pointlist(region1_id, (hsize_t) 0, (hsize_t) npoints1, ptdata1);
if((ptdata2 = (hsize_t *) HDmalloc((size_t )alloc_size)) == NULL) {
- opts->err_stat = 1;
- H5TOOLS_INFO(H5E_tools_min_id_g, "Buffer allocation failed");
+ opts->err_stat = H5DIFF_ERR;
+ H5TOOLS_INFO("Buffer allocation failed");
}
else {
H5_CHECK_OVERFLOW(npoints1, hssize_t, hsize_t);
@@ -2185,6 +2487,7 @@ static hsize_t diff_region(hid_t obj1_id, hid_t obj2_id, hid_t region1_id, hid_t
parallel_print(")");
}
+ parallel_print("\n");
#endif
HDfree(ptdata1);
@@ -2197,6 +2500,7 @@ static hsize_t diff_region(hid_t obj1_id, hid_t obj2_id, hid_t region1_id, hid_t
ret_value = nfound_p + nfound_b;
done:
+ H5TOOLS_ENDDEBUG("exit with diffs:%d", ret_value);
return ret_value;
}
@@ -2218,7 +2522,7 @@ static hsize_t character_compare(char *mem1, char *mem2, hsize_t i, size_t u,
HDmemcpy(&temp1_uchar, mem1, sizeof(unsigned char));
HDmemcpy(&temp2_uchar, mem2, sizeof(unsigned char));
- h5diffdebug3("character_compare start %d=%d\n",temp1_uchar,temp2_uchar);
+ H5TOOLS_DEBUG("character_compare start %d=%d",temp1_uchar,temp2_uchar);
if (temp1_uchar != temp2_uchar) {
if (print_data(opts)) {
@@ -2231,8 +2535,9 @@ static hsize_t character_compare(char *mem1, char *mem2, hsize_t i, size_t u,
}
nfound++;
}
- h5difftrace("character_compare finish\n");
+ H5TOOLS_DEBUG("character_compare finish");
+ H5TOOLS_ENDDEBUG("exit: %d", nfound);
return nfound;
}
@@ -2257,7 +2562,6 @@ static hsize_t character_compare_opt(unsigned char *mem1, unsigned char *mem2,
HDmemcpy(&temp1_uchar, mem1, sizeof(unsigned char));
HDmemcpy(&temp2_uchar, mem2, sizeof(unsigned char));
- h5difftrace("character_compare_opt start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
@@ -2301,7 +2605,7 @@ static hsize_t character_compare_opt(unsigned char *mem1, unsigned char *mem2,
parallel_print(I_FORMAT, temp1_uchar, temp2_uchar, PDIFF(temp1_uchar, temp2_uchar));
}
nfound++;
- } h5difftrace("character_compare_opt finish\n");
+ }
return nfound;
}
@@ -2329,8 +2633,6 @@ static hsize_t diff_float(unsigned char *mem1, unsigned char *mem2,
hbool_t isnan1 = FALSE;
hbool_t isnan2 = FALSE;
- h5difftrace("diff_float start\n");
-
/*-------------------------------------------------------------------------
* -d and !-p
*-------------------------------------------------------------------------
@@ -2514,7 +2816,6 @@ static hsize_t diff_float(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_float finish\n");
return nfound;
}
@@ -2542,7 +2843,6 @@ static hsize_t diff_double(unsigned char *mem1, unsigned char *mem2,
hbool_t isnan1 = FALSE;
hbool_t isnan2 = FALSE;
- h5difftrace("diff_double start\n");
/*-------------------------------------------------------------------------
* -d and !-p
*-------------------------------------------------------------------------
@@ -2725,7 +3025,6 @@ static hsize_t diff_double(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_double finish\n");
return nfound;
}
@@ -2763,8 +3062,6 @@ static hsize_t diff_ldouble(unsigned char *mem1,
hbool_t isnan1 = FALSE;
hbool_t isnan2 = FALSE;
- h5difftrace("diff_ldouble start\n");
-
/*-------------------------------------------------------------------------
* -d and !-p
*-------------------------------------------------------------------------
@@ -2943,7 +3240,6 @@ static hsize_t diff_ldouble(unsigned char *mem1,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_ldouble finish\n");
return nfound;
}
@@ -2970,7 +3266,6 @@ static hsize_t diff_schar(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_schar start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3071,7 +3366,6 @@ static hsize_t diff_schar(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_schar finish\n");
return nfound;
}
@@ -3096,7 +3390,6 @@ static hsize_t diff_uchar(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_uchar start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3197,7 +3490,6 @@ static hsize_t diff_uchar(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_uchar finish\n");
return nfound;
}
@@ -3222,7 +3514,6 @@ static hsize_t diff_short(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_short start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3323,7 +3614,6 @@ static hsize_t diff_short(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_short finish\n");
return nfound;
}
@@ -3349,7 +3639,6 @@ static hsize_t diff_ushort(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_ushort start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3450,7 +3739,6 @@ static hsize_t diff_ushort(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_ushort finish\n");
return nfound;
}
@@ -3475,7 +3763,6 @@ static hsize_t diff_int(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_int start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3577,7 +3864,6 @@ static hsize_t diff_int(unsigned char *mem1, unsigned char *mem2,
} /* nelmts */
}
- h5difftrace("diff_int finish\n");
return nfound;
}
@@ -3601,7 +3887,6 @@ static hsize_t diff_uint(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_uint start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3703,7 +3988,6 @@ static hsize_t diff_uint(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_uint finish\n");
return nfound;
}
@@ -3728,7 +4012,6 @@ static hsize_t diff_long(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_long start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3831,7 +4114,6 @@ static hsize_t diff_long(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_long finish\n");
return nfound;
}
@@ -3856,8 +4138,6 @@ static hsize_t diff_ulong(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_ulong start\n");
-
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -3961,7 +4241,6 @@ static hsize_t diff_ulong(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_ulong finish\n");
return nfound;
}
@@ -3986,7 +4265,6 @@ static hsize_t diff_llong(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_llong start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -4088,7 +4366,6 @@ static hsize_t diff_llong(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_llong finish\n");
return nfound;
}
@@ -4114,7 +4391,6 @@ static hsize_t diff_ullong(unsigned char *mem1, unsigned char *mem2,
double per;
hbool_t both_zero;
- h5difftrace("diff_ullong start\n");
/* -d and !-p */
if (opts->d && !opts->p) {
for (i = 0; i < nelmts; i++) {
@@ -4220,7 +4496,6 @@ static hsize_t diff_ullong(unsigned char *mem1, unsigned char *mem2,
return nfound;
} /* nelmts */
}
- h5difftrace("diff_ullong finish\n");
return nfound;
}
@@ -4234,26 +4509,26 @@ static hsize_t diff_ullong(unsigned char *mem1, unsigned char *mem2,
static
int ull2float(unsigned long long ull_value, float *f_value)
{
- int ret_value = SUCCEED;
hid_t dxpl_id = -1;
unsigned char *buf = NULL;
size_t src_size;
size_t dst_size;
+ int ret_value = 0;
- h5difftrace("ull2float start\n");
+ H5TOOLS_DEBUG("ull2float start");
if ((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pcreate failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pcreate failed");
src_size = H5Tget_size(H5T_NATIVE_ULLONG);
dst_size = H5Tget_size(H5T_NATIVE_FLOAT);
if((buf = (unsigned char*) HDcalloc((size_t )1, MAX(src_size, dst_size))) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for dims");
+ H5TOOLS_GOTO_ERROR(FAIL, "Could not allocate buffer for dims");
HDmemcpy(buf, &ull_value, src_size);
/* do conversion */
if (H5Tconvert(H5T_NATIVE_ULLONG, H5T_NATIVE_FLOAT, (size_t) 1, buf, NULL, dxpl_id) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tconvert failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Tconvert failed");
HDmemcpy(f_value, buf, dst_size);
@@ -4265,8 +4540,9 @@ done:
if (buf)
HDfree(buf);
- h5difftrace("ull2float finish\n");
+ H5TOOLS_DEBUG("ull2float finish");
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -4277,7 +4553,6 @@ done:
*-------------------------------------------------------------------------
*/
static hbool_t equal_double(double value, double expected, diff_opt_t *opts) {
- h5difftrace("equal_double start\n");
if (opts->do_nans) {
/*-------------------------------------------------------------------------
* detect NaNs
@@ -4308,8 +4583,6 @@ static hbool_t equal_double(double value, double expected, diff_opt_t *opts) {
if (ABS((value-expected)) < DBL_EPSILON)
return TRUE;
- h5difftrace("equal_double finish\n");
-
return FALSE;
}
@@ -4324,7 +4597,6 @@ static hbool_t equal_double(double value, double expected, diff_opt_t *opts) {
static
hbool_t equal_ldouble(long double value, long double expected, diff_opt_t *opts)
{
- h5difftrace("equal_ldouble start\n");
if (opts->do_nans) {
/*-------------------------------------------------------------------------
* detect NaNs
@@ -4355,8 +4627,6 @@ hbool_t equal_ldouble(long double value, long double expected, diff_opt_t *opts)
if (ABS((value-expected)) < DBL_EPSILON)
return TRUE;
- h5difftrace("equal_ldouble finish\n");
-
return FALSE;
}
@@ -4369,7 +4639,6 @@ hbool_t equal_ldouble(long double value, long double expected, diff_opt_t *opts)
*-------------------------------------------------------------------------
*/
static hbool_t equal_float(float value, float expected, diff_opt_t *opts) {
- h5difftrace("equal_float start\n");
if (opts->do_nans) {
/*-------------------------------------------------------------------------
* detect NaNs
@@ -4400,8 +4669,6 @@ static hbool_t equal_float(float value, float expected, diff_opt_t *opts) {
if (ABS( (value-expected) ) < FLT_EPSILON)
return TRUE;
- h5difftrace("equal_float finish\n");
-
return FALSE;
}
@@ -4417,7 +4684,6 @@ static hbool_t my_isnan(dtype_t type, void *val) {
hbool_t retval = FALSE;
char s[256];
- h5difftrace("my_isnan start\n");
if (FLT_FLOAT == type) {
float x;
@@ -4477,8 +4743,6 @@ static hbool_t my_isnan(dtype_t type, void *val) {
}
}
- h5difftrace("my_isnan finish\n");
-
return retval;
}
diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c
index 351e6ab..5a85d79 100644
--- a/tools/lib/h5diff_attr.c
+++ b/tools/lib/h5diff_attr.c
@@ -139,52 +139,57 @@ static void table_attr_mark_exist(unsigned *exist, char *name, table_attrs_t *ta
*------------------------------------------------------------------------*/
static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t ** table_out, diff_opt_t *opts)
{
- int ret_value = 0;
- H5O_info_t oinfo1, oinfo2; /* Object info */
- hid_t attr1_id = -1; /* attr ID */
- hid_t attr2_id = -1; /* attr ID */
- size_t curr1 = 0;
- size_t curr2 = 0;
- unsigned infile[2];
- char name1[ATTR_NAME_MAX];
- char name2[ATTR_NAME_MAX];
- int cmp;
- unsigned i;
table_attrs_t *table_lp = NULL;
-
- h5difftrace("build_match_list_attrs start\n");
-
- if(H5Oget_info2(loc1_id, &oinfo1, H5O_INFO_NUM_ATTRS) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Oget_info first object failed");
- if(H5Oget_info2(loc2_id, &oinfo2, H5O_INFO_NUM_ATTRS) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Oget_info second object failed");
+ H5O_info_t oinfo1, oinfo2; /* Object info */
+ hid_t attr1_id = H5I_INVALID_HID; /* attr ID */
+ hid_t attr2_id = H5I_INVALID_HID; /* attr ID */
+ size_t curr1 = 0;
+ size_t curr2 = 0;
+ unsigned infile[2];
+ char name1[ATTR_NAME_MAX];
+ char name2[ATTR_NAME_MAX];
+ int cmp;
+ unsigned i;
+ herr_t ret_value = SUCCEED;
+
+
+ H5TOOLS_DEBUG("build_match_list_attrs start - errstat:%d", opts->err_stat);
+
+ if(H5Oget_info2(loc1_id, &oinfo1, H5O_INFO_NUM_ATTRS) < 0) {
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Oget_info first object failed");
+ }
+ H5TOOLS_DEBUG("H5Oget_info2 loc1id=%d", oinfo1.num_attrs);
+ if(H5Oget_info2(loc2_id, &oinfo2, H5O_INFO_NUM_ATTRS) < 0) {
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Oget_info second object failed");
+ }
+ H5TOOLS_DEBUG("H5Oget_info2 loc2id=%d", oinfo2.num_attrs);
table_attrs_init(&table_lp);
if (table_lp == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Table allocation failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "Table allocation failed");
/*--------------------------------------------------
* build the list
*/
while(curr1 < oinfo1.num_attrs && curr2 < oinfo2.num_attrs) {
- h5diffdebug3("build_match_list_attrs 1: %ld - %ld\n", curr1, oinfo1.num_attrs);
- h5diffdebug3("build_match_list_attrs 2: %ld - %ld\n", curr2, oinfo2.num_attrs);
+ H5TOOLS_DEBUG("build_match_list_attrs 1: %ld - %ld", curr1, oinfo1.num_attrs);
+ H5TOOLS_DEBUG("build_match_list_attrs 2: %ld - %ld", curr2, oinfo2.num_attrs);
/*------------------
* open attribute1 */
if((attr1_id = H5Aopen_by_idx(loc1_id, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)curr1, H5P_DEFAULT, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aopen_by_idx first attribute failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aopen_by_idx first attribute failed");
/* get name */
if(H5Aget_name(attr1_id, (size_t)ATTR_NAME_MAX, name1) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aget_name first attribute failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aget_name first attribute failed");
/*------------------
* open attribute2 */
if((attr2_id = H5Aopen_by_idx(loc2_id, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)curr2, H5P_DEFAULT, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aopen_by_idx second attribute failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aopen_by_idx second attribute failed");
/* get name */
if(H5Aget_name(attr2_id, (size_t)ATTR_NAME_MAX, name2) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aget_name second attribute failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aget_name second attribute failed");
/* criteria is string compare */
cmp = HDstrcmp(name1, name2);
@@ -222,16 +227,16 @@ static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t
infile[0] = 1;
infile[1] = 0;
while(curr1 < oinfo1.num_attrs) {
- h5diffdebug3("build_match_list_attrs 1: %ld - %ld\n", curr1, oinfo1.num_attrs);
+ H5TOOLS_DEBUG("build_match_list_attrs 1: %ld - %ld", curr1, oinfo1.num_attrs);
/*------------------
* open attribute1 */
if((attr1_id = H5Aopen_by_idx(loc1_id, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)curr1, H5P_DEFAULT, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aopen_by_idx first attribute failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aopen_by_idx first attribute failed");
/* get name */
if(H5Aget_name(attr1_id, (size_t)ATTR_NAME_MAX, name1) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aget_name first attribute failed");
- h5diffdebug2("build_match_list_attrs #1 name - %s\n", name1);
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aget_name first attribute failed");
+ H5TOOLS_DEBUG("build_match_list_attrs #1 name - %s", name1);
table_attr_mark_exist(infile, name1, table_lp);
table_lp->nattrs_only1++;
@@ -246,15 +251,15 @@ static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t
infile[0] = 0;
infile[1] = 1;
while(curr2 < oinfo2.num_attrs) {
- h5diffdebug3("build_match_list_attrs 2: %ld - %ld\n", curr2, oinfo2.num_attrs);
+ H5TOOLS_DEBUG("build_match_list_attrs 2: %ld - %ld", curr2, oinfo2.num_attrs);
/*------------------
* open attribute2 */
if((attr2_id = H5Aopen_by_idx(loc2_id, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)curr2, H5P_DEFAULT, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aopen_by_idx second attribute failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aopen_by_idx second attribute failed");
/* get name */
if(H5Aget_name(attr2_id, (size_t)ATTR_NAME_MAX, name2) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Aget_name second attribute failed");
- h5diffdebug2("build_match_list_attrs #2 name - %s\n", name2);
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Aget_name second attribute failed");
+ H5TOOLS_DEBUG("build_match_list_attrs #2 name - %s", name2);
table_attr_mark_exist(infile, name2, table_lp);
table_lp->nattrs_only2++;
@@ -273,7 +278,7 @@ static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t
parallel_print(" obj1 obj2\n");
parallel_print(" --------------------------------------\n");
for(i = 0; i < (unsigned int) table_lp->nattrs; i++) {
- char c1, c2;
+ int c1, c2;
c1 = (table_lp->attrs[i].exist[0]) ? 'x' : ' ';
c2 = (table_lp->attrs[i].exist[1]) ? 'x' : ' ';
parallel_print("%5c %6c %-15s\n", c1, c2, table_lp->attrs[i].name);
@@ -294,43 +299,34 @@ done:
H5Aclose(attr2_id);
} H5E_END_TRY;
- h5diffdebug2("build_match_list_attrs end - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("build_match_list_attrs end - errstat:%d", opts->err_stat);
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
/*-------------------------------------------------------------------------
- * Function: diff_attr
+ * Function: diff_attr_data
*
- * Purpose: compare attributes located in LOC1_ID and LOC2_ID, which are
- * obtained either from
- * loc_id = H5Gopen2(fid, name, H5P_DEFAULT);
- * loc_id = H5Dopen2(fid, name);
- * loc_id = H5Topen2(fid, name, H5P_DEFAULT);
+ * Purpose: compare attribute data located in attr1_id and attr2_id, which are
+ * obtained from open attributes
*
* Return: number of differences found
*-------------------------------------------------------------------------
*/
-hsize_t diff_attr(hid_t loc1_id,
- hid_t loc2_id,
- const char *path1,
- const char *path2,
- diff_opt_t *opts)
+hsize_t diff_attr_data(hid_t attr1_id, hid_t attr2_id, const char *name1, const char *name2, const char *path1, const char *path2, diff_opt_t *opts)
{
- int ret_value = opts->err_stat;
- hid_t attr1_id = -1; /* attr ID */
- hid_t attr2_id = -1; /* attr ID */
- hid_t space1_id = -1; /* space ID */
- hid_t space2_id = -1; /* space ID */
- hid_t ftype1_id = -1; /* file data type ID */
- hid_t ftype2_id = -1; /* file data type ID */
- hid_t mtype1_id = -1; /* memory data type ID */
- hid_t mtype2_id = -1; /* memory data type ID */
+ hid_t space1_id = H5I_INVALID_HID; /* space ID */
+ hid_t space2_id = H5I_INVALID_HID; /* space ID */
+ hid_t ftype1_id = H5I_INVALID_HID; /* file data type ID */
+ hid_t ftype2_id = H5I_INVALID_HID; /* file data type ID */
+ hid_t mtype1_id = H5I_INVALID_HID; /* memory data type ID */
+ hid_t mtype2_id = H5I_INVALID_HID; /* memory data type ID */
size_t msize1; /* memory size of memory type */
size_t msize2; /* memory size of memory type */
- void *buf1 = NULL; /* data buffer */
- void *buf2 = NULL; /* data buffer */
+ void *buf1 = NULL; /* data buffer */
+ void *buf2 = NULL; /* data buffer */
hbool_t buf1hasdata = FALSE; /* buffer has data */
hbool_t buf2hasdata = FALSE; /* buffer has data */
hsize_t nelmts1; /* number of elements in dataset */
@@ -338,208 +334,258 @@ hsize_t diff_attr(hid_t loc1_id,
int rank2; /* rank of dataset */
hsize_t dims1[H5S_MAX_RANK]; /* dimensions of dataset */
hsize_t dims2[H5S_MAX_RANK]; /* dimensions of dataset */
- char *name1 = NULL;
- char *name2 = NULL;
char np1[512];
char np2[512];
unsigned u; /* Local index variable */
hsize_t nfound = 0;
- hsize_t nfound_total = 0;
- int j;
+ int j;
+ diff_err_t ret_value = opts->err_stat;
+
+ H5TOOLS_DEBUG("diff_attr_data start - errstat:%d", opts->err_stat);
+
+ /* get the datatypes */
+ if((ftype1_id = H5Aget_type(attr1_id)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type first attribute failed");
+ if((ftype2_id = H5Aget_type(attr2_id)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type second attribute failed");
+
+ if (H5Tget_class(ftype1_id) == H5T_REFERENCE) {
+ if((mtype1_id = H5Tcopy(H5T_STD_REF)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tcopy(H5T_STD_REF) first attribute ftype failed");
+ }
+ else {
+ if((mtype1_id = H5Tget_native_type(ftype1_id, H5T_DIR_DEFAULT)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tget_native_type first attribute ftype failed");
+ }
+ if (H5Tget_class(ftype2_id) == H5T_REFERENCE) {
+ if((mtype2_id = H5Tcopy(H5T_STD_REF)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tcopy(H5T_STD_REF) second attribute ftype failed");
+ }
+ else {
+ if((mtype2_id = H5Tget_native_type(ftype2_id, H5T_DIR_DEFAULT)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tget_native_type second attribute ftype failed");
+ }
+ if((msize1 = H5Tget_size(mtype1_id)) == 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tget_size first attribute mtype failed");
+ if((msize2 = H5Tget_size(mtype2_id)) == 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tget_size second attribute mtype failed");
+
+ /* get the dataspace */
+ if((space1_id = H5Aget_space(attr1_id)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_space first attribute failed");
+ if((space2_id = H5Aget_space(attr2_id)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_space second attribute failed");
+
+ /* get dimensions */
+ if((rank1 = H5Sget_simple_extent_dims(space1_id, dims1, NULL)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sget_simple_extent_dims first attribute failed");
+ if((rank2 = H5Sget_simple_extent_dims(space2_id, dims2, NULL)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sget_simple_extent_dims second attribute failed");
+
+ /*----------------------------------------------------------------------
+ * check for comparable TYPE and SPACE
+ *----------------------------------------------------------------------
+ */
+ H5TOOLS_DEBUG("diff_attr_data check for comparable TYPE and SPACE");
+
+ /* pass dims1 and dims2 for maxdims as well since attribute's maxdims
+ * are always same */
+ if(diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1, dims2, dims1, dims2, name1, name2, opts, 0) == 1) {
+ /*-----------------------------------------------------------------
+ * "upgrade" the smaller memory size
+ *------------------------------------------------------------------
+ */
+ if(FAIL == match_up_memsize(ftype1_id, ftype2_id, &mtype1_id, &mtype2_id, &msize1, &msize2))
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "match_up_memsize failed");
+
+ H5TOOLS_DEBUG("diff_attr_data read");
+ /*---------------------------------------------------------------------
+ * read
+ *----------------------------------------------------------------------
+ */
+ nelmts1 = 1;
+ for(j = 0; j < rank1; j++)
+ nelmts1 *= dims1[j];
+
+ buf1 = (void *)HDcalloc((size_t)(nelmts1), msize1);
+ buf2 = (void *)HDcalloc((size_t)(nelmts1), msize2);
+ if(buf1 == NULL || buf2 == NULL) {
+ parallel_print("cannot read into memory\n");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "buffer allocation failed");
+ }
+ if(H5Aread(attr1_id, mtype1_id, buf1) < 0) {
+ parallel_print("Failed reading attribute1 %s\n", name1);
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type first attribute failed");
+ }
+ else
+ buf1hasdata = TRUE;
+
+ if(H5Aread(attr2_id, mtype2_id, buf2) < 0) {
+ parallel_print("Failed reading attribute2 %s\n", name2);
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type second attribute failed");
+ }
+ else
+ buf2hasdata = TRUE;
+
+ /* format output string */
+ HDsnprintf(np1, sizeof(np1), "%s of <%s>", name1, path1);
+ HDsnprintf(np2, sizeof(np1), "%s of <%s>", name2, path2);
+
+ /*---------------------------------------------------------------------
+ * array compare
+ *----------------------------------------------------------------------
+ */
+ H5TOOLS_DEBUG("diff_attr_data array compare %s - %s", name1, name1);
+
+ /* always print name */
+ /* verbose (-v) and report (-r) mode */
+ if(opts->m_verbose || opts->m_report) {
+ do_print_attrname("attribute", np1, np2);
+
+ nfound = diff_array(buf1, buf2, nelmts1, (hsize_t) 0, rank1,
+ dims1, opts, np1, np2, mtype1_id, attr1_id, attr2_id);
+ print_found(nfound);
+ }
+ /* quiet mode (-q), just count differences */
+ else if(opts->m_quiet) {
+ nfound = diff_array(buf1, buf2, nelmts1, (hsize_t) 0, rank1,
+ dims1, opts, np1, np2, mtype1_id, attr1_id, attr2_id);
+ }
+ /* the rest (-c, none, ...) */
+ else {
+ nfound = diff_array(buf1, buf2, nelmts1, (hsize_t) 0, rank1,
+ dims1, opts, np1, np2, mtype1_id, attr1_id, attr2_id);
+ /* print info if compatible and difference found */
+ if (nfound) {
+ do_print_attrname("attribute", np1, np2);
+ print_found(nfound);
+ } /* end if */
+ } /* end else */
+ }
+ H5TOOLS_DEBUG("diff_attr_data check for comparable TYPE and SPACE complete nfound:%d - errstat:%d", nfound, opts->err_stat);
+
+ /*----------------------------------------------------------------------
+ * close
+ *----------------------------------------------------------------------
+ */
+
+ /* Free buf1 and buf2, check both VLEN-data VLEN-string to reclaim any
+ * VLEN memory first */
+ if(TRUE == h5tools_detect_vlen(mtype1_id))
+ H5Treclaim(mtype1_id, space1_id, H5P_DEFAULT, buf1);
+ HDfree(buf1);
+ buf1 = NULL;
+
+ if(TRUE == h5tools_detect_vlen(mtype2_id))
+ H5Treclaim(mtype2_id, space2_id, H5P_DEFAULT, buf2);
+ HDfree(buf2);
+ buf2 = NULL;
+
+ if(H5Tclose(ftype1_id) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type first attribute failed");
+ if(H5Tclose(ftype2_id) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type second attribute failed");
+ if(H5Sclose(space1_id) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type first attribute failed");
+ if(H5Sclose(space2_id) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type second attribute failed");
+ if(H5Tclose(mtype1_id) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tclose first attribute mtype failed");
+ if(H5Tclose(mtype2_id) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tclose second attribute mtype failed");
+
+done:
+ opts->err_stat = opts->err_stat | ret_value;
+
+ H5E_BEGIN_TRY {
+ if(buf1) {
+ if(buf1hasdata && TRUE == h5tools_detect_vlen(mtype1_id))
+ H5Treclaim(mtype1_id, space1_id, H5P_DEFAULT, buf1);
+ HDfree(buf1);
+ } /* end if */
+ if(buf2) {
+ if(buf2hasdata && TRUE == h5tools_detect_vlen(mtype2_id))
+ H5Treclaim(mtype2_id, space2_id, H5P_DEFAULT, buf2);
+ HDfree(buf2);
+ } /* end if */
+
+ H5Tclose(ftype1_id);
+ H5Tclose(ftype2_id);
+ H5Tclose(mtype1_id);
+ H5Tclose(mtype2_id);
+ H5Sclose(space1_id);
+ H5Sclose(space2_id);
+ } H5E_END_TRY;
+
+ H5TOOLS_DEBUG("diff_attr_data end - errstat:%d", opts->err_stat);
+
+ H5TOOLS_ENDDEBUG("exit");
+ return nfound;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: diff_attr
+ *
+ * Purpose: compare attributes located in LOC1_ID and LOC2_ID, which are
+ * obtained either from
+ * loc_id = H5Gopen2(fid, name, H5P_DEFAULT);
+ * loc_id = H5Dopen2(fid, name);
+ * loc_id = H5Topen2(fid, name, H5P_DEFAULT);
+ *
+ * Return: number of differences found
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t diff_attr(hid_t loc1_id, hid_t loc2_id, const char *path1, const char *path2, diff_opt_t *opts)
+{
table_attrs_t *match_list_attrs = NULL;
- h5difftrace("diff_attr start\n");
+ hid_t attr1_id = H5I_INVALID_HID; /* attr ID */
+ hid_t attr2_id = H5I_INVALID_HID; /* attr ID */
+ char *name1 = NULL;
+ char *name2 = NULL;
+ unsigned u; /* Local index variable */
+ hsize_t nfound = 0;
+ hsize_t nfound_total = 0;
+ diff_err_t ret_value = opts->err_stat;
+
+ H5TOOLS_DEBUG("diff_attr start - errstat:%d", opts->err_stat);
if(build_match_list_attrs(loc1_id, loc2_id, &match_list_attrs, opts) < 0) {
- HGOTO_ERROR(1, H5E_tools_min_id_g, "build_match_list_attrs failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "build_match_list_attrs failed");
}
- h5diffdebug2("build_match_list_attrs - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("build_match_list_attrs - errstat:%d", opts->err_stat);
/* if detect any unique extra attr */
if(match_list_attrs->nattrs_only1 || match_list_attrs->nattrs_only2) {
- h5difftrace("diff_attr attributes only in one file\n");
+ H5TOOLS_DEBUG("diff_attr attributes only in one file");
/* exit will be 1 */
opts->contents = 0;
}
- h5diffdebug2("match_list_attrs info - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("match_list_attrs info - errstat:%d", opts->err_stat);
for(u = 0; u < (unsigned)match_list_attrs->nattrs; u++) {
- h5diffdebug3("match_list_attrs loop[%d] - errstat:%d\n", u, opts->err_stat);
+ H5TOOLS_DEBUG("match_list_attrs loop[%d] - errstat:%d", u, opts->err_stat);
if((match_list_attrs->attrs[u].exist[0]) && (match_list_attrs->attrs[u].exist[1])) {
name1 = name2 = match_list_attrs->attrs[u].name;
- h5diffdebug2("diff_attr name - %s\n", name1);
+ H5TOOLS_DEBUG("diff_attr name - %s", name1);
/*--------------
* attribute 1 */
if((attr1_id = H5Aopen(loc1_id, name1, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aopen first attribute failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aopen first attribute failed");
/*--------------
* attribute 2 */
if((attr2_id = H5Aopen(loc2_id, name2, H5P_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aopen second attribute failed");
-
- h5difftrace("diff_attr got attributes\n");
- /* get the datatypes */
- if((ftype1_id = H5Aget_type(attr1_id)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type first attribute failed");
- if((ftype2_id = H5Aget_type(attr2_id)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type second attribute failed");
-
- if((mtype1_id = H5Tget_native_type(ftype1_id, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tget_native_type first attribute ftype failed");
- if((mtype2_id = H5Tget_native_type(ftype2_id, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tget_native_type second attribute ftype failed");
- if((msize1 = H5Tget_size(mtype1_id)) == 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tget_size first attribute mtype failed");
- if((msize2 = H5Tget_size(mtype2_id)) == 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tget_size second attribute mtype failed");
-
- /* get the dataspace */
- if((space1_id = H5Aget_space(attr1_id)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_space first attribute failed");
- if((space2_id = H5Aget_space(attr2_id)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_space second attribute failed");
-
- /* get dimensions */
- if((rank1 = H5Sget_simple_extent_dims(space1_id, dims1, NULL)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sget_simple_extent_dims first attribute failed");
- if((rank2 = H5Sget_simple_extent_dims(space2_id, dims2, NULL)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sget_simple_extent_dims second attribute failed");
-
- /*----------------------------------------------------------------------
- * check for comparable TYPE and SPACE
- *----------------------------------------------------------------------
- */
-
- /* pass dims1 and dims2 for maxdims as well since attribute's maxdims
- * are always same */
- if(diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1, dims2,
- dims1, dims2, name1, name2, opts, 0) != 1) {
- if(H5Tclose(ftype1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose first attribute ftype failed");
- if(H5Tclose(ftype2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose second attribute ftype failed");
- if(H5Sclose(space1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sclose first attribute failed");
- if(H5Sclose(space2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sclose second attribute failed");
- if(H5Aclose(attr1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aclose first attribute failed");
- if(H5Aclose(attr2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aclose second attribute failed");
- if(H5Tclose(mtype1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose first attribute mtype failed");
- if(H5Tclose(mtype2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose second attribute mtype failed");
-
- continue;
- }
-
- /*-----------------------------------------------------------------
- * "upgrade" the smaller memory size
- *------------------------------------------------------------------
- */
- if(FAIL == match_up_memsize(ftype1_id, ftype2_id, &mtype1_id,
- &mtype2_id, &msize1, &msize2))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "match_up_memsize failed");
-
- /*---------------------------------------------------------------------
- * read
- *----------------------------------------------------------------------
- */
- nelmts1 = 1;
- for(j = 0; j < rank1; j++)
- nelmts1 *= dims1[j];
-
- buf1 = (void *)HDcalloc((size_t)(nelmts1), msize1);
- buf2 = (void *)HDcalloc((size_t)(nelmts1), msize2);
- if(buf1 == NULL || buf2 == NULL) {
- parallel_print("cannot read into memory\n");
- HGOTO_ERROR(1, H5E_tools_min_id_g, "buffer allocation failed");
- }
- if(H5Aread(attr1_id, mtype1_id, buf1) < 0) {
- parallel_print("Failed reading attribute1 %s/%s\n", path1, name1);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type first attribute failed");
- }
- else
- buf1hasdata = TRUE;
-
- if(H5Aread(attr2_id, mtype2_id, buf2) < 0) {
- parallel_print("Failed reading attribute2 %s/%s\n", path2, name2);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type second attribute failed");
- }
- else
- buf2hasdata = TRUE;
-
- /* format output string */
- HDsnprintf(np1, sizeof(np1), "%s of <%s>", name1, path1);
- HDsnprintf(np2, sizeof(np1), "%s of <%s>", name2, path2);
-
- /*---------------------------------------------------------------------
- * array compare
- *----------------------------------------------------------------------
- */
-
- /* always print name */
- /* verbose (-v) and report (-r) mode */
- if(opts->m_verbose || opts->m_report) {
- do_print_attrname("attribute", np1, np2);
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aopen second attribute failed");
- nfound = diff_array(buf1, buf2, nelmts1, (hsize_t) 0, rank1,
- dims1, opts, np1, np2, mtype1_id, attr1_id, attr2_id);
- print_found(nfound);
- }
- /* quiet mode (-q), just count differences */
- else if(opts->m_quiet) {
- nfound = diff_array(buf1, buf2, nelmts1, (hsize_t) 0, rank1,
- dims1, opts, np1, np2, mtype1_id, attr1_id, attr2_id);
- }
- /* the rest (-c, none, ...) */
- else {
- nfound = diff_array(buf1, buf2, nelmts1, (hsize_t) 0, rank1,
- dims1, opts, np1, np2, mtype1_id, attr1_id, attr2_id);
-
- /* print info if compatible and difference found */
- if (nfound) {
- do_print_attrname("attribute", np1, np2);
- print_found(nfound);
- } /* end if */
- } /* end else */
-
- /*----------------------------------------------------------------------
- * close
- *----------------------------------------------------------------------
- */
-
- /* Free buf1 and buf2, check both VLEN-data VLEN-string to reclaim any
- * VLEN memory first */
- if(TRUE == h5tools_detect_vlen(mtype1_id))
- H5Treclaim(mtype1_id, space1_id, H5P_DEFAULT, buf1);
- HDfree(buf1);
- buf1 = NULL;
-
- if(TRUE == h5tools_detect_vlen(mtype2_id))
- H5Treclaim(mtype2_id, space2_id, H5P_DEFAULT, buf2);
- HDfree(buf2);
- buf2 = NULL;
-
- if(H5Tclose(ftype1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type first attribute failed");
- if(H5Tclose(ftype2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type second attribute failed");
- if(H5Sclose(space1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type first attribute failed");
- if(H5Sclose(space2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type second attribute failed");
+ H5TOOLS_DEBUG("diff_attr got attributes");
+ nfound = diff_attr_data(attr1_id, attr2_id, name1, name2, path1, path2, opts);
if(H5Aclose(attr1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type first attribute failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type first attribute failed");
if(H5Aclose(attr2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Aget_type second attribute failed");
- if(H5Tclose(mtype1_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose first attribute mtype failed");
- if(H5Tclose(mtype2_id) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tclose second attribute mtype failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Aget_type second attribute failed");
nfound_total += nfound;
}
@@ -549,30 +595,14 @@ done:
opts->err_stat = opts->err_stat | ret_value;
H5E_BEGIN_TRY {
- if(buf1) {
- if(buf1hasdata && TRUE == h5tools_detect_vlen(mtype1_id))
- H5Treclaim(mtype1_id, space1_id, H5P_DEFAULT, buf1);
- HDfree(buf1);
- } /* end if */
- if(buf2) {
- if(buf2hasdata && TRUE == h5tools_detect_vlen(mtype2_id))
- H5Treclaim(mtype2_id, space2_id, H5P_DEFAULT, buf2);
- HDfree(buf2);
- } /* end if */
-
table_attrs_free(match_list_attrs);
- H5Tclose(ftype1_id);
- H5Tclose(ftype2_id);
- H5Tclose(mtype1_id);
- H5Tclose(mtype2_id);
- H5Sclose(space1_id);
- H5Sclose(space2_id);
H5Aclose(attr1_id);
H5Aclose(attr2_id);
} H5E_END_TRY;
- h5diffdebug2("diff_attr end - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("diff_attr end - errstat:%d", opts->err_stat);
+ H5TOOLS_ENDDEBUG("exit");
return nfound_total;
}
diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c
index 96f1d1a..8a6eeeb 100644
--- a/tools/lib/h5diff_dset.c
+++ b/tools/lib/h5diff_dset.c
@@ -33,15 +33,15 @@ hsize_t diff_dataset(hid_t file1_id,
const char *obj2_name,
diff_opt_t *opts)
{
- int ret_value = opts->err_stat;
- int status = -1;
- hid_t did1 = -1;
- hid_t did2 = -1;
- hid_t dcpl1 = -1;
- hid_t dcpl2 = -1;
- hsize_t nfound = 0;
-
- h5difftrace("diff_dataset start\n");
+ int status = -1;
+ hid_t did1 = -1;
+ hid_t did2 = -1;
+ hid_t dcpl1 = -1;
+ hid_t dcpl2 = -1;
+ hsize_t nfound = 0;
+ diff_err_t ret_value = opts->err_stat;
+
+ H5TOOLS_DEBUG("diff_dataset start - errstat:%d", opts->err_stat);
/*-------------------------------------------------------------------------
* open the handles
*-------------------------------------------------------------------------
@@ -49,17 +49,17 @@ hsize_t diff_dataset(hid_t file1_id,
/* Open the datasets */
if((did1 = H5Dopen2(file1_id, obj1_name, H5P_DEFAULT)) < 0) {
parallel_print("Cannot open dataset <%s>\n", obj1_name);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dopen2 first dataset failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dopen2 first dataset failed");
}
if((did2 = H5Dopen2(file2_id, obj2_name, H5P_DEFAULT)) < 0) {
parallel_print("Cannot open dataset <%s>\n", obj2_name);
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dopen2 second dataset failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dopen2 second dataset failed");
}
if((dcpl1 = H5Dget_create_plist(did1)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_create_plist first dataset failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_create_plist first dataset failed");
if((dcpl2 = H5Dget_create_plist(did2)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_create_plist second dataset failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_create_plist second dataset failed");
/*-------------------------------------------------------------------------
* check if the dataset creation property list has filters that
@@ -68,11 +68,12 @@ hsize_t diff_dataset(hid_t file1_id,
* 2) the internal filters might be turned off
*-------------------------------------------------------------------------
*/
+ H5TOOLS_DEBUG("diff_dataset h5tools_canreadf then diff_datasetid");
if ((status = h5tools_canreadf((opts->m_verbose ? obj1_name : NULL), dcpl1) == 1) &&
(status = h5tools_canreadf((opts->m_verbose ? obj2_name : NULL), dcpl2) == 1))
nfound = diff_datasetid(did1, did2, obj1_name, obj2_name, opts);
else if (status < 0) {
- HGOTO_ERROR(1, H5E_tools_min_id_g, "h5tools_canreadf failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "h5tools_canreadf failed");
}
else {
ret_value = 1;
@@ -91,7 +92,8 @@ done:
/* enable error reporting */
} H5E_END_TRY;
- h5diffdebug3("diff_dataset finish:%d - errstat:%d\n", nfound, opts->err_stat);
+ H5TOOLS_DEBUG("diff_dataset finish:%d - errstat:%d", nfound, opts->err_stat);
+ H5TOOLS_ENDDEBUG("exit");
return nfound;
}
@@ -152,16 +154,15 @@ hsize_t diff_datasetid(hid_t did1,
const char *obj2_name,
diff_opt_t *opts)
{
- int ret_value = opts->err_stat;
- hid_t sid1 = -1;
- hid_t sid2 = -1;
- hid_t f_tid1 = -1;
- hid_t f_tid2 = -1;
- hid_t dam_tid = -1; /* m_tid for diff_array function */
- hid_t m_tid1 = -1;
- hid_t m_tid2 = -1;
- hid_t dcpl1 = -1;
- hid_t dcpl2 = -1;
+ hid_t sid1 = H5I_INVALID_HID;
+ hid_t sid2 = H5I_INVALID_HID;
+ hid_t f_tid1 = H5I_INVALID_HID;
+ hid_t f_tid2 = H5I_INVALID_HID;
+ hid_t dam_tid = H5I_INVALID_HID; /* m_tid for diff_array function */
+ hid_t m_tid1 = H5I_INVALID_HID;
+ hid_t m_tid2 = H5I_INVALID_HID;
+ hid_t dcpl1 = H5I_INVALID_HID;
+ hid_t dcpl2 = H5I_INVALID_HID;
H5D_layout_t stl1 = -1;
H5D_layout_t stl2 = -1;
size_t dam_size; /* m_size for diff_array function */
@@ -189,37 +190,38 @@ hsize_t diff_datasetid(hid_t did1,
void *buf2 = NULL;
void *sm_buf1 = NULL;
void *sm_buf2 = NULL;
- hid_t sm_space = -1; /*stripmine data space */
+ hid_t sm_space = H5I_INVALID_HID; /*stripmine data space */
size_t need; /* bytes needed for malloc */
int i;
unsigned int vl_data1 = 0; /*contains VL datatypes */
unsigned int vl_data2 = 0; /*contains VL datatypes */
+ diff_err_t ret_value = opts->err_stat;
- h5difftrace("diff_datasetid start\n");
+ H5TOOLS_DEBUG("diff_datasetid start - errstat:%d", opts->err_stat);
/* Get the dataspace handle */
if((sid1 = H5Dget_space(did1)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_space failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_space failed");
/* Get rank */
if((rank1 = H5Sget_simple_extent_ndims(sid1)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sget_simple_extent_ndims failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sget_simple_extent_ndims failed");
/* Get the dataspace handle */
if((sid2 = H5Dget_space(did2)) < 0 )
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_space failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_space failed");
/* Get rank */
if((rank2 = H5Sget_simple_extent_ndims(sid2)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sget_simple_extent_ndims failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sget_simple_extent_ndims failed");
/* Get dimensions */
if(H5Sget_simple_extent_dims(sid1, dims1, maxdim1) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sget_simple_extent_dims failed");
/* Get dimensions */
if(H5Sget_simple_extent_dims(sid2, dims2, maxdim2) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
- h5diffdebug3("rank: %ld - %ld\n", rank1, rank2);
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sget_simple_extent_dims failed");
+ H5TOOLS_DEBUG("rank: %ld - %ld", rank1, rank2);
/*-------------------------------------------------------------------------
* get the file data type
@@ -228,35 +230,35 @@ hsize_t diff_datasetid(hid_t did1,
/* Get the data type */
if((f_tid1 = H5Dget_type(did1)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_type failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_type failed");
/* Get the data type */
if((f_tid2 = H5Dget_type(did2)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_type failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_type failed");
/*-------------------------------------------------------------------------
* get the storage layout type
*-------------------------------------------------------------------------
*/
if((dcpl1 = H5Dget_create_plist(did1)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_create_plist failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_create_plist failed");
if((dcpl2 = H5Dget_create_plist(did2)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dget_create_plist failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dget_create_plist failed");
if((stl1 = H5Pget_layout(dcpl1)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Pget_layout failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Pget_layout failed");
if((stl2 = H5Pget_layout(dcpl2)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Pget_layout failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Pget_layout failed");
/*-------------------------------------------------------------------------
* check for empty datasets
*-------------------------------------------------------------------------
*/
- h5difftrace("check for empty datasets\n");
+ H5TOOLS_DEBUG("check for empty datasets");
storage_size1 = H5Dget_storage_size(did1);
storage_size2 = H5Dget_storage_size(did2);
- h5diffdebug3("storage size: %ld - %ld\n", storage_size1, storage_size2);
+ H5TOOLS_DEBUG("storage size: %ld - %ld", storage_size1, storage_size2);
if(storage_size1 == 0 || storage_size2 == 0) {
if(stl1 == H5D_VIRTUAL || stl2 == H5D_VIRTUAL) {
@@ -280,33 +282,45 @@ hsize_t diff_datasetid(hid_t did1,
obj1_name, obj2_name,
opts, 0) != 1)
can_compare = 0;
- h5diffdebug2("diff_can_type - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("diff_can_type - errstat:%d", opts->err_stat);
/*-------------------------------------------------------------------------
* memory type and sizes
*-------------------------------------------------------------------------
*/
- h5difftrace("check for memory type and sizes\n");
- if((m_tid1 = H5Tget_native_type(f_tid1, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ H5TOOLS_DEBUG("check for memory type and sizes");
+ if (H5Tget_class(f_tid1) == H5T_REFERENCE) {
+ if((m_tid1 = H5Tcopy(H5T_STD_REF)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tcopy(H5T_STD_REF) first ftype failed");
+ }
+ else {
+ if((m_tid1 = H5Tget_native_type(f_tid1, H5T_DIR_DEFAULT)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tget_native_type first ftype failed");
+ }
- if((m_tid2 = H5Tget_native_type(f_tid2, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ if (H5Tget_class(f_tid2) == H5T_REFERENCE) {
+ if((m_tid2 = H5Tcopy(H5T_STD_REF)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tcopy(H5T_STD_REF) second ftype failed");
+ }
+ else {
+ if((m_tid2 = H5Tget_native_type(f_tid2, H5T_DIR_DEFAULT)) < 0)
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Tget_native_type second ftype failed");
+ }
m_size1 = H5Tget_size(m_tid1);
m_size2 = H5Tget_size(m_tid2);
- h5diffdebug3("type size: %ld - %ld\n", m_size1, m_size2);
+ H5TOOLS_DEBUG("type size: %ld - %ld", m_size1, m_size2);
/*-------------------------------------------------------------------------
* check for different signed/unsigned types
*-------------------------------------------------------------------------
*/
if(can_compare) {
- h5difftrace("can_compare for sign\n");
+ H5TOOLS_DEBUG("can_compare for sign");
sign1 = H5Tget_sign(m_tid1);
sign2 = H5Tget_sign(m_tid2);
if(sign1 != sign2) {
- h5difftrace("sign1 != sign2\n");
+ H5TOOLS_DEBUG("sign1 != sign2");
if((opts->m_verbose || opts->m_list_not_cmp) && obj1_name && obj2_name) {
parallel_print("Not comparable: <%s> has sign %s ", obj1_name, get_sign(sign1));
parallel_print("and <%s> has sign %s\n", obj2_name, get_sign(sign2));
@@ -315,6 +329,7 @@ hsize_t diff_datasetid(hid_t did1,
can_compare = 0;
opts->not_cmp = 1;
}
+ H5TOOLS_DEBUG("can_compare for sign - can_compare=%d opts->not_cmp=%d", can_compare, opts->not_cmp);
}
/* Check if type is either VLEN-data or VLEN-string to reclaim any
@@ -324,7 +339,7 @@ hsize_t diff_datasetid(hid_t did1,
vl_data1 = TRUE;
if(TRUE == h5tools_detect_vlen(m_tid2))
vl_data2 = TRUE;
- h5diffdebug2("h5tools_detect_vlen - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("h5tools_detect_vlen %d:%d - errstat:%d", vl_data1, vl_data2, opts->err_stat);
/*------------------------------------------------------------------------
* only attempt to compare if possible
@@ -332,7 +347,7 @@ hsize_t diff_datasetid(hid_t did1,
*/
if(can_compare) { /* it is possible to compare */
H5T_class_t tclass = H5Tget_class(f_tid1);
- h5difftrace("can_compare attempt\n");
+ H5TOOLS_DEBUG("can_compare attempt");
/*-----------------------------------------------------------------
* get number of elements
@@ -346,19 +361,19 @@ hsize_t diff_datasetid(hid_t did1,
for(i = 0; i < rank2; i++)
nelmts2 *= dims2[i];
- h5diffdebug3("nelmts: %ld - %ld\n", nelmts1, nelmts2);
+ H5TOOLS_DEBUG("nelmts: %ld - %ld", nelmts1, nelmts2);
if(tclass != H5T_ARRAY) {
/*-----------------------------------------------------------------
* "upgrade" the smaller memory size
*------------------------------------------------------------------
*/
- h5difftrace("upgrade the smaller memory size?\n");
+ H5TOOLS_DEBUG("NOT H5T_ARRAY, upgrade the smaller memory size?");
if (FAIL == match_up_memsize (f_tid1, f_tid2,
&m_tid1, &m_tid2,
&m_size1, &m_size2))
- HGOTO_ERROR(1, H5E_tools_min_id_g, "match_up_memsize failed");
- h5diffdebug3("m_size: %ld - %ld\n", m_size1, m_size2);
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "match_up_memsize failed");
+ H5TOOLS_DEBUG("m_size: %ld - %ld", m_size1, m_size2);
dadims = dims1;
dam_size = m_size1;
dam_tid = m_tid1;
@@ -366,7 +381,7 @@ hsize_t diff_datasetid(hid_t did1,
need = (size_t)(nelmts1 * m_size1); /* bytes needed */
}
else {
- h5diffdebug3("Array dims: %d - %d\n", dims1[0], dims2[0]);
+ H5TOOLS_DEBUG("Array dims: %d - %d", dims1[0], dims2[0]);
/* Compare the smallest array, but create the largest buffer */
if(m_size1 <= m_size2) {
dadims = dims1;
@@ -388,9 +403,10 @@ hsize_t diff_datasetid(hid_t did1,
name1 = diff_basename(obj1_name);
if(obj2_name)
name2 = diff_basename(obj2_name);
- h5diffdebug3("obj_names: %s - %s\n", name1, name2);
+ H5TOOLS_DEBUG("obj_names: %s - %s", name1, name2);
+ H5TOOLS_DEBUG("read/compare");
/*----------------------------------------------------------------
* read/compare
*-----------------------------------------------------------------
@@ -401,23 +417,24 @@ hsize_t diff_datasetid(hid_t did1,
} /* end if */
if(buf1 != NULL && buf2 != NULL) {
- h5difftrace("buf1 != NULL && buf2 != NULL\n");
+ H5TOOLS_DEBUG("buf1 != NULL && buf2 != NULL");
+ H5TOOLS_DEBUG("H5Dread did1");
if(H5Dread(did1, m_tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dread failed");
- h5difftrace("H5Dread did2\n");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dread failed");
+ H5TOOLS_DEBUG("H5Dread did2");
if(H5Dread(did2, m_tid2, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dread failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dread failed");
/* array diff */
nfound = diff_array(buf1, buf2, danelmts, (hsize_t)0, rank1, dadims,
opts, name1, name2, dam_tid, did1, did2);
- h5diffdebug2("diff_array nfound:%d\n", nfound);
+ H5TOOLS_DEBUG("diff_array nfound:%d - errstat:%d", nfound, opts->err_stat);
/* reclaim any VL memory, if necessary */
- h5diffdebug2("check vl_data1:%d\n", vl_data1);
+ H5TOOLS_DEBUG("check vl_data1:%d", vl_data1);
if(vl_data1)
H5Treclaim(m_tid1, sid1, H5P_DEFAULT, buf1);
- h5diffdebug2("check vl_data2:%d\n", vl_data2);
+ H5TOOLS_DEBUG("check vl_data2:%d", vl_data2);
if(vl_data2)
H5Treclaim(m_tid2, sid2, H5P_DEFAULT, buf2);
if(buf1 != NULL) {
@@ -459,7 +476,7 @@ hsize_t diff_datasetid(hid_t did1,
size = 1;
sm_size[i - 1] = MIN(dadims[i - 1], size);
sm_nbytes *= sm_size[i - 1];
- h5diffdebug2("sm_nbytes: %ld\n", sm_nbytes);
+ H5TOOLS_DEBUG("sm_nbytes: %ld", sm_nbytes);
} /* end for */
/* malloc return code should be verified.
@@ -470,9 +487,9 @@ hsize_t diff_datasetid(hid_t did1,
* E.g., sm_space.
*/
if((sm_buf1 = HDmalloc((size_t)sm_nbytes)) == NULL)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "HDmalloc failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "HDmalloc failed");
if((sm_buf2 = HDmalloc((size_t)sm_nbytes)) == NULL)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "HDmalloc failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "HDmalloc failed");
sm_nelmts = sm_nbytes / p_type_nbytes;
sm_space = H5Screate_simple(1, &sm_nelmts, NULL);
@@ -489,19 +506,19 @@ hsize_t diff_datasetid(hid_t did1,
hs_nelmts *= hs_size[i];
} /* end for */
if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, hs_offset, NULL, hs_size, NULL) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sselect_hyperslab failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sselect_hyperslab failed");
if(H5Sselect_hyperslab(sid2, H5S_SELECT_SET, hs_offset, NULL, hs_size, NULL) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sselect_hyperslab failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sselect_hyperslab failed");
if(H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, zero, NULL, &hs_nelmts, NULL) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Sselect_hyperslab failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Sselect_hyperslab failed");
} /* end if */
else
hs_nelmts = 1;
if(H5Dread(did1, m_tid1, sm_space, sid1, H5P_DEFAULT, sm_buf1) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dread failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dread failed");
if(H5Dread(did2, m_tid2, sm_space, sid2, H5P_DEFAULT, sm_buf2) < 0)
- HGOTO_ERROR(1, H5E_tools_min_id_g, "H5Dread failed");
+ H5TOOLS_GOTO_ERROR(H5DIFF_ERR, "H5Dread failed");
/* get array differences. in the case of hyperslab read, increment the number of differences
found in each hyperslab and pass the position at the beginning for printing */
@@ -534,6 +551,7 @@ hsize_t diff_datasetid(hid_t did1,
H5Sclose(sm_space);
} /* hyperslab read */
+ H5TOOLS_DEBUG("can_compare complete");
} /*can_compare*/
@@ -541,7 +559,7 @@ hsize_t diff_datasetid(hid_t did1,
* close
*-------------------------------------------------------------------------
*/
- h5diffdebug2("reclaim any VL memory - errstat:%d\n", opts->err_stat);
+ H5TOOLS_DEBUG("reclaim any VL memory - errstat:%d", opts->err_stat);
done:
opts->err_stat = opts->err_stat | ret_value;
@@ -588,7 +606,8 @@ done:
/* enable error reporting */
} H5E_END_TRY;
- h5diffdebug3("diff_datasetid return:%d with nfound:%d\n", ret_value, nfound);
+ H5TOOLS_DEBUG("diff_datasetid return:%d with nfound:%d", ret_value, nfound);
+ H5TOOLS_ENDDEBUG("exit");
return nfound;
}
@@ -617,22 +636,22 @@ int diff_can_type(hid_t f_tid1, /* file data type */
diff_opt_t *opts,
int is_compound)
{
- int ret_value = 1; /* can_compare value */
H5T_class_t tclass1;
H5T_class_t tclass2;
int maxdim_diff = 0; /* maximum dimensions are different */
int dim_diff = 0; /* current dimensions are different */
int i;
+ int ret_value = 1;
- h5difftrace("diff_can_type start\n");
+ H5TOOLS_DEBUG("diff_can_type start");
/*-------------------------------------------------------------------------
* check for the same class
*-------------------------------------------------------------------------
*/
if((tclass1 = H5Tget_class(f_tid1)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_class first object failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Tget_class first object failed");
if((tclass2 = H5Tget_class(f_tid2)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_class second object failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Tget_class second object failed");
if(tclass1 != tclass2) {
if((opts->m_verbose || opts->m_list_not_cmp) && obj1_name && obj2_name) {
@@ -648,7 +667,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
}
}
opts->not_cmp = 1;
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
}
/*-------------------------------------------------------------------------
@@ -662,7 +681,8 @@ int diff_can_type(hid_t f_tid1, /* file data type */
obj1_name, obj2_name, get_class(tclass2));
} /* end if */
opts->not_cmp = 1;
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
+ break;
case H5T_INTEGER:
case H5T_FLOAT:
@@ -677,7 +697,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
case H5T_NO_CLASS:
case H5T_NCLASSES:
default:
- h5diffdebug2("diff_can_type class - %s\n", get_class(tclass1));
+ H5TOOLS_DEBUG("diff_can_type class - %s", get_class(tclass1));
break;
} /* end switch */
@@ -717,7 +737,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
parallel_print("\n");
}
opts->not_cmp = 1;
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
}
/*-------------------------------------------------------------------------
@@ -753,7 +773,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
}
}
opts->not_cmp = 1;
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
}
/*-------------------------------------------------------------------------
@@ -775,7 +795,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
if(tclass1 == H5T_STRING) {
htri_t vstrtype1 = -1;
htri_t vstrtype2 = -1;
- h5difftrace("diff_can_type end - H5T_STRING\n");
+ H5TOOLS_DEBUG("diff_can_type end - H5T_STRING");
vstrtype1 = H5Tis_variable_str(f_tid1);
vstrtype2 = H5Tis_variable_str(f_tid2);
@@ -786,7 +806,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
parallel_print("Not comparable: <%s> or <%s> is of mixed string type\n",
obj1_name, obj2_name);
opts->not_cmp = 1;
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
}
}
@@ -796,7 +816,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
int j;
hid_t memb_type1 = -1;
hid_t memb_type2 = -1;
- h5difftrace("diff_can_type end - H5T_COMPOUND\n");
+ H5TOOLS_DEBUG("diff_can_type end - H5T_COMPOUND");
nmembs1 = H5Tget_nmembers(f_tid1);
nmembs2 = H5Tget_nmembers(f_tid2);
@@ -808,7 +828,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
parallel_print("\n");
}
opts->not_cmp = 1;
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
}
for (j = 0; j < nmembs1; j++) {
@@ -821,7 +841,7 @@ int diff_can_type(hid_t f_tid1, /* file data type */
opts->not_cmp = 1;
H5Tclose(memb_type1);
H5Tclose(memb_type2);
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
}
H5Tclose(memb_type1);
H5Tclose(memb_type2);
@@ -829,9 +849,10 @@ int diff_can_type(hid_t f_tid1, /* file data type */
}
done:
if (ret_value < 0)
- opts->err_stat = 1;
+ opts->err_stat = H5DIFF_ERR;
- h5diffdebug2("diff_can_type end - %d\n", ret_value);
+ H5TOOLS_DEBUG("diff_can_type end - %d", ret_value);
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
diff --git a/tools/lib/h5diff_util.c b/tools/lib/h5diff_util.c
index 41a40f1..8da995a 100644
--- a/tools/lib/h5diff_util.c
+++ b/tools/lib/h5diff_util.c
@@ -346,7 +346,7 @@ herr_t match_up_memsize (hid_t f_tid1_id, hid_t f_tid2_id,
H5Tclose(*m_tid1);
if(((*m_tid1) = H5Tget_native_type(f_tid2_id, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Tget_native_type failed");
*m_size1 = H5Tget_size(*m_tid1);
} /* end if */
@@ -354,15 +354,16 @@ herr_t match_up_memsize (hid_t f_tid1_id, hid_t f_tid2_id,
H5Tclose(*m_tid2);
if(((*m_tid2) = H5Tget_native_type(f_tid1_id, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Tget_native_type failed");
*m_size2 = H5Tget_size(*m_tid2);
} /* end else */
} /* end if */
if((*m_size1) != (*m_size2))
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "native type sizes do not compare");
+ H5TOOLS_GOTO_ERROR(FAIL, "native type sizes do not compare");
done:
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c
index 627d4f2..84b8eb8 100644
--- a/tools/lib/h5tools.c
+++ b/tools/lib/h5tools.c
@@ -27,6 +27,8 @@ hid_t H5tools_ERR_STACK_g = 0;
hid_t H5tools_ERR_CLS_g = -1;
hid_t H5E_tools_g = -1;
hid_t H5E_tools_min_id_g = -1;
+hid_t H5E_tools_min_info_id_g = -1;
+hid_t H5E_tools_min_dbg_id_g = -1;
int compound_data;
FILE *rawattrstream = NULL; /* should initialize to stdout but gcc moans about it */
FILE *rawdatastream = NULL; /* should initialize to stdout but gcc moans about it */
@@ -89,14 +91,8 @@ typedef enum {
void
h5tools_init(void)
{
- char lib_str[256];
-
if (!h5tools_init_g) {
- /* register the error class */
- HDsnprintf(lib_str, sizeof(lib_str), "%d.%d.%d",H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE);
-
- H5tools_ERR_STACK_g = H5Ecreate_stack();
- H5TOOLS_INIT_ERROR()
+ H5TOOLS_INIT_ERROR();
if (!rawattrstream)
rawattrstream = stdout;
@@ -173,8 +169,8 @@ h5tools_close(void)
/* Clean up the reference path table, if it's been used */
term_ref_path_table();
- H5TOOLS_CLOSE_ERROR()
- H5Eclose_stack(H5tools_ERR_STACK_g);
+ H5TOOLS_CLOSE_ERROR();
+
/* Shut down the library */
H5close();
@@ -434,17 +430,17 @@ h5tools_set_error_file(const char *fname, int is_bin)
static hid_t
h5tools_get_fapl(hid_t fapl, const char *driver, unsigned *drivernum)
{
- hid_t new_fapl = -1; /* Copy of file access property list passed in, or new property list */
- int ret_value = SUCCEED;
+ hid_t new_fapl = -1; /* Copy of file access property list passed in, or new property list */
+ herr_t ret_value = SUCCEED;
/* Make a copy of the FAPL, for the file open call to use, eventually */
if (fapl == H5P_DEFAULT) {
if ((new_fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pcreate failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pcreate failed");
} /* end if */
else {
if ((new_fapl = H5Pcopy(fapl)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pcopy failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pcopy failed");
} /* end else */
/* Determine which driver the user wants to open the file with. Try
@@ -452,7 +448,7 @@ h5tools_get_fapl(hid_t fapl, const char *driver, unsigned *drivernum)
if (!HDstrcmp(driver, drivernames[SEC2_IDX])) {
/* SEC2 driver */
if (H5Pset_fapl_sec2(new_fapl) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pset_fapl_sec2 failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pset_fapl_sec2 failed");
if (drivernum)
*drivernum = SEC2_IDX;
@@ -464,7 +460,7 @@ h5tools_get_fapl(hid_t fapl, const char *driver, unsigned *drivernum)
* is the member size.
*/
if (H5Pset_fapl_family(new_fapl, (hsize_t) 0, H5P_DEFAULT) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pset_fapl_family failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pset_fapl_family failed");
if (drivernum)
*drivernum = FAMILY_IDX;
@@ -472,7 +468,7 @@ h5tools_get_fapl(hid_t fapl, const char *driver, unsigned *drivernum)
else if (!HDstrcmp(driver, drivernames[SPLIT_IDX])) {
/* SPLIT Driver */
if (H5Pset_fapl_split(new_fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pset_fapl_split failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pset_fapl_split failed");
if (drivernum)
*drivernum = SPLIT_IDX;
@@ -480,10 +476,10 @@ h5tools_get_fapl(hid_t fapl, const char *driver, unsigned *drivernum)
else if (!HDstrcmp(driver, drivernames[MULTI_IDX])) {
/* MULTI Driver */
if (H5Pset_fapl_multi(new_fapl, NULL, NULL, NULL, NULL, TRUE) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pset_fapl_multi failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pset_fapl_multi failed");
if(drivernum)
- *drivernum = MULTI_IDX;
+ *drivernum = MULTI_IDX;
}
#ifdef H5_HAVE_PARALLEL
else if(!HDstrcmp(driver, drivernames[MPIO_IDX])) {
@@ -496,7 +492,7 @@ h5tools_get_fapl(hid_t fapl, const char *driver, unsigned *drivernum)
if(mpi_initialized && !mpi_finalized) {
if(H5Pset_fapl_mpio(new_fapl, MPI_COMM_WORLD, MPI_INFO_NULL) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pset_fapl_mpio failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pset_fapl_mpio failed");
if(drivernum)
*drivernum = MPIO_IDX;
} /* end if */
@@ -745,18 +741,23 @@ h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
if (!ctx->need_prefix)
return;
+ H5TOOLS_DEBUG("enter");
+
HDmemset(&prefix, 0, sizeof(h5tools_str_t));
HDmemset(&str, 0, sizeof(h5tools_str_t));
/* Terminate previous line, if any */
+ H5TOOLS_DEBUG("before CR elmtno=%ld, ctx->cur_column=%d, info->idx_fmt=%s, info->line_suf=%s", elmtno, ctx->cur_column, info->idx_fmt, info->line_suf);
if (ctx->cur_column) {
PUTSTREAM(OPT(info->line_suf, ""), stream);
HDputc('\n', stream);
PUTSTREAM(OPT(info->line_sep, ""), stream);
}
+ H5TOOLS_DEBUG("after CR elmtno=%ld, ctx->ndims=%d", elmtno, ctx->ndims);
/* Calculate new prefix */
h5tools_str_prefix(&prefix, info, elmtno, ctx->ndims, ctx);
+ H5TOOLS_DEBUG("prefix=%s - str=%s", prefix.s, str.s);
/* Write new prefix to output */
if (ctx->indent_level > 0)
@@ -784,8 +785,9 @@ h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_pre), stream);
templength = h5tools_str_len(&prefix);
+ H5TOOLS_DEBUG("prefix=%s - templength=%d", prefix.s, templength);
- for (u = 0; u < indentlevel; u++)
+ for (u = 0; u < indentlevel; u++) {
/*we already made the indent for the array indices case */
if (!info->pindex) {
PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_indent), stream);
@@ -795,14 +797,19 @@ h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
/*we cannot count the prefix for the array indices case */
templength += h5tools_str_len(&str);
}
+ }
+ H5TOOLS_DEBUG("prefix=%s - templength=%d", prefix.s, templength);
ctx->cur_column = ctx->prev_prefix_len = templength;
ctx->cur_elmt = 0;
ctx->need_prefix = 0;
+ H5TOOLS_DEBUG("prefix=%s - str=%s", prefix.s, str.s);
/* Free string */
h5tools_str_close(&prefix);
h5tools_str_close(&str);
+
+ H5TOOLS_ENDDEBUG("exit");
}
/*-------------------------------------------------------------------------
@@ -927,7 +934,11 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
if (stream == NULL)
return dimension_break;
+ H5TOOLS_DEBUG("enter need_prefix=%d", ctx->need_prefix);
+ H5TOOLS_DEBUG("elmt_counter=%ld - local_elmt_counter=%ld", elmt_counter, local_elmt_counter);
+
s = h5tools_str_fmt(buffer, (size_t)0, "%s");
+ H5TOOLS_DEBUG("s=%s", s);
/*
* If the element would split on multiple lines if printed at our
@@ -954,6 +965,7 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
*/
ctx->need_prefix = TRUE;
}
+ H5TOOLS_DEBUG("ctx->need_prefix=%d", ctx->need_prefix);
}
/*
@@ -969,7 +981,9 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
ctx->need_prefix = TRUE;
dimension_break = FALSE;
}
+ H5TOOLS_DEBUG("ctx->need_prefix=%d", ctx->need_prefix);
}
+ H5TOOLS_DEBUG("elmt_counter=%ld - ctx->size_last_dim=%ld info->line_suf=%s", elmt_counter, ctx->size_last_dim, info->line_suf);
/*
* If the previous element occupied multiple lines and this element
@@ -983,6 +997,7 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
HDstrlen(OPT(info->elmt_suf2, " ")) +
HDstrlen(OPT(info->line_suf, ""))) > ncols)
ctx->need_prefix = TRUE;
+ H5TOOLS_DEBUG("ctx->need_prefix=%d", ctx->need_prefix);
/*
* If too many elements have already been printed then we need to
@@ -990,6 +1005,7 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
*/
if (info->line_per_line > 0 && ctx->cur_elmt >= info->line_per_line)
ctx->need_prefix = TRUE;
+ H5TOOLS_DEBUG("ctx->need_prefix=%d", ctx->need_prefix);
/*
* Each OPTIONAL_LINE_BREAK embedded in the rendered string can cause
@@ -1018,6 +1034,7 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
* Print the prefix or separate the beginning of this element
* from the previous element.
*/
+ H5TOOLS_DEBUG("ctx->need_prefix=%d", ctx->need_prefix);
if (ctx->need_prefix) {
if (secnum)
multiline++;
@@ -1027,6 +1044,7 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
* this is necessary to print the array indices
*/
*curr_pos = ctx->sm_pos + local_elmt_counter;
+ H5TOOLS_DEBUG("curr_pos=%ld - ctx->sm_pos=%ld - ctx->ndims=%ld", *curr_pos, ctx->sm_pos, ctx->ndims);
h5tools_simple_prefix(stream, info, ctx, *curr_pos, secnum);
}
@@ -1034,6 +1052,7 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
PUTSTREAM(OPT(info->elmt_suf2, " "), stream);
ctx->cur_column += HDstrlen(OPT(info->elmt_suf2, " "));
}
+ H5TOOLS_DEBUG("section=%s", section);
/* Print the section */
PUTSTREAM(section, stream);
@@ -1041,6 +1060,9 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
}
ctx->prev_multiline = multiline;
+
+ H5TOOLS_ENDDEBUG("exit");
+
return dimension_break;
}
@@ -1080,16 +1102,17 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
int secnum; /* section sequence number */
int multiline; /* datum was multiline */
+ H5TOOLS_DEBUG("enter");
+ H5TOOLS_DEBUG("elmt_counter=%ld - local_elmt_counter=%ld", elmt_counter, local_elmt_counter);
+
s = h5tools_str_fmt(buffer, (size_t)0, "%s");
/*
* If the element would split on multiple lines if printed at our
* current location...
*/
- if (info->line_multi_new == 1 &&
- (ctx->cur_column + h5tools_count_ncols(s) +
- HDstrlen(OPT(info->elmt_suf2, " ")) +
- HDstrlen(OPT(info->line_suf, ""))) > ncols) {
+ if (info->line_multi_new == 1 && (ctx->cur_column + h5tools_count_ncols(s) +
+ HDstrlen(OPT(info->elmt_suf2, " ")) + HDstrlen(OPT(info->line_suf, ""))) > ncols) {
if (ctx->prev_multiline) {
/*
* ... and the previous element also occupied more than one
@@ -1098,8 +1121,7 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
ctx->need_prefix = TRUE;
}
else if ((ctx->prev_prefix_len + h5tools_count_ncols(s) +
- HDstrlen(OPT(info->elmt_suf2, " ")) +
- HDstrlen(OPT(info->line_suf, ""))) <= ncols) {
+ HDstrlen(OPT(info->elmt_suf2, " ")) + HDstrlen(OPT(info->line_suf, ""))) <= ncols) {
/*
* ...but *could* fit on one line otherwise, then we
* should end the current line and start this element on its
@@ -1129,12 +1151,8 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
* is too long to fit on a line then start this element at the
* beginning of the line.
*/
- if (info->line_multi_new == 1 &&
- ctx->prev_multiline &&
- (ctx->cur_column +
- h5tools_count_ncols(s) +
- HDstrlen(OPT(info->elmt_suf2, " ")) +
- HDstrlen(OPT(info->line_suf, ""))) > ncols)
+ if (info->line_multi_new == 1 && ctx->prev_multiline &&
+ (ctx->cur_column + h5tools_count_ncols(s) + HDstrlen(OPT(info->elmt_suf2, " ")) + HDstrlen(OPT(info->line_suf, ""))) > ncols)
ctx->need_prefix = TRUE;
/*
@@ -1150,8 +1168,7 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
* one-at a time.
*/
multiline = 0;
- for (secnum = 0, multiline = 0; (section = HDstrtok(secnum ? NULL : s,
- OPTIONAL_LINE_BREAK)); secnum++) {
+ for (secnum = 0, multiline = 0; (section = HDstrtok(secnum ? NULL : s, OPTIONAL_LINE_BREAK)); secnum++) {
/*
* If the current section plus possible suffix and end-of-line
* information would cause the output to wrap then we need to
@@ -1163,10 +1180,7 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
* this check to happen for the first line
*/
if ((!info->skip_first || local_elmt_counter) &&
- (ctx->cur_column +
- HDstrlen(section) +
- HDstrlen(OPT(info->elmt_suf2, " ")) +
- HDstrlen(OPT(info->line_suf, ""))) > ncols)
+ (ctx->cur_column + HDstrlen(section) + HDstrlen(OPT(info->elmt_suf2, " ")) + HDstrlen(OPT(info->line_suf, ""))) > ncols)
ctx->need_prefix = 1;
/*
@@ -1177,11 +1191,12 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
if (secnum)
multiline++;
- /* pass to the prefix in h5tools_simple_prefix the total
+ /* pass to the prefix in h5tools_region_simple_prefix the total
* position instead of the current stripmine position i;
* this is necessary to print the array indices
*/
*curr_pos = ctx->sm_pos + local_elmt_counter;
+ H5TOOLS_DEBUG("curr_pos=%ld - ctx->sm_pos=%ld", *curr_pos, ctx->sm_pos);
h5tools_region_simple_prefix(stream, info, ctx, local_elmt_counter, ptdata, secnum);
}
@@ -1196,6 +1211,9 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
}
ctx->prev_multiline = multiline;
+
+ H5TOOLS_ENDDEBUG("exit");
+
return dimension_break;
}
@@ -1213,13 +1231,19 @@ init_acc_pos(h5tools_context_t *ctx, hsize_t *dims)
int i;
unsigned j;
+ H5TOOLS_DEBUG("enter");
+
if(ctx->ndims > 0) {
ctx->acc[ctx->ndims - 1] = 1;
- for (i = ((int)ctx->ndims - 2); i >= 0; i--)
+ for (i = ((int)ctx->ndims - 2); i >= 0; i--) {
ctx->acc[i] = ctx->acc[i + 1] * dims[i + 1];
+ H5TOOLS_DEBUG("ctx->acc[%d]=%ld", i, ctx->acc[i]);
+ }
for (j = 0; j < ctx->ndims; j++)
ctx->pos[j] = 0;
}
+
+ H5TOOLS_ENDDEBUG("exit");
}
/*-------------------------------------------------------------------------
@@ -1234,23 +1258,26 @@ init_acc_pos(h5tools_context_t *ctx, hsize_t *dims)
int
render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t block_nelmts)
{
- HERR_INIT(int, SUCCEED)
- unsigned char *mem = (unsigned char*)_mem;
- size_t size; /* datum size */
- hsize_t block_index;
- H5T_class_t type_class;
-
+ unsigned char *mem = (unsigned char*)_mem;
+ size_t size; /* datum size */
+ hsize_t block_index;
+ H5T_class_t type_class;
+ hbool_t past_catch = FALSE;
+ int ret_value = 0;
+
+ H5TOOLS_DEBUG("enter");
if((size = H5Tget_size(tid)) == 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
+ H5TOOLS_THROW((-1), "H5Tget_size failed");
if((type_class = H5Tget_class(tid)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_class failed");
+ H5TOOLS_THROW((-1), "H5Tget_class failed");
switch (type_class) {
case H5T_INTEGER:
case H5T_FLOAT:
case H5T_ENUM:
case H5T_BITFIELD:
+ H5TOOLS_DEBUG("numbers");
block_index = block_nelmts * size;
while(block_index > 0) {
size_t bytes_in = 0; /* # of bytes to write */
@@ -1264,7 +1291,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
bytes_wrote = HDfwrite(mem, 1, bytes_in, stream);
if(bytes_wrote != bytes_in || (0 == bytes_wrote && HDferror(stream)))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "fwrite failed");
+ H5TOOLS_THROW((-1), "fwrite failed");
block_index -= (hsize_t)bytes_wrote;
mem = mem + bytes_wrote;
@@ -1277,6 +1304,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
char *s = NULL;
unsigned char tempuchar;
+ H5TOOLS_DEBUG("H5T_STRING");
pad = H5Tget_strpad(tid);
for (block_index = 0; block_index < block_nelmts; block_index++) {
@@ -1287,7 +1315,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
if (s != NULL)
size = HDstrlen(s);
else
- H5E_THROW(FAIL, H5E_tools_min_id_g, "NULL string");
+ H5TOOLS_THROW((-1), "NULL string");
}
else {
s = (char *) mem;
@@ -1295,7 +1323,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
for (i = 0; i < size && (s[i] || pad != H5T_STR_NULLTERM); i++) {
HDmemcpy(&tempuchar, &s[i], sizeof(unsigned char));
if (1 != HDfwrite(&tempuchar, sizeof(unsigned char), 1, stream))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "fwrite failed");
+ H5TOOLS_THROW((-1), "fwrite failed");
} /* i */
} /* for (block_index = 0; block_index < block_nelmts; block_index++) */
}
@@ -1305,8 +1333,9 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
int snmembs;
unsigned nmembs;
+ H5TOOLS_DEBUG("H5T_COMPOUND");
if((snmembs = H5Tget_nmembers(tid)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_nmembers of compound failed");
+ H5TOOLS_THROW((-1), "H5Tget_nmembers of compound failed");
nmembs = (unsigned)snmembs;
for (block_index = 0; block_index < block_nelmts; block_index++) {
@@ -1322,7 +1351,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
if (render_bin_output(stream, container, memb, mem + offset, 1) < 0) {
H5Tclose(memb);
- H5E_THROW(FAIL, H5E_tools_min_id_g, "render_bin_output of compound member failed");
+ H5TOOLS_THROW((-1), "render_bin_output of compound member failed");
}
H5Tclose(memb);
@@ -1336,6 +1365,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
hsize_t dims[H5S_MAX_RANK], temp_nelmts, nelmts;
hid_t memb = -1;
+ H5TOOLS_DEBUG("H5T_ARRAY");
/* get the array's base datatype for each element */
memb = H5Tget_super(tid);
ndims = H5Tget_array_ndims(tid);
@@ -1350,7 +1380,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
}
else {
H5Tclose(memb);
- H5E_THROW(FAIL, H5E_tools_min_id_g, "calculate the number of array elements failed");
+ H5TOOLS_THROW((-1), "calculate the number of array elements failed");
}
for (block_index = 0; block_index < block_nelmts; block_index++) {
@@ -1358,7 +1388,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
/* dump the array element */
if (render_bin_output(stream, container, memb, mem, nelmts) < 0) {
H5Tclose(memb);
- H5E_THROW(FAIL, H5E_tools_min_id_g, "render_bin_output failed");
+ H5TOOLS_THROW((-1), "render_bin_output failed");
}
}
H5Tclose(memb);
@@ -1369,7 +1399,8 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
hsize_t nelmts;
hid_t memb = -1;
- /* get the VL sequences's base datatype for each element */
+ H5TOOLS_DEBUG("H5T_VLEN");
+ /* get the VL sequences's base datatype for each element */
memb = H5Tget_super(tid);
for (block_index = 0; block_index < block_nelmts; block_index++) {
@@ -1380,7 +1411,7 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
/* dump the array element */
if (render_bin_output(stream, container, memb, ((char *) (((hvl_t *)((void *)mem))->p)), nelmts) < 0) {
H5Tclose(memb);
- H5E_THROW(FAIL, H5E_tools_min_id_g, "render_bin_output failed");
+ H5TOOLS_THROW((-1), "render_bin_output failed");
}
}
H5Tclose(memb);
@@ -1388,45 +1419,56 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
break;
case H5T_REFERENCE:
{
- if (size == H5R_DSET_REG_REF_BUF_SIZE) {
- /* if (H5Tequal(tid, H5T_STD_REF_DSETREG)) */
+ H5TOOLS_DEBUG("reference class type");
+ if (H5Tequal(tid, H5T_STD_REF)) {
+ H5TOOLS_DEBUG("H5T_STD_REF");
if (region_output) {
/* region data */
- hid_t region_id = -1;
- hid_t region_space = -1;
+ hid_t region_id = H5I_INVALID_HID;
+ hid_t region_space = H5I_INVALID_HID;
H5S_sel_type region_type;
for (block_index = 0; block_index < block_nelmts; block_index++) {
mem = ((unsigned char*)_mem) + block_index * size;
- region_id = H5Rdereference2(container, H5P_DEFAULT, H5R_DATASET_REGION, mem);
- if (region_id >= 0) {
- region_space = H5Rget_region(container, H5R_DATASET_REGION, mem);
- if (region_space >= 0) {
- region_type = H5Sget_select_type(region_space);
- if(region_type == H5S_SEL_POINTS)
- render_bin_output_region_points(region_space, region_id, stream, container);
- else
- render_bin_output_region_blocks(region_space, region_id, stream, container);
+ if((region_id = H5Ropen_object((const H5R_ref_t *)mem, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ H5TOOLS_INFO("H5Ropen_object H5T_STD_REF failed");
+ else {
+ if((region_space = H5Ropen_region((const H5R_ref_t *)mem, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ if (!h5tools_is_zero(mem, H5Tget_size(H5T_STD_REF))) {
+ region_type = H5Sget_select_type(region_space);
+ if(region_type == H5S_SEL_POINTS)
+ render_bin_output_region_points(region_space, region_id, stream, container);
+ else
+ render_bin_output_region_blocks(region_space, region_id, stream, container);
+ }
+ else {
+ H5TOOLS_INFO("H5Ropen_object H5T_STD_REF NULL");
+ }
H5Sclose(region_space);
} /* end if (region_space >= 0) */
H5Dclose(region_id);
- } /* end if (region_id >= 0) */
+ }
}
} /* end if (region_output... */
}
- else if (size == H5R_OBJ_REF_BUF_SIZE) {
- /* if (H5Tequal(tid, H5T_STD_REF_OBJ)) */
- ;
+ else if (H5Tequal(tid, H5T_STD_REF_DSETREG)) {
+ /* if (size == H5R_DSET_REG_REF_BUF_SIZE) */
+ H5TOOLS_DEBUG("H5T_STD_REF_DSETREG");
+ }
+ else if (H5Tequal(tid, H5T_STD_REF_OBJ)) {
+ /* if (size == H5R_OBJ_REF_BUF_SIZE) */
+ H5TOOLS_DEBUG("H5T_STD_REF_OBJ");
}
}
break;
case H5T_TIME:
case H5T_OPAQUE:
+ H5TOOLS_DEBUG("H5T_OPAQUE");
for (block_index = 0; block_index < block_nelmts; block_index++) {
mem = ((unsigned char*)_mem) + block_index * size;
if (size != HDfwrite(mem, sizeof(char), size, stream))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "fwrite failed");
+ H5TOOLS_THROW((-1), "fwrite failed");
} /* end for */
break;
@@ -1434,11 +1476,14 @@ render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t
case H5T_NCLASSES:
default:
/* Badness */
- H5E_THROW(FAIL, H5E_tools_min_id_g, "bad type class");
+ H5TOOLS_THROW((-1), "bad type class");
break;
} /* end switch */
+done:
+
CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1466,17 +1511,18 @@ render_bin_output_region_data_blocks(hid_t region_id, FILE *stream,
size_t type_size;
hid_t mem_space = -1;
void *region_buf = NULL;
+ hbool_t past_catch = FALSE;
hsize_t blkndx;
hid_t sid1 = -1;
- int ret_value = SUCCEED;
+ int ret_value = -1;
/* Get the dataspace of the dataset */
if((sid1 = H5Dget_space(region_id)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Dget_space failed");
+ H5TOOLS_THROW((-1), "H5Dget_space failed");
/* Allocate space for the dimension array */
if((dims1 = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for dims");
+ H5TOOLS_THROW((-1), "Could not allocate buffer for dims");
/* find the dimensions of each data space from the block coordinates */
numelem = 1;
@@ -1487,21 +1533,21 @@ render_bin_output_region_data_blocks(hid_t region_id, FILE *stream,
/* Create dataspace for reading buffer */
if((mem_space = H5Screate_simple((int)ndims, dims1, NULL)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Screate_simple failed");
+ H5TOOLS_THROW((-1), "H5Screate_simple failed");
if((type_size = H5Tget_size(type_id)) == 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
+ H5TOOLS_THROW((-1), "H5Tget_size failed");
if((region_buf = HDmalloc(type_size * (size_t)numelem)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate region buffer");
+ H5TOOLS_THROW((-1), "Could not allocate region buffer");
/* Select (x , x , ..., x ) x (y , y , ..., y ) hyperslab for reading memory dataset */
/* 1 2 n 1 2 n */
if((start = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for start");
+ H5TOOLS_THROW((-1), "Could not allocate buffer for start");
if((count = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for count");
+ H5TOOLS_THROW((-1), "Could not allocate buffer for count");
for (blkndx = 0; blkndx < nblocks; blkndx++) {
for (jndx = 0; jndx < ndims; jndx++) {
@@ -1510,30 +1556,33 @@ render_bin_output_region_data_blocks(hid_t region_id, FILE *stream,
}
if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Sselect_hyperslab failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Sselect_hyperslab failed");
if(H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, region_buf) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Dread failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Dread failed");
if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Sget_simple_extent_dims failed");
if(render_bin_output(stream, container, type_id, (char*)region_buf, numelem) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "render_bin_output of data region failed");
+ H5TOOLS_GOTO_ERROR((-1), "render_bin_output of data region failed");
/* Render the region data element end */
+done:
+ ;
} /* end for (blkndx = 0; blkndx < nblocks; blkndx++) */
- done:
+CATCH
HDfree(start);
HDfree(count);
HDfree(region_buf);
HDfree(dims1);
if(H5Sclose(mem_space) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_ERROR((-1), "H5Sclose failed");
if(H5Sclose(sid1) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_ERROR((-1), "H5Sclose failed");
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1551,7 +1600,6 @@ hbool_t
render_bin_output_region_blocks(hid_t region_space, hid_t region_id,
FILE *stream, hid_t container)
{
- HERR_INIT(hbool_t, TRUE)
hssize_t snblocks;
hsize_t nblocks;
hsize_t alloc_size;
@@ -1560,43 +1608,45 @@ render_bin_output_region_blocks(hid_t region_space, hid_t region_id,
unsigned ndims;
hid_t dtype = -1;
hid_t type_id = -1;
+ hbool_t past_catch = FALSE;
+ hbool_t ret_value = TRUE;
if((snblocks = H5Sget_select_hyper_nblocks(region_space)) <= 0)
- H5E_THROW(FALSE, H5E_tools_min_id_g, "H5Sget_select_hyper_nblocks failed");
+ H5TOOLS_THROW(FALSE, "H5Sget_select_hyper_nblocks failed");
nblocks = (hsize_t)snblocks;
/* Print block information */
if((sndims = H5Sget_simple_extent_ndims(region_space)) < 0)
- H5E_THROW(FALSE, H5E_tools_min_id_g, "H5Sget_simple_extent_ndims failed");
+ H5TOOLS_THROW(FALSE, "H5Sget_simple_extent_ndims failed");
ndims = (unsigned)sndims;
alloc_size = nblocks * ndims * 2 * sizeof(ptdata[0]);
if((ptdata = (hsize_t*) HDmalloc((size_t) alloc_size)) == NULL)
- HGOTO_ERROR(FALSE, H5E_tools_min_id_g, "Could not allocate buffer for ptdata");
+ H5TOOLS_GOTO_ERROR(FALSE, "Could not allocate buffer for ptdata");
if(H5Sget_select_hyper_blocklist(region_space, (hsize_t) 0, nblocks, ptdata) < 0)
- HGOTO_ERROR(FALSE, H5E_tools_min_id_g, "H5Rget_select_hyper_blocklist failed");
+ H5TOOLS_GOTO_ERROR(FALSE, "H5Rget_select_hyper_blocklist failed");
if((dtype = H5Dget_type(region_id)) < 0)
- HGOTO_ERROR(FALSE, H5E_tools_min_id_g, "H5Dget_type failed");
+ H5TOOLS_GOTO_ERROR(FALSE, "H5Dget_type failed");
if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(FALSE, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ H5TOOLS_GOTO_ERROR(FALSE, "H5Tget_native_type failed");
- render_bin_output_region_data_blocks(region_id, stream, container, ndims,
- type_id, nblocks, ptdata);
+ render_bin_output_region_data_blocks(region_id, stream, container, ndims, type_id, nblocks, ptdata);
- done:
+done:
HDfree(ptdata);
if(type_id > 0 && H5Tclose(type_id) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR(FALSE, "H5Tclose failed");
if(dtype > 0 && H5Tclose(dtype) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR(FALSE, "H5Tclose failed");
H5_LEAVE(TRUE)
- CATCH
+CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1626,37 +1676,38 @@ render_bin_output_region_data_points(hid_t region_space, hid_t region_id,
size_t type_size;
hid_t mem_space = -1;
void *region_buf = NULL;
- int ret_value = SUCCEED;
+ int ret_value = 0;
if((type_size = H5Tget_size(type_id)) == 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Tget_size failed");
if((region_buf = HDmalloc(type_size * (size_t)npoints)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for region");
+ H5TOOLS_GOTO_ERROR((-1), "Could not allocate buffer for region");
/* Allocate space for the dimension array */
if((dims1 = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for dims");
+ H5TOOLS_GOTO_ERROR((-1), "Could not allocate buffer for dims");
dims1[0] = npoints;
if((mem_space = H5Screate_simple(1, dims1, NULL)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Screate_simple failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Screate_simple failed");
if(H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Dread failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Dread failed");
if(H5Sget_simple_extent_dims(region_space, dims1, NULL) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Sget_simple_extent_dims failed");
if(render_bin_output(stream, container, type_id, (char*)region_buf, npoints) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "render_bin_output of data points failed");
+ H5TOOLS_GOTO_ERROR((-1), "render_bin_output of data points failed");
- done:
+done:
HDfree(region_buf);
HDfree(dims1);
if(H5Sclose(mem_space) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_ERROR((-1), "H5Sclose failed");
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1674,41 +1725,42 @@ hbool_t
render_bin_output_region_points(hid_t region_space, hid_t region_id,
FILE *stream, hid_t container)
{
- HERR_INIT(hbool_t, TRUE)
hssize_t snpoints;
hsize_t npoints;
int sndims;
unsigned ndims;
hid_t dtype = -1;
hid_t type_id = -1;
+ hbool_t past_catch = FALSE;
+ hbool_t ret_value = TRUE;
if((snpoints = H5Sget_select_elem_npoints(region_space)) <= 0)
- H5E_THROW(FALSE, H5E_tools_min_id_g, "H5Sget_select_elem_npoints failed");
+ H5TOOLS_THROW(FALSE, "H5Sget_select_elem_npoints failed");
npoints = (hsize_t)snpoints;
/* Allocate space for the dimension array */
if((sndims = H5Sget_simple_extent_ndims(region_space)) < 0)
- H5E_THROW(FALSE, H5E_tools_min_id_g, "H5Sget_simple_extent_ndims failed");
+ H5TOOLS_THROW(FALSE, "H5Sget_simple_extent_ndims failed");
ndims = (unsigned)sndims;
if((dtype = H5Dget_type(region_id)) < 0)
- HGOTO_ERROR(FALSE, H5E_tools_min_id_g, "H5Dget_type failed");
+ H5TOOLS_GOTO_ERROR(FALSE, "H5Dget_type failed");
if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(FALSE, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ H5TOOLS_GOTO_ERROR(FALSE, "H5Tget_native_type failed");
- render_bin_output_region_data_points(region_space, region_id,
- stream, container, ndims, type_id, npoints);
+ render_bin_output_region_data_points(region_space, region_id, stream, container, ndims, type_id, npoints);
- done:
+done:
if(type_id > 0 && H5Tclose(type_id) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR(FALSE, "H5Tclose failed");
if(dtype > 0 && H5Tclose(dtype) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR(FALSE, "H5Tclose failed");
H5_LEAVE(ret_value)
CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1752,10 +1804,10 @@ h5tools_is_zero(const void *_mem, size_t size)
*/
hbool_t
h5tools_is_obj_same(hid_t loc_id1, const char *name1,
- hid_t loc_id2, const char *name2)
+ hid_t loc_id2, const char *name2)
{
H5O_info_t oinfo1, oinfo2;
- hbool_t ret_val = 0;
+ hbool_t ret_val = FALSE;
if ( name1 && HDstrcmp(name1, "."))
H5Oget_info_by_name2(loc_id1, name1, &oinfo1, H5O_INFO_BASIC, H5P_DEFAULT);
@@ -1768,7 +1820,7 @@ h5tools_is_obj_same(hid_t loc_id1, const char *name1,
H5Oget_info2(loc_id2, &oinfo2, H5O_INFO_BASIC);
if (oinfo1.fileno == oinfo2.fileno && oinfo1.addr==oinfo2.addr)
- ret_val = 1;
+ ret_val = TRUE;
return ret_val;
}
diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h
index c360230..9440e7a 100644
--- a/tools/lib/h5tools.h
+++ b/tools/lib/h5tools.h
@@ -91,6 +91,7 @@
#define PACKED_BITS "PACKED_BITS"
#define PACKED_OFFSET "OFFSET"
#define PACKED_LENGTH "LENGTH"
+#define REGION "REGION"
#define VDS_VIRTUAL "VIRTUAL"
#define VDS_MAPPING "MAPPING"
#define VDS_SOURCE "SOURCE"
@@ -479,10 +480,10 @@ typedef struct h5tool_format_t {
/*used to skip the first set of checks for line length*/
int skip_first;
- /*flag used to hide or show the file number for obj refs*/
+ /*flag used to hide or show the file number for object refs*/
int obj_hidefileno;
- /*string used to format the output for the obje refs*/
+ /*string used to format the output for the object refs*/
const char *obj_format;
/*flag used to hide or show the file number for dataset regions*/
@@ -503,28 +504,6 @@ typedef struct h5tool_format_t {
} h5tool_format_t;
-typedef struct h5tools_context_t {
- size_t cur_column; /*current column for output */
- size_t cur_elmt; /*current element/output line */
- int need_prefix; /*is line prefix needed? */
- unsigned ndims; /*dimensionality */
- hsize_t p_min_idx[H5S_MAX_RANK]; /*min selected index */
- hsize_t p_max_idx[H5S_MAX_RANK]; /*max selected index */
- int prev_multiline; /*was prev datum multiline? */
- size_t prev_prefix_len; /*length of previous prefix */
- int continuation; /*continuation of previous data?*/
- hsize_t size_last_dim; /*the size of the last dimension,
- *needed so we can break after each
- *row */
- unsigned indent_level; /*the number of times we need some
- *extra indentation */
- unsigned default_indent_level; /*this is used when the indent level gets changed */
- hsize_t acc[H5S_MAX_RANK]; /* accumulator position */
- hsize_t pos[H5S_MAX_RANK]; /* matrix position */
- hsize_t sm_pos; /* current stripmine element position */
- const struct H5LD_memb_t * const *cmpd_listv; /* h5watch: vector containing info about the list of compound fields to be printed */
-} h5tools_context_t;
-
typedef struct subset_d {
hsize_t *data;
unsigned int len;
@@ -538,6 +517,28 @@ struct subset_t {
subset_d block;
};
+typedef struct h5tools_context_t {
+ size_t cur_column; /* current column for output */
+ size_t cur_elmt; /* current element/output line */
+ int need_prefix; /* is line prefix needed? */
+ unsigned ndims; /* dimensionality */
+ hsize_t p_min_idx[H5S_MAX_RANK]; /* min selected index */
+ hsize_t p_max_idx[H5S_MAX_RANK]; /* max selected index */
+ int prev_multiline; /* was prev datum multiline? */
+ size_t prev_prefix_len; /* length of previous prefix */
+ int continuation; /* continuation of previous data?*/
+ hsize_t size_last_dim; /* the size of the last dimension, needed so we can break after each row */
+ unsigned indent_level; /* the number of times we need some extra indentation */
+ unsigned default_indent_level; /* this is used when the indent level gets changed */
+ hsize_t acc[H5S_MAX_RANK]; /* accumulator position */
+ hsize_t pos[H5S_MAX_RANK]; /* matrix position */
+ hsize_t sm_pos; /* current stripmine element position */
+ const struct H5LD_memb_t * const *cmpd_listv; /* h5watch: vector containing info about the list of compound fields to be printed */
+ struct subset_t *sset; /* subsetting parameters */
+ int display_index; /* */
+ int display_char; /* */
+} h5tools_context_t;
+
/* The following include, h5tools_str.h, must be after the
* above stucts are defined. There is a dependency in the following
* include that hasn't been identified yet. */
@@ -569,8 +570,8 @@ H5TOOLS_DLLVAR int data_output; /* data output */
H5TOOLS_DLLVAR int attr_data_output; /* attribute data output */
/* sort parameters */
-H5TOOLS_DLLVAR H5_index_t sort_by; /*sort_by [creation_order | name] */
-H5TOOLS_DLLVAR H5_iter_order_t sort_order; /*sort_order [ascending | descending] */
+H5TOOLS_DLLVAR H5_index_t sort_by; /* sort_by [creation_order | name] */
+H5TOOLS_DLLVAR H5_iter_order_t sort_order; /* sort_order [ascending | descending] */
/* things to display or which are set via command line parameters */
H5TOOLS_DLLVAR int enable_error_stack; /* re-enable error stack; disable=0 enable=1 */
@@ -579,6 +580,8 @@ H5TOOLS_DLLVAR int enable_error_stack; /* re-enable error stack; disable=0 e
#define H5_TOOLS_GROUP "GROUP"
#define H5_TOOLS_DATASET "DATASET"
#define H5_TOOLS_DATATYPE "DATATYPE"
+#define H5_TOOLS_ATTRIBUTE "ATTRIBUTE"
+#define H5_TOOLS_UNKNOWN "UNKNOWN"
/* Definitions of useful routines */
H5TOOLS_DLL void h5tools_init(void);
@@ -619,12 +622,12 @@ H5TOOLS_DLL hbool_t h5tools_render_element(FILE *stream, const h5tool_format_t *
h5tools_context_t *ctx, h5tools_str_t *buffer, hsize_t *curr_pos,
size_t ncols, hsize_t local_elmt_counter, hsize_t elmt_counter);
H5TOOLS_DLL hbool_t h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/,
- h5tools_str_t *buffer/*string into which to render */,
- hsize_t *curr_pos/*total data element position*/,
- size_t ncols, hsize_t *ptdata,
- hsize_t local_elmt_counter/*element counter*/,
- hsize_t elmt_counter);
+ h5tools_context_t *ctx, /*in,out*/
+ h5tools_str_t *buffer, /*string into which to render */
+ hsize_t *curr_pos, /*total data element position*/
+ size_t ncols, hsize_t *ptdata,
+ hsize_t local_elmt_counter, /*element counter*/
+ hsize_t elmt_counter);
#ifdef __cplusplus
}
diff --git a/tools/lib/h5tools_dump.c b/tools/lib/h5tools_dump.c
index a27e980..cdc4581 100644
--- a/tools/lib/h5tools_dump.c
+++ b/tools/lib/h5tools_dump.c
@@ -184,45 +184,30 @@ BLOCK, /*blockbegin */
};
const h5tools_dump_header_t* h5tools_dump_header_format;
-table_t *h5dump_type_table = NULL; /*type table reference for datatype dump */
+table_t *h5dump_type_table = NULL; /* type table reference for datatype dump */
/* local prototypes */
+
static int h5tools_print_region_data_blocks(hid_t region_id,
FILE *stream, const h5tool_format_t *info, h5tools_context_t *cur_ctx,
- h5tools_str_t *buffer/*string into which to render */, size_t ncols,
- unsigned ndims, hid_t type_id, hsize_t nblocks, hsize_t *ptdata);
-
-hbool_t h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
- FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/,
- h5tools_str_t *buffer/*string into which to render */,
- hsize_t *curr_pos/*total data element position*/,
- size_t ncols, hsize_t region_elmt_counter/*element counter*/,
- hsize_t elmt_counter);
+ h5tools_str_t *buffer, /* string into which to render */
+ size_t ncols, unsigned ndims, hid_t type_id, hsize_t nblocks, hsize_t *ptdata);
static int h5tools_print_region_data_points(hid_t region_space, hid_t region_id,
FILE *stream, const h5tool_format_t *info, h5tools_context_t *cur_ctx,
h5tools_str_t *buffer, size_t ncols,
unsigned ndims, hid_t type_id, hsize_t npoints, hsize_t *ptdata);
-hbool_t h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
- FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/,
- h5tools_str_t *buffer/*string into which to render */,
- hsize_t *curr_pos/*total data element position*/,
- size_t ncols, hsize_t region_elmt_counter/*element counter*/,
- hsize_t elmt_counter);
-
void h5tools_print_dims(h5tools_str_t *buffer, hsize_t *s, int dims);
void h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, struct subset_t *sset, int dims);
+ h5tools_context_t *ctx, int dims);
static void h5tools_print_virtual_selection(hid_t vspace,
FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/,
- h5tools_str_t *buffer/*string into which to render */,
- hsize_t *curr_pos/*total data element position*/,
+ h5tools_context_t *ctx, /* in,out */
+ h5tools_str_t *buffer, /* string into which to render */
+ hsize_t *curr_pos, /* total data element position */
size_t ncols);
void
@@ -269,30 +254,30 @@ h5tools_dump_init(void)
*/
int
h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t container,
- h5tools_context_t *ctx/*in,out*/, unsigned flags,
- hsize_t nelmts, hid_t type, void *_mem)
+ h5tools_context_t *ctx, /* in,out */
+ unsigned flags, hsize_t nelmts, hid_t type, void *_mem)
{
- int ret_value = 0; /*no need to LEAVE() on ERROR: HERR_INIT(int, SUCCEED) */
unsigned char *mem = (unsigned char*) _mem;
- hsize_t i; /*element counter */
- size_t size; /*size of each datum */
- hid_t region_space = -1;
- hid_t region_id = -1;
+ hsize_t i; /* element counter */
+ size_t size; /* size of each datum */
hbool_t dimension_break = TRUE;
- H5S_sel_type region_type;
- size_t ncols = 80; /*available output width */
- h5tools_str_t buffer; /*string into which to render */
- hsize_t curr_pos = 0; /* total data element position */
- hsize_t elmt_counter = 0;/*counts the # elements printed.
- *I (ptl?) needed something that
- *isn't going to get reset when a new
- *line is formed. I'm going to use
- *this var to count elements and
- *break after we see a number equal
- *to the ctx->size_last_dim. */
-
+ size_t ncols = 80; /* available output width */
+ h5tools_str_t buffer; /* string into which to render */
+ hsize_t curr_pos = 0; /* total data element position */
+ hsize_t elmt_counter = 0;/* counts the # elements printed.
+ * I (ptl?) needed something that
+ * isn't going to get reset when a new
+ * line is formed. I'm going to use
+ * this var to count elements and
+ * break after we see a number equal
+ * to the ctx->size_last_dim. */
+ int ret_value = 0;
+
+ H5TOOLS_DEBUG("enter file=%p", (void*)stream);
+ H5TOOLS_DEBUG("rawdata file=%p", (void*)rawdatastream);
/* binary dump */
if (bin_output && (rawdatastream != NULL)) {
+ H5TOOLS_DEBUG("render_bin_output");
if (render_bin_output(rawdatastream, container, type, _mem, nelmts) < 0) {
PRINTVALSTREAM(rawoutstream, "\nError in writing binary stream\n");
}
@@ -301,6 +286,7 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t contai
/* setup */
HDmemset(&buffer, 0, sizeof(h5tools_str_t));
size = H5Tget_size(type);
+ H5TOOLS_DEBUG("type size is %ld", size);
if (info->line_ncols > 0)
ncols = info->line_ncols;
@@ -311,97 +297,170 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t contai
*/
curr_pos = ctx->sm_pos;
- if (region_output && (size == H5R_DSET_REG_REF_BUF_SIZE)) {
- for (i = 0; i < nelmts; i++, ctx->cur_elmt++, elmt_counter++) {
- void* memref = mem + i * size;
- char ref_name[1024];
-
- /* region data */
- region_id = H5Rdereference2(container, H5P_DEFAULT, H5R_DATASET_REGION, memref);
- if (region_id >= 0) {
- region_space = H5Rget_region(container, H5R_DATASET_REGION, memref);
- if (region_space >= 0) {
- if (h5tools_is_zero(memref, H5Tget_size(type))) {
- ctx->need_prefix = TRUE;
- h5tools_simple_prefix(rawoutstream, info, ctx, curr_pos, 0);
+ H5TOOLS_DEBUG("data render start:%ld", nelmts);
+ for (i = 0; i < nelmts; i++, ctx->cur_elmt++, elmt_counter++) {
+ void* memref = mem + i * size;
- /* Render the region element begin */
- h5tools_str_reset(&buffer);
- h5tools_str_append(&buffer, "NULL");
+ /* Render the data element begin*/
+ h5tools_str_reset(&buffer);
+ h5tools_str_sprint(&buffer, info, container, type, memref, ctx);
- dimension_break = h5tools_render_element(rawoutstream, info,
- ctx, &buffer, &curr_pos, ncols, i, elmt_counter);
- }
- else {
- if(H5Rget_name(region_id, H5R_DATASET_REGION, memref, (char*) ref_name, (size_t)1024)<0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Rget_name failed");
+ if (i + 1 < nelmts || (flags & END_OF_DATA) == 0)
+ h5tools_str_append(&buffer, "%s", OPT(info->elmt_suf1, ","));
- ctx->need_prefix = TRUE;
- h5tools_simple_prefix(rawoutstream, info, ctx, curr_pos+i, 0);
+ dimension_break = h5tools_render_element(stream, info, ctx, &buffer,
+ &curr_pos, ncols, i, elmt_counter);
+ /* Render the data element end*/
+ if(FALSE == dimension_break)
+ elmt_counter = 0;
+ } /* end for (i = 0; i < nelmts... */
+ H5TOOLS_DEBUG("data render finish");
- /* Render the region element begin */
- h5tools_str_reset(&buffer);
- h5tools_str_append(&buffer, info->dset_format, ref_name);
-
- dimension_break = h5tools_render_element(rawoutstream, info,
- ctx, &buffer, &curr_pos, ncols, i, elmt_counter);
-
- region_type = H5Sget_select_type(region_space);
- if(region_type == H5S_SEL_POINTS)
- /* Print point information */
- dimension_break = h5tools_dump_region_data_points(
- region_space, region_id, rawoutstream, info, ctx,
- &buffer, &curr_pos, ncols, i, elmt_counter);
- else if(region_type == H5S_SEL_HYPERSLABS)
- /* Print block information */
- dimension_break = h5tools_dump_region_data_blocks(
- region_space, region_id, rawoutstream, info, ctx,
- &buffer, &curr_pos, ncols, i, elmt_counter);
- else
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "invalid region type");
- /* Render the region element end */
+ h5tools_str_close(&buffer);
+ }/* else bin */
- } /* end else to if (h5tools_is_zero(... */
- if(H5Sclose(region_space) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
- } /* end if (region_space >= 0) */
- else
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Rget_region failed");
- if(H5Dclose(region_id) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Dclose failed");
+ H5TOOLS_ENDDEBUG("exit");
+ return ret_value;
+}
- } /* 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");
- }
+/*-------------------------------------------------------------------------
+ * Audience: Public
+ * Chapter: H5Tools Library
+ * Purpose: Print some values from an attribute referenced by object reference.
+ *
+ * Description:
+ * This is a special case subfunction to dump aa attribute references.
+ *
+ * Return:
+ * The function returns False if the last dimension has been reached, otherwise True
+ *
+ * In/Out:
+ * h5tools_context_t *ctx
+ * hsize_t *curr_pos
+ *
+ * Parameters Description:
+ * h5tools_str_t *buffer is the string into which to render
+ * hsize_t curr_pos is the total data element position
+ * size_t ncols
+ * hsize_t region_elmt_counter is the region element loop counter
+ * hsize_t elmt_count is the data element loop counter
+ *-------------------------------------------------------------------------
+ */
+hbool_t
+h5tools_dump_region_attribute(hid_t region_id,
+ FILE *stream, const h5tool_format_t *info,
+ h5tools_context_t *ctx, /* in,out */
+ h5tools_str_t *buffer, /* string into which to render */
+ hsize_t *curr_pos, /* total data element position */
+ size_t ncols, hsize_t region_elmt_counter, /* element counter */
+ hsize_t elmt_counter)
+{
+ hbool_t dimension_break = TRUE;
+ hid_t atype = H5I_INVALID_HID;
+ hid_t type_id = H5I_INVALID_HID;
+ hid_t region_space = H5I_INVALID_HID;
+ h5tool_format_t outputformat; /* Use to disable prefix for DATA attribute display */
+ hbool_t past_catch = FALSE;
+ hbool_t ret_value = TRUE;
- ctx->need_prefix = TRUE;
+ HDassert(info);
+ HDassert(ctx);
+ HDassert(buffer);
- if(FALSE == dimension_break)
- elmt_counter = 0;
- } /* end for (i = 0; i < nelmts... */
- } /* end if (region_output... */
- else {
- for (i = 0; i < nelmts; i++, ctx->cur_elmt++, elmt_counter++) {
- void* memref = mem + i * size;
- /* Render the data element begin*/
- h5tools_str_reset(&buffer);
- h5tools_str_sprint(&buffer, info, container, type, memref, ctx);
+ outputformat = *info;
+ outputformat.idx_fmt = "";
+ outputformat.idx_n_fmt = "";
+ outputformat.idx_sep = "";
+ outputformat.line_pre = "";
- if (i + 1 < nelmts || (flags & END_OF_DATA) == 0)
- h5tools_str_append(&buffer, "%s", OPT(info->elmt_suf1, ","));
+ H5TOOLS_DEBUG("enter file=%p", (void*)stream);
+ H5TOOLS_DEBUG("rawdata file=%p", (void*)rawdatastream);
- dimension_break = h5tools_render_element(stream, info, ctx, &buffer,
- &curr_pos, ncols, i, elmt_counter);
- /* Render the data element end*/
- if(FALSE == dimension_break)
- elmt_counter = 0;
- } /* end for (i = 0; i < nelmts... */
- }
+ /* Render the region { element begin */
+ h5tools_str_reset(buffer);
- h5tools_str_close(&buffer);
- }/* else bin */
+ h5tools_str_append(buffer, " {");
+ dimension_break = h5tools_render_element(stream, &outputformat, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ /* Render the region { element end */
+
+ if((region_space = H5Aget_space(region_id)) < 0)
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Aget_space failed");
+ if((atype = H5Aget_type(region_id)) < 0)
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Aget_type failed");
+ if((type_id = H5Tget_native_type(atype, H5T_DIR_DEFAULT)) < 0)
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Tget_native_type failed");
+
+ ctx->indent_level++;
+ ctx->need_prefix = TRUE;
+
+ /* Render the datatype element begin */
+ h5tools_str_reset(buffer);
+ h5tools_str_append(buffer, "%s %s ",
+ h5tools_dump_header_format->datatypebegin,
+ h5tools_dump_header_format->datatypeblockbegin);
+
+ ctx->need_prefix = TRUE;
+ ctx->indent_level++;
+ h5tools_print_datatype(stream, buffer, info, ctx, atype, TRUE);
+ ctx->indent_level--;
+
+ if (HDstrlen(h5tools_dump_header_format->datatypeblockend)) {
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->datatypeblockend);
+ if (HDstrlen(h5tools_dump_header_format->datatypeend))
+ h5tools_str_append(buffer, " ");
+ }
+ if (HDstrlen(h5tools_dump_header_format->datatypeend))
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->datatypeend);
+
+ dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ /* Render the datatype element end */
+
+ ctx->need_prefix = TRUE;
+
+ /* Render the dataspace element begin */
+ h5tools_str_reset(buffer);
+ h5tools_str_append(buffer, "%s ", h5tools_dump_header_format->dataspacebegin);
+
+ h5tools_print_dataspace(buffer, region_space);
+
+ if (HDstrlen(h5tools_dump_header_format->dataspaceblockend)) {
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->dataspaceblockend);
+ if (HDstrlen(h5tools_dump_header_format->dataspaceend))
+ h5tools_str_append(buffer, " ");
+ }
+ if (HDstrlen(h5tools_dump_header_format->dataspaceend))
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->dataspaceblockend);
+
+ dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ /* Render the dataspace element end */
+
+ if (region_output) {
+ ctx->need_prefix = TRUE;
+
+ h5tools_dump_data(stream, &outputformat, ctx, region_id, FALSE);
+ }
+
+done:
+ if(H5Tclose(type_id) < 0)
+ H5TOOLS_ERROR(dimension_break, "H5Tclose failed");
+
+ if(H5Tclose(atype) < 0)
+ H5TOOLS_ERROR(dimension_break, "H5Tclose failed");
+
+ ctx->indent_level--;
+ ctx->need_prefix = TRUE;
+
+ /* Render the region } element begin */
+ h5tools_str_reset(buffer);
+ h5tools_str_append(buffer, "}");
+ dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ /* Render the region } element end */
+
+ H5_LEAVE(dimension_break)
+
+CATCH
+
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -427,8 +486,8 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t contai
static int
h5tools_print_region_data_blocks(hid_t region_id,
FILE *stream, const h5tool_format_t *info, h5tools_context_t *cur_ctx,
- h5tools_str_t *buffer/*string into which to render */, size_t ncols,
- unsigned ndims, hid_t type_id, hsize_t nblocks, hsize_t *ptdata)
+ h5tools_str_t *buffer, /* string into which to render */
+ size_t ncols, unsigned ndims, hid_t type_id, hsize_t nblocks, hsize_t *ptdata)
{
hbool_t dimension_break = TRUE;
hsize_t *dims1 = NULL;
@@ -443,12 +502,13 @@ h5tools_print_region_data_blocks(hid_t region_id,
hsize_t numindex;
unsigned indx;
unsigned jndx;
+ hbool_t past_catch = FALSE;
size_t type_size;
- int ret_value = SUCCEED;
hid_t mem_space = -1;
hid_t sid1 = -1;
h5tools_context_t ctx;
void *region_buf = NULL;
+ int ret_value = 0;
HDassert(info);
HDassert(cur_ctx);
@@ -457,13 +517,18 @@ h5tools_print_region_data_blocks(hid_t region_id,
HDmemset(&ctx, 0, sizeof(ctx));
+ H5TOOLS_DEBUG("enter");
+
+ if((type_size = H5Tget_size(type_id)) == 0)
+ H5TOOLS_THROW(FAIL, "H5Tget_size failed");
+
/* Get the dataspace of the dataset */
if((sid1 = H5Dget_space(region_id)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Dget_space failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Dget_space failed");
/* Allocate space for the dimension array */
if((dims1 = (hsize_t *) HDmalloc((size_t)(sizeof(hsize_t) * ndims))) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for dims");
+ H5TOOLS_GOTO_ERROR(FAIL, "Could not allocate buffer for dims");
/* find the dimensions of each data space from the block coordinates */
numelem = 1;
@@ -474,21 +539,18 @@ h5tools_print_region_data_blocks(hid_t region_id,
/* Create dataspace for reading buffer */
if((mem_space = H5Screate_simple((int)ndims, dims1, NULL)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Screate_simple failed");
-
- if((type_size = H5Tget_size(type_id)) == 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Screate_simple failed");
if((region_buf = HDmalloc(type_size * (size_t)numelem)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate region buffer");
+ H5TOOLS_GOTO_ERROR(FAIL, "Could not allocate region buffer");
/* Select (x , x , ..., x ) x (y , y , ..., y ) hyperslab for reading memory dataset */
/* 1 2 n 1 2 n */
if((start = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for start");
+ H5TOOLS_GOTO_ERROR(FAIL, "Could not allocate buffer for start");
if((count = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for count");
+ H5TOOLS_GOTO_ERROR(FAIL, "Could not allocate buffer for count");
curr_pos = 0;
ctx.indent_level = cur_ctx->indent_level;
@@ -503,68 +565,77 @@ h5tools_print_region_data_blocks(hid_t region_id,
count[indx] = dims1[indx];
}
- if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sselect_hyperslab failed");
-
- if(H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, region_buf) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Dread failed");
-
- ctx.indent_level++;
- if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
-
- /* assume entire data space to be printed */
- for (indx = 0; indx < (unsigned)ctx.ndims; indx++)
- ctx.p_min_idx[indx] = start[indx];
- init_acc_pos(&ctx, total_size);
-
- /* print the data */
- region_flags = START_OF_DATA;
- if (blkndx == nblocks - 1)
- region_flags |= END_OF_DATA;
-
- for (indx = 0; indx < (unsigned)ctx.ndims; indx++)
- ctx.p_max_idx[indx] = dims1[indx];
-
- curr_pos = 0;
- ctx.sm_pos = blkndx * 2 * ndims;
- ctx.size_last_dim = dims1[ndims-1];
-
- h5tools_region_simple_prefix(stream, info, &ctx, curr_pos, ptdata, 0);
-
- elmtno = 0;
- for (numindex = 0; numindex < numelem; numindex++, elmtno++, ctx.cur_elmt++) {
- /* Render the region data element begin */
- h5tools_str_reset(buffer);
-
- h5tools_str_append(buffer, "%s", numindex ? OPTIONAL_LINE_BREAK "" : "");
- h5tools_str_sprint(buffer, info, region_id, type_id,
- ((char*)region_buf + numindex * type_size), &ctx);
-
- if (numindex + 1 < numelem || (region_flags & END_OF_DATA) == 0)
- h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ","));
-
- dimension_break = h5tools_render_region_element(stream, info, &ctx, buffer, &curr_pos,
- ncols, ptdata, numindex, elmtno);
- /* Render the region data element end */
-
- if(FALSE == dimension_break)
- elmtno = 0;
- } /* end for (numindex = 0; numindex < numelem; numindex++, elmtno++, ctx.cur_elmt++) */
+ if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) >= 0) {
+ if(H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, region_buf) >= 0) {
+ ctx.indent_level++;
+ if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) {
+ /* assume entire data space to be printed */
+ for (indx = 0; indx < (unsigned)ctx.ndims; indx++)
+ ctx.p_min_idx[indx] = start[indx];
+ init_acc_pos(&ctx, total_size);
+
+ /* print the data */
+ region_flags = START_OF_DATA;
+ if (blkndx == nblocks - 1)
+ region_flags |= END_OF_DATA;
+
+ for (indx = 0; indx < (unsigned)ctx.ndims; indx++)
+ ctx.p_max_idx[indx] = dims1[indx];
+
+ curr_pos = 0;
+ ctx.sm_pos = blkndx * 2 * ndims;
+ ctx.size_last_dim = dims1[ndims-1];
+
+ h5tools_region_simple_prefix(stream, info, &ctx, curr_pos, ptdata, 0);
+
+ H5TOOLS_DEBUG("data render start:%ld", numelem);
+ elmtno = 0;
+ for (numindex = 0; numindex < numelem; numindex++, elmtno++, ctx.cur_elmt++) {
+ /* Render the region data element begin */
+ h5tools_str_reset(buffer);
+
+ h5tools_str_append(buffer, "%s", numindex ? OPTIONAL_LINE_BREAK "" : "");
+ h5tools_str_sprint(buffer, info, region_id, type_id,
+ ((char*)region_buf + numindex * type_size), &ctx);
+
+ if (numindex + 1 < numelem || (region_flags & END_OF_DATA) == 0)
+ h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ","));
+
+ dimension_break = h5tools_render_region_element(stream, info, &ctx, buffer, &curr_pos,
+ ncols, ptdata, numindex, elmtno);
+ /* Render the region data element end */
+
+ if(FALSE == dimension_break)
+ elmtno = 0;
+ } /* end for (numindex = 0; numindex < numelem; numindex++, elmtno++, ctx.cur_elmt++) */
+ }
+ else {
+ H5TOOLS_ERROR(FAIL, "H5Sget_simple_extent_dims failed");
+ }
+ ctx.indent_level--;
+ }
+ else {
+ H5TOOLS_ERROR(FAIL, "H5Dread failed");
+ }
+ }
+ else {
+ H5TOOLS_ERROR(FAIL, "H5Sselect_hyperslab failed");
+ }
- ctx.indent_level--;
} /* end for (blkndx = 0; blkndx < nblocks; blkndx++) */
- done:
+done:
HDfree(start);
HDfree(count);
HDfree(region_buf);
HDfree(dims1);
if(H5Sclose(mem_space) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_ERROR(FAIL, "H5Sclose failed");
if(H5Sclose(sid1) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_ERROR(FAIL, "H5Sclose failed");
+CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -595,13 +666,12 @@ h5tools_print_region_data_blocks(hid_t region_id,
hbool_t
h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/,
- h5tools_str_t *buffer/*string into which to render */,
- hsize_t *curr_pos/*total data element position*/,
- size_t ncols, hsize_t region_elmt_counter/*element counter*/,
+ h5tools_context_t *ctx, /* in,out */
+ h5tools_str_t *buffer, /* string into which to render */
+ hsize_t *curr_pos, /* total data element position */
+ size_t ncols, hsize_t region_elmt_counter, /* element counter */
hsize_t elmt_counter)
{
- HERR_INIT(hbool_t, TRUE)
hbool_t dimension_break = TRUE;
hssize_t snblocks;
hsize_t nblocks;
@@ -609,28 +679,39 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
hsize_t *ptdata = NULL;
int sndims;
unsigned ndims;
- hid_t dtype = -1;
- hid_t type_id = -1;
- hsize_t u;
+ hsize_t indx;
+ hid_t dtype = H5I_INVALID_HID;
+ hid_t type_id = H5I_INVALID_HID;
+ h5tool_format_t outputformat; /* Use to disable prefix for DATA attribute display */
+ hbool_t past_catch = FALSE;
+ hbool_t ret_value = TRUE;
HDassert(info);
HDassert(ctx);
HDassert(buffer);
+ outputformat = *info;
+ outputformat.idx_fmt = "";
+ outputformat.idx_n_fmt = "";
+ outputformat.idx_sep = "";
+ outputformat.line_pre = "";
+
if((snblocks = H5Sget_select_hyper_nblocks(region_space)) <= 0)
- H5E_THROW(dimension_break, H5E_tools_min_id_g, "H5Sget_select_hyper_nblocks failed");
+ H5TOOLS_THROW(dimension_break, "H5Sget_select_hyper_nblocks failed");
nblocks = (hsize_t)snblocks;
/* Print block information */
if((sndims = H5Sget_simple_extent_ndims(region_space)) < 0)
- H5E_THROW(dimension_break, H5E_tools_min_id_g, "H5Sget_simple_extent_ndims failed");
+ H5TOOLS_THROW(dimension_break, "H5Sget_simple_extent_ndims failed");
ndims = (unsigned)sndims;
+ H5TOOLS_DEBUG("enter ndims=%d", ndims);
+
/* Render the region { element begin */
h5tools_str_reset(buffer);
- h5tools_str_append(buffer, "{");
- dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ h5tools_str_append(buffer, " {");
+ dimension_break = h5tools_render_element(stream, &outputformat, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
/* Render the region { element end */
ctx->indent_level++;
@@ -642,31 +723,29 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
alloc_size = nblocks * ndims * 2 * sizeof(ptdata[0]);
HDassert(alloc_size == (hsize_t) ((size_t) alloc_size)); /*check for overflow*/
- if((ptdata = (hsize_t*) HDmalloc((size_t) alloc_size)) == NULL) {
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "Could not allocate buffer for ptdata");
- HGOTO_DONE(dimension_break);
- }
+ if((ptdata = (hsize_t*) HDmalloc((size_t) alloc_size)) == NULL)
+ H5TOOLS_GOTO_ERROR(dimension_break, "Could not allocate buffer for ptdata");
if(H5Sget_select_hyper_blocklist(region_space, (hsize_t)0, nblocks, ptdata) < 0)
- HGOTO_ERROR(dimension_break, H5E_tools_min_id_g, "H5Rget_select_hyper_blocklist failed");
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Rget_select_hyper_blocklist failed");
- for(u = 0; u < nblocks; u++) {
- unsigned v;
+ for(indx = 0; indx < nblocks; indx++) {
+ unsigned loop_indx;
- h5tools_str_append(buffer, info->dset_blockformat_pre,
- u ? "," OPTIONAL_LINE_BREAK " " : "", (unsigned long)u);
+ h5tools_str_append(buffer, outputformat.dset_blockformat_pre,
+ indx ? "," OPTIONAL_LINE_BREAK " " : "", (unsigned long)indx);
/* Start coordinates and opposite corner */
- for (v = 0; v < ndims; v++)
- h5tools_str_append(buffer, "%s" HSIZE_T_FORMAT, v ? "," : "(",
- ptdata[u * 2 * ndims + v]);
+ for (loop_indx = 0; loop_indx < ndims; loop_indx++)
+ h5tools_str_append(buffer, "%s" HSIZE_T_FORMAT, loop_indx ? "," : "(",
+ ptdata[indx * 2 * ndims + loop_indx]);
- for (v = 0; v < ndims; v++)
- h5tools_str_append(buffer, "%s" HSIZE_T_FORMAT, v ? "," : ")-(",
- ptdata[u * 2 * ndims + v + ndims]);
+ for (loop_indx = 0; loop_indx < ndims; loop_indx++)
+ h5tools_str_append(buffer, "%s" HSIZE_T_FORMAT, loop_indx ? "," : ")-(",
+ ptdata[indx * 2 * ndims + loop_indx + ndims]);
h5tools_str_append(buffer, ")");
- } /* end for (u = 0; u < nblocks; u++) */
+ } /* end for (indx = 0; indx < nblocks; indx++) */
dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
/* Render the region datatype info and indices element end */
@@ -674,9 +753,9 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
ctx->need_prefix = TRUE;
if((dtype = H5Dget_type(region_id)) < 0)
- HGOTO_ERROR(dimension_break, H5E_tools_min_id_g, "H5Dget_type failed");
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Dget_type failed");
if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(dimension_break, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Tget_native_type failed");
/* Render the datatype element begin */
h5tools_str_reset(buffer);
@@ -718,40 +797,48 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
/* Render the dataspace element end */
- ctx->need_prefix = TRUE;
+ if (region_output) {
+ ctx->need_prefix = TRUE;
- /* Render the databegin element begin */
- h5tools_str_reset(buffer);
- h5tools_str_append(buffer, "%s %s ",
- h5tools_dump_header_format->databegin,
- h5tools_dump_header_format->datablockbegin);
- dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
- /* Render the databegin element end */
+ /* Render the databegin element begin */
+ h5tools_str_reset(buffer);
+ h5tools_str_append(buffer, "%s %s",
+ h5tools_dump_header_format->databegin,
+ h5tools_dump_header_format->datablockbegin);
+ dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ /* Render the databegin element end */
- ctx->need_prefix = TRUE;
+ ctx->need_prefix = TRUE;
- h5tools_print_region_data_blocks(region_id, rawdatastream, info, ctx,
- buffer, ncols, ndims, type_id, nblocks, ptdata);
+ h5tools_print_region_data_blocks(region_id, rawdatastream, info, ctx, buffer, ncols, ndims, type_id, nblocks, ptdata);
+ }
- done:
+done:
HDfree(ptdata);
- if(H5Tclose(type_id) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ if(type_id > 0 && H5Tclose(type_id) < 0)
+ H5TOOLS_ERROR(dimension_break, "H5Tclose failed");
- if(H5Tclose(dtype) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ if(dtype > 0 && H5Tclose(dtype) < 0)
+ H5TOOLS_ERROR(dimension_break, "H5Tclose failed");
- ctx->need_prefix = TRUE;
+ if (region_output) {
+ ctx->need_prefix = TRUE;
- /* Render the dataend element begin */
- h5tools_str_reset(buffer);
- h5tools_str_append(buffer, "%s %s ",
- h5tools_dump_header_format->dataend,
- h5tools_dump_header_format->datablockend);
- dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos,
- ncols, region_elmt_counter, elmt_counter);
- /* Render the dataend element end */
+ /* Render the dataend element begin */
+ h5tools_str_reset(buffer);
+ if(HDstrlen(h5tools_dump_header_format->datablockend)) {
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->datablockend);
+ if(HDstrlen(h5tools_dump_header_format->dataend))
+ h5tools_str_append(buffer, " ");
+ }
+
+ if(HDstrlen(h5tools_dump_header_format->dataend))
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->dataend);
+ dimension_break = h5tools_render_element(stream, &outputformat, ctx, buffer, curr_pos,
+ ncols, region_elmt_counter, elmt_counter);
+ /* Render the dataend element end */
+ }
ctx->indent_level--;
ctx->need_prefix = TRUE;
@@ -759,13 +846,15 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
/* Render the region } element begin */
h5tools_str_reset(buffer);
h5tools_str_append(buffer, "}");
- dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos,
- ncols, region_elmt_counter, elmt_counter);
+ dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
/* Render the region } element end */
H5_LEAVE(dimension_break)
- CATCH
+CATCH
+
+ H5TOOLS_ENDDEBUG("exit");
+
return ret_value;
}
@@ -801,11 +890,12 @@ h5tools_print_region_data_points(hid_t region_space, hid_t region_id,
hsize_t jndx;
unsigned indx;
size_t type_size;
- int ret_value = SUCCEED;
unsigned int region_flags; /* buffer extent flags */
- hid_t mem_space = -1;
+ hid_t mem_space = H5I_INVALID_HID;
void *region_buf = NULL;
h5tools_context_t ctx;
+ hbool_t past_catch = FALSE;
+ int ret_value = 0;
HDassert(info);
HDassert(cur_ctx);
@@ -813,22 +903,24 @@ h5tools_print_region_data_points(hid_t region_space, hid_t region_id,
HDassert(ptdata);
HDassert(ndims > 0);
+ H5TOOLS_DEBUG("enter");
+
HDmemset(&ctx, 0, sizeof(ctx));
/* Allocate space for the dimension array */
if((dims1 = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for dims");
+ H5TOOLS_THROW((-1), "Could not allocate buffer for dims");
dims1[0] = npoints;
/* Create dataspace for reading buffer */
if((mem_space = H5Screate_simple(1, dims1, NULL)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Screate_simple failed");
+ H5TOOLS_THROW((-1), "H5Screate_simple failed");
if((type_size = H5Tget_size(type_id)) == 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
+ H5TOOLS_THROW((-1), "H5Tget_size failed");
if((region_buf = HDmalloc(type_size * (size_t)npoints)) == NULL)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for region");
+ H5TOOLS_THROW((-1), "Could not allocate buffer for region");
curr_pos = 0;
ctx.indent_level = cur_ctx->indent_level;
@@ -837,64 +929,69 @@ h5tools_print_region_data_points(hid_t region_space, hid_t region_id,
ctx.ndims = ndims;
if(H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Dread failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Dread failed");
+ H5TOOLS_DEBUG("data render start:%ld", npoints);
elmtno = 0;
for (jndx = 0; jndx < npoints; jndx++, elmtno++) {
ctx.need_prefix = TRUE;
ctx.cur_elmt = 0; /* points are always 0 */
-
ctx.indent_level++;
- if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
- /* assume entire data space to be printed */
- for (indx = 0; indx < ctx.ndims; indx++)
- ctx.p_min_idx[indx] = 0;
- init_acc_pos(&ctx, total_size);
+ if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) {
+ /* assume entire data space to be printed */
+ for (indx = 0; indx < ctx.ndims; indx++)
+ ctx.p_min_idx[indx] = 0;
+ init_acc_pos(&ctx, total_size);
- /* print the data */
- region_flags = START_OF_DATA;
- if (jndx == npoints - 1)
- region_flags |= END_OF_DATA;
+ /* print the data */
+ region_flags = START_OF_DATA;
+ if (jndx == npoints - 1)
+ region_flags |= END_OF_DATA;
- for (indx = 0; indx < ctx.ndims; indx++)
- ctx.p_max_idx[indx] = cur_ctx->p_max_idx[indx];
+ for (indx = 0; indx < ctx.ndims; indx++)
+ ctx.p_max_idx[indx] = cur_ctx->p_max_idx[indx];
- ctx.sm_pos = jndx * ndims;
- if (ctx.ndims > 0)
- ctx.size_last_dim = ctx.p_max_idx[ctx.ndims - 1];
- else
- ctx.size_last_dim = 0;
+ ctx.sm_pos = jndx * ndims;
+ if (ctx.ndims > 0)
+ ctx.size_last_dim = ctx.p_max_idx[ctx.ndims - 1];
+ else
+ ctx.size_last_dim = 0;
- curr_pos = 0; /* points requires constant 0 */
- h5tools_region_simple_prefix(stream, info, &ctx, curr_pos, ptdata, 0);
+ curr_pos = 0; /* points requires constant 0 */
+ h5tools_region_simple_prefix(stream, info, &ctx, curr_pos, ptdata, 0);
- /* Render the point element begin */
- h5tools_str_reset(buffer);
-
- h5tools_str_append(buffer, "%s", jndx ? OPTIONAL_LINE_BREAK "" : "");
- h5tools_str_sprint(buffer, info, region_id, type_id,
- ((char*)region_buf + jndx * type_size), &ctx);
+ /* Render the point element begin */
+ h5tools_str_reset(buffer);
- if (jndx + 1 < npoints || (region_flags & END_OF_DATA) == 0)
- h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ","));
+ h5tools_str_append(buffer, "%s", jndx ? OPTIONAL_LINE_BREAK "" : "");
+ h5tools_str_sprint(buffer, info, region_id, type_id,
+ ((char*)region_buf + jndx * type_size), &ctx);
- dimension_break = h5tools_render_region_element(stream, info, &ctx, buffer, &curr_pos,
- ncols, ptdata, (hsize_t)0, elmtno);
- /* Render the point element end */
- if(FALSE == dimension_break)
- elmtno = 0;
+ if (jndx + 1 < npoints || (region_flags & END_OF_DATA) == 0)
+ h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ","));
+ dimension_break = h5tools_render_region_element(stream, info, &ctx, buffer, &curr_pos,
+ ncols, ptdata, (hsize_t)0, elmtno);
+ /* Render the point element end */
+ if(FALSE == dimension_break)
+ elmtno = 0;
+ }
+ else {
+ H5TOOLS_ERROR((-1), "H5Sget_simple_extent_dims failed");
+ }
ctx.indent_level--;
} /* end for (jndx = 0; jndx < npoints; jndx++, elmtno++) */
- done:
+done:
HDfree(region_buf);
+CATCH
HDfree(dims1);
if(H5Sclose(mem_space) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_ERROR((-1), "H5Sclose failed");
+
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -926,8 +1023,8 @@ hbool_t
h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
h5tools_str_t *buffer, hsize_t *curr_pos, size_t ncols, hsize_t region_elmt_counter,
- hsize_t elmt_counter) {
- HERR_INIT(hbool_t, TRUE)
+ hsize_t elmt_counter)
+{
hbool_t dimension_break = TRUE;
hssize_t snpoints;
hsize_t npoints;
@@ -936,48 +1033,59 @@ h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
int sndims;
unsigned ndims;
hsize_t indx;
- hid_t dtype = -1;
- hid_t type_id = -1;
+ hid_t dtype = H5I_INVALID_HID;
+ hid_t type_id = H5I_INVALID_HID;
+ h5tool_format_t outputformat; /* Use to disable prefix for DATA attribute display */
+ hbool_t past_catch = FALSE;
+ hbool_t ret_value = TRUE;
HDassert(info);
HDassert(ctx);
HDassert(buffer);
+ outputformat = *info;
+ outputformat.idx_fmt = "";
+ outputformat.idx_n_fmt = "";
+ outputformat.idx_sep = "";
+ outputformat.line_pre = "";
+
if((snpoints = H5Sget_select_elem_npoints(region_space)) <= 0)
- H5E_THROW(dimension_break, H5E_tools_min_id_g, "H5Sget_select_elem_npoints failed");
+ H5TOOLS_THROW(dimension_break, "H5Sget_select_elem_npoints failed");
npoints = (hsize_t)snpoints;
/* Allocate space for the dimension array */
if((sndims = H5Sget_simple_extent_ndims(region_space)) < 0)
- H5E_THROW(dimension_break, H5E_tools_min_id_g, "H5Sget_simple_extent_ndims failed");
+ H5TOOLS_THROW(dimension_break, "H5Sget_simple_extent_ndims failed");
ndims = (unsigned)sndims;
+ H5TOOLS_DEBUG("enter ndims=%d", ndims);
+
/* Render the region { element begin */
h5tools_str_reset(buffer);
h5tools_str_append(buffer, "{");
- dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ dimension_break = h5tools_render_element(stream, &outputformat, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
/* Render the region { element end */
- /* Render the region datatype info and indices element begin */
- h5tools_str_reset(buffer);
-
ctx->indent_level++;
ctx->need_prefix = TRUE;
+
+ /* Render the region datatype info and indices element begin */
+ h5tools_str_reset(buffer);
h5tools_str_append(buffer, "REGION_TYPE POINT ");
alloc_size = npoints * ndims * sizeof(ptdata[0]);
HDassert(alloc_size == (hsize_t) ((size_t) alloc_size)); /*check for overflow*/
if(NULL == (ptdata = (hsize_t *)HDmalloc((size_t) alloc_size)))
- HGOTO_ERROR(dimension_break, H5E_tools_min_id_g, "Could not allocate buffer for ptdata");
+ H5TOOLS_GOTO_ERROR(dimension_break, "Could not allocate buffer for ptdata");
if(H5Sget_select_elem_pointlist(region_space, (hsize_t) 0, npoints, ptdata) < 0)
- HGOTO_ERROR(dimension_break, H5E_tools_min_id_g, "H5Sget_select_elem_pointlist failed");
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Sget_select_elem_pointlist failed");
for (indx = 0; indx < npoints; indx++) {
unsigned loop_indx;
- h5tools_str_append(buffer, info->dset_ptformat_pre,
+ h5tools_str_append(buffer, outputformat.dset_ptformat_pre,
indx ? "," OPTIONAL_LINE_BREAK " " : "", (unsigned long) indx);
for (loop_indx = 0; loop_indx < ndims; loop_indx++)
@@ -993,10 +1101,9 @@ h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
ctx->need_prefix = TRUE;
if((dtype = H5Dget_type(region_id)) < 0)
- HGOTO_ERROR(dimension_break, H5E_tools_min_id_g, "H5Dget_type failed");
-
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Dget_type failed");
if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) < 0)
- HGOTO_ERROR(dimension_break, H5E_tools_min_id_g, "H5Tget_native_type failed");
+ H5TOOLS_GOTO_ERROR(dimension_break, "H5Tget_native_type failed");
/* Render the datatype element begin */
h5tools_str_reset(buffer);
@@ -1023,8 +1130,6 @@ h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
/* Render the dataspace element begin */
h5tools_str_reset(buffer);
-
- ctx->need_prefix = TRUE;
h5tools_str_append(buffer, "%s ", h5tools_dump_header_format->dataspacebegin);
h5tools_print_dataspace(buffer, region_space);
@@ -1040,41 +1145,49 @@ h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
/* Render the dataspace element end */
- ctx->need_prefix = TRUE;
+ if (region_output) {
+ ctx->need_prefix = TRUE;
- /* Render the databegin element begin */
- h5tools_str_reset(buffer);
+ /* Render the databegin element begin */
+ h5tools_str_reset(buffer);
- h5tools_str_append(buffer, "%s %s ",
- h5tools_dump_header_format->databegin,
- h5tools_dump_header_format->datablockbegin);
+ h5tools_str_append(buffer, "%s %s",
+ h5tools_dump_header_format->databegin,
+ h5tools_dump_header_format->datablockbegin);
- dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
+ dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos, ncols, region_elmt_counter, elmt_counter);
- ctx->need_prefix = TRUE;
+ ctx->need_prefix = TRUE;
- h5tools_print_region_data_points(region_space, region_id,
- rawdatastream, info, ctx, buffer, ncols, ndims, type_id, npoints, ptdata);
+ h5tools_print_region_data_points(region_space, region_id, rawdatastream, info, ctx, buffer, ncols, ndims, type_id, npoints, ptdata);
+ }
- done:
+done:
HDfree(ptdata);
if(type_id > 0 && H5Tclose(type_id) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR(dimension_break, "H5Tclose failed");
if(dtype > 0 && H5Tclose(dtype) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR(dimension_break, "H5Tclose failed");
- ctx->need_prefix = TRUE;
+ if (region_output) {
+ ctx->need_prefix = TRUE;
- /* Render the dataend element begin */
- h5tools_str_reset(buffer);
- h5tools_str_append(buffer, "%s %s ",
- h5tools_dump_header_format->dataend,
- h5tools_dump_header_format->datablockend);
- dimension_break = h5tools_render_element(stream, info, ctx, buffer, curr_pos,
- ncols, region_elmt_counter, elmt_counter);
- /* Render the dataend element end*/
+ /* Render the dataend element begin */
+ h5tools_str_reset(buffer);
+ if(HDstrlen(h5tools_dump_header_format->datablockend)) {
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->datablockend);
+ if(HDstrlen(h5tools_dump_header_format->dataend))
+ h5tools_str_append(buffer, " ");
+ }
+
+ if(HDstrlen(h5tools_dump_header_format->dataend))
+ h5tools_str_append(buffer, "%s", h5tools_dump_header_format->dataend);
+ dimension_break = h5tools_render_element(stream, &outputformat, ctx, buffer, curr_pos,
+ ncols, region_elmt_counter, elmt_counter);
+ /* Render the dataend element end*/
+ }
ctx->indent_level--;
ctx->need_prefix = TRUE;
@@ -1088,6 +1201,9 @@ h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
H5_LEAVE(dimension_break)
CATCH
+
+ H5TOOLS_ENDDEBUG("exit");
+
return ret_value;
}
@@ -1125,16 +1241,15 @@ CATCH
*/
static herr_t
h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
- hid_t dset, hid_t p_type, struct subset_t *sset,
+ hid_t dset, hid_t p_type,
hid_t f_space, hsize_t hyperslab_count,
- hsize_t *temp_start,/* start inside offset count loop */
- hsize_t *temp_count,/* count inside offset count loop */
- hsize_t *temp_block,/* block size used in loop */
- hsize_t *temp_stride,/* stride size used in loop */
- hsize_t *total_size,/* total size of dataset */
- unsigned int row_dim/* index of row_counter dimension */)
+ hsize_t *temp_start, /* start inside offset count loop */
+ hsize_t *temp_count, /* count inside offset count loop */
+ hsize_t *temp_block, /* block size used in loop */
+ hsize_t *temp_stride, /* stride size used in loop */
+ hsize_t *total_size, /* total size of dataset */
+ unsigned int row_dim) /* index of row_counter dimension */
{
- HERR_INIT(herr_t, SUCCEED)
size_t i; /* counters */
size_t j; /* counters */
hsize_t zero[1] = {0}; /* vector of zeros */
@@ -1148,20 +1263,21 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
hssize_t ssm_nelmts; /* elements per stripmine*/
hsize_t sm_nelmts; /* elements per stripmine*/
unsigned char *sm_buf = NULL; /* buffer for raw data */
- hid_t sm_space = -1; /* stripmine data space */
+ hid_t sm_space = H5I_INVALID_HID; /* stripmine data space */
hsize_t size_row_block; /* size for blocks along rows */
hsize_t row_counter = 0;
-
+ hbool_t past_catch = FALSE;
/* VL data special information */
- unsigned int vl_data = 0; /* contains VL datatypes */
+ unsigned int vl_data = 0; /* contains VL datatypes */
+ herr_t ret_value = SUCCEED;
if ((size_t) ctx->ndims > NELMTS(sm_size))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "ndims and sm_size comparision failed");
+ H5TOOLS_THROW(FAIL, "ndims and sm_size comparision failed");
if (ctx->ndims > 0)
init_acc_pos(ctx, total_size);
- size_row_block = sset->block.data[row_dim];
+ size_row_block = ctx->sset->block.data[row_dim];
/* Check if we have VL data in the dataset's datatype */
if (h5tools_detect_vlen(p_type) == TRUE)
@@ -1173,9 +1289,9 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
cases where block > 1 only and stride > block */
if (size_row_block > 1
&& row_counter == size_row_block
- && sset->stride.data[row_dim] > sset->block.data[row_dim]) {
+ && ctx->sset->stride.data[row_dim] > ctx->sset->block.data[row_dim]) {
- hsize_t increase_rows = sset->stride.data[row_dim] - sset->block.data[row_dim];
+ hsize_t increase_rows = ctx->sset->stride.data[row_dim] - ctx->sset->block.data[row_dim];
temp_start[row_dim] += increase_rows;
row_counter = 0;
}
@@ -1184,10 +1300,10 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
/* calculate the potential number of elements we're going to print */
if(H5Sselect_hyperslab(f_space, H5S_SELECT_SET, temp_start, temp_stride, temp_count, temp_block) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sselect_hyperslab failed");
+ H5TOOLS_THROW(FAIL, "H5Sselect_hyperslab failed");
if((ssm_nelmts = H5Sget_select_npoints(f_space)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sget_select_npoints failed");
+ H5TOOLS_THROW(FAIL, "H5Sget_select_npoints failed");
sm_nelmts = (hsize_t)ssm_nelmts;
if (sm_nelmts > 0) {
@@ -1196,7 +1312,7 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
* a hyperslab whose size is manageable.
*/
if((sm_nbytes = p_type_nbytes = H5Tget_size(p_type)) == 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
+ H5TOOLS_THROW(FAIL, "H5Tget_size failed");
if (ctx->ndims > 0)
for (i = ctx->ndims; i > 0; --i) {
@@ -1210,17 +1326,17 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
HDassert(sm_nbytes == (hsize_t) ((size_t) sm_nbytes)); /*check for overflow*/
if(NULL == (sm_buf = (unsigned char *)HDmalloc((size_t) sm_nelmts * p_type_nbytes)))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for strip-mine");
+ H5TOOLS_THROW(FAIL, "Could not allocate buffer for strip-mine");
if((sm_space = H5Screate_simple(1, &sm_nelmts, NULL)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Screate_simple failed");
+ H5TOOLS_THROW(FAIL, "H5Screate_simple failed");
if(H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, zero, NULL, &sm_nelmts, NULL) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sselect_hyperslab failed");
+ H5TOOLS_THROW(FAIL, "H5Sselect_hyperslab failed");
/* read the data */
if(H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dread failed");
+ H5TOOLS_THROW(FAIL, "H5Dread failed");
/* print the data */
flags = START_OF_DATA;
@@ -1234,7 +1350,7 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
/* print array indices. get the lower bound of the hyperslab and calulate
the element position at the start of hyperslab */
if(H5Sget_select_bounds(f_space, low, high) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sget_select_bounds failed");
+ H5TOOLS_THROW(FAIL, "H5Sget_select_bounds failed");
elmtno = 0;
for (i = 0; i < (size_t) ctx->ndims - 1; i++) {
@@ -1252,20 +1368,20 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
ctx->need_prefix = TRUE;
if(h5tools_dump_simple_data(stream, info, dset, ctx, flags, sm_nelmts, p_type, sm_buf) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "h5tools_dump_simple_data failed");
+ H5TOOLS_THROW(FAIL, "h5tools_dump_simple_data failed");
/* Reclaim any VL memory, if necessary */
if (vl_data)
H5Treclaim(p_type, sm_space, H5P_DEFAULT, sm_buf);
if(H5Sclose(sm_space) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_THROW(FAIL, "H5Sclose failed");
if(sm_buf)
HDfree(sm_buf);
sm_buf = NULL;
}
else
- H5E_THROW(SUCCEED, H5E_tools_min_id_g, "nothing to print");
+ H5TOOLS_THROW(SUCCEED, "nothing to print");
ctx->continuation++;
@@ -1275,6 +1391,7 @@ CATCH
if(sm_buf)
HDfree(sm_buf);
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1312,8 +1429,7 @@ CATCH
*/
static herr_t
h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
- hid_t dset, hid_t p_type, struct subset_t *sset,
- hid_t f_space, hsize_t *total_size)
+ hid_t dset, hid_t p_type, hid_t f_space, hsize_t *total_size)
{
size_t i; /* counters */
hsize_t n; /* counters */
@@ -1339,21 +1455,21 @@ h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools
if (ctx->ndims > 2)
for (i = 0; i < (size_t) ctx->ndims - 2; i++) {
/* block size is handled by containing h5tools_print_simple_subset call */
- outer_count = outer_count * sset->count.data[i];
+ outer_count = outer_count * ctx->sset->count.data[i];
}
/* initialize temporary start, count and maximum start */
for (i = 0; i < ctx->ndims; i++) {
- temp_start[i] = sset->start.data[i];
- temp_count[i] = sset->count.data[i];
- temp_block[i] = sset->block.data[i];
- temp_stride[i] = sset->stride.data[i];
+ temp_start[i] = ctx->sset->start.data[i];
+ temp_count[i] = ctx->sset->count.data[i];
+ temp_block[i] = ctx->sset->block.data[i];
+ temp_stride[i] = ctx->sset->stride.data[i];
max_start[i] = 0;
}
if (ctx->ndims > 2) {
for (i = 0; i < (size_t) ctx->ndims - 2; i++) {
- max_start[i] = temp_start[i] + sset->count.data[i] * sset->stride.data[i];
+ max_start[i] = temp_start[i] + ctx->sset->count.data[i] * ctx->sset->stride.data[i];
temp_count[i] = 1;
}
}
@@ -1364,14 +1480,14 @@ h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools
if (ctx->ndims > 1) {
/* count is the number of iterations to display all the rows,
the block size count times */
- count = sset->count.data[row_dim] * sset->block.data[row_dim];
+ count = ctx->sset->count.data[row_dim] * ctx->sset->block.data[row_dim];
/* always 1 row_counter at a time, that is a block of size 1, 1 time */
temp_count[row_dim] = 1;
temp_block[row_dim] = 1;
/* advance 1 row_counter at a time */
- if (sset->block.data[row_dim] > 1)
+ if (ctx->sset->block.data[row_dim] > 1)
temp_stride[row_dim] = 1;
}
/* for the 1D case */
@@ -1379,7 +1495,7 @@ h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools
count = 1;
}
- h5tools_print_simple_subset(stream, info, ctx, dset, p_type, sset,
+ h5tools_print_simple_subset(stream, info, ctx, dset, p_type,
f_space, count, temp_start, temp_count,
temp_block, temp_stride, total_size, row_dim);
@@ -1389,14 +1505,14 @@ h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools
/* set start to original from current_outer_dim up */
for (i = (size_t)(current_outer_dim + 1); i < ctx->ndims; i++)
- temp_start[i] = sset->start.data[i];
+ temp_start[i] = ctx->sset->start.data[i];
/* increment start dimension */
do {
reset_dim = 0;
- temp_start[current_outer_dim] += sset->stride.data[current_outer_dim];
+ temp_start[current_outer_dim] += ctx->sset->stride.data[current_outer_dim];
if (temp_start[current_outer_dim] >= max_start[current_outer_dim]) {
- temp_start[current_outer_dim] = sset->start.data[current_outer_dim];
+ temp_start[current_outer_dim] = ctx->sset->start.data[current_outer_dim];
current_outer_dim--;
reset_dim = 1;
@@ -1452,20 +1568,21 @@ h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools
*-------------------------------------------------------------------------
*/
static herr_t
-h5tools_dump_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t dset,
- hid_t p_type, struct subset_t *sset)
+h5tools_dump_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
+ hid_t dset, hid_t p_type)
{
- HERR_INIT(herr_t, SUCCEED)
- int sndims;
- hid_t f_space = -1; /* file data space */
- size_t i; /* counters */
- hsize_t total_size[H5S_MAX_RANK];/* total size of dataset*/
+ int sndims;
+ hid_t f_space = H5I_INVALID_HID; /* file data space */
+ size_t i; /* counters */
+ hsize_t total_size[H5S_MAX_RANK];/* total size of dataset*/
+ hbool_t past_catch = FALSE;
+ herr_t ret_value = SUCCEED;
if((f_space = H5Dget_space(dset)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dget_space failed");
+ H5TOOLS_THROW(FAIL, "H5Dget_space failed");
if((sndims = H5Sget_simple_extent_ndims(f_space)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sget_simple_extent_ndims failed");
+ H5TOOLS_THROW(FAIL, "H5Sget_simple_extent_ndims failed");
ctx->ndims = (unsigned)sndims;
/* assume entire data space to be printed */
@@ -1474,18 +1591,19 @@ h5tools_dump_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_co
ctx->p_min_idx[i] = 0;
if(H5Sget_simple_extent_dims(f_space, total_size, NULL) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
+ H5TOOLS_THROW(FAIL, "H5Sget_simple_extent_dims failed");
ctx->size_last_dim = total_size[ctx->ndims - 1];
/* Set the compound datatype field list for display */
ctx->cmpd_listv = info->cmpd_listv;
- h5tools_display_simple_subset(stream, info, ctx, dset, p_type, sset, f_space, total_size);
+ h5tools_display_simple_subset(stream, info, ctx, dset, p_type, f_space, total_size);
CATCH
if(f_space >= 0 && H5Sclose(f_space) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_THROW(FAIL, "H5Sclose failed");
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1508,8 +1626,7 @@ static int
h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
hid_t dset, hid_t p_type)
{
- HERR_INIT(herr_t, SUCCEED)
- hid_t f_space = -1; /* file data space */
+ hid_t f_space = H5I_INVALID_HID; /* file data space */
hsize_t elmtno; /* counter */
size_t i; /* counter */
int sndims; /* rank of dataspace */
@@ -1517,6 +1634,7 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
hsize_t zero[8]; /* vector of zeros */
unsigned int flags; /* buffer extent flags */
hsize_t total_size[H5S_MAX_RANK]; /* total size of dataset*/
+ hbool_t past_catch = FALSE;
/* Print info */
size_t p_type_nbytes; /* size of memory type */
@@ -1527,7 +1645,7 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
hsize_t sm_nbytes; /* bytes per stripmine */
hsize_t sm_nelmts; /* elements per stripmine*/
unsigned char *sm_buf = NULL; /* buffer for raw data */
- hid_t sm_space = -1; /* stripmine data space */
+ hid_t sm_space = H5I_INVALID_HID; /* stripmine data space */
/* Hyperslab info */
hsize_t hs_offset[H5S_MAX_RANK]; /* starting offset */
@@ -1536,19 +1654,20 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
/* VL data special information */
unsigned int vl_data = 0; /* contains VL datatypes */
+ int ret_value = 0;
- f_space = H5Dget_space(dset);
-
- if (f_space == FAIL)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dget_space failed");
+ H5TOOLS_DEBUG("enter");
+ if (H5I_INVALID_HID == (f_space = H5Dget_space(dset)))
+ H5TOOLS_GOTO_ERROR((-1), "H5Dget_space failed");
sndims = H5Sget_simple_extent_ndims(f_space);
if(sndims < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dget_simple_extent_ndims failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Dget_simple_extent_ndims failed");
ctx->ndims = (unsigned)sndims;
+ H5TOOLS_DEBUG("sndims:%d", sndims);
if ((size_t)ctx->ndims > NELMTS(sm_size))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "ctx->ndims > NELMTS(sm_size) failed");
+ H5TOOLS_GOTO_ERROR((-1), "ctx->ndims > NELMTS(sm_size) failed");
/* Assume entire data space to be printed */
if (ctx->ndims > 0)
@@ -1581,96 +1700,103 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
* a hyperslab whose size is manageable.
*/
sm_nbytes = p_type_nbytes = H5Tget_size(p_type);
-
if (ctx->ndims > 0) {
for (i = ctx->ndims; i > 0; --i) {
hsize_t size = H5TOOLS_BUFSIZE / sm_nbytes;
- if ( size == 0) /* datum size > H5TOOLS_BUFSIZE */
+ if (size == 0) /* datum size > H5TOOLS_BUFSIZE */
size = 1;
sm_size[i - 1] = MIN(total_size[i - 1], size);
sm_nbytes *= sm_size[i - 1];
- HDassert(sm_nbytes > 0);
}
}
-
if(!sm_nbytes)
goto done;
HDassert(sm_nbytes == (hsize_t)((size_t)sm_nbytes)); /*check for overflow*/
- sm_buf = (unsigned char *)HDmalloc((size_t)sm_nbytes);
-
- sm_nelmts = sm_nbytes / p_type_nbytes;
- sm_space = H5Screate_simple(1, &sm_nelmts, NULL);
-
- if (ctx->ndims > 0)
- init_acc_pos(ctx, total_size);
+ if (NULL != (sm_buf = (unsigned char *)HDmalloc((size_t)sm_nbytes))) {
+ H5TOOLS_DEBUG("stripmine size:%ld", sm_nbytes);
+
+ sm_nelmts = sm_nbytes / p_type_nbytes;
+ sm_space = H5Screate_simple(1, &sm_nelmts, NULL);
+ H5TOOLS_DEBUG("sm_nelmts size:%ld", sm_nelmts);
+
+ if (ctx->ndims > 0)
+ init_acc_pos(ctx, total_size);
+ H5TOOLS_DEBUG("ctx->ndims:%d", ctx->ndims);
+
+ /* The stripmine loop */
+ HDmemset(hs_offset, 0, sizeof hs_offset);
+ HDmemset(zero, 0, sizeof zero);
+
+ for (elmtno = 0; elmtno < p_nelmts; elmtno += hs_nelmts) {
+ H5TOOLS_DEBUG("stripmine read loop:%d", i);
+ /* Calculate the hyperslab size */
+ if (ctx->ndims > 0) {
+ for (i = 0, hs_nelmts = 1; i < ctx->ndims; i++) {
+ hs_size[i] = MIN(total_size[i] - hs_offset[i], sm_size[i]);
+ ctx->p_max_idx[i] = ctx->p_min_idx[i] + hs_size[i];
+ hs_nelmts *= hs_size[i];
+ }
- /* The stripmine loop */
- HDmemset(hs_offset, 0, sizeof hs_offset);
- HDmemset(zero, 0, sizeof zero);
-
- for (elmtno = 0; elmtno < p_nelmts; elmtno += hs_nelmts) {
- /* Calculate the hyperslab size */
- if (ctx->ndims > 0) {
- for (i = 0, hs_nelmts = 1; i < ctx->ndims; i++) {
- hs_size[i] = MIN(total_size[i] - hs_offset[i], sm_size[i]);
- ctx->p_max_idx[i] = ctx->p_min_idx[i] + hs_size[i];
- hs_nelmts *= hs_size[i];
+ if (H5Sselect_hyperslab(f_space, H5S_SELECT_SET, hs_offset, NULL, hs_size, NULL) < 0)
+ H5TOOLS_ERROR((-1), "H5Sselect_hyperslab hs_offset failed");
+ if (H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, zero, NULL, &hs_nelmts, NULL) < 0)
+ H5TOOLS_ERROR((-1), "H5Sselect_hyperslab zero failed");
+ }
+ else {
+ if (H5Sselect_all(f_space) < 0)
+ H5TOOLS_ERROR((-1), "H5Sselect_all f_space failed");
+ if (H5Sselect_all(sm_space) < 0)
+ H5TOOLS_ERROR((-1), "H5Sselect_all sm_space failed");
+ hs_nelmts = 1;
}
- 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 */
- if (H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf) < 0) {
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dread failed");
- }
-
- /* Print the data */
- flags = (elmtno == 0) ? START_OF_DATA : 0;
- flags |= ((elmtno + hs_nelmts) >= p_nelmts) ? END_OF_DATA : 0;
+ H5TOOLS_DEBUG("Read the data");
+ /* Read the data */
+ if (H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf) >= 0) {
+ /* Print the data */
+ flags = (elmtno == 0) ? START_OF_DATA : 0;
+ flags |= ((elmtno + hs_nelmts) >= p_nelmts) ? END_OF_DATA : 0;
- /* initialize the current stripmine position; this is necessary to print the array
- indices */
- ctx->sm_pos = elmtno;
+ /* initialize the current stripmine position; this is necessary to print the array
+ indices */
+ ctx->sm_pos = elmtno;
- if(h5tools_dump_simple_data(stream, info, dset, ctx, flags, hs_nelmts, p_type, sm_buf) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "h5tools_dump_simple_data failed");
+ if(h5tools_dump_simple_data(stream, info, dset, ctx, flags, hs_nelmts, p_type, sm_buf) < 0)
+ H5TOOLS_ERROR((-1), "h5tools_dump_simple_data failed");
- /* Reclaim any VL memory, if necessary */
- if (vl_data)
- H5Treclaim(p_type, sm_space, H5P_DEFAULT, sm_buf);
+ /* Reclaim any VL memory, if necessary */
+ if (vl_data)
+ H5Treclaim(p_type, sm_space, H5P_DEFAULT, sm_buf);
- /* Calculate the next hyperslab offset */
- for (i = ctx->ndims, carry = 1; i > 0 && carry; --i) {
- ctx->p_min_idx[i - 1] = ctx->p_max_idx[i - 1];
- hs_offset[i - 1] += hs_size[i - 1];
+ H5TOOLS_DEBUG("Calculate the next hyperslab offset");
+ /* Calculate the next hyperslab offset */
+ for (i = ctx->ndims, carry = 1; i > 0 && carry; --i) {
+ ctx->p_min_idx[i - 1] = ctx->p_max_idx[i - 1];
+ hs_offset[i - 1] += hs_size[i - 1];
- if (hs_offset[i - 1] == total_size[i - 1])
- hs_offset[i - 1] = 0;
+ if (hs_offset[i - 1] == total_size[i - 1])
+ hs_offset[i - 1] = 0;
+ else
+ carry = 0;
+ }
+ }
else
- carry = 0;
- }
-
- ctx->continuation++;
- }
+ H5TOOLS_ERROR((-1), "H5Dread failed");
-CATCH
- if(sm_buf)
+ ctx->continuation++;
+ H5TOOLS_DEBUG("stripmine read loop:%d complete", i);
+ }
HDfree(sm_buf);
+ } /* if (NULL != (sm_buf...)) */
done:
if(sm_space >= 0 && H5Sclose(sm_space) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sclose failed");
+ H5TOOLS_ERROR((-1), "H5Sclose failed");
if(f_space >= 0 && H5Sclose(f_space) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sclose failed");
-
+ H5TOOLS_ERROR((-1), "H5Sclose failed");
+CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1682,51 +1808,89 @@ done:
*
* Return: Success: SUCCEED
* Failure: FAIL
- *
*-------------------------------------------------------------------------
*/
static int
-h5tools_dump_simple_mem(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t obj_id,
- hid_t type, hid_t space, void *mem)
+h5tools_dump_simple_mem(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
+ hid_t attr_id, hid_t p_type)
{
- HERR_INIT(herr_t, SUCCEED)
- int sndims; /* rank of dataspace */
- unsigned i; /*counters */
- hsize_t nelmts; /*total selected elmts */
+ hid_t f_space = H5I_INVALID_HID; /* file data space */
+ hsize_t alloc_size;
+ int sndims; /* rank of dataspace */
+ unsigned i; /* counters */
+ hsize_t total_size[H5S_MAX_RANK]; /* total size of dataset*/
+ hsize_t p_nelmts; /* total selected elmts */
+ hbool_t past_catch = FALSE;
+ unsigned char *buf = NULL; /* buffer for raw data */
+ int ret_value = 0;
+
+ /* VL data special information */
+ unsigned int vl_data = 0; /* contains VL datatypes */
+
+ H5TOOLS_DEBUG("enter");
+ if (H5I_INVALID_HID == (f_space = H5Aget_space(attr_id)))
+ H5TOOLS_GOTO_ERROR((-1), "H5Dget_space failed");
- sndims = H5Sget_simple_extent_ndims(space);
+ sndims = H5Sget_simple_extent_ndims(f_space);
if(sndims < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dget_simple_extent_ndims failed");
+ H5TOOLS_THROW((-1), "H5Dget_simple_extent_ndims failed");
ctx->ndims = (unsigned)sndims;
+ H5TOOLS_DEBUG("sndims:%d", sndims);
if ((size_t) ctx->ndims > NELMTS(ctx->p_min_idx))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "ctx->ndims > NELMTS(ctx->p_min_idx) failed");
+ H5TOOLS_THROW((-1), "ctx->ndims > NELMTS(ctx->p_min_idx) failed");
/* Assume entire data space to be printed */
- for (i = 0; i < ctx->ndims; i++)
- ctx->p_min_idx[i] = 0;
+ if (ctx->ndims > 0)
+ for (i = 0; i < (size_t)ctx->ndims; i++)
+ ctx->p_min_idx[i] = 0;
- H5Sget_simple_extent_dims(space, ctx->p_max_idx, NULL);
+ H5Sget_simple_extent_dims(f_space, total_size, NULL);
- for (i = 0, nelmts = 1; ctx->ndims != 0 && i < ctx->ndims; i++)
- nelmts *= ctx->p_max_idx[i] - ctx->p_min_idx[i];
+ /* calculate the number of elements we're going to print */
+ p_nelmts = 1;
- if (nelmts == 0)
- H5_LEAVE(SUCCEED); /* nothing to print */
if (ctx->ndims > 0) {
- HDassert(ctx->p_max_idx[ctx->ndims - 1] == (hsize_t) ((int) ctx->p_max_idx[ctx->ndims - 1]));
- ctx->size_last_dim = ctx->p_max_idx[ctx->ndims - 1];
+ for (i = 0; i < ctx->ndims; i++)
+ p_nelmts *= total_size[i];
+ ctx->size_last_dim = (total_size[ctx->ndims - 1]);
} /* end if */
else
ctx->size_last_dim = 0;
- if (ctx->ndims > 0)
- init_acc_pos(ctx, ctx->p_max_idx);
+ if (p_nelmts == 0)
+ H5_LEAVE(SUCCEED); /* nothing to print */
+
+ /* Check if we have VL data in the dataset's datatype */
+ if (h5tools_detect_vlen(p_type) == TRUE)
+ vl_data = TRUE;
- if(h5tools_dump_simple_data(stream, info, obj_id, ctx, START_OF_DATA | END_OF_DATA, nelmts, type, mem) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "h5tools_dump_simple_data failed");
+ alloc_size = p_nelmts * H5Tget_size(p_type);
+ HDassert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
+ if (NULL != (buf = (unsigned char *)HDmalloc((size_t)alloc_size))) {
+ if (ctx->ndims > 0)
+ init_acc_pos(ctx, total_size);
+ H5TOOLS_DEBUG("ctx->ndims:%d", ctx->ndims);
+
+ H5TOOLS_DEBUG("Read the data");
+ /* Read the data */
+ if (H5Aread(attr_id, p_type, buf) >= 0) {
+ if(h5tools_dump_simple_data(stream, info, attr_id, ctx, START_OF_DATA | END_OF_DATA, p_nelmts, p_type, buf) < 0)
+ H5TOOLS_ERROR((-1), "h5tools_dump_simple_data failed");
+ /* Reclaim any VL memory, if necessary */
+ if (vl_data)
+ H5Treclaim(p_type, f_space, H5P_DEFAULT, buf);
+ }
+ else
+ H5TOOLS_ERROR((-1), "H5Aread failed");
+ HDfree(buf);
+ } /* if (NULL != (buf...)) */
+done:
+ if(f_space >= 0 && H5Sclose(f_space) < 0)
+ H5TOOLS_ERROR((-1), "H5Sclose failed");
CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1746,28 +1910,18 @@ CATCH
*
* Return: Success: SUCCEED
* Failure: FAIL
- *
- * Modifications:
- * Robb Matzke, 1999-06-07
- * If info->raw is set then the memory datatype will be the same
- * as the file datatype.
- *
- * Bill Wendling, 2001-02-27
- * Renamed to ``h5tools_dump_dset'' and added the subsetting
- * parameter.
- *
*-------------------------------------------------------------------------
*/
int
-h5tools_dump_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
- hid_t dset, struct subset_t *sset)
+h5tools_dump_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t dset)
{
- hid_t f_space = -1;
- hid_t p_type = -1;
- hid_t f_type = -1;
+ hid_t f_space = H5I_INVALID_HID;
+ hid_t p_type = H5I_INVALID_HID;
+ hid_t f_type = H5I_INVALID_HID;
H5S_class_t space_type;
- int status = FAIL;
h5tool_format_t info_dflt;
+ int ret_value = 0;
+
/* Use default values */
if (!stream)
stream = rawoutstream;
@@ -1802,15 +1956,15 @@ h5tools_dump_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *
/* Print the data */
if (space_type == H5S_SIMPLE || space_type == H5S_SCALAR) {
- if(!sset)
- status = h5tools_dump_simple_dset(rawdatastream, info, ctx, dset, p_type);
+ if(!ctx->sset)
+ ret_value = h5tools_dump_simple_dset(rawdatastream, info, ctx, dset, p_type);
else
- status = h5tools_dump_simple_subset(rawdatastream, info, ctx, dset, p_type, sset);
+ ret_value = h5tools_dump_simple_subset(rawdatastream, info, ctx, dset, p_type);
}
- else
+ else {
/* space is H5S_NULL */
- status = SUCCEED;
-
+ ret_value = SUCCEED;
+ }
done:
if (f_type > 0)
H5Tclose(f_type);
@@ -1819,7 +1973,8 @@ done:
if (f_space > 0)
H5Sclose(f_space);
- return status;
+ H5TOOLS_ENDDEBUG("exit");
+ return ret_value;
}
/*-------------------------------------------------------------------------
@@ -1831,15 +1986,16 @@ done:
*
* Return: Success: SUCCEED
* Failure: FAIL
- *
*-------------------------------------------------------------------------
*/
int
-h5tools_dump_mem(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
- hid_t obj_id, hid_t type, hid_t space, void *mem)
+h5tools_dump_mem(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t attr_id)
{
- HERR_INIT(int, SUCCEED)
+ hid_t f_space = H5I_INVALID_HID;
+ hid_t p_type = H5I_INVALID_HID;
+ hid_t f_type = H5I_INVALID_HID;
h5tool_format_t info_dflt;
+ int ret_value = 0;
/* Use default values */
if (!stream)
@@ -1850,13 +2006,43 @@ h5tools_dump_mem(FILE *stream, const h5tool_format_t *info, h5tools_context_t *c
info = &info_dflt;
}
+ f_type = H5Aget_type(attr_id);
+ if (f_type < 0)
+ goto done;
+
+ if (info->raw || bin_form == 1)
+ p_type = H5Tcopy(f_type);
+ else if (bin_form == 2)
+ p_type = h5tools_get_little_endian_type(f_type);
+ else if (bin_form == 3)
+ p_type = h5tools_get_big_endian_type(f_type);
+ else
+ p_type = H5Tget_native_type(f_type, H5T_DIR_DEFAULT);
+
+ if (p_type < 0)
+ goto done;
+
/* Check the data space */
- if (H5Sis_simple(space) <= 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sis_simple failed")
+ f_space = H5Aget_space(attr_id);
+ if (f_space < 0)
+ goto done;
- H5_LEAVE(h5tools_dump_simple_mem(rawattrstream, info, ctx, obj_id, type, space, mem))
+ /* Check the data space */
+ if (H5Sis_simple(f_space) <= 0) {
+ H5TOOLS_ERROR((-1), "H5Sis_simple failed");
+ }
+ else {
+ ret_value = h5tools_dump_simple_mem(rawattrstream, info, ctx, attr_id, p_type);
+ }
+done:
+ if (f_type > 0)
+ H5Tclose(f_type);
+ if (p_type > 0)
+ H5Tclose(p_type);
+ if (f_space > 0)
+ H5Sclose(f_space);
-CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -1869,14 +2055,12 @@ CATCH
*
* In/Out: h5tools_str_t *buffer
* h5tools_context_t *ctx
- *
*-------------------------------------------------------------------------
*/
int
h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_t *info,
h5tools_context_t *ctx, hid_t type, int object_search)
{
- HERR_INIT(int, SUCCEED)
char *mname;
hid_t mtype = -1;
hid_t str_type = -1;
@@ -1896,11 +2080,13 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
H5T_class_t type_class;
H5T_sign_t sign; /* sign scheme value */
htri_t is_vlstr = FALSE;
+ hbool_t past_catch = FALSE;
const char *sign_s = NULL; /* sign scheme string */
const char *order_s = NULL; /* byte order string */
+ int ret_value = 0;
if((type_class = H5Tget_class(type)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_class failed");
+ H5TOOLS_THROW((-1), "H5Tget_class failed");
if (object_search && H5Tcommitted(type) > 0) {
H5O_info_t oinfo;
obj_t *obj = NULL; /* Found object */
@@ -2190,11 +2376,11 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
order = H5Tget_order(tmp_type);
if(order == H5T_ORDER_LE) {
if(H5Tset_order(str_type, H5T_ORDER_LE) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tset_order failed");
+ H5TOOLS_ERROR((-1), "H5Tset_order failed");
} /* end if */
else if(order == H5T_ORDER_BE) {
if(H5Tset_order(str_type, H5T_ORDER_BE) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tset_order failed");
+ H5TOOLS_ERROR((-1), "H5Tset_order failed");
} /* end if */
if(H5Tequal(tmp_type, str_type)) {
@@ -2204,7 +2390,7 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
/* If not equal to C variable-length string, check Fortran type. */
if(H5Tclose(str_type) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR((-1), "H5Tclose failed");
str_type = H5Tcopy(H5T_FORTRAN_S1);
H5Tset_cset(str_type, cset);
@@ -2221,11 +2407,11 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
order = H5Tget_order(tmp_type);
if(order == H5T_ORDER_LE) {
if(H5Tset_order(str_type, H5T_ORDER_LE) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tset_order failed");
+ H5TOOLS_ERROR((-1), "H5Tset_order failed");
} /* end if */
else if(order == H5T_ORDER_BE) {
if(H5Tset_order(str_type, H5T_ORDER_BE) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tset_order failed");
+ H5TOOLS_ERROR((-1), "H5Tset_order failed");
} /* end if */
if(H5Tequal(tmp_type, str_type)) {
@@ -2244,9 +2430,9 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
h5tools_str_reset(buffer);
if(H5Tclose(str_type) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR((-1), "H5Tclose failed");
if(H5Tclose(tmp_type) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR((-1), "H5Tclose failed");
h5tools_str_append(buffer, "%s", h5tools_dump_header_format->strblockend);
break;
@@ -2280,7 +2466,7 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
char *ttag;
if(NULL == (ttag = H5Tget_tag(type)))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_tag failed");
+ H5TOOLS_THROW((-1), "H5Tget_tag failed");
ctx->need_prefix = TRUE;
@@ -2308,7 +2494,7 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
case H5T_COMPOUND:
if((snmembers = H5Tget_nmembers(type)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_nmembers failed");
+ H5TOOLS_THROW((-1), "H5Tget_nmembers failed");
nmembers = (unsigned)snmembers;
h5tools_str_append(buffer, "H5T_COMPOUND %s", h5tools_dump_header_format->structblockbegin);
@@ -2326,10 +2512,10 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
h5tools_str_append(buffer, " \"%s\";", mname);
h5tools_render_element(stream, info, ctx, buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
if(H5Tclose(mtype) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR((-1), "H5Tclose failed");
}
else
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tget_member_type failed");
+ H5TOOLS_ERROR((-1), "H5Tget_member_type failed");
H5free_memory(mname);
}
ctx->indent_level--;
@@ -2350,13 +2536,15 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
}
else if (H5Tequal(type, H5T_STD_REF) == TRUE) {
h5tools_str_append(buffer, " { H5T_STD_REF }");
- } else
+ }
+ else {
h5tools_str_append(buffer, " { UNDEFINED }");
+ }
break;
case H5T_ENUM:
if((super = H5Tget_super(type)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_super failed");
+ H5TOOLS_THROW((-1), "H5Tget_super failed");
h5tools_str_append(buffer, "H5T_ENUM %s", h5tools_dump_header_format->enumblockbegin);
h5tools_render_element(stream, info, ctx, buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
@@ -2368,7 +2556,7 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
h5tools_print_datatype(stream, buffer, info, ctx, super, TRUE);
if(H5Tclose(super) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR((-1), "H5Tclose failed");
h5tools_str_append(buffer, ";");
h5tools_render_element(stream, info, ctx, buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
@@ -2386,14 +2574,14 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
case H5T_VLEN:
if((super = H5Tget_super(type)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_super failed");
+ H5TOOLS_THROW((-1), "H5Tget_super failed");
h5tools_str_append(buffer, "H5T_VLEN %s ", h5tools_dump_header_format->vlenblockbegin);
h5tools_print_datatype(stream, buffer, info, ctx, super, TRUE);
if(H5Tclose(super) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR((-1), "H5Tclose failed");
h5tools_str_append(buffer, "%s", h5tools_dump_header_format->vlenblockend);
@@ -2414,10 +2602,10 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
h5tools_str_append(buffer, " ");
}
else
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tget_array_dims2 failed");
+ H5TOOLS_ERROR((-1), "H5Tget_array_dims2 failed");
}
else
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tget_array_ndims failed");
+ H5TOOLS_ERROR((-1), "H5Tget_array_ndims failed");
/* Get array base type */
if((super = H5Tget_super(type)) >= 0) {
@@ -2425,10 +2613,10 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
h5tools_print_datatype(stream, buffer, info, ctx, super, TRUE);
/* Close array base type */
if(H5Tclose(super) < 0)
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tclose failed");
+ H5TOOLS_ERROR((-1), "H5Tclose failed");
}
else
- HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Tget_super failed");
+ H5TOOLS_ERROR((-1), "H5Tget_super failed");
h5tools_str_append(buffer, " }");
@@ -2441,7 +2629,10 @@ h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer, const h5tool_format_
break;
}
+done:
+
CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -2454,24 +2645,24 @@ CATCH
*
* In/Out: h5tools_str_t *buffer
* h5tools_context_t *ctx
- *
*-------------------------------------------------------------------------
*/
int
h5tools_print_dataspace(h5tools_str_t *buffer, hid_t space)
{
- HERR_INIT(int, SUCCEED)
hsize_t size[H5TOOLS_DUMP_MAX_RANK];
hsize_t maxsize[H5TOOLS_DUMP_MAX_RANK];
int ndims = -1;
H5S_class_t space_type = -1;
+ hbool_t past_catch = FALSE;
int i;
+ int ret_value = 0;
if((ndims = H5Sget_simple_extent_dims(space, size, maxsize)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
+ H5TOOLS_THROW((-1), "H5Sget_simple_extent_dims failed");
if((space_type = H5Sget_simple_extent_type(space)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Sget_simple_extent_type failed");
+ H5TOOLS_THROW((-1), "H5Sget_simple_extent_type failed");
switch(space_type) {
case H5S_SCALAR:
@@ -2518,6 +2709,7 @@ h5tools_print_dataspace(h5tools_str_t *buffer, hid_t space)
} /* end switch */
CATCH
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -2534,10 +2726,8 @@ CATCH
*
*-----------------------------------------------------------------------*/
int
-h5tools_print_enum(FILE *stream, h5tools_str_t *buffer, const h5tool_format_t *info,
- h5tools_context_t *ctx, hid_t type)
+h5tools_print_enum(FILE *stream, h5tools_str_t *buffer, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t type)
{
- HERR_INIT(int, SUCCEED)
char **name = NULL; /*member names */
unsigned char *value = NULL; /*value array */
unsigned char *copy = NULL; /*a pointer to value array */
@@ -2551,20 +2741,22 @@ h5tools_print_enum(FILE *stream, h5tools_str_t *buffer, const h5tool_format_t *i
size_t dst_size; /*destination value type size */
size_t ncols = 80; /*available output width */
hsize_t curr_pos = 0; /* total data element position */
+ hbool_t past_catch = FALSE;
+ int ret_value = 0;
if (info->line_ncols > 0)
ncols = info->line_ncols;
if((snmembs = H5Tget_nmembers(type)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_nmembers failed");
+ H5TOOLS_THROW((-1), "H5Tget_nmembers failed");
nmembs = (unsigned)snmembs;
HDassert(nmembs > 0);
if((super = H5Tget_super(type)) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_super failed");
+ H5TOOLS_THROW((-1), "H5Tget_super failed");
if((type_size = H5Tget_size(type)) <= 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_size(type) failed");
+ H5TOOLS_THROW((-1), "H5Tget_size(type) failed");
/*
* Determine what datatype to use for the native values. To simplify
@@ -2577,7 +2769,7 @@ h5tools_print_enum(FILE *stream, h5tools_str_t *buffer, const h5tool_format_t *i
dst_size = sizeof(long long);
if((sign_type = H5Tget_sign(type))<0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_sign failed");
+ H5TOOLS_THROW((-1), "H5Tget_sign failed");
if(H5T_SGN_NONE == sign_type)
native = H5T_NATIVE_ULLONG;
else
@@ -2588,20 +2780,20 @@ h5tools_print_enum(FILE *stream, h5tools_str_t *buffer, const h5tool_format_t *i
/* Get the names and raw values of all members */
if(NULL == (name = (char **)HDcalloc((size_t)nmembs, sizeof(char *))))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for member name");
+ H5TOOLS_THROW((-1), "Could not allocate buffer for member name");
if(NULL == (value = (unsigned char *)HDcalloc((size_t)nmembs, MAX(type_size, dst_size))))
- H5E_THROW(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for member value");
+ H5TOOLS_THROW((-1), "Could not allocate buffer for member value");
for (i = 0; i < nmembs; i++) {
name[i] = H5Tget_member_name(type, i);
if(H5Tget_member_value(type, i, value + i * type_size) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tget_member_value failed");
+ H5TOOLS_THROW((-1), "H5Tget_member_value failed");
}
/* Convert values to native datatype */
if (native > 0)
if(H5Tconvert(super, native, (size_t)nmembs, value, NULL, H5P_DEFAULT) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Tconvert failed");
+ H5TOOLS_THROW((-1), "H5Tconvert failed");
/*
* Sort members by increasing value
@@ -2658,11 +2850,12 @@ CATCH
HDfree(value);
if(super >= 0 && H5Tclose(super) < 0)
- H5E_THROW(FAIL, H5E_tools_min_id_g, "Could not close datatype's super class");
+ H5TOOLS_THROW((-1), "Could not close datatype's super class");
if(0 == nmembs)
h5tools_str_append(buffer, "\n<empty>");
+ H5TOOLS_ENDDEBUG("exit");
return ret_value;
}
@@ -2678,8 +2871,7 @@ CATCH
*-------------------------------------------------------------------------
*/
void
-h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hid_t type)
+h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t type)
{
h5tools_str_t buffer; /* string into which to render */
size_t ncols = 80; /* available output width */
@@ -2726,8 +2918,7 @@ h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info,
*-------------------------------------------------------------------------
*/
void
-h5tools_dump_dataspace(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hid_t type)
+h5tools_dump_dataspace(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t type)
{
h5tools_str_t buffer; /* string into which to render */
size_t ncols = 80; /* available output width */
@@ -2775,8 +2966,7 @@ h5tools_dump_dataspace(FILE *stream, const h5tool_format_t *info,
*-------------------------------------------------------------------------
*/
void
-h5tools_dump_oid(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hid_t oid)
+h5tools_dump_oid(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t oid)
{
h5tools_str_t buffer; /* string into which to render */
size_t ncols = 80; /* available output width */
@@ -2810,11 +3000,10 @@ h5tools_dump_oid(FILE *stream, const h5tool_format_t *info,
*-------------------------------------------------------------------------
*/
static void
-h5tools_print_virtual_selection(hid_t vspace,
- FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/,
- h5tools_str_t *buffer/*string into which to render */,
- hsize_t *curr_pos/*total data element position*/,
+h5tools_print_virtual_selection(hid_t vspace, FILE *stream, const h5tool_format_t *info,
+ h5tools_context_t *ctx, /* in,out*/
+ h5tools_str_t *buffer, /* string into which to render */
+ hsize_t *curr_pos, /* total data element position */
size_t ncols)
{
switch(H5Sget_select_type(vspace)) {
@@ -2881,7 +3070,8 @@ h5tools_print_virtual_selection(hid_t vspace,
*-------------------------------------------------------------------------
*/
void
-h5tools_print_fill_value(h5tools_str_t *buffer/*in,out*/, const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/, hid_t dcpl, hid_t type_id, hid_t obj_id)
+h5tools_print_fill_value(h5tools_str_t *buffer/*in,out*/, const h5tool_format_t *info,
+ h5tools_context_t *ctx/*in,out*/, hid_t dcpl, hid_t type_id, hid_t obj_id)
{
size_t size;
hid_t n_type = -1;
@@ -3367,7 +3557,6 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
} /*i*/
}/*nfilters*/
else {
-
ctx->need_prefix = TRUE;
h5tools_str_reset(&buffer);
@@ -3502,12 +3691,10 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
* Purpose: prints the comment for the the object name
*
* Return: void
- *
*-------------------------------------------------------------------------
*/
void
-h5tools_dump_comment(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hid_t obj_id)
+h5tools_dump_comment(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t obj_id)
{
char *comment = NULL;
ssize_t cmt_bufsize = -1;
@@ -3561,9 +3748,7 @@ h5tools_dump_comment(FILE *stream, const h5tool_format_t *info,
*-------------------------------------------------------------------------
*/
void
-h5tools_dump_attribute(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, const char *attr_name, hid_t attr_id,
- int display_index, int display_char)
+h5tools_dump_attribute(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, const char *attr_name, hid_t attr_id)
{
h5tools_str_t buffer; /* string into which to render */
size_t ncols = 80; /* available output width */
@@ -3606,7 +3791,7 @@ h5tools_dump_attribute(FILE *stream, const h5tool_format_t *info,
h5tools_dump_oid(stream, info, ctx, attr_id);
if(data_output || attr_data_output)
- h5tools_dump_data(stream, info, ctx, attr_id, FALSE, NULL, display_index, display_char);
+ h5tools_dump_data(stream, info, ctx, attr_id, FALSE);
ctx->indent_level--;
@@ -3638,12 +3823,6 @@ h5tools_dump_attribute(FILE *stream, const h5tool_format_t *info,
* Purpose: Dump the dimensions handed to it in a comma separated list
*
* Return: void
- *
- * Programmer: Bill Wendling
- * Tuesday, 27. February 2001
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
void
@@ -3665,7 +3844,6 @@ h5tools_print_dims(h5tools_str_t *buffer, hsize_t *s, int dims)
* Purpose: Prints the packed bits offset and length
*
* Return: void
- *
*-------------------------------------------------------------------------
*/
void
@@ -3712,17 +3890,10 @@ h5tools_print_packed_bits(h5tools_str_t *buffer, hid_t type)
* Purpose: Dump the subsetting header like specified in the DDL.
*
* Return: void
- *
- * Programmer: Bill Wendling
- * Tuesday, 27. February 2001
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
void
-h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, struct subset_t *sset, int dims)
+h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, int dims)
{
h5tools_str_t buffer; /* string into which to render */
hsize_t curr_pos = 0; /* total data element position */
@@ -3745,7 +3916,7 @@ h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info,
h5tools_str_reset(&buffer);
h5tools_str_append(&buffer, "%s %s ", h5tools_dump_header_format->startbegin, h5tools_dump_header_format->startblockbegin);
- h5tools_print_dims(&buffer, sset->start.data, dims);
+ h5tools_print_dims(&buffer, ctx->sset->start.data, dims);
h5tools_str_append(&buffer, "%s %s", h5tools_dump_header_format->startend, h5tools_dump_header_format->startblockend);
h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
@@ -3753,7 +3924,7 @@ h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info,
h5tools_str_reset(&buffer);
h5tools_str_append(&buffer, "%s %s ", h5tools_dump_header_format->stridebegin, h5tools_dump_header_format->strideblockbegin);
- h5tools_print_dims(&buffer, sset->stride.data, dims);
+ h5tools_print_dims(&buffer, ctx->sset->stride.data, dims);
h5tools_str_append(&buffer, "%s %s", h5tools_dump_header_format->strideend, h5tools_dump_header_format->strideblockend);
h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
@@ -3762,8 +3933,8 @@ h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info,
h5tools_str_reset(&buffer);
h5tools_str_append(&buffer, "%s %s ", h5tools_dump_header_format->countbegin, h5tools_dump_header_format->countblockbegin);
- if(sset->count.data)
- h5tools_print_dims(&buffer, sset->count.data, dims);
+ if(ctx->sset->count.data)
+ h5tools_print_dims(&buffer, ctx->sset->count.data, dims);
else
h5tools_str_append(&buffer, "DEFAULT");
@@ -3775,8 +3946,8 @@ h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info,
h5tools_str_reset(&buffer);
h5tools_str_append(&buffer, "%s %s ", h5tools_dump_header_format->blockbegin, h5tools_dump_header_format->blockblockbegin);
- if(sset->block.data)
- h5tools_print_dims(&buffer, sset->block.data, dims);
+ if(ctx->sset->block.data)
+ h5tools_print_dims(&buffer, ctx->sset->block.data, dims);
else
h5tools_str_append(&buffer, "DEFAULT");
@@ -3791,34 +3962,34 @@ h5tools_dump_subsetting_header(FILE *stream, const h5tool_format_t *info,
/*-------------------------------------------------------------------------
* Function: dump_data
*
- * Purpose: Dump attribute or dataset data
+ * Purpose: Dump attribute, obj_data is FALSE, or dataset data, obj_data is TRUE
*
* Return: void
- *
*-------------------------------------------------------------------------
*/
void
-h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hid_t obj_id, int obj_data, struct subset_t *sset,
- int display_index, int display_char)
+h5tools_dump_data(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx, hid_t obj_id, int obj_data)
{
H5S_class_t space_type;
int ndims;
- int i;
- hid_t space = -1;
- hid_t type = -1;
- hid_t p_type = -1;
- hsize_t size[64];
- hsize_t alloc_size;
- hsize_t nelmts = 1;
+ size_t i;
+ hid_t space = H5I_INVALID_HID;
+ hid_t f_type = H5I_INVALID_HID;
+ hid_t new_obj_id = H5I_INVALID_HID;
+ hid_t new_obj_sid = H5I_INVALID_HID;
+ hsize_t total_size[H5S_MAX_RANK];
+ hsize_t elmt_counter = 0; /*counts the # elements printed. */
int status = -1;
- void *buf = NULL;
- h5tools_str_t buffer; /* string into which to render */
- hsize_t curr_pos = 0; /* total data element position */
- size_t ncols = 80; /* available output width */
- h5tool_format_t string_dataformat;
- h5tool_format_t outputformat;
-
+ h5tools_context_t datactx; /* print context */
+ h5tools_str_t buffer; /* string into which to render */
+ hsize_t curr_pos = 0; /* total data element position */
+ size_t ncols = 80; /* available output width */
+ h5tool_format_t string_dataformat;
+ h5tool_format_t outputformat;
+ H5R_ref_t *ref_buf = NULL;
+
+ H5TOOLS_DEBUG("enter file=%p", (void*)stream);
+ H5TOOLS_DEBUG("rawdata file=%p", (void*)rawdatastream);
/* setup */
HDmemset(&buffer, 0, sizeof(h5tools_str_t));
if (info->line_ncols > 0)
@@ -3827,26 +3998,17 @@ h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
outputformat = *info;
string_dataformat = *info;
/* print the matrix indices */
- string_dataformat.pindex = display_index;
+ string_dataformat.pindex = ctx->display_index;
- /* do not print indices for regions */
if(obj_data) {
- hid_t f_type = H5Dget_type(obj_id);
-
- if (H5Tequal(f_type, H5T_STD_REF_DSETREG)) {
- /* For the region option, correct the display of indices */
- if (region_output) {
- if (!string_dataformat.pindex) {
- string_dataformat.idx_fmt = "";
- string_dataformat.idx_n_fmt = "";
- string_dataformat.idx_sep = "";
- string_dataformat.line_pre = "";
- }
- }
- else
- string_dataformat.pindex = 0;
- }
- H5Tclose(f_type);
+ H5TOOLS_DEBUG("dataset");
+ f_type = H5Dget_type(obj_id);
+ space = H5Dget_space(obj_id);
+ }
+ else {
+ H5TOOLS_DEBUG("attribute");
+ f_type = H5Aget_type(obj_id);
+ space = H5Aget_space(obj_id);
}
if (string_dataformat.pindex) {
@@ -3857,11 +4019,9 @@ h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
}
info = &string_dataformat;
- if (sset && obj_data) {
- hid_t f_space = H5Dget_space(obj_id);
+ if (ctx->sset && obj_data) {
- h5tools_dump_subsetting_header(stream, &outputformat, ctx, sset, H5Sget_simple_extent_ndims(f_space));
- H5Sclose(f_space);
+ h5tools_dump_subsetting_header(stream, &outputformat, ctx, H5Sget_simple_extent_ndims(space));
ctx->indent_level++;
}
@@ -3871,135 +4031,304 @@ h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
h5tools_str_append(&buffer, "%s %s", h5tools_dump_header_format->databegin, h5tools_dump_header_format->datablockbegin);
h5tools_render_element(stream, &outputformat, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
- /* Print all the values. */
- if(obj_data) {
- h5tools_context_t datactx = *ctx; /* print context */
- hid_t f_type = H5Dget_type(obj_id);
+ if (H5Tget_class(f_type) == H5T_REFERENCE) {
+ ctx->indent_level++;
+ datactx = *ctx;
+ H5TOOLS_DEBUG("reference class type");
+ if (!H5Tequal(f_type, H5T_STD_REF) && !H5Tequal(f_type, H5T_STD_REF_DSETREG) && !H5Tequal(f_type, H5T_STD_REF_OBJ)) {
+ H5TOOLS_GOTO_DONE_NO_RET();
+ }
+
+ ndims = (int)H5Sget_simple_extent_npoints(space);
+ H5TOOLS_DEBUG("ndims=%d - datactx.ndims=%d", ndims, datactx.ndims);
+
+ /* Assume entire data space to be printed */
+ if (datactx.ndims > 0)
+ for (i = 0; i < (size_t)datactx.ndims; i++)
+ datactx.p_min_idx[i] = 0;
+
+ H5Sget_simple_extent_dims(space, total_size, NULL);
+ if (datactx.ndims > 0)
+ init_acc_pos(&datactx, total_size);
+ datactx.need_prefix = TRUE;
+
+ if (NULL != (ref_buf = (H5R_ref_t *)HDcalloc(MAX(sizeof(unsigned), sizeof(H5R_ref_t)), ndims))) {
+ if(obj_data) {
+ if(H5Dread(obj_id, H5T_STD_REF, H5S_ALL, H5S_ALL, H5P_DEFAULT, ref_buf) < 0) {
+ HDfree(ref_buf);
+ H5TOOLS_INFO("H5Dread reference failed");
+ H5TOOLS_GOTO_DONE_NO_RET();
+ }
+ }
+ else {
+ if(H5Aread(obj_id, H5T_STD_REF, ref_buf) < 0) {
+ HDfree(ref_buf);
+ H5TOOLS_INFO("H5Aread reference failed");
+ H5TOOLS_GOTO_DONE_NO_RET();
+ }
+ }
+ for(i = 0; i < ndims; i++, datactx.cur_elmt++, elmt_counter++) {
+ H5O_type_t obj_type = -1; /* Object type */
+ H5R_type_t ref_type; /* Reference type */
+
+ H5TOOLS_DEBUG("reference loop:%d with curr_pos=%ld", i, curr_pos);
+
+ datactx.need_prefix = TRUE;
+ h5tools_str_reset(&buffer);
+ H5TOOLS_DEBUG("reference loop - h5tools_str_sprint with H5T_STD_REF:%d", i);
+ h5tools_str_sprint(&buffer, &outputformat, obj_id, H5T_STD_REF, &ref_buf[i], &datactx);
+ h5tools_render_element(stream, &outputformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)i, (hsize_t)ndims);
+
+ ref_type = H5Rget_type((const H5R_ref_t *)&ref_buf[i]);
+ switch (ref_type) {
+ case H5R_OBJECT1:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT1");
+ if (H5Rget_obj_type3((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, &obj_type) >= 0) {
+ switch (obj_type) {
+ case H5O_TYPE_DATASET:
+ if((new_obj_id = H5Ropen_object((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ datactx.indent_level++;
+ h5tools_dump_data(stream, &outputformat, &datactx, new_obj_id, TRUE);
+ datactx.indent_level--;
+ if(H5Dclose(new_obj_id) < 0)
+ H5TOOLS_INFO("H5Dclose H5R_OBJECT1:H5O_TYPE_DATASET failed");
+ }
+ else
+ H5TOOLS_INFO("H5Ropen_object H5R_OBJECT1:H5O_TYPE_DATASET failed");
+ break;
+
+ case H5O_TYPE_GROUP:
+ case H5O_TYPE_NAMED_DATATYPE:
+ case H5O_TYPE_MAP:
+ case H5O_TYPE_UNKNOWN:
+ case H5O_TYPE_NTYPES:
+ default:
+ break;
+ } /* end switch */
+ }
+ else
+ H5TOOLS_INFO("H5Rget_obj_type3 H5R_OBJECT1 failed");
+ break;
+ case H5R_DATASET_REGION1:
+ H5TOOLS_DEBUG("ref_type is H5R_DATASET_REGION1");
+ if((new_obj_id = H5Ropen_object((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ datactx.indent_level++;
+ h5tools_dump_data(stream, &outputformat, &datactx, new_obj_id, TRUE);
+ datactx.indent_level--;
+ if(H5Dclose(new_obj_id) < 0)
+ H5TOOLS_INFO("H5Dclose H5R_DATASET_REGION1 failed");
+ }
+ else
+ H5TOOLS_INFO("H5Ropen_object H5R_DATASET_REGION1 failed");
+ break;
+ case H5R_OBJECT2:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT2");
+ if (H5Rget_obj_type3((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, &obj_type) >= 0) {
+ switch (obj_type) {
+ case H5O_TYPE_GROUP:
+ break;
+
+ case H5O_TYPE_DATASET:
+ if((new_obj_id = H5Ropen_object((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ datactx.indent_level++;
+ h5tools_dump_data(stream, &outputformat, &datactx, new_obj_id, TRUE);
+ datactx.indent_level--;
+ if(H5Oclose(new_obj_id) < 0)
+ H5TOOLS_INFO("H5Oclose H5R_OBJECT2 failed");
+ }
+ else
+ H5TOOLS_INFO("H5Ropen_object H5R_OBJECT2 failed");
+ break;
+
+ case H5O_TYPE_NAMED_DATATYPE:
+ break;
+
+ case H5O_TYPE_MAP:
+ case H5O_TYPE_UNKNOWN:
+ case H5O_TYPE_NTYPES:
+ default:
+ break;
+ } /* end switch */
+ }
+ else
+ H5TOOLS_INFO("H5Rget_obj_type3 H5R_OBJECT2 failed");
+ break;
+ case H5R_DATASET_REGION2:
+ H5TOOLS_DEBUG("ref_type is H5R_DATASET_REGION2");
+
+ if (outputformat.line_ncols > 0)
+ ncols = outputformat.line_ncols;
+
+ /* if (new_obj_id < 0) - could mean that no reference was written do not throw failure */
+ if((new_obj_id = H5Ropen_object((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ H5TOOLS_INFO("H5Ropen_object H5R_DATASET_REGION2 failed");
+ else {
+ if((new_obj_sid = H5Ropen_region((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ if (h5tools_is_zero(&ref_buf[i], H5Tget_size(H5T_STD_REF))) {
+ H5TOOLS_DEBUG("NULL H5R_DATASET_REGION2");
+
+ h5tools_str_reset(&buffer);
+ h5tools_str_append(&buffer, " {");
+ h5tools_render_element(stream, &outputformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+
+ datactx.indent_level++;
+ datactx.need_prefix = TRUE;
+
+ h5tools_str_reset(&buffer);
+ h5tools_str_append(&buffer, "NULL");
+ h5tools_render_element(stream, &outputformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+
+ datactx.indent_level--;
+ datactx.need_prefix = TRUE;
+
+ h5tools_str_reset(&buffer);
+ h5tools_str_append(&buffer, "}");
+ h5tools_render_element(stream, &outputformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+ }
+ else {
+ H5S_sel_type region_type;
+
+ region_type = H5Sget_select_type(new_obj_sid);
+ if(region_type == H5S_SEL_POINTS) {
+ /* Print point information */
+ H5TOOLS_DEBUG("H5S_SEL_POINTS H5R_DATASET_REGION2");
+ h5tools_dump_region_data_points(new_obj_sid, new_obj_id, stream, &outputformat, &datactx,
+ &buffer, &curr_pos, ncols, i, elmt_counter);
+ }
+ else if(region_type == H5S_SEL_HYPERSLABS) {
+ /* Print block information */
+ H5TOOLS_DEBUG("H5S_SEL_HYPERSLABS H5R_DATASET_REGION2");
+ h5tools_dump_region_data_blocks(new_obj_sid, new_obj_id, stream, &outputformat, &datactx,
+ &buffer, &curr_pos, ncols, i, elmt_counter);
+ }
+ else
+ H5TOOLS_INFO("invalid region type");
+ } /* end else to if (h5tools_is_zero(... */
+ if(H5Sclose(new_obj_sid) < 0)
+ H5TOOLS_INFO("H5Sclose H5R_DATASET_REGION2 failed");
+ }
+ else
+ H5TOOLS_INFO("H5Ropen_region H5R_DATASET_REGION2 failed");
+ if(H5Dclose(new_obj_id) < 0)
+ H5TOOLS_INFO("H5Dclose H5R_DATASET_REGION2 failed");
+ }
+ break;
+ case H5R_ATTR:
+ H5TOOLS_DEBUG("ref_type is H5R_ATTR");
+ if((new_obj_id = H5Ropen_attr((const H5R_ref_t *)&ref_buf[i], H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ h5tools_dump_region_attribute(new_obj_id, stream, &outputformat, &datactx,
+ &buffer, &curr_pos, ncols, i, elmt_counter);
+ if(H5Aclose(new_obj_id) < 0)
+ H5TOOLS_INFO("H5Aclose H5R_ATTR failed");
+ }
+ else {
+ H5TOOLS_DEBUG("NULL H5R_ATTR");
+
+ h5tools_str_reset(&buffer);
+ h5tools_str_append(&buffer, " {");
+ h5tools_render_element(stream, &outputformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+
+ datactx.indent_level++;
+ datactx.need_prefix = TRUE;
+
+ datactx.indent_level++;
+ h5tools_str_reset(&buffer);
+ h5tools_str_append(&buffer, "NULL");
+ h5tools_render_element(stream, &outputformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+ datactx.indent_level--;
+
+ datactx.indent_level--;
+ datactx.need_prefix = TRUE;
+
+ h5tools_str_reset(&buffer);
+ h5tools_str_append(&buffer, "}");
+ h5tools_render_element(stream, &outputformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+
+ H5TOOLS_INFO("H5Ropen_attr H5R_ATTR failed");
+ }
+ break;
+ case H5R_BADTYPE:
+ case H5R_MAXTYPE:
+ default:
+ break;
+ } /* end switch */
- if((display_char && H5Tget_size(f_type) == 1) && (H5Tget_class(f_type) == H5T_INTEGER)) {
+ if(H5Rdestroy(&ref_buf[i]) < 0)
+ H5TOOLS_INFO("H5Rdestroy failed");
+
+ H5TOOLS_DEBUG("finished reference loop:%d",i);
+ } /* end for(i = 0; i < ndims; i++, datactx->cur_elmt++, elmt_counter++) */
+ HDfree(ref_buf);
+ }
+ ctx->indent_level--;
+ }
+ else {
+ H5TOOLS_DEBUG("Print all the values");
+ datactx = *ctx;
+ string_dataformat = *info;
+ if((datactx.display_char && H5Tget_size(f_type) == 1) && (H5Tget_class(f_type) == H5T_INTEGER)) {
+ H5TOOLS_DEBUG("Print 1-byte integer data as an ASCII character string");
/*
- * Print 1-byte integer data as an ASCII character string
- * instead of integers if the `-r' or `--string' command-line
- * option was given.
- *
- * We don't want to modify the global dataformat, so make a
- * copy of it instead.
- */
- string_dataformat = *info;
+ * Print 1-byte integer data as an ASCII character string
+ * instead of integers if the `-r' or `--string' command-line
+ * option was given.
+ *
+ * We don't want to modify the global dataformat, so make a
+ * copy of it instead.
+ */
string_dataformat.idx_fmt = "\"";
- info = &string_dataformat;
datactx.indent_level++;
datactx.need_prefix = TRUE;
- h5tools_simple_prefix(stream, info, &datactx, (hsize_t)0, 0);
+ h5tools_simple_prefix(stream, &string_dataformat, &datactx, (hsize_t)0, 0);
- string_dataformat = *info;
- string_dataformat.idx_fmt = "\"";
string_dataformat.line_multi_new = 1;
string_dataformat.str_repeat = 8;
string_dataformat.ascii = TRUE;
string_dataformat.elmt_suf1 = "";
string_dataformat.elmt_suf2 = "";
string_dataformat.line_suf = "\"";
- info = &string_dataformat;
}
- else
+ else {
datactx.need_prefix = TRUE;
- status = h5tools_dump_dset(stream, info, &datactx, obj_id, sset);
- if((display_char && H5Tget_size(f_type) == 1) && (H5Tget_class(f_type) == H5T_INTEGER)) {
- h5tools_str_reset(&buffer);
- h5tools_str_append(&buffer, "\"");
- h5tools_render_element(stream, &outputformat, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
}
- H5Tclose(f_type);
- }
- else {
- h5tools_context_t datactx = *ctx; /* print context */
- /* need to call h5tools_dump_mem for the attribute data */
- space = H5Aget_space(obj_id);
- space_type = H5Sget_simple_extent_type(space);
- if(space_type == H5S_NULL || space_type == H5S_NO_CLASS) {
- status = SUCCEED;
+
+ /* Print all the values. */
+ if(obj_data) {
+ H5TOOLS_DEBUG("h5tools_dump_dset");
+ status = h5tools_dump_dset(stream, &string_dataformat, &datactx, obj_id);
}
else {
- /* VL data special information */
- unsigned int vl_data = 0; /* contains VL datatypes */
-
- type = H5Aget_type(obj_id);
- p_type = H5Tget_native_type(type, H5T_DIR_DEFAULT);
-
- ndims = H5Sget_simple_extent_dims(space, size, NULL);
-
- /* Check if we have VL data in the dataset's datatype */
- if (h5tools_detect_vlen(p_type) == TRUE)
- vl_data = TRUE;
-
- for (i = 0; i < ndims; i++)
- nelmts *= size[i];
-
- alloc_size = nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type));
- HDassert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
-
- if(alloc_size) {
- buf = HDmalloc((size_t)alloc_size);
- HDassert(buf);
-
- if (H5Aread(obj_id, p_type, buf) >= 0) {
- if (display_char && H5Tget_size(type) == 1 && H5Tget_class(type) == H5T_INTEGER) {
- /*
- * Print 1-byte integer data as an ASCII character string
- * instead of integers if the `-r' or `--string' command-line
- * option was given.
- *
- * We don't want to modify the global dataformat, so make a
- * copy of it instead.
- */
- string_dataformat = *info;
- string_dataformat.idx_fmt = "\"";
- info = &string_dataformat;
- datactx.indent_level++;
- datactx.need_prefix = TRUE;
- h5tools_simple_prefix(stream, info, &datactx, (hsize_t)0, 0);
-
- string_dataformat = *info;
- string_dataformat.idx_fmt = "\"";
- string_dataformat.line_multi_new = 1;
- string_dataformat.str_repeat = 8;
- string_dataformat.ascii = TRUE;
- string_dataformat.elmt_suf1 = "";
- string_dataformat.elmt_suf2 = "";
- string_dataformat.line_suf = "\"";
- info = &string_dataformat;
- }
- else
- datactx.need_prefix = TRUE;
- }
-
- status = h5tools_dump_mem(stream, info, &datactx, obj_id, p_type, space, buf);
- if (display_char && H5Tget_size(type) == 1 && H5Tget_class(type) == H5T_INTEGER) {
- h5tools_str_reset(&buffer);
- h5tools_str_append(&buffer, "\"");
- h5tools_render_element(stream, &outputformat, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
- }
-
- /* Reclaim any VL memory, if necessary */
- if (vl_data)
- H5Treclaim(p_type, space, H5P_DEFAULT, buf);
-
- HDfree(buf);
- }
- else
+ /* need to call h5tools_dump_mem for the attribute data */
+ space_type = H5Sget_simple_extent_type(space);
+ if(space_type == H5S_NULL || space_type == H5S_NO_CLASS) {
status = SUCCEED;
-
- H5Tclose(p_type);
- H5Tclose(type);
+ }
+ else {
+ H5TOOLS_DEBUG("call h5tools_dump_mem");
+ status = h5tools_dump_mem(stream, &string_dataformat, &datactx, obj_id);
+ }
}
- H5Sclose(space);
- }
+ if (datactx.display_char && H5Tget_size(f_type) == 1 && H5Tget_class(f_type) == H5T_INTEGER) {
+ H5TOOLS_DEBUG("Print 1-byte integer data as an ASCII character string eol=%s",string_dataformat.line_suf);
+ datactx.need_prefix = FALSE;
+ string_dataformat.arr_linebreak = 0;
+ string_dataformat.idx_fmt = "";
+ string_dataformat.line_multi_new = 0;
+ string_dataformat.line_suf = "";
+ h5tools_str_reset(&buffer);
+ h5tools_str_append(&buffer, "\"");
+ h5tools_render_element(stream, &string_dataformat, &datactx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+ }
+ H5TOOLS_DEBUG("Print all the values Complete");
- if (status == FAIL) {
- error_msg("unable to print data\n");
- h5tools_setstatus(EXIT_FAILURE);
+ if (status == FAIL) {
+ error_msg("unable to print data\n");
+ h5tools_setstatus(EXIT_FAILURE);
+ }
}
+done:
+ H5Sclose(space);
+ H5Tclose(f_type);
ctx->need_prefix = TRUE;
h5tools_simple_prefix(stream, &outputformat, ctx, (hsize_t)0, 0);
@@ -4010,11 +4339,12 @@ h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
if(HDstrlen(h5tools_dump_header_format->dataend))
h5tools_str_append(&buffer, " ");
}
+
if(HDstrlen(h5tools_dump_header_format->dataend))
h5tools_str_append(&buffer, "%s", h5tools_dump_header_format->dataend);
h5tools_render_element(stream, &outputformat, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
- if (sset && obj_data) {
+ if (ctx->sset && obj_data) {
ctx->indent_level--;
ctx->need_prefix = TRUE;
@@ -4032,5 +4362,6 @@ h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
}
h5tools_str_close(&buffer);
+ H5TOOLS_ENDDEBUG("exit");
}
diff --git a/tools/lib/h5tools_dump.h b/tools/lib/h5tools_dump.h
index dc79f43..2cd0bc1 100644
--- a/tools/lib/h5tools_dump.h
+++ b/tools/lib/h5tools_dump.h
@@ -37,11 +37,9 @@ H5TOOLS_DLLVAR table_t *h5dump_type_table; /*type table reference for datatype
H5TOOLS_DLL void h5tools_dump_init(void);
H5TOOLS_DLL int h5tools_dump_dset(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/, hid_t dset,
- struct subset_t *sset);
+ h5tools_context_t *ctx/*in,out*/, hid_t dset);
H5TOOLS_DLL int h5tools_dump_mem(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/, hid_t obj_id,
- hid_t type, hid_t space, void *mem);
+ h5tools_context_t *ctx/*in,out*/, hid_t obj_id);
H5TOOLS_DLL int h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t container,
h5tools_context_t *ctx/*in,out*/, unsigned flags,
hsize_t nelmts, hid_t type, void *_mem);
@@ -50,8 +48,7 @@ H5TOOLS_DLL void h5tools_dump_datatype(FILE *stream, const h5tool_format_t *i
H5TOOLS_DLL void h5tools_dump_dataspace(FILE *stream, const h5tool_format_t *info,
h5tools_context_t *ctx/*in,out*/, hid_t space);
H5TOOLS_DLL void h5tools_dump_attribute(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx/*in,out*/, const char *attr_name,
- hid_t attr_id, int display_index, int display_char);
+ h5tools_context_t *ctx/*in,out*/, const char *attr_name, hid_t attr_id);
H5TOOLS_DLL void h5tools_dump_oid(FILE *stream, const h5tool_format_t *info,
h5tools_context_t *ctx/*in,out*/, hid_t oid);
H5TOOLS_DLL void h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
@@ -59,8 +56,30 @@ H5TOOLS_DLL void h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
H5TOOLS_DLL void h5tools_dump_comment(FILE *stream, const h5tool_format_t *info,
h5tools_context_t *ctx/*in,out*/, hid_t obj_id);
H5TOOLS_DLL void h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hid_t obj_id,
- int obj_data, struct subset_t *sset, int display_index, int display_char);
+ h5tools_context_t *ctx, hid_t obj_id, int obj_data);
+H5TOOLS_DLL hbool_t h5tools_dump_region_attribute(hid_t region_id,
+ FILE *stream, const h5tool_format_t *info,
+ h5tools_context_t *ctx/*in,out*/,
+ h5tools_str_t *buffer/*string into which to render */,
+ hsize_t *curr_pos/*total data element position*/,
+ size_t ncols, hsize_t region_elmt_counter/*element counter*/,
+ hsize_t elmt_counter);
+
+H5TOOLS_DLL hbool_t h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
+ FILE *stream, const h5tool_format_t *info,
+ h5tools_context_t *ctx/*in,out*/,
+ h5tools_str_t *buffer/*string into which to render */,
+ hsize_t *curr_pos/*total data element position*/,
+ size_t ncols, hsize_t region_elmt_counter/*element counter*/,
+ hsize_t elmt_counter);
+
+H5TOOLS_DLL hbool_t h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
+ FILE *stream, const h5tool_format_t *info,
+ h5tools_context_t *ctx/*in,out*/,
+ h5tools_str_t *buffer/*string into which to render */,
+ hsize_t *curr_pos/*total data element position*/,
+ size_t ncols, hsize_t region_elmt_counter/*element counter*/,
+ hsize_t elmt_counter);
H5TOOLS_DLL int h5tools_print_datatype(FILE *stream, h5tools_str_t *buffer/*in,out*/,
const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/,
@@ -71,7 +90,7 @@ H5TOOLS_DLL int h5tools_print_enum(FILE *stream, h5tools_str_t *buffer/*in,o
const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/,
hid_t type);
H5TOOLS_DLL void h5tools_print_fill_value(h5tools_str_t *buffer/*in,out*/,
- const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/,
+ const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/,
hid_t dcpl, hid_t type_id, hid_t obj_id);
H5TOOLS_DLL void h5tools_print_packed_bits(h5tools_str_t *buffer/*in,out*/, hid_t type);
#ifdef __cplusplus
diff --git a/tools/lib/h5tools_error.h b/tools/lib/h5tools_error.h
index 2cdaf74..784b86a 100644
--- a/tools/lib/h5tools_error.h
+++ b/tools/lib/h5tools_error.h
@@ -18,12 +18,17 @@
#define H5TOOLS_ERROR_H_
#include "H5Epublic.h"
+#include "H5Eprivate.h" /* Error handling */
/* tools-HDF5 Error variables */
H5TOOLS_DLLVAR hid_t H5tools_ERR_STACK_g;
+H5TOOLS_DLLVAR hid_t H5tools_DBG_ERR_STACK_g;
H5TOOLS_DLLVAR hid_t H5tools_ERR_CLS_g;
+H5TOOLS_DLLVAR hid_t H5tools_DBG_ERR_CLS_g;
H5TOOLS_DLLVAR hid_t H5E_tools_g;
H5TOOLS_DLLVAR hid_t H5E_tools_min_id_g;
+H5TOOLS_DLLVAR hid_t H5E_tools_min_info_id_g;
+H5TOOLS_DLLVAR hid_t H5E_tools_min_dbg_id_g;
/* Use FUNC to safely handle variations of C99 __func__ keyword handling */
#ifdef H5_HAVE_C99_FUNC
@@ -37,52 +42,200 @@ H5TOOLS_DLLVAR hid_t H5E_tools_min_id_g;
/*
* H5TOOLS_INIT_ERROR macro, used to initialize error reporting.
*/
-#define H5TOOLS_INIT_ERROR() { \
- H5tools_ERR_CLS_g = H5Eregister_class("H5tools", "HDF5:tools", lib_str); \
- H5E_tools_g= H5Ecreate_msg(H5tools_ERR_CLS_g, H5E_MAJOR, "Failure in tools library"); \
- H5E_tools_min_id_g = H5Ecreate_msg(H5tools_ERR_CLS_g, H5E_MINOR, "error in function"); \
-}
+#define H5TOOLS_INIT_ERROR() \
+do { \
+ char lib_str[256]; \
+ \
+ /* Initialize library version string for error class */ \
+ HDsnprintf(lib_str, sizeof(lib_str), "%d.%d.%d", H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE); \
+ \
+ /* Create new HDF5 error stack for the tools to use */ \
+ if ((H5tools_ERR_STACK_g = H5Ecreate_stack()) < 0) \
+ HDfprintf(stderr, "Failed to create HDF5 tools error stack\n"); \
+ \
+ /* Create new HDF5 error stack for debugging, if tools debugging is enabled */ \
+ H5TOOLS_CREATE_DEBUG_STACK(); \
+ \
+ /* Register errors from the HDF5 tools as a new error class */ \
+ if ((H5tools_ERR_CLS_g = H5Eregister_class("H5tools", "HDF5:tools", lib_str)) < 0) \
+ HDfprintf(stderr, "Failed to register HDF5 tools error class\n"); \
+ \
+ /* Create a new HDF5 major error message for errors from the tools library */ \
+ if ((H5E_tools_g = H5Ecreate_msg(H5tools_ERR_CLS_g, H5E_MAJOR, "Failure in tools library")) < 0) \
+ HDfprintf(stderr, "Failed to register major error message for tools library errors\n"); \
+ \
+ /* Create a new HDF5 minor error message for errors from the tools library */ \
+ if ((H5E_tools_min_id_g = H5Ecreate_msg(H5tools_ERR_CLS_g, H5E_MINOR, "error in function")) < 0) \
+ HDfprintf(stderr, "Failed to register minor error message for tools library errors\n"); \
+ \
+ /* Create a new HDF5 minor error message for info messages from the tools library */ \
+ if ((H5E_tools_min_info_id_g = H5Ecreate_msg(H5tools_ERR_CLS_g, H5E_MINOR, "function info")) < 0) \
+ HDfprintf(stderr, "Failed to register minor error message for tools library info messages\n"); \
+ \
+ /* Create a new HDF5 minor error message for debug messages from the tools library */ \
+ if ((H5E_tools_min_dbg_id_g = H5Ecreate_msg(H5tools_ERR_CLS_g, H5E_MINOR, "function debug")) < 0) \
+ HDfprintf(stderr, "Failed to register minor error message for tools library debug messages\n"); \
+} while(0)
/*
- * H5TOOLS_CLOSE_ERROR macro, used to initialize error reporting.
+ * H5TOOLS_CLOSE_ERROR macro, used to terminate error reporting.
*/
-#define H5TOOLS_CLOSE_ERROR() { \
- H5Eclose_msg(H5E_tools_min_id_g); \
- H5Eclose_msg(H5E_tools_g); \
- H5Eunregister_class(H5tools_ERR_CLS_g); \
-}
+#define H5TOOLS_CLOSE_ERROR() \
+do { \
+ /* Close all error messages created by H5TOOLS_INIT_ERROR() */ \
+ if (H5Eclose_msg(H5E_tools_min_dbg_id_g) < 0) \
+ HDfprintf(stderr, "Failed to close minor error message for tools library debug messages\n"); \
+ if (H5Eclose_msg(H5E_tools_min_info_id_g) < 0) \
+ HDfprintf(stderr, "Failed to close minor error message for tools library info messages\n"); \
+ if (H5Eclose_msg(H5E_tools_min_id_g) < 0) \
+ HDfprintf(stderr, "Failed to close minor error message for tools library errors\n"); \
+ if (H5Eclose_msg(H5E_tools_g) < 0) \
+ HDfprintf(stderr, "Failed to close major error message for tools library errors\n"); \
+ \
+ /* Unregister the HDF5 tools error class */ \
+ if (H5Eunregister_class(H5tools_ERR_CLS_g) < 0) \
+ HDfprintf(stderr, "Failed to unregister the HDF5 tools error class\n"); \
+ \
+ /* Close the tools debugging error stack, if it was created */ \
+ H5TOOLS_CLOSE_DEBUG_STACK(); \
+ \
+ /* Close the tools error stack */ \
+ if (H5Eclose_stack(H5tools_ERR_STACK_g) < 0) \
+ HDfprintf(stderr, "Failed to close HDF5 tools error stack\n"); \
+} while(0)
/*
- * HERR_INIT macro, used to facilitate error reporting. Declaration and assignments of error variables.
- * Use at the beginning of a function using error handling macros.
+ * H5TOOLS_PUSH_ERROR macro, used to push an error to an error stack. Not meant to
+ * be called directly.
*/
-#define HERR_INIT(ret_typ, ret_init) \
- hbool_t past_catch = FALSE; \
- ret_typ ret_value = ret_init;
+#define H5TOOLS_PUSH_ERROR(estack_id, err_cls, maj_err_id, min_err_id, ...) \
+do { \
+ if (estack_id >= 0 && err_cls >= 0) \
+ H5Epush2(estack_id, __FILE__, FUNC, __LINE__, err_cls, maj_err_id, min_err_id, __VA_ARGS__); \
+ else { \
+ HDfprintf(stderr, __VA_ARGS__); \
+ HDfprintf(stderr, "\n"); \
+ } \
+} while(0)
+/*
+ * H5TOOLS_ERROR macro, used to facilitate error reporting within a function body.
+ * The arguments are the return value and an error string. The return value is assigned
+ * to a variable `ret_value'. This macro is meant to be used for reporting an error without
+ * having control branch to the `done' label. This is often used when an error occurs
+ * after the `done' label, in which case an infinite loop would ensue if control branched
+ * backwards.
+ */
+#define H5TOOLS_ERROR(ret_val, ...) \
+do { \
+ H5TOOLS_PUSH_ERROR(H5tools_ERR_STACK_g, H5tools_ERR_CLS_g, H5E_tools_g, H5E_tools_min_id_g, __VA_ARGS__); \
+ ret_value = ret_val; \
+} while(0)
+
+/*
+ * H5TOOLS_GOTO_ERROR macro, used to facilitate error reporting within a function body.
+ * The arguments are the return value and an error string. The return value is assigned
+ * to a variable `ret_value' and control branches to the `done' label.
+ */
+#define H5TOOLS_GOTO_ERROR(ret_val, ...) \
+do { \
+ H5TOOLS_PUSH_ERROR(H5tools_ERR_STACK_g, H5tools_ERR_CLS_g, H5E_tools_g, H5E_tools_min_id_g, __VA_ARGS__); \
+ H5TOOLS_GOTO_DONE(ret_val); \
+} while(0)
/*
- * H5TOOLS_INFO macro, used to facilitate error reporting . The arguments are the major
- * error number, the minor error number, and a description of the error.
+ * H5TOOLS_GOTO_DONE macro, used to facilitate normal return within a function body.
+ * The argument is the return value which is assigned to the `ret_value'
+ * variable. Control branches to the `done' label.
*/
-#define H5TOOLS_INFO(min_id, ...) { \
- H5Epush2(H5tools_ERR_STACK_g, __FILE__, FUNC, __LINE__, H5tools_ERR_CLS_g, H5E_tools_g, min_id, __VA_ARGS__); \
-}
+#define H5TOOLS_GOTO_DONE(ret_val) \
+do { \
+ ret_value = ret_val; \
+ goto done; \
+} while(0)
/*
- * HERROR macro, used to facilitate error reporting . The arguments are the major
- * error number, the minor error number, and a description of the error.
+ * H5TOOLS_GOTO_DONE_NO_RET macro, used to facilitate normal return within a function body.
+ * Control simply branches to the `done' label without setting any return value.
*/
-#define HERROR(maj_id, min_id, ...) { \
- H5Epush2(H5tools_ERR_STACK_g, __FILE__, FUNC, __LINE__, H5tools_ERR_CLS_g, maj_id, min_id, __VA_ARGS__); \
- ret_value = FAIL; \
-}
+#define H5TOOLS_GOTO_DONE_NO_RET() \
+do { \
+ goto done; \
+} while(0)
+
+/*
+ * H5TOOLS_INFO macro, used to facilitate error reporting. The arguments are
+ * a description of the error.
+ */
+#define H5TOOLS_INFO(...) \
+do { \
+ H5TOOLS_PUSH_ERROR(H5tools_ERR_STACK_g, H5tools_ERR_CLS_g, H5E_tools_g, H5E_tools_min_info_id_g, __VA_ARGS__); \
+} while(0)
+
+#ifdef H5_TOOLS_DEBUG
+
+#define H5TOOLS_CREATE_DEBUG_STACK() \
+do { \
+ /* Create new HDF5 error stack for debugging */ \
+ if ((H5tools_DBG_ERR_STACK_g = H5Ecreate_stack()) < 0) \
+ HDfprintf(stderr, "Failed to create HDF5 tools debugging error stack\n"); \
+ \
+ /* Register debugging output from the HDF5 tools as a new error class */ \
+ if ((H5tools_DBG_ERR_CLS_g = H5Eregister_class("H5tools-debug", "HDF5:tools", lib_str)) < 0) \
+ HDfprintf(stderr, "Failed to register HDF5 tools debugging error class\n"); \
+} while(0)
+
+#define H5TOOLS_CLOSE_DEBUG_STACK() \
+do { \
+ /* Unregister the HDF5 tools debugging error class */ \
+ if (H5Eunregister_class(H5tools_DBG_ERR_CLS_g) < 0) \
+ HDfprintf(stderr, "Failed to unregister the HDF5 tools debugging error class\n"); \
+ \
+ /* Close the tools debugging error stack */ \
+ if (H5Eclose_stack(H5tools_DBG_ERR_STACK_g) < 0) \
+ HDfprintf(stderr, "Failed to close HDF5 tools debugging error stack\n"); \
+} while(0)
+
+#define H5TOOLS_DEBUG(...) \
+do { \
+ H5TOOLS_PUSH_ERROR(H5tools_DBG_ERR_STACK_g, H5tools_DBG_ERR_CLS_g, H5E_tools_g, H5E_tools_min_dbg_id_g, __VA_ARGS__); \
+} while(0)
+
+#define H5TOOLS_ENDDEBUG(...) \
+do { \
+ H5TOOLS_PUSH_ERROR(H5tools_DBG_ERR_STACK_g, H5tools_DBG_ERR_CLS_g, H5E_tools_g, H5E_tools_min_dbg_id_g, __VA_ARGS__); \
+ H5Eprint2(H5tools_DBG_ERR_STACK_g, stderr); \
+} while(0)
+
+#else
+
+#define H5TOOLS_CREATE_DEBUG_STACK() \
+do { \
+ ; \
+} while(0)
+
+#define H5TOOLS_CLOSE_DEBUG_STACK() \
+do { \
+ ; \
+} while(0)
+
+#define H5TOOLS_DEBUG(...) \
+do { \
+ ; \
+} while(0)
+
+#define H5TOOLS_ENDDEBUG(...) \
+do { \
+ ; \
+} while(0)
+
+#endif
/* Macro for "catching" flow of control when an error occurs. Note that the
* H5_LEAVE macro won't jump back here once it's past this point.
*/
-#define CATCH catch_except:; past_catch = TRUE;
+/* #define CATCH catch_except:; past_catch = TRUE; defined in H5Eprivate.h */
/*
* H5_LEAVE macro, used to facilitate control flow between a
@@ -91,40 +244,25 @@ H5TOOLS_DLLVAR hid_t H5E_tools_min_id_g;
* The return value is assigned to a variable `ret_value' and control branches
* to the `catch_except' label, if we're not already past it.
*/
-#define H5_LEAVE(v) { \
- ret_value = v; \
- if(!past_catch) \
- goto catch_except; \
-}
+/*
+ * #define H5_LEAVE(v) { \
+ * ret_value = v; \
+ * if(!past_catch) \
+ * goto catch_except; \
+ * }
+ * defined in H5Eprivate.h */
/*
- * H5E_THROW macro, used to facilitate error reporting within a function body.
+ * H5TOOLS_THROW macro, used to facilitate error reporting within a function body.
* The arguments are the minor error number, and an error string.
* The return value is assigned to a variable `ret_value' and control branches
* to the `catch_except' label, if we're not already past it.
*/
-#define H5E_THROW(fail_value, min_id, ...) { \
- H5Epush2(H5tools_ERR_STACK_g, __FILE__, FUNC, __LINE__, H5tools_ERR_CLS_g, H5E_tools_g, min_id, __VA_ARGS__); \
- H5_LEAVE(fail_value) \
-}
-
-/*
- * HGOTO_ERROR macro, used to facilitate error reporting within a function body. The arguments are
- * the major error number, the minor error number, the return value, and an
- * error string. The return value is assigned to a variable `ret_value' and
- * control branches to the `done' label.
- */
-#define HGOTO_ERROR(fail_value, min_id, ...) { \
- HERROR(H5E_tools_g, min_id, __VA_ARGS__); \
- HGOTO_DONE(fail_value) \
-}
-
-/*
- * HGOTO_DONE macro, used to facilitate normal return within a function body.
- * The argument is the return value which is assigned to the `ret_value'
- * variable. Control branches to the `done' label.
- */
-#define HGOTO_DONE(ret_val) {ret_value = ret_val; goto done;}
+#define H5TOOLS_THROW(ret_val, ...) \
+do { \
+ H5TOOLS_PUSH_ERROR(H5tools_ERR_STACK_g, H5tools_ERR_CLS_g, H5E_tools_g, H5E_tools_min_id_g, __VA_ARGS__); \
+ H5_LEAVE(ret_val) \
+} while(0)
#endif /* H5TOOLS_ERROR_H_ */
diff --git a/tools/lib/h5tools_filters.c b/tools/lib/h5tools_filters.c
index cfe7422..0e4c476 100644
--- a/tools/lib/h5tools_filters.c
+++ b/tools/lib/h5tools_filters.c
@@ -43,24 +43,24 @@ int
h5tools_canreadf(const char* name, /* object name, serves also as boolean print */
hid_t dcpl_id) /* dataset creation property list */
{
- int ret_value = 1;
int nfilters; /* number of filters */
H5Z_filter_t filtn; /* filter identification number */
int i; /* index */
int udfilter_avail; /* index */
+ int ret_value = 1;
/* get information about filters */
if ((nfilters = H5Pget_nfilters(dcpl_id)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pget_nfilters failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pget_nfilters failed");
/* if we do not have filters, we can read the dataset safely */
if (!nfilters)
- HGOTO_DONE(1);
+ H5TOOLS_GOTO_DONE(1);
/* check availability of filters */
for (i = 0; i < nfilters; i++) {
if ((filtn = H5Pget_filter2(dcpl_id, (unsigned) i, 0, 0, 0, (size_t) 0, 0, NULL)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Pget_filter2 failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Pget_filter2 failed");
switch (filtn) {
/*-------------------------------------------------------------------------
@@ -69,7 +69,7 @@ h5tools_canreadf(const char* name, /* object name, serves also as boolean pr
*/
default:
if ((udfilter_avail = H5Zfilter_avail(filtn)) < 0) {
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Zfilter_avail failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Zfilter_avail failed");
}
else if (!udfilter_avail) {
if (name)
@@ -149,41 +149,42 @@ h5tools_can_encode(H5Z_filter_t filtn)
switch (filtn) {
/* user defined filter */
default:
- HGOTO_DONE(0)
+ H5TOOLS_GOTO_DONE(0);
+ break;
case H5Z_FILTER_DEFLATE:
#ifndef H5_HAVE_FILTER_DEFLATE
- HGOTO_DONE(0)
+ H5TOOLS_GOTO_DONE(0);
#endif
break;
case H5Z_FILTER_SZIP:
#ifndef H5_HAVE_FILTER_SZIP
- HGOTO_DONE(0)
+ H5TOOLS_GOTO_DONE(0);
#else
{
unsigned int filter_config_flags;
if (H5Zget_filter_info(filtn, &filter_config_flags) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Zget_filter_info failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "H5Zget_filter_info failed");
if ((filter_config_flags
& (H5Z_FILTER_CONFIG_ENCODE_ENABLED | H5Z_FILTER_CONFIG_DECODE_ENABLED)) == 0) {
/* filter present but neither encode nor decode is supported (???) */
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "neither encode nor decode is supported");
+ H5TOOLS_GOTO_ERROR(FAIL, "neither encode nor decode is supported");
}
else if ((filter_config_flags
& (H5Z_FILTER_CONFIG_ENCODE_ENABLED | H5Z_FILTER_CONFIG_DECODE_ENABLED)) == H5Z_FILTER_CONFIG_DECODE_ENABLED) {
/* decoder only: read but not write */
- HGOTO_DONE(0)
+ H5TOOLS_GOTO_DONE(0);
}
else if ((filter_config_flags
& (H5Z_FILTER_CONFIG_ENCODE_ENABLED | H5Z_FILTER_CONFIG_DECODE_ENABLED)) == H5Z_FILTER_CONFIG_ENCODE_ENABLED) {
/* encoder only: write but not read (???) */
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "encoder only: write but not read");
+ H5TOOLS_GOTO_ERROR(FAIL, "encoder only: write but not read");
}
else if ((filter_config_flags
& (H5Z_FILTER_CONFIG_ENCODE_ENABLED | H5Z_FILTER_CONFIG_DECODE_ENABLED))
== (H5Z_FILTER_CONFIG_ENCODE_ENABLED | H5Z_FILTER_CONFIG_DECODE_ENABLED)) {
- HGOTO_DONE(1)
+ H5TOOLS_GOTO_DONE(1);
}
}
#endif
diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c
index c5759d8..0aa5152 100644
--- a/tools/lib/h5tools_str.c
+++ b/tools/lib/h5tools_str.c
@@ -292,16 +292,22 @@ h5tools_str_prefix(h5tools_str_t *str/*in,out*/, const h5tool_format_t *info,
size_t i = 0;
hsize_t curr_pos = elmtno;
+ H5TOOLS_DEBUG("enter");
+
+ H5TOOLS_DEBUG("elmtno=%ld, ctx->ndims=%d", elmtno, ctx->ndims);
h5tools_str_reset(str);
+ H5TOOLS_DEBUG("ndims=%d", ndims);
if(ndims > 0) {
/*
* Calculate the number of elements represented by a unit change in a
* certain index position.
*/
for(i = 0; i < (size_t) ndims; i++) {
+ H5TOOLS_DEBUG("curr_pos=%ld - ctx->acc[%d]=%ld", curr_pos, i, ctx->acc[i]);
ctx->pos[i] = curr_pos / ctx->acc[i];
curr_pos -= ctx->acc[i] * ctx->pos[i];
+ H5TOOLS_DEBUG("curr_pos=%ld - ctx->pos[%d]=%ld - ctx->acc[%d]=%ld", curr_pos, i, ctx->pos[i], i, ctx->acc[i]);
}
HDassert(curr_pos == 0);
@@ -316,7 +322,10 @@ h5tools_str_prefix(h5tools_str_t *str/*in,out*/, const h5tool_format_t *info,
}
}
else /* Scalar */
- h5tools_str_append(str, OPT(info->idx_n_fmt, HSIZE_T_FORMAT), (hsize_t) 0);
+ h5tools_str_append(str, OPT(info->idx_n_fmt, HSIZE_T_FORMAT), (hsize_t)elmtno);
+ H5TOOLS_DEBUG("str=%s", str->s);
+
+ H5TOOLS_ENDDEBUG("exit");
/* Add prefix and suffix to the index */
return h5tools_str_fmt(str, (size_t)0, OPT(info->idx_fmt, "%s: "));
@@ -682,7 +691,9 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
static char fmt_llong[8], fmt_ullong[8];
H5T_str_t pad;
H5T_class_t type_class;
+ char *ret_value = NULL;
+ H5TOOLS_DEBUG("enter");
/* Build default formats for long long types */
if(!fmt_llong[0]) {
HDsnprintf(fmt_llong, sizeof(fmt_llong), "%%%sd", H5_PRINTF_LL_WIDTH);
@@ -711,6 +722,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
return NULL;
switch (type_class) {
case H5T_FLOAT:
+ H5TOOLS_DEBUG("H5T_FLOAT");
if(sizeof(float) == nsize) {
/* if (H5Tequal(type, H5T_NATIVE_FLOAT)) */
float tempfloat;
@@ -742,12 +754,14 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
char quote = '\0';
char *s;
+ H5TOOLS_DEBUG("H5T_STRING");
quote = '\0';
if(H5Tis_variable_str(type)) {
/* cp_vp is the pointer into the struct where a `char*' is stored. So we have
* to dereference the pointer to get the `char*' to pass to HDstrlen(). */
s = *(char **)((void *)cp_vp);
- if(s != NULL) size = HDstrlen(s);
+ if(s != NULL)
+ size = HDstrlen(s);
}
else {
s = cp_vp;
@@ -767,8 +781,9 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
* threshold is zero then that means it can repeat any number
* of times.
*/
- if(info->str_repeat > 0) while (i + j < size && s[i] == s[i + j])
- j++;
+ if(info->str_repeat > 0)
+ while (i + j < size && s[i] == s[i + j])
+ j++;
/*
* Print the opening quote. If the repeat count is high enough to
@@ -814,6 +829,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
break;
case H5T_INTEGER:
+ H5TOOLS_DEBUG("H5T_INTEGER");
if(sizeof(char) == nsize) {
if(info->ascii)
h5tools_print_char(str, info, (char) (*ucp_vp));
@@ -951,6 +967,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
break;
case H5T_COMPOUND:
+ H5TOOLS_DEBUG("H5T_COMPOUND");
if(ctx->cmpd_listv) { /* there is <list_of_fields> */
unsigned save_indent_level; /* The indentation level */
size_t curr_field; /* Current field to display */
@@ -1052,6 +1069,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
{
char enum_name[1024];
+ H5TOOLS_DEBUG("H5T_ENUM");
if(H5Tenum_nameof(type, vp, enum_name, sizeof enum_name) >= 0)
h5tools_str_append(str, h5tools_escape(enum_name, sizeof(enum_name)));
else {
@@ -1066,61 +1084,117 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
break;
case H5T_REFERENCE:
+ H5TOOLS_DEBUG("H5T_REFERENCE");
if(h5tools_str_is_zero(vp, nsize))
h5tools_str_append(str, "NULL");
else {
- if(nsize == H5R_DSET_REG_REF_BUF_SIZE) {
- /* if (H5Tequal(type, H5T_STD_REF_DSETREG)) */
- h5tools_str_sprint_region(str, info, container, vp);
+ if (H5Tequal(type, H5T_STD_REF)) {
+ H5O_type_t obj_type = -1; /* Object type */
+ H5R_type_t ref_type; /* Reference type */
+ const H5R_ref_t *ref_vp = (const H5R_ref_t *)vp;
+
+ H5TOOLS_DEBUG("H5T_REFERENCE:H5T_STD_REF");
+ ref_type = H5Rget_type(ref_vp);
+ H5Rget_obj_type3(ref_vp, H5P_DEFAULT, &obj_type);
+ switch (ref_type) {
+ case H5R_OBJECT1:
+ {
+ /* Object references -- show the type and OID of the referenced object. */
+ H5O_info_t oi;
+
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT1");
+ if((obj = H5Ropen_object(ref_vp, H5P_DEFAULT, H5P_DEFAULT)) >= 0) {
+ H5Oget_info2(obj, &oi, H5O_INFO_BASIC);
+ if(H5Oclose(obj) < 0)
+ H5TOOLS_ERROR(NULL, "H5Oclose H5R_OBJECT1 failed");
+ }
+ else
+ H5TOOLS_ERROR(NULL, "H5Ropen_object H5R_OBJECT1 failed");
+
+ /* Print object type and close object */
+ switch (obj_type) {
+ case H5O_TYPE_GROUP:
+ h5tools_str_append(str, "%u-%s", (unsigned) oi.type, H5_TOOLS_GROUP);
+ break;
+
+ case H5O_TYPE_DATASET:
+ h5tools_str_append(str, "%u-%s", (unsigned) oi.type, H5_TOOLS_DATASET);
+ break;
+
+ case H5O_TYPE_NAMED_DATATYPE:
+ h5tools_str_append(str, "%u-%s", (unsigned) oi.type, H5_TOOLS_DATATYPE);
+ break;
+
+ case H5O_TYPE_MAP:
+ case H5O_TYPE_UNKNOWN:
+ case H5O_TYPE_NTYPES:
+ default:
+ h5tools_str_append(str, "%u-%s", (unsigned) oi.type, H5_TOOLS_UNKNOWN);
+ break;
+ } /* end switch */
+ H5Oclose(obj);
+ h5tools_str_sprint_reference(str, info, container, ref_vp);
+
+ /* Print OID */
+ if(info->obj_hidefileno)
+ h5tools_str_append(str, info->obj_format, oi.addr);
+ else
+ h5tools_str_append(str, info->obj_format, oi.fileno, oi.addr);
+ }
+ break;
+ case H5R_DATASET_REGION1:
+ H5TOOLS_DEBUG("ref_type is H5R_DATASET_REGION1");
+ h5tools_str_append(str, H5_TOOLS_DATASET);
+ h5tools_str_sprint_reference(str, info, container, ref_vp);
+ break;
+ case H5R_OBJECT2:
+ H5TOOLS_DEBUG("ref_type is H5R_OBJECT2");
+ switch (obj_type) {
+ case H5O_TYPE_GROUP:
+ h5tools_str_append(str, H5_TOOLS_GROUP);
+ break;
+
+ case H5O_TYPE_DATASET:
+ h5tools_str_append(str, H5_TOOLS_DATASET);
+ break;
+
+ case H5O_TYPE_NAMED_DATATYPE:
+ h5tools_str_append(str, H5_TOOLS_DATATYPE);
+ break;
+
+ case H5O_TYPE_MAP:
+ case H5O_TYPE_UNKNOWN:
+ case H5O_TYPE_NTYPES:
+ default:
+ h5tools_str_append(str, H5_TOOLS_UNKNOWN);
+ break;
+ } /* end switch */
+ h5tools_str_sprint_reference(str, info, container, ref_vp);
+ break;
+ case H5R_DATASET_REGION2:
+ H5TOOLS_DEBUG("ref_type is H5R_DATASET_REGION2");
+ h5tools_str_append(str, H5_TOOLS_DATASET);
+ h5tools_str_sprint_reference(str, info, container, ref_vp);
+ break;
+ case H5R_ATTR:
+ H5TOOLS_DEBUG("ref_type is H5R_ATTR");
+ h5tools_str_append(str, H5_TOOLS_ATTRIBUTE);
+ h5tools_str_sprint_reference(str, info, container, ref_vp);
+ break;
+ case H5R_BADTYPE:
+ case H5R_MAXTYPE:
+ default:
+ break;
+ } /* end switch */
+ H5TOOLS_DEBUG("H5T_REFERENCE:H5T_STD_REF end");
}
- else if (nsize == H5R_OBJ_REF_BUF_SIZE) {
- /* if (H5Tequal(type, H5T_STD_REF_OBJ)) */
- /*
- * Object references -- show the type and OID of the referenced
- * object.
- */
- H5O_info_t oi;
- const char *path;
-
- obj = H5Rdereference2(container, H5P_DEFAULT, H5R_OBJECT, vp);
- H5Oget_info2(obj, &oi, H5O_INFO_BASIC);
-
- /* Print object type and close object */
- switch(oi.type) {
- case H5O_TYPE_GROUP:
- h5tools_str_append(str, H5_TOOLS_GROUP);
- break;
-
- case H5O_TYPE_DATASET:
- h5tools_str_append(str, H5_TOOLS_DATASET);
- break;
-
- case H5O_TYPE_NAMED_DATATYPE:
- h5tools_str_append(str, H5_TOOLS_DATATYPE);
- break;
-
- case H5O_TYPE_MAP:
- case H5O_TYPE_UNKNOWN:
- case H5O_TYPE_NTYPES:
- default:
- h5tools_str_append(str, "%u-", (unsigned) oi.type);
- break;
- } /* end switch */
- H5Oclose(obj);
-
- /* Print OID */
- if(info->obj_hidefileno)
- h5tools_str_append(str, info->obj_format, oi.addr);
- else
- h5tools_str_append(str, info->obj_format, oi.fileno, oi.addr);
-
- /* Print name */
- path = lookup_ref_path(*(haddr_t *) vp);
- if(path) {
- h5tools_str_append(str, " ");
- h5tools_str_append(str, path);
- h5tools_str_append(str, " ");
- } /* end if */
+ else if (H5Tequal(type, H5T_STD_REF_DSETREG)) {
+ /* if(nsize == H5R_DSET_REG_REF_BUF_SIZE) */
+ H5TOOLS_DEBUG("H5T_REFERENCE:H5T_STD_REF_DSETREG");
+ }
+ else if (H5Tequal(type, H5T_STD_REF_OBJ)) {
+ /* if (nsize == H5R_OBJ_REF_BUF_SIZE) */
+ H5TOOLS_DEBUG("H5T_REFERENCE:H5T_STD_REF_OBJ");
} /* end else if (H5Tequal(type, H5T_STD_REF_OBJ)) */
}
break;
@@ -1131,6 +1205,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
hsize_t i, dims[H5S_MAX_RANK], temp_nelmts;
static int is_next_arry_elmt = 0;
+ H5TOOLS_DEBUG("H5T_ARRAY");
/* Get the array's base datatype for each element */
memb = H5Tget_super(type);
size = H5Tget_size(memb);
@@ -1192,6 +1267,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
{
unsigned int i;
+ H5TOOLS_DEBUG("H5T_VLEN");
/* Get the VL sequences's base datatype for each element */
memb = H5Tget_super(type);
size = H5Tget_size(memb);
@@ -1240,6 +1316,8 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
{
/* All other types get printed as hexadecimal */
size_t i;
+
+ H5TOOLS_DEBUG("OTHER");
if(1 == nsize)
h5tools_str_append(str, "0x%02x", ucp_vp[0]);
else
@@ -1255,49 +1333,72 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
break;
} /* end switch */
}
- return h5tools_str_fmt(str, start, OPT(info->elmt_fmt, "%s"));
+
+done:
+ ret_value = h5tools_str_fmt(str, start, OPT(info->elmt_fmt, "%s"));
+
+ H5TOOLS_ENDDEBUG("exit with %s", ret_value);
+ return ret_value;
}
/*-------------------------------------------------------------------------
- * Function: h5tools_str_sprint_region
+ * Function: h5tools_str_sprint_reference
*
- * Purpose: Dataset region reference -- show the type and data of the referenced object.
+ * Purpose: Object reference -- show the name of the referenced object.
*
* Return: Nothing
*-------------------------------------------------------------------------
*/
void
-h5tools_str_sprint_region(h5tools_str_t *str, const h5tool_format_t *info,
- hid_t container, void *vp)
+h5tools_str_sprint_reference(h5tools_str_t *str, const h5tool_format_t *info,
+ hid_t container, H5R_ref_t *ref_vp)
{
- hid_t obj = -1;
- hid_t region = -1;
- char ref_name[1024];
- H5S_sel_type region_type;
-
- obj = H5Rdereference2(container, H5P_DEFAULT, H5R_DATASET_REGION, vp);
- if(obj >= 0) {
- region = H5Rget_region(container, H5R_DATASET_REGION, vp);
- if(region >= 0) {
- H5Rget_name(obj, H5R_DATASET_REGION, vp, (char*) ref_name, 1024);
-
- h5tools_str_append(str, info->dset_format, ref_name);
-
- h5tools_str_append(str, "{");
+ ssize_t buf_size;
+
+ H5TOOLS_DEBUG("enter");
+
+ h5tools_str_append(str, " \"");
+ buf_size = H5Rget_file_name(ref_vp, NULL, 0);
+ H5TOOLS_DEBUG("buf_size=%ld", buf_size);
+ if (buf_size) {
+ char *file_name = (char *)HDmalloc(sizeof(char) * (size_t)buf_size + 1);
+ if (H5Rget_file_name(ref_vp, file_name, buf_size + 1) >= 0) {
+ file_name[buf_size] = '\0';
+ H5TOOLS_DEBUG("name=%s", file_name);
+ h5tools_str_append(str, "%s", file_name);
+ }
+ HDfree(file_name);
+ }
- region_type = H5Sget_select_type(region);
- if(region_type==H5S_SEL_POINTS)
- h5tools_str_dump_space_points(str, region, info);
- else
- h5tools_str_dump_space_blocks(str, region, info);
+ buf_size = H5Rget_obj_name(ref_vp, H5P_DEFAULT, NULL, 0);
+ H5TOOLS_DEBUG("buf_size=%ld", buf_size);
+ if (buf_size) {
+ char *obj_name = (char *)HDmalloc(sizeof(char) * (size_t)buf_size + 1);
+ if (H5Rget_obj_name(ref_vp, H5P_DEFAULT, obj_name, buf_size + 1) >= 0) {
+ obj_name[buf_size] = '\0';
+ H5TOOLS_DEBUG("name=%s", obj_name);
+ h5tools_str_append(str, "%s", obj_name);
+ }
+ HDfree(obj_name);
+ }
- h5tools_str_append(str, "}");
+ if (H5Rget_type(ref_vp) == H5R_ATTR) {
+ buf_size = H5Rget_attr_name(ref_vp, NULL, 0);
+ H5TOOLS_DEBUG("buf_size=%ld", buf_size);
+ if (buf_size) {
+ char *attr_name = (char *)HDmalloc(sizeof(char) * (size_t)buf_size + 1);
+ if (H5Rget_attr_name(ref_vp, attr_name, buf_size + 1) >= 0) {
+ attr_name[buf_size] = '\0';
+ H5TOOLS_DEBUG("name=%s", attr_name);
+ h5tools_str_append(str, "/%s", attr_name);
+ }
+ HDfree(attr_name);
+ }
+ }
+ h5tools_str_append(str, "\"");
- H5Sclose(region);
- } /* end if (region >= 0) */
- H5Dclose(obj);
- } /* end if (obj >= 0) */
+ H5TOOLS_ENDDEBUG("exit");
}
/*-------------------------------------------------------------------------
diff --git a/tools/lib/h5tools_str.h b/tools/lib/h5tools_str.h
index a5045ac..6fdf36a 100644
--- a/tools/lib/h5tools_str.h
+++ b/tools/lib/h5tools_str.h
@@ -36,17 +36,16 @@ H5TOOLS_DLL char *h5tools_str_prefix(h5tools_str_t *str, const h5tool_format_
* new functions needed to display region reference data
*/
H5TOOLS_DLL char *h5tools_str_region_prefix(h5tools_str_t *str, const h5tool_format_t *info,
- hsize_t elmtno, hsize_t *ptdata, unsigned ndims,
+ hsize_t elmtno, hsize_t *ptdata, unsigned ndims,
hsize_t max_idx[], h5tools_context_t *ctx);
H5TOOLS_DLL void h5tools_str_dump_space_slabs(h5tools_str_t *, hid_t, const h5tool_format_t *, h5tools_context_t *ctx);
H5TOOLS_DLL void h5tools_str_dump_space_blocks(h5tools_str_t *, hid_t, const h5tool_format_t *);
H5TOOLS_DLL void h5tools_str_dump_space_points(h5tools_str_t *, hid_t, const h5tool_format_t *);
-H5TOOLS_DLL void h5tools_str_sprint_region(h5tools_str_t *str, const h5tool_format_t *info, hid_t container,
- void *vp);
+H5TOOLS_DLL void h5tools_str_sprint_reference(h5tools_str_t *str, const h5tool_format_t *info, hid_t container, H5R_ref_t *vp);
H5TOOLS_DLL char *h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info,
hid_t container, hid_t type, void *vp,
h5tools_context_t *ctx);
-H5TOOLS_DLL char *h5tools_str_replace ( const char *string, const char *substr,
- const char *replacement );
+H5TOOLS_DLL char *h5tools_str_replace ( const char *string, const char *substr,
+ const char *replacement );
#endif /* H5TOOLS_STR_H__ */
diff --git a/tools/lib/h5tools_utils.c b/tools/lib/h5tools_utils.c
index 47ce690..1036199 100644
--- a/tools/lib/h5tools_utils.c
+++ b/tools/lib/h5tools_utils.c
@@ -803,7 +803,7 @@ init_objs(hid_t fid, find_objs_t *info, table_t **group_table,
/* Find all shared objects */
if((ret_value = h5trav_visit(fid, "/", TRUE, TRUE, find_objs_cb, NULL, info, H5O_INFO_BASIC)) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "finding shared objects failed")
+ H5TOOLS_GOTO_ERROR(FAIL, "finding shared objects failed");
done:
/* Release resources */
@@ -904,39 +904,39 @@ H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_
/* if path is root, return group type */
if(!HDstrcmp(linkpath,"/")) {
link_info->trg_type = H5O_TYPE_GROUP;
- HGOTO_DONE(2);
+ H5TOOLS_GOTO_DONE(2);
}
/* check if link itself exist */
if(H5Lexists(file_id, linkpath, H5P_DEFAULT) <= 0) {
if(link_info->opt.msg_mode == 1)
parallel_print("Warning: link <%s> doesn't exist \n",linkpath);
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
} /* end if */
/* get info from link */
if(H5Lget_info(file_id, linkpath, &(link_info->linfo), H5P_DEFAULT) < 0) {
if(link_info->opt.msg_mode == 1)
parallel_print("Warning: unable to get link info from <%s>\n",linkpath);
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
} /* end if */
/* given path is hard link (object) */
if(link_info->linfo.type == H5L_TYPE_HARD)
- HGOTO_DONE(2);
+ H5TOOLS_GOTO_DONE(2);
/* trg_path must be freed out of this function when finished using */
if((link_info->trg_path = (char*)HDcalloc(link_info->linfo.u.val_size, sizeof(char))) == NULL) {
if(link_info->opt.msg_mode == 1)
parallel_print("Warning: unable to allocate buffer for <%s>\n",linkpath);
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
} /* end if */
/* get link value */
if(H5Lget_val(file_id, linkpath, (void *)link_info->trg_path, link_info->linfo.u.val_size, H5P_DEFAULT) < 0) {
if(link_info->opt.msg_mode == 1)
parallel_print("Warning: unable to get link value from <%s>\n",linkpath);
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
} /* end if */
/*-----------------------------------------------------
@@ -945,13 +945,13 @@ H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_
*/
if(link_info->linfo.type == H5L_TYPE_EXTERNAL) {
if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
if(H5Pset_fapl_sec2(fapl) < 0)
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
if((lapl = H5Pcreate(H5P_LINK_ACCESS)) < 0)
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
if(H5Pset_elink_fapl(lapl, fapl) < 0)
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
} /* end if */
/* Check for retrieving object info */
@@ -964,24 +964,24 @@ H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_
/* detect dangling link */
if(l_ret == FALSE) {
- HGOTO_DONE(0);
+ H5TOOLS_GOTO_DONE(0);
}
else if(l_ret < 0) { /* function failed */
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
}
/* get target object info */
if(H5Oget_info_by_name2(file_id, linkpath, &trg_oinfo, H5O_INFO_BASIC, lapl) < 0) {
if(link_info->opt.msg_mode == 1)
parallel_print("Warning: unable to get object information for <%s>\n", linkpath);
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
} /* end if */
/* check unknown type */
if(trg_oinfo.type < H5O_TYPE_GROUP || trg_oinfo.type >=H5O_TYPE_NTYPES) {
if(link_info->opt.msg_mode == 1)
parallel_print("Warning: target object of <%s> is unknown type\n", linkpath);
- HGOTO_DONE(FAIL);
+ H5TOOLS_GOTO_DONE(FAIL);
} /* end if */
/* set target obj type to return */
@@ -1049,14 +1049,14 @@ h5tools_getenv_update_hyperslab_bufsize(void)
{
const char *env_str = NULL;
long hyperslab_bufsize_mb;
- int ret_value = 1;
+ int ret_value = 1;
/* check if environment variable is set for the hyperslab buffer size */
if (NULL != (env_str = HDgetenv ("H5TOOLS_BUFSIZE"))) {
errno = 0;
hyperslab_bufsize_mb = HDstrtol(env_str, (char**)NULL, 10);
if (errno != 0 || hyperslab_bufsize_mb <= 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "hyperslab buffer size failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "hyperslab buffer size failed");
/* convert MB to byte */
H5TOOLS_BUFSIZE = (hsize_t)hyperslab_bufsize_mb * 1024 * 1024;
diff --git a/tools/lib/h5tools_utils.h b/tools/lib/h5tools_utils.h
index 0fa5250..17c16bf 100644
--- a/tools/lib/h5tools_utils.h
+++ b/tools/lib/h5tools_utils.h
@@ -28,13 +28,13 @@ extern "C" {
/* ``parallel_print'' information */
#define PRINT_DATA_MAX_SIZE 512
-#define OUTBUFF_SIZE (PRINT_DATA_MAX_SIZE*4)
+#define OUTBUFF_SIZE (PRINT_DATA_MAX_SIZE*4)
-H5TOOLS_DLLVAR int g_nTasks;
+H5TOOLS_DLLVAR int g_nTasks;
H5TOOLS_DLLVAR unsigned char g_Parallel;
-H5TOOLS_DLLVAR char outBuff[];
+H5TOOLS_DLLVAR char outBuff[];
H5TOOLS_DLLVAR unsigned outBuffOffset;
-H5TOOLS_DLLVAR FILE * overflow_file;
+H5TOOLS_DLLVAR FILE *overflow_file;
/* Maximum size used in a call to malloc for a dataset */
H5TOOLS_DLLVAR hsize_t H5TOOLS_MALLOCSIZE;
@@ -88,8 +88,7 @@ typedef struct long_options {
* this gets returned from get_option */
} long_options;
-H5TOOLS_DLL int get_option(int argc, const char **argv, const char *opt,
- const struct long_options *l_opt);
+H5TOOLS_DLL int get_option(int argc, const char **argv, const char *opt, const struct long_options *l_opt);
/*
* end get_option section
*/
@@ -97,7 +96,7 @@ H5TOOLS_DLL int get_option(int argc, const char **argv, const char *opt,
/*struct taken from the dumper. needed in table struct*/
typedef struct obj_t {
haddr_t objno;
- char *objname;
+ char *objname;
hbool_t displayed; /* Flag to indicate that the object has been displayed */
hbool_t recorded; /* Flag for named datatypes to indicate they were found in the group hierarchy */
} obj_t;
@@ -111,7 +110,7 @@ typedef struct table_t {
/*this struct stores the information that is passed to the find_objs function*/
typedef struct find_objs_t {
- hid_t fid;
+ hid_t fid;
table_t *group_table;
table_t *type_table;
table_t *dset_table;
@@ -120,26 +119,21 @@ typedef struct find_objs_t {
H5TOOLS_DLLVAR unsigned h5tools_nCols; /*max number of columns for outputting */
/* Definitions of useful routines */
-H5TOOLS_DLL void indentation(unsigned);
-H5TOOLS_DLL void print_version(const char *progname);
-H5TOOLS_DLL void parallel_print(const char* format, ... );
-H5TOOLS_DLL herr_t parse_tuple(const char *start,
- int sep,
- char **cpy_out,
- unsigned *nelems,
- char ***ptrs_out);
-H5TOOLS_DLL void error_msg(const char *fmt, ...);
-H5TOOLS_DLL void warn_msg(const char *fmt, ...);
-H5TOOLS_DLL void help_ref_msg(FILE *output);
-H5TOOLS_DLL void free_table(table_t *table);
+H5TOOLS_DLL void indentation(unsigned);
+H5TOOLS_DLL void print_version(const char *progname);
+H5TOOLS_DLL void parallel_print(const char* format, ... );
+H5TOOLS_DLL herr_t parse_tuple(const char *start, int sep, char **cpy_out, unsigned *nelems, char ***ptrs_out);
+H5TOOLS_DLL void error_msg(const char *fmt, ...);
+H5TOOLS_DLL void warn_msg(const char *fmt, ...);
+H5TOOLS_DLL void help_ref_msg(FILE *output);
+H5TOOLS_DLL void free_table(table_t *table);
#ifdef H5DUMP_DEBUG
-H5TOOLS_DLL void dump_tables(find_objs_t *info)
+H5TOOLS_DLL void dump_tables(find_objs_t *info)
#endif /* H5DUMP_DEBUG */
-H5TOOLS_DLL herr_t init_objs(hid_t fid, find_objs_t *info, table_t **group_table,
- table_t **dset_table, table_t **type_table);
-H5TOOLS_DLL obj_t *search_obj(table_t *temp, haddr_t objno);
+H5TOOLS_DLL herr_t init_objs(hid_t fid, find_objs_t *info, table_t **group_table, table_t **dset_table, table_t **type_table);
+H5TOOLS_DLL obj_t *search_obj(table_t *temp, haddr_t objno);
#ifndef H5_HAVE_TMPFILE
-H5TOOLS_DLL FILE * tmpfile(void);
+H5TOOLS_DLL FILE *tmpfile(void);
#endif
/*************************************************************
@@ -161,30 +155,26 @@ typedef struct {
/* obtain link info from H5tools_get_symlink_info() */
typedef struct {
- H5O_type_t trg_type; /* OUT: target type */
- char *trg_path; /* OUT: target obj path. This must be freed
- * when used with H5tools_get_symlink_info() */
- haddr_t objno; /* OUT: target object address */
- unsigned long fileno; /* OUT: File number that target object is located in */
- H5L_info_t linfo; /* OUT: link info */
- h5tool_opt_t opt; /* IN: options */
+ H5O_type_t trg_type; /* OUT: target type */
+ char *trg_path; /* OUT: target obj path. This must be freed
+ * when used with H5tools_get_symlink_info() */
+ haddr_t objno; /* OUT: target object address */
+ unsigned long fileno; /* OUT: File number that target object is located in */
+ H5L_info_t linfo; /* OUT: link info */
+ h5tool_opt_t opt; /* IN: options */
} h5tool_link_info_t;
/* Definitions of routines */
-H5TOOLS_DLL int H5tools_get_symlink_info(hid_t file_id, const char * linkpath,
- h5tool_link_info_t *link_info, hbool_t get_obj_type);
+H5TOOLS_DLL int H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_t *link_info, hbool_t get_obj_type);
H5TOOLS_DLL const char *h5tools_getprogname(void);
-H5TOOLS_DLL void h5tools_setprogname(const char*progname);
-H5TOOLS_DLL int h5tools_getstatus(void);
-H5TOOLS_DLL void h5tools_setstatus(int d_status);
+H5TOOLS_DLL void h5tools_setprogname(const char*progname);
+H5TOOLS_DLL int h5tools_getstatus(void);
+H5TOOLS_DLL void h5tools_setstatus(int d_status);
H5TOOLS_DLL int h5tools_getenv_update_hyperslab_bufsize(void);
-H5TOOLS_DLL int h5tools_set_configured_fapl(hid_t fapl_id,
- const char vfd_name[],
- void *fapl_t_ptr);
+H5TOOLS_DLL int h5tools_set_configured_fapl(hid_t fapl_id, const char vfd_name[], void *fapl_t_ptr);
#ifdef H5_HAVE_ROS3_VFD
-H5TOOLS_DLL int h5tools_populate_ros3_fapl(H5FD_ros3_fapl_t *fa,
- const char **values);
+H5TOOLS_DLL int h5tools_populate_ros3_fapl(H5FD_ros3_fapl_t *fa, const char **values);
#endif /* H5_HAVE_ROS3_VFD */
#ifdef __cplusplus
diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c
index eb7b56d..1ecd5c0 100644
--- a/tools/lib/h5trav.c
+++ b/tools/lib/h5trav.c
@@ -114,7 +114,7 @@ h5trav_set_verbose(int print_verbose)
*-------------------------------------------------------------------------
*/
-
+
/*-------------------------------------------------------------------------
* Function: trav_addr_add
*
@@ -140,7 +140,7 @@ trav_addr_add(trav_addr_t *visited, haddr_t addr, const char *path)
visited->objs[idx].path = HDstrdup(path);
} /* end trav_addr_add() */
-
+
/*-------------------------------------------------------------------------
* Function: trav_addr_visited
*
@@ -164,7 +164,7 @@ trav_addr_visited(trav_addr_t *visited, haddr_t addr)
return(NULL);
} /* end trav_addr_visited() */
-
+
/*-------------------------------------------------------------------------
* Function: traverse_cb
*
@@ -239,7 +239,7 @@ traverse_cb(hid_t loc_id, const char *path, const H5L_info_t *linfo,
return(H5_ITER_CONT);
} /* end traverse_cb() */
-
+
/*-------------------------------------------------------------------------
* Function: traverse
*
@@ -255,11 +255,11 @@ traverse(hid_t file_id, const char *grp_name, hbool_t visit_start,
hbool_t recurse, const trav_visitor_t *visitor, unsigned fields)
{
H5O_info_t oinfo; /* Object info for starting group */
- int ret_value = SUCCEED;
+ int ret_value = 0;
/* Get info for starting object */
if(H5Oget_info_by_name2(file_id, grp_name, &oinfo, fields, H5P_DEFAULT) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Oget_info_by_name failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Oget_info_by_name failed");
/* Visit the starting object */
if(visit_start && visitor->visit_obj)
@@ -289,12 +289,12 @@ traverse(hid_t file_id, const char *grp_name, hbool_t visit_start,
if(recurse) {
/* Visit all links in group, recursively */
if(H5Lvisit_by_name(file_id, grp_name, trav_index_by, trav_index_order, traverse_cb, &udata, H5P_DEFAULT) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Lvisit_by_name failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Lvisit_by_name failed");
} /* end if */
else {
/* Iterate over links in group */
if(H5Literate_by_name(file_id, grp_name, trav_index_by, trav_index_order, NULL, traverse_cb, &udata, H5P_DEFAULT) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Literate_by_name failed");
+ H5TOOLS_GOTO_ERROR((-1), "H5Literate_by_name failed");
} /* end else */
/* Free visited addresses table */
@@ -312,7 +312,7 @@ done:
return ret_value;
}
-
+
/*-------------------------------------------------------------------------
* Function: trav_info_add
*
@@ -366,7 +366,7 @@ trav_fileinfo_add(trav_info_t *info, hid_t loc_id)
info->paths[idx].fileno = oinfo.fileno;
} /* end trav_fileinfo_add() */
-
+
/*-------------------------------------------------------------------------
* Function: trav_info_visit_obj
*
@@ -396,7 +396,7 @@ trav_info_visit_obj(const char *path, const H5O_info_t *oinfo,
return(0);
} /* end trav_info_visit_obj() */
-
+
/*-------------------------------------------------------------------------
* Function: trav_info_visit_lnk
*
@@ -415,7 +415,7 @@ trav_info_visit_lnk(const char *path, const H5L_info_t *linfo, void *udata)
return(0);
} /* end trav_info_visit_lnk() */
-
+
/*-------------------------------------------------------------------------
* Function: h5trav_getinfo
*
@@ -430,7 +430,7 @@ int
h5trav_getinfo(hid_t file_id, trav_info_t *info)
{
trav_visitor_t info_visitor; /* Visitor structure for trav_info_t's */
- int ret_value = SUCCEED;
+ int ret_value = 0;
/* Init visitor structure */
info_visitor.visit_obj = trav_info_visit_obj;
@@ -439,7 +439,7 @@ h5trav_getinfo(hid_t file_id, trav_info_t *info)
/* Traverse all objects in the file, visiting each object & link */
if(traverse(file_id, "/", TRUE, TRUE, &info_visitor, H5O_INFO_BASIC) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "traverse failed");
+ H5TOOLS_GOTO_ERROR((-1), "traverse failed");
done:
return ret_value;
@@ -501,7 +501,7 @@ trav_info_init(const char *filename, hid_t fileid, trav_info_t **_info)
*_info = info;
} /* end trav_info_init() */
-
+
/*-------------------------------------------------------------------------
* Function: trav_info_free
*
@@ -536,7 +536,7 @@ trav_info_free(trav_info_t *info)
*-------------------------------------------------------------------------
*/
-
+
/*-------------------------------------------------------------------------
* Function: trav_table_visit_obj
*
@@ -563,7 +563,7 @@ trav_table_visit_obj(const char *path, const H5O_info_t *oinfo,
return 0;
} /* end trav_table_visit_obj() */
-
+
/*-------------------------------------------------------------------------
* Function: trav_table_visit_lnk
*
@@ -582,7 +582,7 @@ trav_table_visit_lnk(const char *path, const H5L_info_t H5_ATTR_UNUSED *linfo, v
return 0;
} /* end trav_table_visit_lnk() */
-
+
/*-------------------------------------------------------------------------
* Function: h5trav_gettable
*
@@ -596,7 +596,7 @@ int
h5trav_gettable(hid_t fid, trav_table_t *table)
{
trav_visitor_t table_visitor; /* Visitor structure for trav_table_t's */
- int ret_value = SUCCEED;
+ int ret_value = 0;
/* Init visitor structure */
table_visitor.visit_obj = trav_table_visit_obj;
@@ -605,7 +605,7 @@ h5trav_gettable(hid_t fid, trav_table_t *table)
/* Traverse all objects in the file, visiting each object & link */
if(traverse(fid, "/", TRUE, TRUE, &table_visitor, H5O_INFO_BASIC) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "traverse failed");
+ H5TOOLS_GOTO_ERROR((-1), "traverse failed");
done:
return ret_value;
@@ -882,7 +882,7 @@ trav_attr(hid_t
return(0);
}
-
+
/*-------------------------------------------------------------------------
* Function: trav_print_visit_obj
*
@@ -940,7 +940,7 @@ trav_print_visit_obj(const char *path, const H5O_info_t *oinfo,
return(0);
} /* end trav_print_visit_obj() */
-
+
/*-------------------------------------------------------------------------
* Function: trav_print_visit_lnk
*
@@ -1004,7 +1004,7 @@ trav_print_visit_lnk(const char *path, const H5L_info_t *linfo, void *udata)
return(0);
} /* end trav_print_visit_lnk() */
-
+
/*-------------------------------------------------------------------------
* Function: h5trav_print
*
@@ -1019,7 +1019,7 @@ h5trav_print(hid_t fid)
{
trav_print_udata_t print_udata; /* User data for traversal */
trav_visitor_t print_visitor; /* Visitor structure for printing objects */
- int ret_value = SUCCEED;
+ int ret_value = 0;
/* Init user data for printing */
print_udata.fid = fid;
@@ -1031,13 +1031,13 @@ h5trav_print(hid_t fid)
/* Traverse all objects in the file, visiting each object & link */
if(traverse(fid, "/", TRUE, TRUE, &print_visitor, H5O_INFO_BASIC) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "traverse failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "traverse failed");
done:
return ret_value;
}
-
+
/*-------------------------------------------------------------------------
* Function: h5trav_visit
*
@@ -1053,7 +1053,7 @@ h5trav_visit(hid_t fid, const char *grp_name, hbool_t visit_start,
void *udata, unsigned fields)
{
trav_visitor_t visitor; /* Visitor structure for objects */
- int ret_value = SUCCEED;
+ int ret_value = 0;
/* Init visitor structure */
visitor.visit_obj = visit_obj;
@@ -1062,7 +1062,7 @@ h5trav_visit(hid_t fid, const char *grp_name, hbool_t visit_start,
/* Traverse all objects in the file, visiting each object & link */
if(traverse(fid, grp_name, visit_start, recurse, &visitor, fields) < 0)
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "traverse failed");
+ H5TOOLS_GOTO_ERROR((-1), "traverse failed");
done:
return ret_value;
@@ -1080,8 +1080,8 @@ done:
herr_t
symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path)
{
- herr_t ret_value = SUCCEED;
- size_t idx; /* Index of address to use */
+ size_t idx; /* Index of address to use */
+ herr_t ret_value = SUCCEED;
/* Allocate space if necessary */
if(visited->nused == visited->nalloc) {
@@ -1089,7 +1089,7 @@ symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, co
visited->nalloc = MAX(1, visited->nalloc * 2);
if(NULL == (tmp_ptr = HDrealloc(visited->objs, visited->nalloc * sizeof(symlink_trav_path_t))))
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "visited data structure realloc failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "visited data structure realloc failed");
visited->objs = (symlink_trav_path_t *)tmp_ptr;
} /* end if */
@@ -1103,7 +1103,7 @@ symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, co
if(type == H5L_TYPE_EXTERNAL) {
if(NULL == (visited->objs[idx].file = HDstrdup(file))) {
visited->nused--;
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "visited data structure name allocation failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "visited data structure name allocation failed");
} /* end if */
} /* end if */
@@ -1111,14 +1111,14 @@ symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, co
visited->nused--;
if(visited->objs[idx].file)
HDfree (visited->objs[idx].file);
- HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "visited data structure path allocation failed");
+ H5TOOLS_GOTO_ERROR(FAIL, "visited data structure path allocation failed");
} /* end if */
done:
return ret_value;
} /* end symlink_visit_add() */
-
+
/*-------------------------------------------------------------------------
* Function: symlink_is_visited
*
diff --git a/tools/lib/io_timer.c b/tools/lib/io_timer.c
index cb89019..472824b 100644
--- a/tools/lib/io_timer.c
+++ b/tools/lib/io_timer.c
@@ -138,43 +138,43 @@ io_time_set(io_time_t *pt, timer_type t, int start_stop)
switch(pt->type){
#ifdef H5_HAVE_PARALLEL
case MPI_CLOCK:
- if (start_stop == TSTART) {
- pt->mpi_timer[t] = MPI_Wtime();
-
- /* When we start the timer for HDF5_FINE_WRITE_FIXED_DIMS or HDF5_FINE_READ_FIXED_DIMS
- * we compute the time it took to only open the file */
- if(t == HDF5_FINE_WRITE_FIXED_DIMS)
- pt->total_time[HDF5_FILE_WRITE_OPEN] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_GROSS_WRITE_FIXED_DIMS];
- else if(t == HDF5_FINE_READ_FIXED_DIMS)
- pt->total_time[HDF5_FILE_READ_OPEN] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_GROSS_READ_FIXED_DIMS];
-
- } else {
- pt->total_time[t] += MPI_Wtime() - pt->mpi_timer[t];
- pt->mpi_timer[t] = MPI_Wtime();
-
- /* When we stop the timer for HDF5_GROSS_WRITE_FIXED_DIMS or HDF5_GROSS_READ_FIXED_DIMS
- * we compute the time it took to close the file after the last read/write finished */
- if(t == HDF5_GROSS_WRITE_FIXED_DIMS)
- pt->total_time[HDF5_FILE_WRITE_CLOSE] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_FINE_WRITE_FIXED_DIMS];
- else if(t == HDF5_GROSS_READ_FIXED_DIMS)
- pt->total_time[HDF5_FILE_READ_CLOSE] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_FINE_READ_FIXED_DIMS];
- }
- break;
+ if (start_stop == TSTART) {
+ pt->mpi_timer[t] = MPI_Wtime();
+
+ /* When we start the timer for HDF5_FINE_WRITE_FIXED_DIMS or HDF5_FINE_READ_FIXED_DIMS
+ * we compute the time it took to only open the file */
+ if(t == HDF5_FINE_WRITE_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_WRITE_OPEN] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_GROSS_WRITE_FIXED_DIMS];
+ else if(t == HDF5_FINE_READ_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_READ_OPEN] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_GROSS_READ_FIXED_DIMS];
+
+ } else {
+ pt->total_time[t] += MPI_Wtime() - pt->mpi_timer[t];
+ pt->mpi_timer[t] = MPI_Wtime();
+
+ /* When we stop the timer for HDF5_GROSS_WRITE_FIXED_DIMS or HDF5_GROSS_READ_FIXED_DIMS
+ * we compute the time it took to close the file after the last read/write finished */
+ if(t == HDF5_GROSS_WRITE_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_WRITE_CLOSE] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_FINE_WRITE_FIXED_DIMS];
+ else if(t == HDF5_GROSS_READ_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_READ_CLOSE] += pt->mpi_timer[t] - pt->mpi_timer[HDF5_FINE_READ_FIXED_DIMS];
+ }
+ break;
#else
case MPI_CLOCK:
- HDfprintf(stderr, "MPI clock set in serial library\n");
- return NULL;
+ HDfprintf(stderr, "MPI clock set in serial library\n");
+ return NULL;
#endif /* H5_HAVE_PARALLEL */
case SYS_CLOCK:
if (start_stop == TSTART) {
HDgettimeofday(&pt->sys_timer[t], NULL);
- /* When we start the timer for HDF5_FINE_WRITE_FIXED_DIMS or HDF5_FINE_READ_FIXED_DIMS
- * we compute the time it took to only open the file */
- if(t == HDF5_FINE_WRITE_FIXED_DIMS)
- pt->total_time[HDF5_FILE_WRITE_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_WRITE_FIXED_DIMS]));
- else if(t == HDF5_FINE_READ_FIXED_DIMS)
- pt->total_time[HDF5_FILE_READ_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_READ_FIXED_DIMS]));
+ /* When we start the timer for HDF5_FINE_WRITE_FIXED_DIMS or HDF5_FINE_READ_FIXED_DIMS
+ * we compute the time it took to only open the file */
+ if(t == HDF5_FINE_WRITE_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_WRITE_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_WRITE_FIXED_DIMS]));
+ else if(t == HDF5_FINE_READ_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_READ_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_READ_FIXED_DIMS]));
} else {
@@ -183,19 +183,19 @@ io_time_set(io_time_t *pt, timer_type t, int start_stop)
HDgettimeofday(&sys_t, NULL);
pt->total_time[t] += sub_time(&sys_t, &(pt->sys_timer[t]));
- /* When we stop the timer for HDF5_GROSS_WRITE_FIXED_DIMS or HDF5_GROSS_READ_FIXED_DIMS
- * we compute the time it took to close the file after the last read/write finished */
- if(t == HDF5_GROSS_WRITE_FIXED_DIMS)
- pt->total_time[HDF5_FILE_WRITE_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_WRITE_FIXED_DIMS]));
- else if(t == HDF5_GROSS_READ_FIXED_DIMS)
- pt->total_time[HDF5_FILE_READ_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_READ_FIXED_DIMS]));
+ /* When we stop the timer for HDF5_GROSS_WRITE_FIXED_DIMS or HDF5_GROSS_READ_FIXED_DIMS
+ * we compute the time it took to close the file after the last read/write finished */
+ if(t == HDF5_GROSS_WRITE_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_WRITE_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_WRITE_FIXED_DIMS]));
+ else if(t == HDF5_GROSS_READ_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_READ_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_READ_FIXED_DIMS]));
}
- break;
+ break;
default:
- HDfprintf(stderr, "Unknown time clock type (%d)\n", pt->type);
- return NULL;
+ HDfprintf(stderr, "Unknown time clock type (%d)\n", pt->type);
+ return NULL;
} /* end switch */
#if 0
@@ -221,10 +221,3 @@ io_time_get(io_time_t *pt, timer_type t)
return pt->total_time[t];
}
-
-#if 0
-/* standalone is not working yet. Need fix later. -AKC- */
-#ifdef STANDALONE
-#include "pio_standalone.c"
-#endif
-#endif