summaryrefslogtreecommitdiffstats
path: root/tools/src/h5dump/h5dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/src/h5dump/h5dump.c')
-rw-r--r--tools/src/h5dump/h5dump.c237
1 files changed, 126 insertions, 111 deletions
diff --git a/tools/src/h5dump/h5dump.c b/tools/src/h5dump/h5dump.c
index b53c212..25e4858 100644
--- a/tools/src/h5dump/h5dump.c
+++ b/tools/src/h5dump/h5dump.c
@@ -10,8 +10,6 @@
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdio.h>
-#include <stdlib.h>
#include "h5dump.h"
#include "h5dump_ddl.h"
@@ -69,7 +67,7 @@ struct handler_t {
*/
/* The following initialization makes use of C language cancatenating */
/* "xxx" "yyy" into "xxxyyy". */
-static const char *s_opts = "hn*peyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o*b*F:s:S:A*q:z:m:RECM:O*N:vG:";
+static const char *s_opts = "hn*peyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o*b*F:s:S:A*q:z:m:RE*CM:O*N:vG:";
static struct long_options l_opts[] = {
{ "help", no_arg, 'h' },
{ "hel", no_arg, 'h' },
@@ -183,7 +181,7 @@ static struct long_options l_opts[] = {
{ "sort_order", require_arg, 'z' },
{ "format", require_arg, 'm' },
{ "region", no_arg, 'R' },
- { "enable-error-stack", no_arg, 'E' },
+ { "enable-error-stack", optional_arg, 'E' },
{ "packed-bits", require_arg, 'M' },
{ "no-compact-subset", no_arg, 'C' },
{ "ddl", optional_arg, 'O' },
@@ -193,7 +191,7 @@ static struct long_options l_opts[] = {
{ NULL, 0, '\0' }
};
-
+
/*-------------------------------------------------------------------------
* Function: leave
*
@@ -216,7 +214,7 @@ leave(int ret)
HDexit(ret);
}
-
+
/*-------------------------------------------------------------------------
* Function: usage
*
@@ -275,8 +273,8 @@ usage(const char *prog)
PRINTVALSTREAM(rawoutstream, " -m T, --format=T Set the floating point output format\n");
PRINTVALSTREAM(rawoutstream, " -q Q, --sort_by=Q Sort groups and attributes by index Q\n");
PRINTVALSTREAM(rawoutstream, " -z Z, --sort_order=Z Sort groups and attributes by order Z\n");
- PRINTVALSTREAM(rawoutstream, " --enable-error-stack Prints messages from the HDF5 error stack as they\n");
- PRINTVALSTREAM(rawoutstream, " occur.\n");
+ PRINTVALSTREAM(rawoutstream, " --enable-error-stack Prints messages from the HDF5 error stack as they occur.\n");
+ PRINTVALSTREAM(rawoutstream, " Optional value 2 also prints file open errors.\n");
PRINTVALSTREAM(rawoutstream, " --no-compact-subset Disable compact form of subsetting and allow the use\n");
PRINTVALSTREAM(rawoutstream, " of \"[\" in dataset names.\n");
PRINTVALSTREAM(rawoutstream, " -w N, --width=N Set the number of columns of output. A value of 0 (zero)\n");
@@ -368,7 +366,7 @@ usage(const char *prog)
PRINTVALSTREAM(rawoutstream, "\n");
}
-
+
/*-------------------------------------------------------------------------
* Function: table_list_add
*
@@ -421,7 +419,7 @@ table_list_add(hid_t oid, unsigned long file_no)
return((ssize_t) idx);
} /* end table_list_add() */
-
+
/*-------------------------------------------------------------------------
* Function: table_list_visited
*
@@ -451,7 +449,7 @@ table_list_visited(unsigned long file_no)
return(-1);
} /* end table_list_visited() */
-
+
/*-------------------------------------------------------------------------
* Function: table_list_free
*
@@ -723,96 +721,103 @@ parse_mask_list(const char *h_list)
const char *ptr = NULL;
/* sanity check */
- HDassert(h_list);
+ if(h_list) {
+ HDmemset(packed_mask,0,sizeof(packed_mask));
+
+ packed_bits_num = 0;
+ /* scan in pair of offset,length separated by commas. */
+ ptr = h_list;
+ while (*ptr) {
+ /* scan for an offset which is an unsigned int */
+ if (!HDisdigit(*ptr)) {
+ error_msg("Bad mask list(%s)\n", h_list);
+ return FAIL;
+ }
+ soffset_value = HDatoi(ptr);
+ offset_value = (unsigned)soffset_value;
+ if (soffset_value < 0 || offset_value >= PACKED_BITS_SIZE_MAX) {
+ error_msg("Packed Bit offset value(%d) must be between 0 and %u\n",
+ soffset_value, (unsigned)(PACKED_BITS_SIZE_MAX - 1));
+ return FAIL;
+ }
- HDmemset(packed_mask,0,sizeof(packed_mask));
+ /* skip to end of integer */
+ while (HDisdigit(*++ptr))
+ ;
+ /* Look for the common separator */
+ if (*ptr++ != ',') {
+ error_msg("Bad mask list(%s), missing expected comma separator.\n", h_list);
+ return FAIL;
+ }
- packed_bits_num = 0;
- /* scan in pair of offset,length separated by commas. */
- ptr = h_list;
- while (*ptr) {
- /* scan for an offset which is an unsigned int */
- if (!HDisdigit(*ptr)) {
- error_msg("Bad mask list(%s)\n", h_list);
- return FAIL;
- }
- soffset_value = HDatoi(ptr);
- offset_value = (unsigned)soffset_value;
- if (soffset_value < 0 || offset_value >= PACKED_BITS_SIZE_MAX) {
- error_msg("Packed Bit offset value(%d) must be between 0 and %u\n",
- soffset_value, (unsigned)(PACKED_BITS_SIZE_MAX - 1));
- return FAIL;
- }
+ /* scan for a length which is a positive int */
+ if (!HDisdigit(*ptr)) {
+ error_msg("Bad mask list(%s)\n", h_list);
+ return FAIL;
+ }
+ slength_value = HDatoi(ptr);
+ if (slength_value <= 0) {
+ error_msg("Packed Bit length value(%d) must be positive.\n", slength_value);
+ return FAIL;
+ }
+ length_value = (unsigned)slength_value;
+ if ((offset_value + length_value) > PACKED_BITS_SIZE_MAX) {
+ error_msg("Packed Bit offset+length value(%u) too large. Max is %u\n",
+ offset_value+length_value, (unsigned)PACKED_BITS_SIZE_MAX);
+ return FAIL;
+ }
- /* skip to end of integer */
- while (HDisdigit(*++ptr))
- ;
- /* Look for the common separator */
- if (*ptr++ != ',') {
- error_msg("Bad mask list(%s), missing expected comma separator.\n", h_list);
- return FAIL;
- }
+ /* skip to end of int */
+ while (HDisdigit(*++ptr))
+ ;
- /* scan for a length which is a positive int */
- if (!HDisdigit(*ptr)) {
- error_msg("Bad mask list(%s)\n", h_list);
- return FAIL;
- }
- slength_value = HDatoi(ptr);
- if (slength_value <= 0) {
- error_msg("Packed Bit length value(%d) must be positive.\n", slength_value);
- return FAIL;
+ /* store the offset,length pair */
+ if (packed_bits_num >= PACKED_BITS_MAX) {
+ /* too many requests */
+ error_msg("Too many masks requested (max. %d). Mask list(%s)\n", PACKED_BITS_MAX, h_list);
+ return FAIL;
+ }
+ packed_offset[packed_bits_num] = offset_value;
+ packed_length[packed_bits_num] = length_value;
+ /* create the bit mask by left shift 1's by length, then negate it. */
+ /* After packed_mask is calculated, packed_length is not needed but */
+ /* keep it for debug purpose. */
+ temp_mask = ~0ULL;
+ if(length_value < (int)(8 *sizeof(unsigned long long))) {
+ temp_mask = temp_mask << length_value;
+ packed_mask[packed_bits_num] = ~temp_mask;
+ }
+ else
+ packed_mask[packed_bits_num] = temp_mask;
+ packed_bits_num++;
+
+ /* skip a possible comma separator */
+ if (*ptr == ',') {
+ if (!(*++ptr)) {
+ /* unexpected end of string */
+ error_msg("Bad mask list(%s), unexpected end of string.\n", h_list);
+ return FAIL;
+ }
+ }
}
- length_value = (unsigned)slength_value;
- if ((offset_value + length_value) > PACKED_BITS_SIZE_MAX) {
- error_msg("Packed Bit offset+length value(%u) too large. Max is %u\n",
- offset_value+length_value, (unsigned)PACKED_BITS_SIZE_MAX);
+ if(packed_bits_num > PACKED_BITS_MAX) {
+ error_msg("Maximum number of packed bits exceeded\n");
return FAIL;
}
-
- /* skip to end of int */
- while (HDisdigit(*++ptr))
- ;
-
- /* store the offset,length pair */
- if (packed_bits_num >= PACKED_BITS_MAX) {
- /* too many requests */
- error_msg("Too many masks requested (max. %d). Mask list(%s)\n", PACKED_BITS_MAX, h_list);
+ if (packed_bits_num == 0) {
+ /* got no masks! */
+ error_msg("Bad mask list(%s)\n", h_list);
return FAIL;
}
- packed_offset[packed_bits_num] = offset_value;
- packed_length[packed_bits_num] = length_value;
- /* create the bit mask by left shift 1's by length, then negate it. */
- /* After packed_mask is calculated, packed_length is not needed but */
- /* keep it for debug purpose. */
- temp_mask = ~0ULL;
- if(length_value < (int)(8 *sizeof(unsigned long long))) {
- temp_mask = temp_mask << length_value;
- packed_mask[packed_bits_num] = ~temp_mask;
- }
- else
- packed_mask[packed_bits_num] = temp_mask;
- packed_bits_num++;
-
- /* skip a possible comma separator */
- if (*ptr == ',') {
- if (!(*++ptr)) {
- /* unexpected end of string */
- error_msg("Bad mask list(%s), unexpected end of string.\n", h_list);
- return FAIL;
- }
- }
+ return SUCCEED;
}
- HDassert(packed_bits_num <= PACKED_BITS_MAX);
- if (packed_bits_num == 0) {
- /* got no masks! */
- error_msg("Bad mask list(%s)\n", h_list);
+ else {
+ error_msg("Bad mask list argument\n");
return FAIL;
}
- return SUCCEED;
}
-
+
/*-------------------------------------------------------------------------
* Function: free_handler
*
@@ -860,7 +865,7 @@ free_handler(struct handler_t *hand, int len)
}
}
-
+
/*-------------------------------------------------------------------------
* Function: parse_command_line
*
@@ -915,9 +920,8 @@ parse_start:
case 'n':
display_fi = TRUE;
last_was_dset = FALSE;
- if ( opt_arg != NULL) {
+ if (opt_arg != NULL)
h5trav_set_verbose(HDatoi(opt_arg));
- }
break;
case 'p':
display_dcpl = TRUE;
@@ -934,8 +938,9 @@ parse_start:
last_was_dset = FALSE;
break;
case 'A':
- if ( opt_arg != NULL) {
- if(0 == HDatoi(opt_arg)) include_attrs = FALSE;
+ if (opt_arg != NULL) {
+ if(0 == HDatoi(opt_arg))
+ include_attrs = FALSE;
}
else {
display_data = FALSE;
@@ -1054,7 +1059,7 @@ parse_start:
break;
case 'o':
- if ( bin_output ) {
+ if (bin_output) {
if (h5tools_set_data_output_file(opt_arg, 1) < 0) {
usage(h5tools_getprogname());
goto error;
@@ -1081,8 +1086,8 @@ parse_start:
break;
case 'b':
- if ( opt_arg != NULL) {
- if ( ( bin_form = set_binary_form(opt_arg)) < 0) {
+ if (opt_arg != NULL) {
+ if ((bin_form = set_binary_form(opt_arg)) < 0) {
/* failed to set binary form */
usage(h5tools_getprogname());
goto error;
@@ -1101,7 +1106,7 @@ parse_start:
break;
case 'q':
- if ( ( sort_by = set_sort_by(opt_arg)) < 0) {
+ if ((sort_by = set_sort_by(opt_arg)) < 0) {
/* failed to set "sort by" form */
usage(h5tools_getprogname());
goto error;
@@ -1109,7 +1114,7 @@ parse_start:
break;
case 'z':
- if ( ( sort_order = set_sort_order(opt_arg)) < 0) {
+ if ((sort_order = set_sort_order(opt_arg)) < 0) {
/* failed to set "sort order" form */
usage(h5tools_getprogname());
goto error;
@@ -1263,7 +1268,10 @@ end_collect:
/** end subsetting parameters **/
case 'E':
- enable_error_stack = TRUE;
+ if (opt_arg != NULL)
+ enable_error_stack = HDatoi(opt_arg);
+ else
+ enable_error_stack = 1;
break;
case 'C':
disable_compact_subset = TRUE;
@@ -1301,7 +1309,7 @@ error:
return hand;
}
-
+
/*-------------------------------------------------------------------------
* Function: main
*
@@ -1383,7 +1391,7 @@ main(int argc, const char *argv[])
goto done;
}
- if (enable_error_stack) {
+ if (enable_error_stack > 0) {
H5Eset_auto2(H5E_DEFAULT, func, edata);
H5Eset_auto2(H5tools_ERR_STACK_g, tools_func, tools_edata);
}
@@ -1710,13 +1718,18 @@ h5_fileaccess(void)
HDmemset(memb_name, 0, sizeof memb_name);
HDmemset(memb_addr, 0, sizeof memb_addr);
- HDassert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
- for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
- memb_fapl[mt] = H5P_DEFAULT;
- memb_map[mt] = mt;
- sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
- memb_name[mt] = sv[mt];
- memb_addr[mt] = (haddr_t)MAX(mt - 1, 0) * (HADDR_MAX / 10);
+ if(HDstrlen(multi_letters)==H5FD_MEM_NTYPES) {
+ for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
+ memb_fapl[mt] = H5P_DEFAULT;
+ memb_map[mt] = mt;
+ sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
+ memb_name[mt] = sv[mt];
+ memb_addr[mt] = (haddr_t)MAX(mt - 1, 0) * (HADDR_MAX / 10);
+ }
+ }
+ else {
+ error_msg("Bad multi_letters list\n");
+ return FAIL;
}
if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, FALSE) < 0)
@@ -1754,7 +1767,7 @@ h5_fileaccess(void)
return fapl;
}
-
+
/*-------------------------------------------------------------------------
* Function: init_prefix
*
@@ -1769,11 +1782,13 @@ h5_fileaccess(void)
static void
init_prefix(char **prfx, size_t prfx_len)
{
- HDassert(prfx_len > 0);
- *prfx = (char *)HDcalloc(prfx_len, 1);
+ if(prfx_len > 0)
+ *prfx = (char *)HDcalloc(prfx_len, 1);
+ else
+ error_msg("unable to allocate prefix buffer\n");
}
-
+
/*-------------------------------------------------------------------------
* Function: add_prefix
*