mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
[svn-r8251] Purpose:
bug fix Description: the fletcher filter used a temporary 2 byte word buffer to compute the checksum. this is non portable between big-endian/little endian. Solution: replaced with a buffer of 1 byte type Platforms tested: linux solaris solaris 64 bit AIX windows Misc. update:
This commit is contained in:
parent
c131cf3125
commit
5ca8720063
@ -109,6 +109,8 @@ Bug Fixes since HDF5-1.6.0 release
|
||||
|
||||
Library
|
||||
-------
|
||||
- Fixed problem with fletcher32 filter when converting data of different
|
||||
endianess. PVN 2004/03/10
|
||||
- Fixed problem with H5Tget_native_type() not handling opaque fields
|
||||
correctly. QAK - 2004/01/31
|
||||
- Fixed several errors in B-tree deletion code which could cause a
|
||||
|
@ -63,20 +63,18 @@ const H5Z_class_t H5Z_FLETCHER32[1] = {{
|
||||
* Programmer: Raymond Lu
|
||||
* Jan 3, 2003
|
||||
*
|
||||
* Modifications:
|
||||
* Modifications: Pedro Vicente, March 10, 2004
|
||||
* defined *SRC as unsigned char for all cases
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static uint32_t
|
||||
H5Z_filter_fletcher32_compute(void *_src, size_t len)
|
||||
{
|
||||
#if H5_SIZEOF_UINT16_T==2
|
||||
uint16_t *src=(uint16_t *)_src;
|
||||
#else /* H5_SIZEOF_UINT16_T */
|
||||
/*To handle unusual platforms like Cray*/
|
||||
unsigned char *src=(unsigned char *)_src;
|
||||
/*To handle unusual platforms like Cray*/
|
||||
unsigned short tmp_src;
|
||||
#endif /* H5_SIZEOF_UINT16_T */
|
||||
size_t count = len; /* Number of bytes left to checksum */
|
||||
uint32_t s1 = 0, s2 = 0; /* Temporary partial checksums */
|
||||
|
||||
@ -84,15 +82,12 @@ H5Z_filter_fletcher32_compute(void *_src, size_t len)
|
||||
|
||||
/* Compute checksum */
|
||||
while(count > 1) {
|
||||
#if H5_SIZEOF_UINT16_T==2
|
||||
/*For normal platforms*/
|
||||
s1 += *src++;
|
||||
#else /* H5_SIZEOF_UINT16_T */
|
||||
|
||||
/*To handle unusual platforms like Cray*/
|
||||
tmp_src = (((unsigned short)src[0])<<8) | ((unsigned short)src[1]);
|
||||
src +=2;
|
||||
s1 += tmp_src;
|
||||
#endif /* H5_SIZEOF_UINT16_T */
|
||||
|
||||
if(s1 & 0xFFFF0000) { /*Wrap around carry if occurred*/
|
||||
s1 &= 0xFFFF;
|
||||
s1++;
|
||||
@ -121,6 +116,7 @@ H5Z_filter_fletcher32_compute(void *_src, size_t len)
|
||||
FUNC_LEAVE_NOAPI((s2 << 16) + s1)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Z_filter_fletcher32
|
||||
|
Loading…
Reference in New Issue
Block a user