zutil.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
- /* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-1998 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
- /* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
- /* @(#) $Id: zutil.h,v 1.1 2000/01/01 03:32:23 davem Exp $ */
- #ifndef _Z_UTIL_H
- #define _Z_UTIL_H
- #include <linux/zlib.h>
- #include <linux/string.h>
- #include <linux/errno.h>
- #include <linux/kernel.h>
- #ifndef local
- # define local static
- #endif
- /* compile with -Dlocal if your debugger can't find static symbols */
- typedef unsigned char uch;
- typedef uch FAR uchf;
- typedef unsigned short ush;
- typedef ush FAR ushf;
- typedef unsigned long ulg;
- /* common constants */
- #ifndef DEF_WBITS
- # define DEF_WBITS MAX_WBITS
- #endif
- /* default windowBits for decompression. MAX_WBITS is for compression only */
- #if MAX_MEM_LEVEL >= 8
- # define DEF_MEM_LEVEL 8
- #else
- # define DEF_MEM_LEVEL MAX_MEM_LEVEL
- #endif
- /* default memLevel */
- #define STORED_BLOCK 0
- #define STATIC_TREES 1
- #define DYN_TREES 2
- /* The three kinds of block type */
- #define MIN_MATCH 3
- #define MAX_MATCH 258
- /* The minimum and maximum match lengths */
- #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
- /* target dependencies */
- /* Common defaults */
- #ifndef OS_CODE
- # define OS_CODE 0x03 /* assume Unix */
- #endif
- /* functions */
- typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf,
- uInt len));
- /* checksum functions */
- #define BASE 65521L /* largest prime smaller than 65536 */
- #define NMAX 5552
- /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
- #define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
- #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
- #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
- #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
- #define DO16(buf) DO8(buf,0); DO8(buf,8);
- /* ========================================================================= */
- /*
- Update a running Adler-32 checksum with the bytes buf[0..len-1] and
- return the updated checksum. If buf is NULL, this function returns
- the required initial value for the checksum.
- An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
- much faster. Usage example:
- uLong adler = adler32(0L, Z_NULL, 0);
- while (read_buffer(buffer, length) != EOF) {
- adler = adler32(adler, buffer, length);
- }
- if (adler != original_adler) error();
- */
- static inline uLong zlib_adler32(uLong adler,
- const Bytef *buf,
- uInt len)
- {
- unsigned long s1 = adler & 0xffff;
- unsigned long s2 = (adler >> 16) & 0xffff;
- int k;
- if (buf == Z_NULL) return 1L;
- while (len > 0) {
- k = len < NMAX ? len : NMAX;
- len -= k;
- while (k >= 16) {
- DO16(buf);
- buf += 16;
- k -= 16;
- }
- if (k != 0) do {
- s1 += *buf++;
- s2 += s1;
- } while (--k);
- s1 %= BASE;
- s2 %= BASE;
- }
- return (s2 << 16) | s1;
- }
- #endif /* _Z_UTIL_H */