mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r10070] Purpose: Bug fix
Description: On some Cray, the size of "short" is 8 byte but only the low-order 4 byte are over used(precision is 4 byte). The "perm" in struct "detect_t" contains "-1" for bytes that aren't used, making detection of order invalid in function print_results(). Solution: Use a "for" loop to search through "perm" find the first non "-1" element, and use it to decide the byte order of the machine. Platforms tested: fuss - already tested for v1.6
This commit is contained in:
parent
7fb30f4faa
commit
d2e629a6c0
@ -536,19 +536,19 @@ H5TN_init_interface(void)\n\
|
||||
\n\
|
||||
FUNC_ENTER_NOAPI(H5TN_init_interface, FAIL);\n");
|
||||
|
||||
/* The native endianess of this machine */
|
||||
/* (Use the byte-order of a reasonably large type) */
|
||||
for (i = 0; i < nd; i++)
|
||||
if(d[i].size>1) {
|
||||
byte_order=d[i].perm[0];
|
||||
break;
|
||||
} /* end if */
|
||||
printf("\n\
|
||||
/* Set the native order for this machine */\n\
|
||||
H5T_native_order_g = H5T_ORDER_%s;\n",
|
||||
byte_order ? "BE" : "LE"); /*byte order */
|
||||
|
||||
for (i = 0; i < nd; i++) {
|
||||
/* The native endianess of this machine */
|
||||
/* The INFO.perm now contains `-1' for bytes that aren't used and
|
||||
* are always zero. This happens on the Cray for `short' where
|
||||
* sizeof(short) is 8, but only the low-order 4 bytes are ever used.
|
||||
*/
|
||||
for(j=0; j<32; j++) {
|
||||
/*Find the 1st containing valid data*/
|
||||
if(d[i].perm[j]>-1) {
|
||||
byte_order=d[i].perm[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Print a comment to describe this section of definitions. */
|
||||
printf("\n /*\n");
|
||||
@ -575,10 +575,10 @@ H5TN_init_interface(void)\n\
|
||||
dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;\n",
|
||||
d[i].msize ? "FLOAT" : "INTEGER",/*class */
|
||||
d[i].size, /*size */
|
||||
d[i].perm[0] ? "BE" : "LE", /*byte order */
|
||||
byte_order ? "BE" : "LE", /*byte order */
|
||||
d[i].offset, /*offset */
|
||||
d[i].precision); /*precision */
|
||||
assert(d[i].size<2 || (d[i].perm[0]>0)==(byte_order>0)); /* Double-check that byte-order doesn't change */
|
||||
assert((d[i].perm[0]>0)==(byte_order>0)); /* Double-check that byte-order doesn't change */
|
||||
|
||||
if (0 == d[i].msize) {
|
||||
/* The part unique to fixed point types */
|
||||
@ -623,6 +623,11 @@ H5TN_init_interface(void)\n\
|
||||
}
|
||||
}
|
||||
|
||||
printf("\n\
|
||||
/* Set the native order for this machine */\n\
|
||||
H5T_native_order_g = H5T_ORDER_%s;\n",
|
||||
byte_order ? "BE" : "LE"); /*byte order */
|
||||
|
||||
/* Structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */
|
||||
printf("\n /* Structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */\n");
|
||||
for(j=0; j<na; j++)
|
||||
|
Loading…
Reference in New Issue
Block a user