source: branches/libc-0.6/src/gcc/zlib/adler32.c

Last change on this file was 1477, checked in by bird, 21 years ago

This commit was generated by cvs2svn to compensate for changes in r1476,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.3
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 1.3 KB
Line 
1/* adler32.c -- compute the Adler-32 checksum of a data stream
2 * Copyright (C) 1995-2002 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6/* @(#) $Id: adler32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */
7
8#include "zlib.h"
9
10#define BASE 65521L /* largest prime smaller than 65536 */
11#define NMAX 5552
12/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
13
14#define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
15#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
16#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
17#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
18#define DO16(buf) DO8(buf,0); DO8(buf,8);
19
20/* ========================================================================= */
21uLong ZEXPORT adler32(adler, buf, len)
22 uLong adler;
23 const Bytef *buf;
24 uInt len;
25{
26 unsigned long s1 = adler & 0xffff;
27 unsigned long s2 = (adler >> 16) & 0xffff;
28 int k;
29
30 if (buf == Z_NULL) return 1L;
31
32 while (len > 0) {
33 k = len < NMAX ? len : NMAX;
34 len -= k;
35 while (k >= 16) {
36 DO16(buf);
37 buf += 16;
38 k -= 16;
39 }
40 if (k != 0) do {
41 s1 += *buf++;
42 s2 += s1;
43 } while (--k);
44 s1 %= BASE;
45 s2 %= BASE;
46 }
47 return (s2 << 16) | s1;
48}
Note: See TracBrowser for help on using the repository browser.