summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2005-02-07 17:56:20 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2005-02-07 17:56:20 (GMT)
commit3ca585e46cf4dd53be7eaded5484a9ff496d2312 (patch)
treea7fb446a8a05288107ac20a01972928a97d2a4a8 /tools
parentb9d5eb15435f6480fda9d60f34a1faa5c01edbf1 (diff)
downloadhdf5-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.c58
-rw-r--r--tools/h5repack/testh5repack_dset.c2
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;