| 1 |
/* zutil.h -- internal interface and configuration of the compression library |
|---|
| 2 |
* Copyright (C) 1995-1998 Jean-loup Gailly. |
|---|
| 3 |
* For conditions of distribution and use, see copyright notice in zlib.h |
|---|
| 4 |
*/ |
|---|
| 5 |
|
|---|
| 6 |
/* WARNING: this file should *not* be used by applications. It is |
|---|
| 7 |
part of the implementation of the compression library and is |
|---|
| 8 |
subject to change. Applications should only use zlib.h. |
|---|
| 9 |
*/ |
|---|
| 10 |
|
|---|
| 11 |
/* @(#) $Id: zutil.h,v 1.1 2000/01/01 03:32:23 davem Exp $ */ |
|---|
| 12 |
|
|---|
| 13 |
#ifndef _Z_UTIL_H |
|---|
| 14 |
#define _Z_UTIL_H |
|---|
| 15 |
|
|---|
| 16 |
#include "zlib.h" |
|---|
| 17 |
|
|---|
| 18 |
typedef unsigned char uch; |
|---|
| 19 |
typedef unsigned short ush; |
|---|
| 20 |
typedef unsigned long ulg; |
|---|
| 21 |
|
|---|
| 22 |
/* common constants */ |
|---|
| 23 |
|
|---|
| 24 |
#ifndef DEF_WBITS |
|---|
| 25 |
# define DEF_WBITS MAX_WBITS |
|---|
| 26 |
#endif |
|---|
| 27 |
/* default windowBits for decompression. MAX_WBITS is for compression only */ |
|---|
| 28 |
|
|---|
| 29 |
#if MAX_MEM_LEVEL >= 8 |
|---|
| 30 |
# define DEF_MEM_LEVEL 8 |
|---|
| 31 |
#else |
|---|
| 32 |
# define DEF_MEM_LEVEL MAX_MEM_LEVEL |
|---|
| 33 |
#endif |
|---|
| 34 |
/* default memLevel */ |
|---|
| 35 |
|
|---|
| 36 |
#define STORED_BLOCK 0 |
|---|
| 37 |
#define STATIC_TREES 1 |
|---|
| 38 |
#define DYN_TREES 2 |
|---|
| 39 |
/* The three kinds of block type */ |
|---|
| 40 |
|
|---|
| 41 |
#define MIN_MATCH 3 |
|---|
| 42 |
#define MAX_MATCH 258 |
|---|
| 43 |
/* The minimum and maximum match lengths */ |
|---|
| 44 |
|
|---|
| 45 |
#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ |
|---|
| 46 |
|
|---|
| 47 |
/* target dependencies */ |
|---|
| 48 |
|
|---|
| 49 |
/* Common defaults */ |
|---|
| 50 |
|
|---|
| 51 |
#ifndef OS_CODE |
|---|
| 52 |
# define OS_CODE 0x03 /* assume Unix */ |
|---|
| 53 |
#endif |
|---|
| 54 |
|
|---|
| 55 |
/* functions */ |
|---|
| 56 |
|
|---|
| 57 |
typedef uLong (*check_func) (uLong check, const Byte *buf, |
|---|
| 58 |
uInt len); |
|---|
| 59 |
|
|---|
| 60 |
|
|---|
| 61 |
/* checksum functions */ |
|---|
| 62 |
|
|---|
| 63 |
#define BASE 65521L /* largest prime smaller than 65536 */ |
|---|
| 64 |
#define NMAX 5552 |
|---|
| 65 |
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ |
|---|
| 66 |
|
|---|
| 67 |
#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} |
|---|
| 68 |
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); |
|---|
| 69 |
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); |
|---|
| 70 |
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); |
|---|
| 71 |
#define DO16(buf) DO8(buf,0); DO8(buf,8); |
|---|
| 72 |
|
|---|
| 73 |
/* ========================================================================= */ |
|---|
| 74 |
/* |
|---|
| 75 |
Update a running Adler-32 checksum with the bytes buf[0..len-1] and |
|---|
| 76 |
return the updated checksum. If buf is NULL, this function returns |
|---|
| 77 |
the required initial value for the checksum. |
|---|
| 78 |
An Adler-32 checksum is almost as reliable as a CRC32 but can be computed |
|---|
| 79 |
much faster. Usage example: |
|---|
| 80 |
|
|---|
| 81 |
uLong adler = adler32(0L, NULL, 0); |
|---|
| 82 |
|
|---|
| 83 |
while (read_buffer(buffer, length) != EOF) { |
|---|
| 84 |
adler = adler32(adler, buffer, length); |
|---|
| 85 |
} |
|---|
| 86 |
if (adler != original_adler) error(); |
|---|
| 87 |
*/ |
|---|
| 88 |
static inline uLong zlib_adler32(uLong adler, |
|---|
| 89 |
const Byte *buf, |
|---|
| 90 |
uInt len) |
|---|
| 91 |
{ |
|---|
| 92 |
unsigned long s1 = adler & 0xffff; |
|---|
| 93 |
unsigned long s2 = (adler >> 16) & 0xffff; |
|---|
| 94 |
int k; |
|---|
| 95 |
|
|---|
| 96 |
if (buf == NULL) return 1L; |
|---|
| 97 |
|
|---|
| 98 |
while (len > 0) { |
|---|
| 99 |
k = len < NMAX ? len : NMAX; |
|---|
| 100 |
len -= k; |
|---|
| 101 |
while (k >= 16) { |
|---|
| 102 |
DO16(buf); |
|---|
| 103 |
buf += 16; |
|---|
| 104 |
k -= 16; |
|---|
| 105 |
} |
|---|
| 106 |
if (k != 0) do { |
|---|
| 107 |
s1 += *buf++; |
|---|
| 108 |
s2 += s1; |
|---|
| 109 |
} while (--k); |
|---|
| 110 |
s1 %= BASE; |
|---|
| 111 |
s2 %= BASE; |
|---|
| 112 |
} |
|---|
| 113 |
return (s2 << 16) | s1; |
|---|
| 114 |
} |
|---|
| 115 |
|
|---|
| 116 |
#endif /* _Z_UTIL_H */ |
|---|