mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r22042] HDFFV-7957-7958:
Add tools error stack and check return from H5Dreference call. Tested: CMake and h5committest
This commit is contained in:
parent
80b2b54f41
commit
bec199165a
@ -1369,11 +1369,13 @@ main(int argc, const char *argv[])
|
||||
hid_t fid = -1;
|
||||
hid_t gid = -1;
|
||||
H5E_auto2_t func;
|
||||
H5E_auto2_t tools_func;
|
||||
H5O_info_t oi;
|
||||
struct handler_t *hand;
|
||||
struct handler_t *hand = NULL;
|
||||
int i;
|
||||
unsigned u;
|
||||
void *edata;
|
||||
void *tools_edata;
|
||||
char *fname = NULL;
|
||||
|
||||
h5tools_setprogname(PROGRAMNAME);
|
||||
@ -1388,6 +1390,10 @@ main(int argc, const char *argv[])
|
||||
|
||||
/* Initialize h5tools lib */
|
||||
h5tools_init();
|
||||
/* Disable tools error reporting */
|
||||
H5Eget_auto2(H5tools_ERR_STACK_g, &tools_func, &tools_edata);
|
||||
H5Eset_auto2(H5tools_ERR_STACK_g, NULL, NULL);
|
||||
|
||||
if((hand = parse_command_line(argc, argv))==NULL) {
|
||||
goto done;
|
||||
}
|
||||
@ -1398,8 +1404,10 @@ main(int argc, const char *argv[])
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (enable_error_stack)
|
||||
if (enable_error_stack) {
|
||||
H5Eset_auto2(H5E_DEFAULT, func, edata);
|
||||
H5Eset_auto2(H5tools_ERR_STACK_g, tools_func, tools_edata);
|
||||
}
|
||||
|
||||
/* Check for conflicting options */
|
||||
if (doxml) {
|
||||
@ -1442,169 +1450,186 @@ main(int argc, const char *argv[])
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
fname = HDstrdup(argv[opt_ind]);
|
||||
while(opt_ind < argc) {
|
||||
fname = HDstrdup(argv[opt_ind++]);
|
||||
|
||||
fid = h5tools_fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT, driver, NULL, 0);
|
||||
fid = h5tools_fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT, driver, NULL, 0);
|
||||
|
||||
if (fid < 0) {
|
||||
error_msg("unable to open file \"%s\"\n", fname);
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* allocate and initialize internal data structure */
|
||||
init_prefix(&prefix, prefix_len);
|
||||
|
||||
/* Prepare to find objects that might be targets of a reference */
|
||||
fill_ref_path_table(fid);
|
||||
|
||||
if(doxml) {
|
||||
/* initialize XML */
|
||||
/* reset prefix! */
|
||||
HDstrcpy(prefix, "");
|
||||
|
||||
/* make sure the URI is initialized to something */
|
||||
if (xml_dtd_uri == NULL) {
|
||||
if (useschema) {
|
||||
xml_dtd_uri = DEFAULT_XSD;
|
||||
}
|
||||
else {
|
||||
xml_dtd_uri = DEFAULT_DTD;
|
||||
xmlnsprefix = "";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (useschema && HDstrcmp(xmlnsprefix,"")) {
|
||||
error_msg("Cannot set Schema URL for a qualified namespace--use -X or -U option with -D \n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Get object info for root group */
|
||||
if(H5Oget_info_by_name(fid, "/", &oi, H5P_DEFAULT) < 0) {
|
||||
error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Initialize object tables */
|
||||
if(table_list_add(fid, oi.fileno) < 0) {
|
||||
error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
group_table = table_list.tables[0].group_table;
|
||||
dset_table = table_list.tables[0].dset_table;
|
||||
type_table = table_list.tables[0].type_table;
|
||||
|
||||
/* does there exist unamed committed datatype */
|
||||
for (u = 0; u < type_table->nobjs; u++)
|
||||
if (!type_table->objs[u].recorded) {
|
||||
unamedtype = 1;
|
||||
break;
|
||||
} /* end if */
|
||||
|
||||
/* start to dump - display file header information */
|
||||
if (!doxml) {
|
||||
begin_obj(h5tools_dump_header_format->filebegin, fname, h5tools_dump_header_format->fileblockbegin);
|
||||
}
|
||||
else {
|
||||
HDfprintf(rawoutstream, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
|
||||
|
||||
/* alternative first element, depending on schema or DTD. */
|
||||
if (useschema) {
|
||||
if (HDstrcmp(xmlnsprefix,"") == 0) {
|
||||
HDfprintf(rawoutstream, "<HDF5-File xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"%s\">\n",
|
||||
xml_dtd_uri);
|
||||
}
|
||||
else {
|
||||
/* TO DO: make -url option work in this case (may need new option) */
|
||||
char *ns;
|
||||
char *indx;
|
||||
|
||||
ns = HDstrdup(xmlnsprefix);
|
||||
indx = HDstrrchr(ns,(int)':');
|
||||
if (indx) *indx = '\0';
|
||||
|
||||
HDfprintf(rawoutstream, "<%sHDF5-File xmlns:%s=\"http://hdfgroup.org/HDF5/XML/schema/HDF5-File\" "
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
|
||||
"xsi:schemaLocation=\"http://hdfgroup.org/HDF5/XML/schema/HDF5-File "
|
||||
"http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd\">\n",xmlnsprefix,ns);
|
||||
HDfree(ns);
|
||||
}
|
||||
}
|
||||
else {
|
||||
HDfprintf(rawoutstream, "<!DOCTYPE HDF5-File PUBLIC \"HDF5-File.dtd\" \"%s\">\n", xml_dtd_uri);
|
||||
HDfprintf(rawoutstream, "<HDF5-File>\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (!doxml) {
|
||||
if (display_fi) {
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
dump_fcontents(fid);
|
||||
end_obj(h5tools_dump_header_format->fileend,h5tools_dump_header_format->fileblockend);
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
if (fid < 0) {
|
||||
error_msg("unable to open file \"%s\"\n", fname);
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (display_bb)
|
||||
dump_fcpl(fid);
|
||||
}
|
||||
/* allocate and initialize internal data structure */
|
||||
init_prefix(&prefix, prefix_len);
|
||||
|
||||
if(display_all) {
|
||||
if((gid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0) {
|
||||
error_msg("unable to open root group\n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
}
|
||||
else {
|
||||
if (!doxml)
|
||||
dump_indent += COL;
|
||||
dump_function_table->dump_group_function(gid, "/" );
|
||||
if (!doxml)
|
||||
dump_indent -= COL;
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
}
|
||||
/* Prepare to find objects that might be targets of a reference */
|
||||
fill_ref_path_table(fid);
|
||||
|
||||
if(H5Gclose(gid) < 0) {
|
||||
error_msg("unable to close root group\n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
/* Note: this option is not supported for XML */
|
||||
if(doxml) {
|
||||
/* initialize XML */
|
||||
/* reset prefix! */
|
||||
HDstrcpy(prefix, "");
|
||||
|
||||
/* make sure the URI is initialized to something */
|
||||
if (xml_dtd_uri == NULL) {
|
||||
if (useschema) {
|
||||
xml_dtd_uri = DEFAULT_XSD;
|
||||
}
|
||||
else {
|
||||
xml_dtd_uri = DEFAULT_DTD;
|
||||
xmlnsprefix = "";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (useschema && HDstrcmp(xmlnsprefix,"")) {
|
||||
error_msg("Cannot set Schema URL for a qualified namespace--use -X or -U option with -D \n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Get object info for root group */
|
||||
if(H5Oget_info_by_name(fid, "/", &oi, H5P_DEFAULT) < 0) {
|
||||
error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
for(i = 0; i < argc; i++) {
|
||||
if(hand[i].func) {
|
||||
hand[i].func(fid, hand[i].obj, hand[i].subset_info, 1, NULL);
|
||||
/* Initialize object tables */
|
||||
if(table_list_add(fid, oi.fileno) < 0) {
|
||||
error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
group_table = table_list.tables[0].group_table;
|
||||
dset_table = table_list.tables[0].dset_table;
|
||||
type_table = table_list.tables[0].type_table;
|
||||
|
||||
/* does there exist unamed committed datatype */
|
||||
for (u = 0; u < type_table->nobjs; u++)
|
||||
if (!type_table->objs[u].recorded) {
|
||||
unamedtype = 1;
|
||||
break;
|
||||
} /* end if */
|
||||
|
||||
/* start to dump - display file header information */
|
||||
if (!doxml) {
|
||||
begin_obj(h5tools_dump_header_format->filebegin, fname, h5tools_dump_header_format->fileblockbegin);
|
||||
}
|
||||
else {
|
||||
HDfprintf(rawoutstream, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
|
||||
|
||||
/* alternative first element, depending on schema or DTD. */
|
||||
if (useschema) {
|
||||
if (HDstrcmp(xmlnsprefix,"") == 0) {
|
||||
HDfprintf(rawoutstream, "<HDF5-File xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"%s\">\n",
|
||||
xml_dtd_uri);
|
||||
}
|
||||
else {
|
||||
/* TO DO: make -url option work in this case (may need new option) */
|
||||
char *ns;
|
||||
char *indx;
|
||||
|
||||
ns = HDstrdup(xmlnsprefix);
|
||||
indx = HDstrrchr(ns,(int)':');
|
||||
if (indx) *indx = '\0';
|
||||
|
||||
HDfprintf(rawoutstream, "<%sHDF5-File xmlns:%s=\"http://hdfgroup.org/HDF5/XML/schema/HDF5-File\" "
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
|
||||
"xsi:schemaLocation=\"http://hdfgroup.org/HDF5/XML/schema/HDF5-File "
|
||||
"http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd\">\n",xmlnsprefix,ns);
|
||||
HDfree(ns);
|
||||
}
|
||||
}
|
||||
else {
|
||||
HDfprintf(rawoutstream, "<!DOCTYPE HDF5-File PUBLIC \"HDF5-File.dtd\" \"%s\">\n", xml_dtd_uri);
|
||||
HDfprintf(rawoutstream, "<HDF5-File>\n");
|
||||
}
|
||||
}
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
}
|
||||
|
||||
if (!doxml) {
|
||||
end_obj(h5tools_dump_header_format->fileend, h5tools_dump_header_format->fileblockend);
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
}
|
||||
else {
|
||||
HDfprintf(rawoutstream, "</%sHDF5-File>\n", xmlnsprefix);
|
||||
}
|
||||
if (!doxml) {
|
||||
if (display_fi) {
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
dump_fcontents(fid);
|
||||
end_obj(h5tools_dump_header_format->fileend,h5tools_dump_header_format->fileblockend);
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (display_bb)
|
||||
dump_fcpl(fid);
|
||||
}
|
||||
|
||||
if(display_all) {
|
||||
if((gid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0) {
|
||||
error_msg("unable to open root group\n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
}
|
||||
else {
|
||||
if (!doxml)
|
||||
dump_indent += COL;
|
||||
dump_function_table->dump_group_function(gid, "/" );
|
||||
if (!doxml)
|
||||
dump_indent -= COL;
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
}
|
||||
|
||||
if(H5Gclose(gid) < 0) {
|
||||
error_msg("unable to close root group\n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
/* Note: this option is not supported for XML */
|
||||
if(doxml) {
|
||||
error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
goto done;
|
||||
} /* end if */
|
||||
|
||||
for(i = 0; i < argc; i++) {
|
||||
if(hand[i].func) {
|
||||
hand[i].func(fid, hand[i].obj, hand[i].subset_info, 1, NULL);
|
||||
}
|
||||
}
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
}
|
||||
|
||||
if (!doxml) {
|
||||
end_obj(h5tools_dump_header_format->fileend, h5tools_dump_header_format->fileblockend);
|
||||
HDfprintf(rawoutstream, "\n");
|
||||
}
|
||||
else {
|
||||
HDfprintf(rawoutstream, "</%sHDF5-File>\n", xmlnsprefix);
|
||||
}
|
||||
/* Free tables for objects */
|
||||
table_list_free();
|
||||
|
||||
if(fid >=0)
|
||||
if (H5Fclose(fid) < 0)
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
|
||||
if(prefix)
|
||||
HDfree(prefix);
|
||||
if(fname)
|
||||
HDfree(fname);
|
||||
} /* end while */
|
||||
|
||||
if(hand)
|
||||
free_handler(hand, argc);
|
||||
|
||||
/* To Do: clean up XML table */
|
||||
|
||||
leave(h5tools_getstatus());
|
||||
|
||||
done:
|
||||
/* Free tables for objects */
|
||||
table_list_free();
|
||||
|
||||
if(hand)
|
||||
free_handler(hand, argc);
|
||||
|
||||
if(fid >=0)
|
||||
if (H5Fclose(fid) < 0)
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
@ -1614,6 +1639,9 @@ done:
|
||||
if(fname)
|
||||
HDfree(fname);
|
||||
|
||||
if(hand)
|
||||
free_handler(hand, argc);
|
||||
|
||||
/* To Do: clean up XML table */
|
||||
|
||||
H5Eset_auto2(H5E_DEFAULT, func, edata);
|
||||
|
@ -35,6 +35,7 @@
|
||||
#define ALIGN(A,Z) ((((A) + (Z) - 1) / (Z)) * (Z))
|
||||
|
||||
/* global variables */
|
||||
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;
|
||||
@ -114,7 +115,8 @@ h5tools_init(void)
|
||||
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()
|
||||
|
||||
if (!rawdatastream)
|
||||
@ -149,7 +151,12 @@ h5tools_init(void)
|
||||
void
|
||||
h5tools_close(void)
|
||||
{
|
||||
H5E_auto2_t tools_func;
|
||||
void *tools_edata;
|
||||
if (h5tools_init_g) {
|
||||
H5Eget_auto2(H5tools_ERR_STACK_g, &tools_func, &tools_edata);
|
||||
if(tools_func!=NULL)
|
||||
H5Eprint(H5tools_ERR_STACK_g, rawerrorstream);
|
||||
if (rawdatastream && rawdatastream != stdout) {
|
||||
if (fclose(rawdatastream))
|
||||
perror("closing rawdatastream");
|
||||
@ -173,7 +180,7 @@ h5tools_close(void)
|
||||
term_ref_path_table();
|
||||
|
||||
H5TOOLS_CLOSE_ERROR()
|
||||
|
||||
H5Eclose_stack(H5tools_ERR_STACK_g);
|
||||
/* Shut down the library */
|
||||
H5close();
|
||||
|
||||
|
@ -232,8 +232,8 @@ h5tools_dump_init(void)
|
||||
* indicates whether the data supplied in this call falls at the
|
||||
* beginning or end of the total data to be printed (START_OF_DATA and
|
||||
* END_OF_DATA).
|
||||
* Return:
|
||||
* None
|
||||
* Return: Success: SUCCEED
|
||||
* Failure: FAIL
|
||||
* Programmer:
|
||||
* Robb Matzke, Monday, April 26, 1999
|
||||
* Modifications:
|
||||
@ -256,11 +256,12 @@ h5tools_dump_init(void)
|
||||
* new field sm_pos in h5tools_context_t, the current stripmine element position
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
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)
|
||||
{
|
||||
HERR_INIT(int, SUCCEED)
|
||||
unsigned char *mem = (unsigned char*) _mem;
|
||||
hsize_t i; /*element counter */
|
||||
size_t size; /*size of each datum */
|
||||
@ -357,8 +358,10 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t contai
|
||||
HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Dclose failed");
|
||||
|
||||
} /* if (region_id >= 0) */
|
||||
else
|
||||
HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Rdereference failed");
|
||||
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");
|
||||
}
|
||||
|
||||
ctx->need_prefix = TRUE;
|
||||
|
||||
@ -386,6 +389,9 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t contai
|
||||
|
||||
h5tools_str_close(&buffer);
|
||||
}/* else bin */
|
||||
|
||||
CATCH
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1226,7 +1232,8 @@ h5tools_print_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools_c
|
||||
|
||||
ctx->need_prefix = TRUE;
|
||||
|
||||
h5tools_dump_simple_data(stream, info, dset, ctx, flags, sm_nelmts, p_type, sm_buf);
|
||||
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");
|
||||
|
||||
/* Reclaim any VL memory, if necessary */
|
||||
if (vl_data)
|
||||
@ -1484,7 +1491,8 @@ static int
|
||||
h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
|
||||
hid_t dset, hid_t p_type)
|
||||
{
|
||||
hid_t f_space; /* file data space */
|
||||
HERR_INIT(herr_t, SUCCEED)
|
||||
hid_t f_space = -1; /* file data space */
|
||||
hsize_t elmtno; /* counter */
|
||||
size_t i; /* counter */
|
||||
int carry; /* counter carry value */
|
||||
@ -1501,7 +1509,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; /* stripmine data space */
|
||||
hid_t sm_space = -1; /* stripmine data space */
|
||||
|
||||
/* Hyperslab info */
|
||||
hsize_t hs_offset[H5S_MAX_RANK]; /* starting offset */
|
||||
@ -1514,13 +1522,12 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
|
||||
f_space = H5Dget_space(dset);
|
||||
|
||||
if (f_space == FAIL)
|
||||
return FAIL;
|
||||
H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dget_space failed");
|
||||
|
||||
ctx->ndims = H5Sget_simple_extent_ndims(f_space);
|
||||
|
||||
if ((size_t)ctx->ndims > NELMTS(sm_size)) {
|
||||
H5Sclose(f_space);
|
||||
return FAIL;
|
||||
H5E_THROW(FAIL, H5E_tools_min_id_g, "ctx->ndims > NELMTS(sm_size) failed");
|
||||
}
|
||||
|
||||
/* Assume entire data space to be printed */
|
||||
@ -1542,9 +1549,7 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
|
||||
ctx->size_last_dim = 0;
|
||||
|
||||
if (p_nelmts == 0) {
|
||||
/* nothing to print */
|
||||
H5Sclose(f_space);
|
||||
return SUCCEED;
|
||||
H5_LEAVE(SUCCEED); /* nothing to print */
|
||||
}
|
||||
|
||||
/* Check if we have VL data in the dataset's datatype */
|
||||
@ -1606,10 +1611,7 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
|
||||
|
||||
/* Read the data */
|
||||
if (H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf) < 0) {
|
||||
H5Sclose(f_space);
|
||||
H5Sclose(sm_space);
|
||||
HDfree(sm_buf);
|
||||
return FAIL;
|
||||
H5E_THROW(FAIL, H5E_tools_min_id_g, "H5Dread failed");
|
||||
}
|
||||
|
||||
/* Print the data */
|
||||
@ -1620,7 +1622,8 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
|
||||
indices */
|
||||
ctx->sm_pos = elmtno;
|
||||
|
||||
h5tools_dump_simple_data(stream, info, dset, ctx, flags, hs_nelmts, p_type, sm_buf);
|
||||
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");
|
||||
|
||||
/* Reclaim any VL memory, if necessary */
|
||||
if (vl_data)
|
||||
@ -1640,13 +1643,17 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, h5tools_cont
|
||||
ctx->continuation++;
|
||||
}
|
||||
|
||||
HDfree(sm_buf);
|
||||
CATCH
|
||||
if(sm_buf)
|
||||
HDfree(sm_buf);
|
||||
|
||||
done:
|
||||
H5Sclose(sm_space);
|
||||
H5Sclose(f_space);
|
||||
if(sm_space >= 0 && H5Sclose(sm_space) < 0)
|
||||
H5E_THROW(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
|
||||
if(f_space >= 0 && H5Sclose(f_space) < 0)
|
||||
H5E_THROW(H5E_tools_g, H5E_tools_min_id_g, "H5Sclose failed");
|
||||
|
||||
return SUCCEED;
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1664,13 +1671,14 @@ 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)
|
||||
{
|
||||
HERR_INIT(herr_t, SUCCEED)
|
||||
int i; /*counters */
|
||||
hsize_t nelmts; /*total selected elmts */
|
||||
|
||||
ctx->ndims = H5Sget_simple_extent_ndims(space);
|
||||
|
||||
if ((size_t) ctx->ndims > NELMTS(ctx->p_min_idx))
|
||||
return FAIL;
|
||||
H5E_THROW(FAIL, H5E_tools_min_id_g, "ctx->ndims > NELMTS(ctx->p_min_idx) failed");
|
||||
|
||||
/* Assume entire data space to be printed */
|
||||
for (i = 0; i < ctx->ndims; i++)
|
||||
@ -1682,7 +1690,7 @@ h5tools_dump_simple_mem(FILE *stream, const h5tool_format_t *info, h5tools_conte
|
||||
nelmts *= ctx->p_max_idx[i] - ctx->p_min_idx[i];
|
||||
|
||||
if (nelmts == 0)
|
||||
return SUCCEED; /*nothing to print*/
|
||||
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 = (int) (ctx->p_max_idx[ctx->ndims - 1]);
|
||||
@ -1693,9 +1701,11 @@ h5tools_dump_simple_mem(FILE *stream, const h5tool_format_t *info, h5tools_conte
|
||||
if (ctx->ndims > 0)
|
||||
init_acc_pos(ctx, ctx->p_max_idx);
|
||||
|
||||
h5tools_dump_simple_data(stream, info, obj_id, ctx, START_OF_DATA | END_OF_DATA, nelmts, type, mem);
|
||||
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");
|
||||
|
||||
return SUCCEED;
|
||||
CATCH
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
@ -44,10 +44,10 @@ H5TOOLS_DLL int h5tools_dump_dset(FILE *stream, const h5tool_format_t *info,
|
||||
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_DLL void h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t container,
|
||||
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);
|
||||
H5TOOLS_DLL void h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info,
|
||||
H5TOOLS_DLL void h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info,
|
||||
h5tools_context_t *ctx/*in,out*/, hid_t type);
|
||||
H5TOOLS_DLL void h5tools_dump_dataspace(FILE *stream, const h5tool_format_t *info,
|
||||
h5tools_context_t *ctx/*in,out*/, hid_t space);
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "H5Epublic.h"
|
||||
|
||||
/* tools-HDF5 Error variables */
|
||||
H5TOOLS_DLLVAR hid_t H5tools_ERR_STACK_g;
|
||||
H5TOOLS_DLLVAR hid_t H5tools_ERR_CLS_g;
|
||||
H5TOOLS_DLLVAR hid_t H5E_tools_g;
|
||||
H5TOOLS_DLLVAR hid_t H5E_tools_min_id_g;
|
||||
@ -66,7 +67,11 @@ H5TOOLS_DLLVAR hid_t H5E_tools_min_id_g;
|
||||
* HERROR macro, used to facilitate error reporting . The arguments are the major
|
||||
* error number, the minor error number, and a description of the error.
|
||||
*/
|
||||
#define HERROR(maj_id, min_id, str) H5Epush2(H5E_DEFAULT, __FILE__, FUNC, __LINE__, H5tools_ERR_CLS_g, maj_id, min_id, str)
|
||||
#define HERROR(maj_id, min_id, str) { \
|
||||
H5Epush2(H5tools_ERR_STACK_g, __FILE__, FUNC, __LINE__, H5tools_ERR_CLS_g, maj_id, min_id, str); \
|
||||
ret_value = FAIL; \
|
||||
}
|
||||
|
||||
|
||||
/* 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.
|
||||
|
@ -25,3 +25,7 @@ HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
|
||||
major: Data filters
|
||||
minor: Read failed
|
||||
h5dump error: unable to print data
|
||||
H5tools-DIAG: Error detected in HDF5:tools (version (number)) thread (IDs):
|
||||
#000: (file name) line (number) in h5tools_dump_simple_dset(): H5Dread failed
|
||||
major: Failure in tools library
|
||||
minor: error in function
|
||||
|
Loading…
Reference in New Issue
Block a user