diff options
Diffstat (limited to 'adler32.c')
-rw-r--r-- | adler32.c | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -1,9 +1,9 @@ | |||
1 | /* adler32.c -- compute the Adler-32 checksum of a data stream | 1 | /* adler32.c -- compute the Adler-32 checksum of a data stream |
2 | * Copyright (C) 1995 Mark Adler | 2 | * Copyright (C) 1995-1996 Mark Adler |
3 | * For conditions of distribution and use, see copyright notice in zlib.h | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
4 | */ | 4 | */ |
5 | 5 | ||
6 | /* $Id: adler32.c,v 1.6 1995/05/03 17:27:08 jloup Exp $ */ | 6 | /* $Id: adler32.c,v 1.9 1996/01/30 21:59:09 me Exp $ */ |
7 | 7 | ||
8 | #include "zlib.h" | 8 | #include "zlib.h" |
9 | 9 | ||
@@ -11,16 +11,16 @@ | |||
11 | #define NMAX 5552 | 11 | #define NMAX 5552 |
12 | /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ | 12 | /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ |
13 | 13 | ||
14 | #define DO1(buf) {s1 += *buf++; s2 += s1;} | 14 | #define DO1(buf,i) {s1 += buf[i]; s2 += s1;} |
15 | #define DO2(buf) DO1(buf); DO1(buf); | 15 | #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); |
16 | #define DO4(buf) DO2(buf); DO2(buf); | 16 | #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); |
17 | #define DO8(buf) DO4(buf); DO4(buf); | 17 | #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); |
18 | #define DO16(buf) DO8(buf); DO8(buf); | 18 | #define DO16(buf) DO8(buf,0); DO8(buf,8); |
19 | 19 | ||
20 | /* ========================================================================= */ | 20 | /* ========================================================================= */ |
21 | uLong adler32(adler, buf, len) | 21 | uLong adler32(adler, buf, len) |
22 | uLong adler; | 22 | uLong adler; |
23 | Bytef *buf; | 23 | const Bytef *buf; |
24 | uInt len; | 24 | uInt len; |
25 | { | 25 | { |
26 | unsigned long s1 = adler & 0xffff; | 26 | unsigned long s1 = adler & 0xffff; |
@@ -34,10 +34,12 @@ uLong adler32(adler, buf, len) | |||
34 | len -= k; | 34 | len -= k; |
35 | while (k >= 16) { | 35 | while (k >= 16) { |
36 | DO16(buf); | 36 | DO16(buf); |
37 | buf += 16; | ||
37 | k -= 16; | 38 | k -= 16; |
38 | } | 39 | } |
39 | if (k != 0) do { | 40 | if (k != 0) do { |
40 | DO1(buf); | 41 | s1 += *buf++; |
42 | s2 += s1; | ||
41 | } while (--k); | 43 | } while (--k); |
42 | s1 %= BASE; | 44 | s1 %= BASE; |
43 | s2 %= BASE; | 45 | s2 %= BASE; |