diff options
author | Raymond Lu <songyulu@hdfgroup.org> | 2005-02-07 17:56:20 (GMT) |
---|---|---|
committer | Raymond Lu <songyulu@hdfgroup.org> | 2005-02-07 17:56:20 (GMT) |
commit | 3ca585e46cf4dd53be7eaded5484a9ff496d2312 (patch) | |
tree | a7fb446a8a05288107ac20a01972928a97d2a4a8 /tools | |
parent | b9d5eb15435f6480fda9d60f34a1faa5c01edbf1 (diff) | |
download | hdf5-3ca585e46cf4dd53be7eaded5484a9ff496d2312.zip hdf5-3ca585e46cf4dd53be7eaded5484a9ff496d2312.tar.gz hdf5-3ca585e46cf4dd53be7eaded5484a9ff496d2312.tar.bz2 |
[svn-r9951] Purpose: Minor bug fix.
Description: The byte order for all 1-byte integer types was fixed as little-endian
even on a big-endian machine. This's corrected in h5detect.c. When types are only
1 byte long, a native int is used substitute the type to detect byte order. Some tools
like h5dump and h5repack are also corrected in this case.
Platforms tested: fuss, copper, sol.(There're some failures from the recent configure
change).
Misc. update: Information in the RELEASE.txt.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/h5dump/h5dump.c | 58 | ||||
-rw-r--r-- | tools/h5repack/testh5repack_dset.c | 2 |
2 files changed, 45 insertions, 15 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; diff --git a/tools/h5repack/testh5repack_dset.c b/tools/h5repack/testh5repack_dset.c index 299c044..8781ae7 100644 --- a/tools/h5repack/testh5repack_dset.c +++ b/tools/h5repack/testh5repack_dset.c @@ -655,7 +655,7 @@ static void make_dset_reg_ref(hid_t loc_id) sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL); /* Create a dataset */ - dset2=H5Dcreate(loc_id,"dsetreg",H5T_STD_U8LE,sid2,H5P_DEFAULT); + dset2=H5Dcreate(loc_id,"dsetreg",H5T_NATIVE_UCHAR,sid2,H5P_DEFAULT); for(i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++) dwbuf[i]=i*3; |