summaryrefslogtreecommitdiff
path: root/inflate_8h_source.html
blob: d17954c35cef675911686b9fee07e61c7b63763d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>navit: support/zlib/inflate.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">navit
   &#160;<span id="projectnumber">0.5.1-trunk</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('inflate_8h_source.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">inflate.h</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/* inflate.h -- internal inflate state definition</span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright (C) 1995-2004 Mark Adler</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * For conditions of distribution and use, see copyright notice in zlib.h</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">/* WARNING: this file should *not* be used by applications. It is</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">   part of the implementation of the compression library and is</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">   subject to change. Applications should only use zlib.h.</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">/* define NO_GZIP when compiling if you want to disable gzip header and</span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">   trailer decoding by inflate().  NO_GZIP would be used to avoid linking in</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">   the crc code when it is not needed.  For shared libraries, gzip decoding</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">   should be left enabled. */</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef NO_GZIP</span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#  define GUNZIP</span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">/* Possible inflate modes between inflate() calls */</span></div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    HEAD,       <span class="comment">/* i: waiting for magic header */</span></div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    FLAGS,      <span class="comment">/* i: waiting for method and flags (gzip) */</span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    TIME,       <span class="comment">/* i: waiting for modification time (gzip) */</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    OS,         <span class="comment">/* i: waiting for extra flags and operating system (gzip) */</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    EXLEN,      <span class="comment">/* i: waiting for extra length (gzip) */</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    EXTRA,      <span class="comment">/* i: waiting for extra bytes (gzip) */</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    NAME,       <span class="comment">/* i: waiting for end of file name (gzip) */</span></div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    COMMENT,    <span class="comment">/* i: waiting for end of comment (gzip) */</span></div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    HCRC,       <span class="comment">/* i: waiting for header crc (gzip) */</span></div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    DICTID,     <span class="comment">/* i: waiting for dictionary check value */</span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    DICT,       <span class="comment">/* waiting for inflateSetDictionary() call */</span></div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;        TYPE,       <span class="comment">/* i: waiting for type bits, including last-flag bit */</span></div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;        TYPEDO,     <span class="comment">/* i: same, but skip check to exit inflate on new block */</span></div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;        STORED,     <span class="comment">/* i: waiting for stored size (length and complement) */</span></div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;        COPY,       <span class="comment">/* i/o: waiting for input or output to copy stored block */</span></div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        TABLE,      <span class="comment">/* i: waiting for dynamic block table lengths */</span></div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        LENLENS,    <span class="comment">/* i: waiting for code length code lengths */</span></div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        CODELENS,   <span class="comment">/* i: waiting for length/lit and distance code lengths */</span></div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;            LEN,        <span class="comment">/* i: waiting for length/lit code */</span></div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;            LENEXT,     <span class="comment">/* i: waiting for length extra bits */</span></div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;            DIST,       <span class="comment">/* i: waiting for distance code */</span></div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;            DISTEXT,    <span class="comment">/* i: waiting for distance extra bits */</span></div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;            MATCH,      <span class="comment">/* o: waiting for output space to copy string */</span></div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;            LIT,        <span class="comment">/* o: waiting for output space to write literal */</span></div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    CHECK,      <span class="comment">/* i: waiting for 32-bit check value */</span></div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    LENGTH,     <span class="comment">/* i: waiting for 32-bit length (gzip) */</span></div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    DONE,       <span class="comment">/* finished check, done -- remain here until reset */</span></div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    BAD,        <span class="comment">/* got a data error -- remain here until reset */</span></div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    MEM,        <span class="comment">/* got an inflate() memory error -- remain here until reset */</span></div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    SYNC        <span class="comment">/* looking for synchronization bytes to restart inflate() */</span></div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;} inflate_mode;</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">    State transitions between above modes -</span></div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">    (most modes can go to the BAD or MEM mode -- not shown for clarity)</span></div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">    Process header:</span></div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">        HEAD -&gt; (gzip) or (zlib)</span></div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">        (gzip) -&gt; FLAGS -&gt; TIME -&gt; OS -&gt; EXLEN -&gt; EXTRA -&gt; NAME</span></div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">        NAME -&gt; COMMENT -&gt; HCRC -&gt; TYPE</span></div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">        (zlib) -&gt; DICTID or TYPE</span></div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">        DICTID -&gt; DICT -&gt; TYPE</span></div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">    Read deflate blocks:</span></div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment">            TYPE -&gt; STORED or TABLE or LEN or CHECK</span></div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment">            STORED -&gt; COPY -&gt; TYPE</span></div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">            TABLE -&gt; LENLENS -&gt; CODELENS -&gt; LEN</span></div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">    Read deflate codes:</span></div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">                LEN -&gt; LENEXT or LIT or TYPE</span></div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment">                LENEXT -&gt; DIST -&gt; DISTEXT -&gt; MATCH -&gt; LEN</span></div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment">                LIT -&gt; LEN</span></div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">    Process trailer:</span></div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment">        CHECK -&gt; LENGTH -&gt; DONE</span></div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment">/* state maintained between inflate() calls.  Approximately 7K bytes. */</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structinflate__state.html">   77</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structinflate__state.html">inflate_state</a> {</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    inflate_mode mode;          <span class="comment">/* current inflate mode */</span></div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keywordtype">int</span> last;                   <span class="comment">/* true if processing last block */</span></div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keywordtype">int</span> wrap;                   <span class="comment">/* bit 0 true for zlib, bit 1 true for gzip */</span></div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordtype">int</span> havedict;               <span class="comment">/* true if dictionary provided */</span></div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <span class="keywordtype">int</span> flags;                  <span class="comment">/* gzip header method and flags (0 if zlib) */</span></div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordtype">unsigned</span> dmax;              <span class="comment">/* zlib header max distance (INFLATE_STRICT) */</span></div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> check;        <span class="comment">/* protected copy of check value */</span></div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> total;        <span class="comment">/* protected copy of output count */</span></div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    gz_headerp head;            <span class="comment">/* where to save gzip header information */</span></div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="comment">/* sliding window */</span></div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="keywordtype">unsigned</span> wbits;             <span class="comment">/* log base 2 of requested window size */</span></div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keywordtype">unsigned</span> wsize;             <span class="comment">/* window size or zero if not using window */</span></div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordtype">unsigned</span> whave;             <span class="comment">/* valid bytes in the window */</span></div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordtype">unsigned</span> write;             <span class="comment">/* window write index */</span></div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> FAR *<a class="code" href="structwindow.html">window</a>;  <span class="comment">/* allocated sliding window, if needed */</span></div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        <span class="comment">/* bit accumulator */</span></div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> hold;         <span class="comment">/* input bit accumulator */</span></div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keywordtype">unsigned</span> bits;              <span class="comment">/* number of bits in &quot;in&quot; */</span></div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        <span class="comment">/* for string and stored block copying */</span></div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordtype">unsigned</span> length;            <span class="comment">/* literal or length of data to copy */</span></div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keywordtype">unsigned</span> offset;            <span class="comment">/* distance back to copy string from */</span></div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        <span class="comment">/* for table and code decoding */</span></div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordtype">unsigned</span> extra;             <span class="comment">/* extra bits needed */</span></div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        <span class="comment">/* fixed and dynamic code tables */</span></div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <a class="code" href="structcode.html">code</a> <span class="keyword">const</span> FAR *lencode;    <span class="comment">/* starting table for length/literal codes */</span></div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <a class="code" href="structcode.html">code</a> <span class="keyword">const</span> FAR *distcode;   <span class="comment">/* starting table for distance codes */</span></div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="keywordtype">unsigned</span> lenbits;           <span class="comment">/* index bits for lencode */</span></div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordtype">unsigned</span> distbits;          <span class="comment">/* index bits for distcode */</span></div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <span class="comment">/* dynamic table building */</span></div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keywordtype">unsigned</span> ncode;             <span class="comment">/* number of code length code lengths */</span></div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keywordtype">unsigned</span> nlen;              <span class="comment">/* number of length code lengths */</span></div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="keywordtype">unsigned</span> ndist;             <span class="comment">/* number of distance code lengths */</span></div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordtype">unsigned</span> have;              <span class="comment">/* number of code lengths in lens[] */</span></div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <a class="code" href="structcode.html">code</a> FAR *next;             <span class="comment">/* next available space in codes[] */</span></div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> lens[320];   <span class="comment">/* temporary storage for code lengths */</span></div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> work[288];   <span class="comment">/* work area for code table building */</span></div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <a class="code" href="structcode.html">code</a> codes[ENOUGH];         <span class="comment">/* space for code tables */</span></div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;};</div>
<div class="ttc" id="structinflate__state_html"><div class="ttname"><a href="structinflate__state.html">inflate_state</a></div><div class="ttdef"><b>Definition:</b> inflate.h:77</div></div>
<div class="ttc" id="structcode_html"><div class="ttname"><a href="structcode.html">code</a></div><div class="ttdef"><b>Definition:</b> inftrees.h:24</div></div>
<div class="ttc" id="structwindow_html"><div class="ttname"><a href="structwindow.html">window</a></div><div class="ttdef"><b>Definition:</b> window.h:23</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_5815af820a9cc9481f1d0990a0d60286.html">support</a></li><li class="navelem"><a class="el" href="dir_12305126b3bea02e6a26c9511d9cc1d7.html">zlib</a></li><li class="navelem"><b>inflate.h</b></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
  </ul>
</div>
</body>
</html>