34
34
#include " Common/XferDeepCRC.h"
35
35
#include " Common/crc.h"
36
36
#include " Common/Snapshot.h"
37
- #include " winsock2 .h" // for htonl
37
+ #include " utility/endian_compat .h"
38
38
39
39
// -------------------------------------------------------------------------------------------------
40
40
// -------------------------------------------------------------------------------------------------
@@ -97,22 +97,8 @@ void XferCRC::endBlock( void )
97
97
// -------------------------------------------------------------------------------------------------
98
98
void XferCRC::addCRC ( UnsignedInt val )
99
99
{
100
- int hibit;
101
100
102
- val = htonl (val);
103
-
104
- if (m_crc & 0x80000000 )
105
- {
106
- hibit = 1 ;
107
- }
108
- else
109
- {
110
- hibit = 0 ;
111
- }
112
-
113
- m_crc <<= 1 ;
114
- m_crc += val;
115
- m_crc += hibit;
101
+ m_crc = (m_crc << 1 ) + htobe (val) +((m_crc >> 31 ) & 0x01 );
116
102
117
103
} // end addCRC
118
104
@@ -140,30 +126,27 @@ void XferCRC::xferSnapshot( Snapshot *snapshot )
140
126
void XferCRC::xferImplementation ( void *data, Int dataSize )
141
127
{
142
128
143
- if (!data || dataSize < 1 )
144
- {
145
- return ;
146
- }
147
-
148
129
const UnsignedInt *uintPtr = (const UnsignedInt *) (data);
130
+ int validData = (data != NULL ) & (dataSize > 0 );
131
+ int dataBytes = (dataSize / 4 ) * validData;
149
132
150
- for (Int i=0 ; i<dataSize/4 ; i++)
133
+ Int i = 0 ;
134
+ for (i=0 ; i<dataBytes; i++)
151
135
{
152
136
addCRC (*uintPtr++);
153
137
}
154
138
155
139
int leftover = dataSize & 3 ;
156
- if (leftover)
140
+ validData = (data != NULL ) & (leftover > 0 );
141
+
142
+ UnsignedInt val = 0 ;
143
+ const unsigned char *c = (const unsigned char *)uintPtr;
144
+ for (i=0 ; i<leftover; i++)
157
145
{
158
- UnsignedInt val = 0 ;
159
- const unsigned char *c = (const unsigned char *)uintPtr;
160
- for (Int i=0 ; i<leftover; i++)
161
- {
162
- val += (c[i] << (i*8 ));
163
- }
164
- val = htonl (val);
165
- addCRC (val);
146
+ val += (c[i] << (i*8 ));
166
147
}
148
+
149
+ m_crc = (m_crc << (1 *validData)) + (val +((m_crc >> 31 ) & 0x01 )) * validData;
167
150
168
151
} // end xferImplementation
169
152
@@ -179,7 +162,7 @@ void XferCRC::skip( Int dataSize )
179
162
UnsignedInt XferCRC::getCRC ( void )
180
163
{
181
164
182
- return htonl (m_crc);
165
+ return htobe (m_crc);
183
166
184
167
} // end skip
185
168
0 commit comments