zutil.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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