"Fossies" - the Fresh Open Source Software Archive 
Member "zsync-0.6.2/zlib/inflate.h" (16 Sep 2010, 5861 Bytes) of package /linux/privat/old/zsync-0.6.2.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "inflate.h" see the
Fossies "Dox" file reference documentation.
1 /* inflate.h -- internal inflate state definition
2 * Copyright (C) 1995-2003 Mark Adler
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 /* define NO_GZIP when compiling if you want to disable gzip header and
12 trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
13 the crc code when it is not needed. For shared libraries, gzip decoding
14 should be left enabled. */
15 #ifndef NO_GZIP
16 # define GUNZIP
17 #endif
18
19 /* Possible inflate modes between inflate() calls */
20 typedef enum {
21 HEAD, /* i: waiting for magic header */
22 #ifdef GUNZIP
23 FLAGS, /* i: waiting for method and flags (gzip) */
24 TIME, /* i: waiting for modification time (gzip) */
25 OS, /* i: waiting for extra flags and operating system (gzip) */
26 EXLEN, /* i: waiting for extra length (gzip) */
27 EXTRA, /* i: waiting for extra bytes (gzip) */
28 NAME, /* i: waiting for end of file name (gzip) */
29 COMMENT, /* i: waiting for end of comment (gzip) */
30 HCRC, /* i: waiting for header crc (gzip) */
31 #endif
32 DICTID, /* i: waiting for dictionary check value */
33 DICT, /* waiting for inflateSetDictionary() call */
34 TYPE, /* i: waiting for type bits, including last-flag bit */
35 TYPEDO, /* i: same, but skip check to exit inflate on new block */
36 STORED, /* i: waiting for stored size (length and complement) */
37 COPY, /* i/o: waiting for input or output to copy stored block */
38 TABLE, /* i: waiting for dynamic block table lengths */
39 LENLENS, /* i: waiting for code length code lengths */
40 CODELENS, /* i: waiting for length/lit and distance code lengths */
41 LEN, /* i: waiting for length/lit code */
42 LENDO, /* i: same, but skip exit check */
43 LENEXT, /* i: waiting for length extra bits */
44 DIST, /* i: waiting for distance code */
45 DISTEXT, /* i: waiting for distance extra bits */
46 MATCH, /* o: waiting for output space to copy string */
47 LIT, /* o: waiting for output space to write literal */
48 CHECK, /* i: waiting for 32-bit check value */
49 #ifdef GUNZIP
50 LENGTH, /* i: waiting for 32-bit length (gzip) */
51 #endif
52 DONE, /* finished check, done -- remain here until reset */
53 BAD, /* got a data error -- remain here until reset */
54 MEM, /* got an inflate() memory error -- remain here until reset */
55 SYNC /* looking for synchronization bytes to restart inflate() */
56 } inflate_mode;
57
58 /*
59 State transitions between above modes -
60
61 (most modes can go to the BAD or MEM mode -- not shown for clarity)
62
63 Process header:
64 HEAD -> (gzip) or (zlib)
65 (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME
66 NAME -> COMMENT -> HCRC -> TYPE
67 (zlib) -> DICTID or TYPE
68 DICTID -> DICT -> TYPE
69 Read deflate blocks:
70 TYPE -> STORED or TABLE or LEN or CHECK
71 STORED -> COPY -> TYPE
72 TABLE -> LENLENS -> CODELENS -> LEN
73 Read deflate codes:
74 LEN -> LENEXT or LIT or TYPE
75 LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
76 LIT -> LEN
77 Process trailer:
78 CHECK -> LENGTH -> DONE
79 */
80
81 /* state maintained between inflate() calls. Approximately 7K bytes. */
82 struct inflate_state {
83 inflate_mode mode; /* current inflate mode */
84 int last; /* true if processing last block */
85 int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
86 int havedict; /* true if dictionary provided */
87 int flags; /* gzip header method and flags (0 if zlib) */
88 unsigned long check; /* protected copy of check value */
89 unsigned long total; /* protected copy of output count */
90 /* sliding window */
91 unsigned wbits; /* log base 2 of requested window size */
92 unsigned wsize; /* window size or zero if not using window */
93 unsigned whave; /* valid bytes in the window */
94 unsigned write; /* window write index */
95 unsigned char FAR *window; /* allocated sliding window, if needed */
96 /* bit accumulator */
97 unsigned long hold; /* input bit accumulator */
98 unsigned bits; /* number of bits in "in" */
99 /* for string and stored block copying */
100 unsigned length; /* literal or length of data to copy */
101 unsigned offset; /* distance back to copy string from */
102 /* for table and code decoding */
103 unsigned extra; /* extra bits needed */
104 /* fixed and dynamic code tables */
105 code const FAR *lencode; /* starting table for length/literal codes */
106 code const FAR *distcode; /* starting table for distance codes */
107 unsigned lenbits; /* index bits for lencode */
108 unsigned distbits; /* index bits for distcode */
109 /* dynamic table building */
110 unsigned ncode; /* number of code length code lengths */
111 unsigned nlen; /* number of length code lengths */
112 unsigned ndist; /* number of distance code lengths */
113 unsigned have; /* number of code lengths in lens[] */
114 code FAR *next; /* next available space in codes[] */
115 unsigned short lens[320]; /* temporary storage for code lengths */
116 unsigned short work[288]; /* work area for code table building */
117 code codes[ENOUGH]; /* space for code tables */
118 };