~ubuntu-branches/ubuntu/karmic/gnupg2/karmic-updates

« back to all changes in this revision

Viewing changes to zlib/adler32.c

  • Committer: Bazaar Package Importer
  • Author(s): Thomas Viehmann
  • Date: 2008-10-04 10:25:53 UTC
  • mfrom: (5.1.15 intrepid)
  • Revision ID: james.westby@ubuntu.com-20081004102553-fv62pp8dsitxli47
Tags: 2.0.9-3.1
* Non-maintainer upload.
* agent/gpg-agent.c: Deinit the threading library before exec'ing
  the command to run in --daemon mode. And because that still doesn't
  restore the sigprocmask, do that manually. Closes: #499569

Show diffs side-by-side

added added

removed removed

Lines of Context:
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$ */
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
 
/* ========================================================================= */
21
 
uLong 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
 
}