MCPcopy Create free account
hub / github.com/RsyncProject/rsync / get_checksum1

Function get_checksum1

checksum.c:285–300  ·  view source on GitHub ↗

See simd-checksum-*.cpp. */ a simple 32 bit checksum that can be updated from either end (inspired by Mark Adler's Adler-32 checksum) */

Source from the content-addressed store, hash-verified

283 (inspired by Mark Adler's Adler-32 checksum)
284 */
285uint32 get_checksum1(char *buf1, int32 len)
286{
287 int32 i;
288 uint32 s1, s2;
289 schar *buf = (schar *)buf1;
290
291 s1 = s2 = 0;
292 for (i = 0; i < (len-4); i+=4) {
293 s2 += 4*(s1 + buf[i]) + 3*buf[i+1] + 2*buf[i+2] + buf[i+3] + 10*CHAR_OFFSET;
294 s1 += (buf[i+0] + buf[i+1] + buf[i+2] + buf[i+3] + 4*CHAR_OFFSET);
295 }
296 for (; i < len; i++) {
297 s1 += (buf[i]+CHAR_OFFSET); s2 += s1;
298 }
299 return (s1 & 0xffff) + (s2 << 16);
300}
301#endif
302
303/* The "sum" buffer must be at least MAX_DIGEST_LEN bytes! */

Callers 2

hash_searchFunction · 0.70
generate_and_send_sumsFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected