summaryrefslogtreecommitdiffstats
path: root/tools/h5dump/h5dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5dump/h5dump.c')
-rw-r--r--tools/h5dump/h5dump.c58
1 files changed, 44 insertions, 14 deletions
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c
index 06aaae0..6a617c7 100644
--- a/tools/h5dump/h5dump.c
+++ b/tools/h5dump/h5dump.c
@@ -655,6 +655,7 @@ print_datatype(hid_t type,unsigned in_group)
H5T_str_t str_pad;
H5T_cset_t cset;
H5G_stat_t statbuf;
+ H5T_order_t order;
hid_t super;
hid_t tmp_type;
htri_t is_vlstr=FALSE;
@@ -808,26 +809,55 @@ print_datatype(hid_t type,unsigned in_group)
indentation(indent + COL);
printf("%s ", CTYPE);
+ /* Check C variable-length string first. Are the two types equal? */
if (H5Tequal(tmp_type, str_type)) {
printf("H5T_C_S1;\n");
- H5Tclose(str_type);
- } else {
- H5Tclose(str_type);
- str_type = H5Tcopy(H5T_FORTRAN_S1);
- H5Tset_cset(str_type, cset);
- H5Tset_size(str_type, size);
- H5Tset_strpad(str_type, str_pad);
+ goto done;
+ }
- if (H5Tequal(tmp_type, str_type)) {
- printf("H5T_FORTRAN_S1;\n");
- } else {
- printf("unknown_one_character_type;\n ");
- d_status = EXIT_FAILURE;
- }
+ /* Change the endianness and see if they're equal. */
+ order = H5Tget_order(tmp_type);
+ if(order==H5T_ORDER_LE)
+ H5Tset_order(str_type, H5T_ORDER_LE);
+ else if(order==H5T_ORDER_BE)
+ H5Tset_order(str_type, H5T_ORDER_BE);
- H5Tclose(str_type);
+ if (H5Tequal(tmp_type, str_type)) {
+ printf("H5T_C_S1;\n");
+ goto done;
+ }
+
+ /* If not equal to C variable-length string, check Fortran type. */
+ H5Tclose(str_type);
+ str_type = H5Tcopy(H5T_FORTRAN_S1);
+ H5Tset_cset(str_type, cset);
+ H5Tset_size(str_type, size);
+ H5Tset_strpad(str_type, str_pad);
+
+ /* Are the two types equal? */
+ if (H5Tequal(tmp_type, str_type)) {
+ printf("H5T_FORTRAN_S1;\n");
+ goto done;
+ }
+
+ /* Change the endianness and see if they're equal. */
+ order = H5Tget_order(tmp_type);
+ if(order==H5T_ORDER_LE)
+ H5Tset_order(str_type, H5T_ORDER_LE);
+ else if(order==H5T_ORDER_BE)
+ H5Tset_order(str_type, H5T_ORDER_BE);
+
+ if (H5Tequal(tmp_type, str_type)) {
+ printf("H5T_FORTRAN_S1;\n");
+ goto done;
}
+ /* Type doesn't match any of above. */
+ printf("unknown_one_character_type;\n ");
+ d_status = EXIT_FAILURE;
+
+done:
+ H5Tclose(str_type);
H5Tclose(tmp_type);
indent -= COL;