Hex Artifact Content

Artifact 400d35465f179a4acacb5fe749e6ce20a0bbdb84:


0000: 2f 2a 20 7a 6c 69 62 2e 68 20 2d 2d 20 69 6e 74  /* zlib.h -- int
0010: 65 72 66 61 63 65 20 6f 66 20 74 68 65 20 27 7a  erface of the 'z
0020: 6c 69 62 27 20 67 65 6e 65 72 61 6c 20 70 75 72  lib' general pur
0030: 70 6f 73 65 20 63 6f 6d 70 72 65 73 73 69 6f 6e  pose compression
0040: 20 6c 69 62 72 61 72 79 0a 20 20 76 65 72 73 69   library.  versi
0050: 6f 6e 20 31 2e 32 2e 38 2c 20 41 70 72 69 6c 20  on 1.2.8, April 
0060: 32 38 74 68 2c 20 32 30 31 33 0a 0a 20 20 43 6f  28th, 2013..  Co
0070: 70 79 72 69 67 68 74 20 28 43 29 20 31 39 39 35  pyright (C) 1995
0080: 2d 32 30 31 33 20 4a 65 61 6e 2d 6c 6f 75 70 20  -2013 Jean-loup 
0090: 47 61 69 6c 6c 79 20 61 6e 64 20 4d 61 72 6b 20  Gailly and Mark 
00a0: 41 64 6c 65 72 0a 0a 20 20 54 68 69 73 20 73 6f  Adler..  This so
00b0: 66 74 77 61 72 65 20 69 73 20 70 72 6f 76 69 64  ftware is provid
00c0: 65 64 20 27 61 73 2d 69 73 27 2c 20 77 69 74 68  ed 'as-is', with
00d0: 6f 75 74 20 61 6e 79 20 65 78 70 72 65 73 73 20  out any express 
00e0: 6f 72 20 69 6d 70 6c 69 65 64 0a 20 20 77 61 72  or implied.  war
00f0: 72 61 6e 74 79 2e 20 20 49 6e 20 6e 6f 20 65 76  ranty.  In no ev
0100: 65 6e 74 20 77 69 6c 6c 20 74 68 65 20 61 75 74  ent will the aut
0110: 68 6f 72 73 20 62 65 20 68 65 6c 64 20 6c 69 61  hors be held lia
0120: 62 6c 65 20 66 6f 72 20 61 6e 79 20 64 61 6d 61  ble for any dama
0130: 67 65 73 0a 20 20 61 72 69 73 69 6e 67 20 66 72  ges.  arising fr
0140: 6f 6d 20 74 68 65 20 75 73 65 20 6f 66 20 74 68  om the use of th
0150: 69 73 20 73 6f 66 74 77 61 72 65 2e 0a 0a 20 20  is software...  
0160: 50 65 72 6d 69 73 73 69 6f 6e 20 69 73 20 67 72  Permission is gr
0170: 61 6e 74 65 64 20 74 6f 20 61 6e 79 6f 6e 65 20  anted to anyone 
0180: 74 6f 20 75 73 65 20 74 68 69 73 20 73 6f 66 74  to use this soft
0190: 77 61 72 65 20 66 6f 72 20 61 6e 79 20 70 75 72  ware for any pur
01a0: 70 6f 73 65 2c 0a 20 20 69 6e 63 6c 75 64 69 6e  pose,.  includin
01b0: 67 20 63 6f 6d 6d 65 72 63 69 61 6c 20 61 70 70  g commercial app
01c0: 6c 69 63 61 74 69 6f 6e 73 2c 20 61 6e 64 20 74  lications, and t
01d0: 6f 20 61 6c 74 65 72 20 69 74 20 61 6e 64 20 72  o alter it and r
01e0: 65 64 69 73 74 72 69 62 75 74 65 20 69 74 0a 20  edistribute it. 
01f0: 20 66 72 65 65 6c 79 2c 20 73 75 62 6a 65 63 74   freely, subject
0200: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
0210: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 0a  g restrictions:.
0220: 0a 20 20 31 2e 20 54 68 65 20 6f 72 69 67 69 6e  .  1. The origin
0230: 20 6f 66 20 74 68 69 73 20 73 6f 66 74 77 61 72   of this softwar
0240: 65 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6d 69  e must not be mi
0250: 73 72 65 70 72 65 73 65 6e 74 65 64 3b 20 79 6f  srepresented; yo
0260: 75 20 6d 75 73 74 20 6e 6f 74 0a 20 20 20 20 20  u must not.     
0270: 63 6c 61 69 6d 20 74 68 61 74 20 79 6f 75 20 77  claim that you w
0280: 72 6f 74 65 20 74 68 65 20 6f 72 69 67 69 6e 61  rote the origina
0290: 6c 20 73 6f 66 74 77 61 72 65 2e 20 49 66 20 79  l software. If y
02a0: 6f 75 20 75 73 65 20 74 68 69 73 20 73 6f 66 74  ou use this soft
02b0: 77 61 72 65 0a 20 20 20 20 20 69 6e 20 61 20 70  ware.     in a p
02c0: 72 6f 64 75 63 74 2c 20 61 6e 20 61 63 6b 6e 6f  roduct, an ackno
02d0: 77 6c 65 64 67 6d 65 6e 74 20 69 6e 20 74 68 65  wledgment in the
02e0: 20 70 72 6f 64 75 63 74 20 64 6f 63 75 6d 65 6e   product documen
02f0: 74 61 74 69 6f 6e 20 77 6f 75 6c 64 20 62 65 0a  tation would be.
0300: 20 20 20 20 20 61 70 70 72 65 63 69 61 74 65 64       appreciated
0310: 20 62 75 74 20 69 73 20 6e 6f 74 20 72 65 71 75   but is not requ
0320: 69 72 65 64 2e 0a 20 20 32 2e 20 41 6c 74 65 72  ired..  2. Alter
0330: 65 64 20 73 6f 75 72 63 65 20 76 65 72 73 69 6f  ed source versio
0340: 6e 73 20 6d 75 73 74 20 62 65 20 70 6c 61 69 6e  ns must be plain
0350: 6c 79 20 6d 61 72 6b 65 64 20 61 73 20 73 75 63  ly marked as suc
0360: 68 2c 20 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20  h, and must not 
0370: 62 65 0a 20 20 20 20 20 6d 69 73 72 65 70 72 65  be.     misrepre
0380: 73 65 6e 74 65 64 20 61 73 20 62 65 69 6e 67 20  sented as being 
0390: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 6f 66  the original sof
03a0: 74 77 61 72 65 2e 0a 20 20 33 2e 20 54 68 69 73  tware..  3. This
03b0: 20 6e 6f 74 69 63 65 20 6d 61 79 20 6e 6f 74 20   notice may not 
03c0: 62 65 20 72 65 6d 6f 76 65 64 20 6f 72 20 61 6c  be removed or al
03d0: 74 65 72 65 64 20 66 72 6f 6d 20 61 6e 79 20 73  tered from any s
03e0: 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69  ource distributi
03f0: 6f 6e 2e 0a 0a 20 20 4a 65 61 6e 2d 6c 6f 75 70  on...  Jean-loup
0400: 20 47 61 69 6c 6c 79 20 20 20 20 20 20 20 20 4d   Gailly        M
0410: 61 72 6b 20 41 64 6c 65 72 0a 20 20 6a 6c 6f 75  ark Adler.  jlou
0420: 70 40 67 7a 69 70 2e 6f 72 67 20 20 20 20 20 20  p@gzip.org      
0430: 20 20 20 20 6d 61 64 6c 65 72 40 61 6c 75 6d 6e      madler@alumn
0440: 69 2e 63 61 6c 74 65 63 68 2e 65 64 75 0a 0a 0a  i.caltech.edu...
0450: 20 20 54 68 65 20 64 61 74 61 20 66 6f 72 6d 61    The data forma
0460: 74 20 75 73 65 64 20 62 79 20 74 68 65 20 7a 6c  t used by the zl
0470: 69 62 20 6c 69 62 72 61 72 79 20 69 73 20 64 65  ib library is de
0480: 73 63 72 69 62 65 64 20 62 79 20 52 46 43 73 20  scribed by RFCs 
0490: 28 52 65 71 75 65 73 74 20 66 6f 72 0a 20 20 43  (Request for.  C
04a0: 6f 6d 6d 65 6e 74 73 29 20 31 39 35 30 20 74 6f  omments) 1950 to
04b0: 20 31 39 35 32 20 69 6e 20 74 68 65 20 66 69 6c   1952 in the fil
04c0: 65 73 20 68 74 74 70 3a 2f 2f 74 6f 6f 6c 73 2e  es http://tools.
04d0: 69 65 74 66 2e 6f 72 67 2f 68 74 6d 6c 2f 72 66  ietf.org/html/rf
04e0: 63 31 39 35 30 0a 20 20 28 7a 6c 69 62 20 66 6f  c1950.  (zlib fo
04f0: 72 6d 61 74 29 2c 20 72 66 63 31 39 35 31 20 28  rmat), rfc1951 (
0500: 64 65 66 6c 61 74 65 20 66 6f 72 6d 61 74 29 20  deflate format) 
0510: 61 6e 64 20 72 66 63 31 39 35 32 20 28 67 7a 69  and rfc1952 (gzi
0520: 70 20 66 6f 72 6d 61 74 29 2e 0a 2a 2f 0a 0a 23  p format)..*/..#
0530: 69 66 6e 64 65 66 20 5a 4c 49 42 5f 48 0a 23 64  ifndef ZLIB_H.#d
0540: 65 66 69 6e 65 20 5a 4c 49 42 5f 48 0a 0a 23 69  efine ZLIB_H..#i
0550: 6e 63 6c 75 64 65 20 22 7a 63 6f 6e 66 2e 68 22  nclude "zconf.h"
0560: 0a 0a 23 69 66 64 65 66 20 5f 5f 63 70 6c 75 73  ..#ifdef __cplus
0570: 70 6c 75 73 0a 65 78 74 65 72 6e 20 22 43 22 20  plus.extern "C" 
0580: 7b 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e  {.#endif..#defin
0590: 65 20 5a 4c 49 42 5f 56 45 52 53 49 4f 4e 20 22  e ZLIB_VERSION "
05a0: 31 2e 32 2e 38 22 0a 23 64 65 66 69 6e 65 20 5a  1.2.8".#define Z
05b0: 4c 49 42 5f 56 45 52 4e 55 4d 20 30 78 31 32 38  LIB_VERNUM 0x128
05c0: 30 0a 23 64 65 66 69 6e 65 20 5a 4c 49 42 5f 56  0.#define ZLIB_V
05d0: 45 52 5f 4d 41 4a 4f 52 20 31 0a 23 64 65 66 69  ER_MAJOR 1.#defi
05e0: 6e 65 20 5a 4c 49 42 5f 56 45 52 5f 4d 49 4e 4f  ne ZLIB_VER_MINO
05f0: 52 20 32 0a 23 64 65 66 69 6e 65 20 5a 4c 49 42  R 2.#define ZLIB
0600: 5f 56 45 52 5f 52 45 56 49 53 49 4f 4e 20 38 0a  _VER_REVISION 8.
0610: 23 64 65 66 69 6e 65 20 5a 4c 49 42 5f 56 45 52  #define ZLIB_VER
0620: 5f 53 55 42 52 45 56 49 53 49 4f 4e 20 30 0a 0a  _SUBREVISION 0..
0630: 2f 2a 0a 20 20 20 20 54 68 65 20 27 7a 6c 69 62  /*.    The 'zlib
0640: 27 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 6c 69  ' compression li
0650: 62 72 61 72 79 20 70 72 6f 76 69 64 65 73 20 69  brary provides i
0660: 6e 2d 6d 65 6d 6f 72 79 20 63 6f 6d 70 72 65 73  n-memory compres
0670: 73 69 6f 6e 20 61 6e 64 0a 20 20 64 65 63 6f 6d  sion and.  decom
0680: 70 72 65 73 73 69 6f 6e 20 66 75 6e 63 74 69 6f  pression functio
0690: 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e  ns, including in
06a0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 6f  tegrity checks o
06b0: 66 20 74 68 65 20 75 6e 63 6f 6d 70 72 65 73 73  f the uncompress
06c0: 65 64 20 64 61 74 61 2e 0a 20 20 54 68 69 73 20  ed data..  This 
06d0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c  version of the l
06e0: 69 62 72 61 72 79 20 73 75 70 70 6f 72 74 73 20  ibrary supports 
06f0: 6f 6e 6c 79 20 6f 6e 65 20 63 6f 6d 70 72 65 73  only one compres
0700: 73 69 6f 6e 20 6d 65 74 68 6f 64 20 28 64 65 66  sion method (def
0710: 6c 61 74 69 6f 6e 29 0a 20 20 62 75 74 20 6f 74  lation).  but ot
0720: 68 65 72 20 61 6c 67 6f 72 69 74 68 6d 73 20 77  her algorithms w
0730: 69 6c 6c 20 62 65 20 61 64 64 65 64 20 6c 61 74  ill be added lat
0740: 65 72 20 61 6e 64 20 77 69 6c 6c 20 68 61 76 65  er and will have
0750: 20 74 68 65 20 73 61 6d 65 20 73 74 72 65 61 6d   the same stream
0760: 0a 20 20 69 6e 74 65 72 66 61 63 65 2e 0a 0a 20  .  interface... 
0770: 20 20 20 43 6f 6d 70 72 65 73 73 69 6f 6e 20 63     Compression c
0780: 61 6e 20 62 65 20 64 6f 6e 65 20 69 6e 20 61 20  an be done in a 
0790: 73 69 6e 67 6c 65 20 73 74 65 70 20 69 66 20 74  single step if t
07a0: 68 65 20 62 75 66 66 65 72 73 20 61 72 65 20 6c  he buffers are l
07b0: 61 72 67 65 20 65 6e 6f 75 67 68 2c 0a 20 20 6f  arge enough,.  o
07c0: 72 20 63 61 6e 20 62 65 20 64 6f 6e 65 20 62 79  r can be done by
07d0: 20 72 65 70 65 61 74 65 64 20 63 61 6c 6c 73 20   repeated calls 
07e0: 6f 66 20 74 68 65 20 63 6f 6d 70 72 65 73 73 69  of the compressi
07f0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49 6e  on function.  In
0800: 20 74 68 65 20 6c 61 74 74 65 72 0a 20 20 63 61   the latter.  ca
0810: 73 65 2c 20 74 68 65 20 61 70 70 6c 69 63 61 74  se, the applicat
0820: 69 6f 6e 20 6d 75 73 74 20 70 72 6f 76 69 64 65  ion must provide
0830: 20 6d 6f 72 65 20 69 6e 70 75 74 20 61 6e 64 2f   more input and/
0840: 6f 72 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 6f  or consume the o
0850: 75 74 70 75 74 0a 20 20 28 70 72 6f 76 69 64 69  utput.  (providi
0860: 6e 67 20 6d 6f 72 65 20 6f 75 74 70 75 74 20 73  ng more output s
0870: 70 61 63 65 29 20 62 65 66 6f 72 65 20 65 61 63  pace) before eac
0880: 68 20 63 61 6c 6c 2e 0a 0a 20 20 20 20 54 68 65  h call...    The
0890: 20 63 6f 6d 70 72 65 73 73 65 64 20 64 61 74 61   compressed data
08a0: 20 66 6f 72 6d 61 74 20 75 73 65 64 20 62 79 20   format used by 
08b0: 64 65 66 61 75 6c 74 20 62 79 20 74 68 65 20 69  default by the i
08c0: 6e 2d 6d 65 6d 6f 72 79 20 66 75 6e 63 74 69 6f  n-memory functio
08d0: 6e 73 20 69 73 0a 20 20 74 68 65 20 7a 6c 69 62  ns is.  the zlib
08e0: 20 66 6f 72 6d 61 74 2c 20 77 68 69 63 68 20 69   format, which i
08f0: 73 20 61 20 7a 6c 69 62 20 77 72 61 70 70 65 72  s a zlib wrapper
0900: 20 64 6f 63 75 6d 65 6e 74 65 64 20 69 6e 20 52   documented in R
0910: 46 43 20 31 39 35 30 2c 20 77 72 61 70 70 65 64  FC 1950, wrapped
0920: 0a 20 20 61 72 6f 75 6e 64 20 61 20 64 65 66 6c  .  around a defl
0930: 61 74 65 20 73 74 72 65 61 6d 2c 20 77 68 69 63  ate stream, whic
0940: 68 20 69 73 20 69 74 73 65 6c 66 20 64 6f 63 75  h is itself docu
0950: 6d 65 6e 74 65 64 20 69 6e 20 52 46 43 20 31 39  mented in RFC 19
0960: 35 31 2e 0a 0a 20 20 20 20 54 68 65 20 6c 69 62  51...    The lib
0970: 72 61 72 79 20 61 6c 73 6f 20 73 75 70 70 6f 72  rary also suppor
0980: 74 73 20 72 65 61 64 69 6e 67 20 61 6e 64 20 77  ts reading and w
0990: 72 69 74 69 6e 67 20 66 69 6c 65 73 20 69 6e 20  riting files in 
09a0: 67 7a 69 70 20 28 2e 67 7a 29 20 66 6f 72 6d 61  gzip (.gz) forma
09b0: 74 0a 20 20 77 69 74 68 20 61 6e 20 69 6e 74 65  t.  with an inte
09c0: 72 66 61 63 65 20 73 69 6d 69 6c 61 72 20 74 6f  rface similar to
09d0: 20 74 68 61 74 20 6f 66 20 73 74 64 69 6f 20 75   that of stdio u
09e0: 73 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  sing the functio
09f0: 6e 73 20 74 68 61 74 20 73 74 61 72 74 0a 20 20  ns that start.  
0a00: 77 69 74 68 20 22 67 7a 22 2e 20 20 54 68 65 20  with "gz".  The 
0a10: 67 7a 69 70 20 66 6f 72 6d 61 74 20 69 73 20 64  gzip format is d
0a20: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
0a30: 65 20 7a 6c 69 62 20 66 6f 72 6d 61 74 2e 20 20  e zlib format.  
0a40: 67 7a 69 70 20 69 73 20 61 0a 20 20 67 7a 69 70  gzip is a.  gzip
0a50: 20 77 72 61 70 70 65 72 2c 20 64 6f 63 75 6d 65   wrapper, docume
0a60: 6e 74 65 64 20 69 6e 20 52 46 43 20 31 39 35 32  nted in RFC 1952
0a70: 2c 20 77 72 61 70 70 65 64 20 61 72 6f 75 6e 64  , wrapped around
0a80: 20 61 20 64 65 66 6c 61 74 65 20 73 74 72 65 61   a deflate strea
0a90: 6d 2e 0a 0a 20 20 20 20 54 68 69 73 20 6c 69 62  m...    This lib
0aa0: 72 61 72 79 20 63 61 6e 20 6f 70 74 69 6f 6e 61  rary can optiona
0ab0: 6c 6c 79 20 72 65 61 64 20 61 6e 64 20 77 72 69  lly read and wri
0ac0: 74 65 20 67 7a 69 70 20 73 74 72 65 61 6d 73 20  te gzip streams 
0ad0: 69 6e 20 6d 65 6d 6f 72 79 20 61 73 20 77 65 6c  in memory as wel
0ae0: 6c 2e 0a 0a 20 20 20 20 54 68 65 20 7a 6c 69 62  l...    The zlib
0af0: 20 66 6f 72 6d 61 74 20 77 61 73 20 64 65 73 69   format was desi
0b00: 67 6e 65 64 20 74 6f 20 62 65 20 63 6f 6d 70 61  gned to be compa
0b10: 63 74 20 61 6e 64 20 66 61 73 74 20 66 6f 72 20  ct and fast for 
0b20: 75 73 65 20 69 6e 20 6d 65 6d 6f 72 79 0a 20 20  use in memory.  
0b30: 61 6e 64 20 6f 6e 20 63 6f 6d 6d 75 6e 69 63 61  and on communica
0b40: 74 69 6f 6e 73 20 63 68 61 6e 6e 65 6c 73 2e 20  tions channels. 
0b50: 20 54 68 65 20 67 7a 69 70 20 66 6f 72 6d 61 74   The gzip format
0b60: 20 77 61 73 20 64 65 73 69 67 6e 65 64 20 66 6f   was designed fo
0b70: 72 20 73 69 6e 67 6c 65 2d 0a 20 20 66 69 6c 65  r single-.  file
0b80: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 6f 6e 20   compression on 
0b90: 66 69 6c 65 20 73 79 73 74 65 6d 73 2c 20 68 61  file systems, ha
0ba0: 73 20 61 20 6c 61 72 67 65 72 20 68 65 61 64 65  s a larger heade
0bb0: 72 20 74 68 61 6e 20 7a 6c 69 62 20 74 6f 20 6d  r than zlib to m
0bc0: 61 69 6e 74 61 69 6e 0a 20 20 64 69 72 65 63 74  aintain.  direct
0bd0: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ory information,
0be0: 20 61 6e 64 20 75 73 65 73 20 61 20 64 69 66 66   and uses a diff
0bf0: 65 72 65 6e 74 2c 20 73 6c 6f 77 65 72 20 63 68  erent, slower ch
0c00: 65 63 6b 20 6d 65 74 68 6f 64 20 74 68 61 6e 20  eck method than 
0c10: 7a 6c 69 62 2e 0a 0a 20 20 20 20 54 68 65 20 6c  zlib...    The l
0c20: 69 62 72 61 72 79 20 64 6f 65 73 20 6e 6f 74 20  ibrary does not 
0c30: 69 6e 73 74 61 6c 6c 20 61 6e 79 20 73 69 67 6e  install any sign
0c40: 61 6c 20 68 61 6e 64 6c 65 72 2e 20 20 54 68 65  al handler.  The
0c50: 20 64 65 63 6f 64 65 72 20 63 68 65 63 6b 73 0a   decoder checks.
0c60: 20 20 74 68 65 20 63 6f 6e 73 69 73 74 65 6e 63    the consistenc
0c70: 79 20 6f 66 20 74 68 65 20 63 6f 6d 70 72 65 73  y of the compres
0c80: 73 65 64 20 64 61 74 61 2c 20 73 6f 20 74 68 65  sed data, so the
0c90: 20 6c 69 62 72 61 72 79 20 73 68 6f 75 6c 64 20   library should 
0ca0: 6e 65 76 65 72 20 63 72 61 73 68 0a 20 20 65 76  never crash.  ev
0cb0: 65 6e 20 69 6e 20 63 61 73 65 20 6f 66 20 63 6f  en in case of co
0cc0: 72 72 75 70 74 65 64 20 69 6e 70 75 74 2e 0a 2a  rrupted input..*
0cd0: 2f 0a 0a 74 79 70 65 64 65 66 20 76 6f 69 64 70  /..typedef voidp
0ce0: 66 20 28 2a 61 6c 6c 6f 63 5f 66 75 6e 63 29 20  f (*alloc_func) 
0cf0: 4f 46 28 28 76 6f 69 64 70 66 20 6f 70 61 71 75  OF((voidpf opaqu
0d00: 65 2c 20 75 49 6e 74 20 69 74 65 6d 73 2c 20 75  e, uInt items, u
0d10: 49 6e 74 20 73 69 7a 65 29 29 3b 0a 74 79 70 65  Int size));.type
0d20: 64 65 66 20 76 6f 69 64 20 20 20 28 2a 66 72 65  def void   (*fre
0d30: 65 5f 66 75 6e 63 29 20 20 4f 46 28 28 76 6f 69  e_func)  OF((voi
0d40: 64 70 66 20 6f 70 61 71 75 65 2c 20 76 6f 69 64  dpf opaque, void
0d50: 70 66 20 61 64 64 72 65 73 73 29 29 3b 0a 0a 73  pf address));..s
0d60: 74 72 75 63 74 20 69 6e 74 65 72 6e 61 6c 5f 73  truct internal_s
0d70: 74 61 74 65 3b 0a 0a 74 79 70 65 64 65 66 20 73  tate;..typedef s
0d80: 74 72 75 63 74 20 7a 5f 73 74 72 65 61 6d 5f 73  truct z_stream_s
0d90: 20 7b 0a 20 20 20 20 7a 5f 63 6f 6e 73 74 20 42   {.    z_const B
0da0: 79 74 65 66 20 2a 6e 65 78 74 5f 69 6e 3b 20 20  ytef *next_in;  
0db0: 20 20 20 2f 2a 20 6e 65 78 74 20 69 6e 70 75 74     /* next input
0dc0: 20 62 79 74 65 20 2a 2f 0a 20 20 20 20 75 49 6e   byte */.    uIn
0dd0: 74 20 20 20 20 20 61 76 61 69 6c 5f 69 6e 3b 20  t     avail_in; 
0de0: 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 79   /* number of by
0df0: 74 65 73 20 61 76 61 69 6c 61 62 6c 65 20 61 74  tes available at
0e00: 20 6e 65 78 74 5f 69 6e 20 2a 2f 0a 20 20 20 20   next_in */.    
0e10: 75 4c 6f 6e 67 20 20 20 20 74 6f 74 61 6c 5f 69  uLong    total_i
0e20: 6e 3b 20 20 2f 2a 20 74 6f 74 61 6c 20 6e 75 6d  n;  /* total num
0e30: 62 65 72 20 6f 66 20 69 6e 70 75 74 20 62 79 74  ber of input byt
0e40: 65 73 20 72 65 61 64 20 73 6f 20 66 61 72 20 2a  es read so far *
0e50: 2f 0a 0a 20 20 20 20 42 79 74 65 66 20 20 20 20  /..    Bytef    
0e60: 2a 6e 65 78 74 5f 6f 75 74 3b 20 2f 2a 20 6e 65  *next_out; /* ne
0e70: 78 74 20 6f 75 74 70 75 74 20 62 79 74 65 20 73  xt output byte s
0e80: 68 6f 75 6c 64 20 62 65 20 70 75 74 20 74 68 65  hould be put the
0e90: 72 65 20 2a 2f 0a 20 20 20 20 75 49 6e 74 20 20  re */.    uInt  
0ea0: 20 20 20 61 76 61 69 6c 5f 6f 75 74 3b 20 2f 2a     avail_out; /*
0eb0: 20 72 65 6d 61 69 6e 69 6e 67 20 66 72 65 65 20   remaining free 
0ec0: 73 70 61 63 65 20 61 74 20 6e 65 78 74 5f 6f 75  space at next_ou
0ed0: 74 20 2a 2f 0a 20 20 20 20 75 4c 6f 6e 67 20 20  t */.    uLong  
0ee0: 20 20 74 6f 74 61 6c 5f 6f 75 74 3b 20 2f 2a 20    total_out; /* 
0ef0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
0f00: 62 79 74 65 73 20 6f 75 74 70 75 74 20 73 6f 20  bytes output so 
0f10: 66 61 72 20 2a 2f 0a 0a 20 20 20 20 7a 5f 63 6f  far */..    z_co
0f20: 6e 73 74 20 63 68 61 72 20 2a 6d 73 67 3b 20 20  nst char *msg;  
0f30: 2f 2a 20 6c 61 73 74 20 65 72 72 6f 72 20 6d 65  /* last error me
0f40: 73 73 61 67 65 2c 20 4e 55 4c 4c 20 69 66 20 6e  ssage, NULL if n
0f50: 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 20 73  o error */.    s
0f60: 74 72 75 63 74 20 69 6e 74 65 72 6e 61 6c 5f 73  truct internal_s
0f70: 74 61 74 65 20 46 41 52 20 2a 73 74 61 74 65 3b  tate FAR *state;
0f80: 20 2f 2a 20 6e 6f 74 20 76 69 73 69 62 6c 65 20   /* not visible 
0f90: 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  by applications 
0fa0: 2a 2f 0a 0a 20 20 20 20 61 6c 6c 6f 63 5f 66 75  */..    alloc_fu
0fb0: 6e 63 20 7a 61 6c 6c 6f 63 3b 20 20 2f 2a 20 75  nc zalloc;  /* u
0fc0: 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
0fd0: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 73 74 61  the internal sta
0fe0: 74 65 20 2a 2f 0a 20 20 20 20 66 72 65 65 5f 66  te */.    free_f
0ff0: 75 6e 63 20 20 7a 66 72 65 65 3b 20 20 20 2f 2a  unc  zfree;   /*
1000: 20 75 73 65 64 20 74 6f 20 66 72 65 65 20 74 68   used to free th
1010: 65 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65  e internal state
1020: 20 2a 2f 0a 20 20 20 20 76 6f 69 64 70 66 20 20   */.    voidpf  
1030: 20 20 20 6f 70 61 71 75 65 3b 20 20 2f 2a 20 70     opaque;  /* p
1040: 72 69 76 61 74 65 20 64 61 74 61 20 6f 62 6a 65  rivate data obje
1050: 63 74 20 70 61 73 73 65 64 20 74 6f 20 7a 61 6c  ct passed to zal
1060: 6c 6f 63 20 61 6e 64 20 7a 66 72 65 65 20 2a 2f  loc and zfree */
1070: 0a 0a 20 20 20 20 69 6e 74 20 20 20 20 20 64 61  ..    int     da
1080: 74 61 5f 74 79 70 65 3b 20 20 2f 2a 20 62 65 73  ta_type;  /* bes
1090: 74 20 67 75 65 73 73 20 61 62 6f 75 74 20 74 68  t guess about th
10a0: 65 20 64 61 74 61 20 74 79 70 65 3a 20 62 69 6e  e data type: bin
10b0: 61 72 79 20 6f 72 20 74 65 78 74 20 2a 2f 0a 20  ary or text */. 
10c0: 20 20 20 75 4c 6f 6e 67 20 20 20 61 64 6c 65 72     uLong   adler
10d0: 3b 20 20 20 20 20 20 2f 2a 20 61 64 6c 65 72 33  ;      /* adler3
10e0: 32 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 75  2 value of the u
10f0: 6e 63 6f 6d 70 72 65 73 73 65 64 20 64 61 74 61  ncompressed data
1100: 20 2a 2f 0a 20 20 20 20 75 4c 6f 6e 67 20 20 20   */.    uLong   
1110: 72 65 73 65 72 76 65 64 3b 20 20 20 2f 2a 20 72  reserved;   /* r
1120: 65 73 65 72 76 65 64 20 66 6f 72 20 66 75 74 75  eserved for futu
1130: 72 65 20 75 73 65 20 2a 2f 0a 7d 20 7a 5f 73 74  re use */.} z_st
1140: 72 65 61 6d 3b 0a 0a 74 79 70 65 64 65 66 20 7a  ream;..typedef z
1150: 5f 73 74 72 65 61 6d 20 46 41 52 20 2a 7a 5f 73  _stream FAR *z_s
1160: 74 72 65 61 6d 70 3b 0a 0a 2f 2a 0a 20 20 20 20  treamp;../*.    
1170: 20 67 7a 69 70 20 68 65 61 64 65 72 20 69 6e 66   gzip header inf
1180: 6f 72 6d 61 74 69 6f 6e 20 70 61 73 73 65 64 20  ormation passed 
1190: 74 6f 20 61 6e 64 20 66 72 6f 6d 20 7a 6c 69 62  to and from zlib
11a0: 20 72 6f 75 74 69 6e 65 73 2e 20 20 53 65 65 20   routines.  See 
11b0: 52 46 43 20 31 39 35 32 0a 20 20 66 6f 72 20 6d  RFC 1952.  for m
11c0: 6f 72 65 20 64 65 74 61 69 6c 73 20 6f 6e 20 74  ore details on t
11d0: 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
11e0: 68 65 73 65 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a  hese fields..*/.
11f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 67  typedef struct g
1200: 7a 5f 68 65 61 64 65 72 5f 73 20 7b 0a 20 20 20  z_header_s {.   
1210: 20 69 6e 74 20 20 20 20 20 74 65 78 74 3b 20 20   int     text;  
1220: 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
1230: 63 6f 6d 70 72 65 73 73 65 64 20 64 61 74 61 20  compressed data 
1240: 62 65 6c 69 65 76 65 64 20 74 6f 20 62 65 20 74  believed to be t
1250: 65 78 74 20 2a 2f 0a 20 20 20 20 75 4c 6f 6e 67  ext */.    uLong
1260: 20 20 20 74 69 6d 65 3b 20 20 20 20 20 20 20 2f     time;       /
1270: 2a 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 74  * modification t
1280: 69 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 20  ime */.    int  
1290: 20 20 20 78 66 6c 61 67 73 3b 20 20 20 20 20 2f     xflags;     /
12a0: 2a 20 65 78 74 72 61 20 66 6c 61 67 73 20 28 6e  * extra flags (n
12b0: 6f 74 20 75 73 65 64 20 77 68 65 6e 20 77 72 69  ot used when wri
12c0: 74 69 6e 67 20 61 20 67 7a 69 70 20 66 69 6c 65  ting a gzip file
12d0: 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 20 20 20  ) */.    int    
12e0: 20 6f 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   os;         /* 
12f0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
1300: 20 2a 2f 0a 20 20 20 20 42 79 74 65 66 20 20 20   */.    Bytef   
1310: 2a 65 78 74 72 61 3b 20 20 20 20 20 2f 2a 20 70  *extra;     /* p
1320: 6f 69 6e 74 65 72 20 74 6f 20 65 78 74 72 61 20  ointer to extra 
1330: 66 69 65 6c 64 20 6f 72 20 5a 5f 4e 55 4c 4c 20  field or Z_NULL 
1340: 69 66 20 6e 6f 6e 65 20 2a 2f 0a 20 20 20 20 75  if none */.    u
1350: 49 6e 74 20 20 20 20 65 78 74 72 61 5f 6c 65 6e  Int    extra_len
1360: 3b 20 20 2f 2a 20 65 78 74 72 61 20 66 69 65 6c  ;  /* extra fiel
1370: 64 20 6c 65 6e 67 74 68 20 28 76 61 6c 69 64 20  d length (valid 
1380: 69 66 20 65 78 74 72 61 20 21 3d 20 5a 5f 4e 55  if extra != Z_NU
1390: 4c 4c 29 20 2a 2f 0a 20 20 20 20 75 49 6e 74 20  LL) */.    uInt 
13a0: 20 20 20 65 78 74 72 61 5f 6d 61 78 3b 20 20 2f     extra_max;  /
13b0: 2a 20 73 70 61 63 65 20 61 74 20 65 78 74 72 61  * space at extra
13c0: 20 28 6f 6e 6c 79 20 77 68 65 6e 20 72 65 61 64   (only when read
13d0: 69 6e 67 20 68 65 61 64 65 72 29 20 2a 2f 0a 20  ing header) */. 
13e0: 20 20 20 42 79 74 65 66 20 20 20 2a 6e 61 6d 65     Bytef   *name
13f0: 3b 20 20 20 20 20 20 2f 2a 20 70 6f 69 6e 74 65  ;      /* pointe
1400: 72 20 74 6f 20 7a 65 72 6f 2d 74 65 72 6d 69 6e  r to zero-termin
1410: 61 74 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 6f  ated file name o
1420: 72 20 5a 5f 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  r Z_NULL */.    
1430: 75 49 6e 74 20 20 20 20 6e 61 6d 65 5f 6d 61 78  uInt    name_max
1440: 3b 20 20 20 2f 2a 20 73 70 61 63 65 20 61 74 20  ;   /* space at 
1450: 6e 61 6d 65 20 28 6f 6e 6c 79 20 77 68 65 6e 20  name (only when 
1460: 72 65 61 64 69 6e 67 20 68 65 61 64 65 72 29 20  reading header) 
1470: 2a 2f 0a 20 20 20 20 42 79 74 65 66 20 20 20 2a  */.    Bytef   *
1480: 63 6f 6d 6d 65 6e 74 3b 20 20 20 2f 2a 20 70 6f  comment;   /* po
1490: 69 6e 74 65 72 20 74 6f 20 7a 65 72 6f 2d 74 65  inter to zero-te
14a0: 72 6d 69 6e 61 74 65 64 20 63 6f 6d 6d 65 6e 74  rminated comment
14b0: 20 6f 72 20 5a 5f 4e 55 4c 4c 20 2a 2f 0a 20 20   or Z_NULL */.  
14c0: 20 20 75 49 6e 74 20 20 20 20 63 6f 6d 6d 5f 6d    uInt    comm_m
14d0: 61 78 3b 20 20 20 2f 2a 20 73 70 61 63 65 20 61  ax;   /* space a
14e0: 74 20 63 6f 6d 6d 65 6e 74 20 28 6f 6e 6c 79 20  t comment (only 
14f0: 77 68 65 6e 20 72 65 61 64 69 6e 67 20 68 65 61  when reading hea
1500: 64 65 72 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20  der) */.    int 
1510: 20 20 20 20 68 63 72 63 3b 20 20 20 20 20 20 20      hcrc;       
1520: 2f 2a 20 74 72 75 65 20 69 66 20 74 68 65 72 65  /* true if there
1530: 20 77 61 73 20 6f 72 20 77 69 6c 6c 20 62 65 20   was or will be 
1540: 61 20 68 65 61 64 65 72 20 63 72 63 20 2a 2f 0a  a header crc */.
1550: 20 20 20 20 69 6e 74 20 20 20 20 20 64 6f 6e 65      int     done
1560: 3b 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20  ;       /* true 
1570: 77 68 65 6e 20 64 6f 6e 65 20 72 65 61 64 69 6e  when done readin
1580: 67 20 67 7a 69 70 20 68 65 61 64 65 72 20 28 6e  g gzip header (n
1590: 6f 74 20 75 73 65 64 0a 20 20 20 20 20 20 20 20  ot used.        
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b0: 20 20 20 77 68 65 6e 20 77 72 69 74 69 6e 67 20     when writing 
15c0: 61 20 67 7a 69 70 20 66 69 6c 65 29 20 2a 2f 0a  a gzip file) */.
15d0: 7d 20 67 7a 5f 68 65 61 64 65 72 3b 0a 0a 74 79  } gz_header;..ty
15e0: 70 65 64 65 66 20 67 7a 5f 68 65 61 64 65 72 20  pedef gz_header 
15f0: 46 41 52 20 2a 67 7a 5f 68 65 61 64 65 72 70 3b  FAR *gz_headerp;
1600: 0a 0a 2f 2a 0a 20 20 20 20 20 54 68 65 20 61 70  ../*.     The ap
1610: 70 6c 69 63 61 74 69 6f 6e 20 6d 75 73 74 20 75  plication must u
1620: 70 64 61 74 65 20 6e 65 78 74 5f 69 6e 20 61 6e  pdate next_in an
1630: 64 20 61 76 61 69 6c 5f 69 6e 20 77 68 65 6e 20  d avail_in when 
1640: 61 76 61 69 6c 5f 69 6e 20 68 61 73 20 64 72 6f  avail_in has dro
1650: 70 70 65 64 0a 20 20 20 74 6f 20 7a 65 72 6f 2e  pped.   to zero.
1660: 20 20 49 74 20 6d 75 73 74 20 75 70 64 61 74 65    It must update
1670: 20 6e 65 78 74 5f 6f 75 74 20 61 6e 64 20 61 76   next_out and av
1680: 61 69 6c 5f 6f 75 74 20 77 68 65 6e 20 61 76 61  ail_out when ava
1690: 69 6c 5f 6f 75 74 20 68 61 73 20 64 72 6f 70 70  il_out has dropp
16a0: 65 64 0a 20 20 20 74 6f 20 7a 65 72 6f 2e 20 20  ed.   to zero.  
16b0: 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  The application 
16c0: 6d 75 73 74 20 69 6e 69 74 69 61 6c 69 7a 65 20  must initialize 
16d0: 7a 61 6c 6c 6f 63 2c 20 7a 66 72 65 65 20 61 6e  zalloc, zfree an
16e0: 64 20 6f 70 61 71 75 65 20 62 65 66 6f 72 65 0a  d opaque before.
16f0: 20 20 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 69     calling the i
1700: 6e 69 74 20 66 75 6e 63 74 69 6f 6e 2e 20 20 41  nit function.  A
1710: 6c 6c 20 6f 74 68 65 72 20 66 69 65 6c 64 73 20  ll other fields 
1720: 61 72 65 20 73 65 74 20 62 79 20 74 68 65 20 63  are set by the c
1730: 6f 6d 70 72 65 73 73 69 6f 6e 0a 20 20 20 6c 69  ompression.   li
1740: 62 72 61 72 79 20 61 6e 64 20 6d 75 73 74 20 6e  brary and must n
1750: 6f 74 20 62 65 20 75 70 64 61 74 65 64 20 62 79  ot be updated by
1760: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
1770: 2e 0a 0a 20 20 20 20 20 54 68 65 20 6f 70 61 71  ...     The opaq
1780: 75 65 20 76 61 6c 75 65 20 70 72 6f 76 69 64 65  ue value provide
1790: 64 20 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  d by the applica
17a0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 70 61 73  tion will be pas
17b0: 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
17c0: 0a 20 20 20 70 61 72 61 6d 65 74 65 72 20 66 6f  .   parameter fo
17d0: 72 20 63 61 6c 6c 73 20 6f 66 20 7a 61 6c 6c 6f  r calls of zallo
17e0: 63 20 61 6e 64 20 7a 66 72 65 65 2e 20 20 54 68  c and zfree.  Th
17f0: 69 73 20 63 61 6e 20 62 65 20 75 73 65 66 75 6c  is can be useful
1800: 20 66 6f 72 20 63 75 73 74 6f 6d 0a 20 20 20 6d   for custom.   m
1810: 65 6d 6f 72 79 20 6d 61 6e 61 67 65 6d 65 6e 74  emory management
1820: 2e 20 20 54 68 65 20 63 6f 6d 70 72 65 73 73 69  .  The compressi
1830: 6f 6e 20 6c 69 62 72 61 72 79 20 61 74 74 61 63  on library attac
1840: 68 65 73 20 6e 6f 20 6d 65 61 6e 69 6e 67 20 74  hes no meaning t
1850: 6f 20 74 68 65 0a 20 20 20 6f 70 61 71 75 65 20  o the.   opaque 
1860: 76 61 6c 75 65 2e 0a 0a 20 20 20 20 20 7a 61 6c  value...     zal
1870: 6c 6f 63 20 6d 75 73 74 20 72 65 74 75 72 6e 20  loc must return 
1880: 5a 5f 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20  Z_NULL if there 
1890: 69 73 20 6e 6f 74 20 65 6e 6f 75 67 68 20 6d 65  is not enough me
18a0: 6d 6f 72 79 20 66 6f 72 20 74 68 65 20 6f 62 6a  mory for the obj
18b0: 65 63 74 2e 0a 20 20 20 49 66 20 7a 6c 69 62 20  ect..   If zlib 
18c0: 69 73 20 75 73 65 64 20 69 6e 20 61 20 6d 75 6c  is used in a mul
18d0: 74 69 2d 74 68 72 65 61 64 65 64 20 61 70 70 6c  ti-threaded appl
18e0: 69 63 61 74 69 6f 6e 2c 20 7a 61 6c 6c 6f 63 20  ication, zalloc 
18f0: 61 6e 64 20 7a 66 72 65 65 20 6d 75 73 74 20 62  and zfree must b
1900: 65 0a 20 20 20 74 68 72 65 61 64 20 73 61 66 65  e.   thread safe
1910: 2e 0a 0a 20 20 20 20 20 4f 6e 20 31 36 2d 62 69  ...     On 16-bi
1920: 74 20 73 79 73 74 65 6d 73 2c 20 74 68 65 20 66  t systems, the f
1930: 75 6e 63 74 69 6f 6e 73 20 7a 61 6c 6c 6f 63 20  unctions zalloc 
1940: 61 6e 64 20 7a 66 72 65 65 20 6d 75 73 74 20 62  and zfree must b
1950: 65 20 61 62 6c 65 20 74 6f 20 61 6c 6c 6f 63 61  e able to alloca
1960: 74 65 0a 20 20 20 65 78 61 63 74 6c 79 20 36 35  te.   exactly 65
1970: 35 33 36 20 62 79 74 65 73 2c 20 62 75 74 20 77  536 bytes, but w
1980: 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 71 75 69  ill not be requi
1990: 72 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  red to allocate 
19a0: 6d 6f 72 65 20 74 68 61 6e 20 74 68 69 73 20 69  more than this i
19b0: 66 0a 20 20 20 74 68 65 20 73 79 6d 62 6f 6c 20  f.   the symbol 
19c0: 4d 41 58 53 45 47 5f 36 34 4b 20 69 73 20 64 65  MAXSEG_64K is de
19d0: 66 69 6e 65 64 20 28 73 65 65 20 7a 63 6f 6e 66  fined (see zconf
19e0: 2e 68 29 2e 20 20 57 41 52 4e 49 4e 47 3a 20 4f  .h).  WARNING: O
19f0: 6e 20 4d 53 44 4f 53 2c 20 70 6f 69 6e 74 65 72  n MSDOS, pointer
1a00: 73 0a 20 20 20 72 65 74 75 72 6e 65 64 20 62 79  s.   returned by
1a10: 20 7a 61 6c 6c 6f 63 20 66 6f 72 20 6f 62 6a 65   zalloc for obje
1a20: 63 74 73 20 6f 66 20 65 78 61 63 74 6c 79 20 36  cts of exactly 6
1a30: 35 35 33 36 20 62 79 74 65 73 20 2a 6d 75 73 74  5536 bytes *must
1a40: 2a 20 68 61 76 65 20 74 68 65 69 72 0a 20 20 20  * have their.   
1a50: 6f 66 66 73 65 74 20 6e 6f 72 6d 61 6c 69 7a 65  offset normalize
1a60: 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20  d to zero.  The 
1a70: 64 65 66 61 75 6c 74 20 61 6c 6c 6f 63 61 74 69  default allocati
1a80: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 76  on function prov
1a90: 69 64 65 64 20 62 79 20 74 68 69 73 0a 20 20 20  ided by this.   
1aa0: 6c 69 62 72 61 72 79 20 65 6e 73 75 72 65 73 20  library ensures 
1ab0: 74 68 69 73 20 28 73 65 65 20 7a 75 74 69 6c 2e  this (see zutil.
1ac0: 63 29 2e 20 20 54 6f 20 72 65 64 75 63 65 20 6d  c).  To reduce m
1ad0: 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
1ae0: 74 73 20 61 6e 64 20 61 76 6f 69 64 0a 20 20 20  ts and avoid.   
1af0: 61 6e 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f  any allocation o
1b00: 66 20 36 34 4b 20 6f 62 6a 65 63 74 73 2c 20 61  f 64K objects, a
1b10: 74 20 74 68 65 20 65 78 70 65 6e 73 65 20 6f 66  t the expense of
1b20: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 72 61 74   compression rat
1b30: 69 6f 2c 20 63 6f 6d 70 69 6c 65 0a 20 20 20 74  io, compile.   t
1b40: 68 65 20 6c 69 62 72 61 72 79 20 77 69 74 68 20  he library with 
1b50: 2d 44 4d 41 58 5f 57 42 49 54 53 3d 31 34 20 28  -DMAX_WBITS=14 (
1b60: 73 65 65 20 7a 63 6f 6e 66 2e 68 29 2e 0a 0a 20  see zconf.h)... 
1b70: 20 20 20 20 54 68 65 20 66 69 65 6c 64 73 20 74      The fields t
1b80: 6f 74 61 6c 5f 69 6e 20 61 6e 64 20 74 6f 74 61  otal_in and tota
1b90: 6c 5f 6f 75 74 20 63 61 6e 20 62 65 20 75 73 65  l_out can be use
1ba0: 64 20 66 6f 72 20 73 74 61 74 69 73 74 69 63 73  d for statistics
1bb0: 20 6f 72 20 70 72 6f 67 72 65 73 73 0a 20 20 20   or progress.   
1bc0: 72 65 70 6f 72 74 73 2e 20 20 41 66 74 65 72 20  reports.  After 
1bd0: 63 6f 6d 70 72 65 73 73 69 6f 6e 2c 20 74 6f 74  compression, tot
1be0: 61 6c 5f 69 6e 20 68 6f 6c 64 73 20 74 68 65 20  al_in holds the 
1bf0: 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  total size of th
1c00: 65 0a 20 20 20 75 6e 63 6f 6d 70 72 65 73 73 65  e.   uncompresse
1c10: 64 20 64 61 74 61 20 61 6e 64 20 6d 61 79 20 62  d data and may b
1c20: 65 20 73 61 76 65 64 20 66 6f 72 20 75 73 65 20  e saved for use 
1c30: 69 6e 20 74 68 65 20 64 65 63 6f 6d 70 72 65 73  in the decompres
1c40: 73 6f 72 20 28 70 61 72 74 69 63 75 6c 61 72 6c  sor (particularl
1c50: 79 0a 20 20 20 69 66 20 74 68 65 20 64 65 63 6f  y.   if the deco
1c60: 6d 70 72 65 73 73 6f 72 20 77 61 6e 74 73 20 74  mpressor wants t
1c70: 6f 20 64 65 63 6f 6d 70 72 65 73 73 20 65 76 65  o decompress eve
1c80: 72 79 74 68 69 6e 67 20 69 6e 20 61 20 73 69 6e  rything in a sin
1c90: 67 6c 65 20 73 74 65 70 29 2e 0a 2a 2f 0a 0a 20  gle step)..*/.. 
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 20 20 20 20 20 20 2f 2a 20 63 6f 6e 73 74 61         /* consta
1cc0: 6e 74 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  nts */..#define 
1cd0: 5a 5f 4e 4f 5f 46 4c 55 53 48 20 20 20 20 20 20  Z_NO_FLUSH      
1ce0: 30 0a 23 64 65 66 69 6e 65 20 5a 5f 50 41 52 54  0.#define Z_PART
1cf0: 49 41 4c 5f 46 4c 55 53 48 20 31 0a 23 64 65 66  IAL_FLUSH 1.#def
1d00: 69 6e 65 20 5a 5f 53 59 4e 43 5f 46 4c 55 53 48  ine Z_SYNC_FLUSH
1d10: 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 5a 5f      2.#define Z_
1d20: 46 55 4c 4c 5f 46 4c 55 53 48 20 20 20 20 33 0a  FULL_FLUSH    3.
1d30: 23 64 65 66 69 6e 65 20 5a 5f 46 49 4e 49 53 48  #define Z_FINISH
1d40: 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69 6e          4.#defin
1d50: 65 20 5a 5f 42 4c 4f 43 4b 20 20 20 20 20 20 20  e Z_BLOCK       
1d60: 20 20 35 0a 23 64 65 66 69 6e 65 20 5a 5f 54 52    5.#define Z_TR
1d70: 45 45 53 20 20 20 20 20 20 20 20 20 36 0a 2f 2a  EES         6./*
1d80: 20 41 6c 6c 6f 77 65 64 20 66 6c 75 73 68 20 76   Allowed flush v
1d90: 61 6c 75 65 73 3b 20 73 65 65 20 64 65 66 6c 61  alues; see defla
1da0: 74 65 28 29 20 61 6e 64 20 69 6e 66 6c 61 74 65  te() and inflate
1db0: 28 29 20 62 65 6c 6f 77 20 66 6f 72 20 64 65 74  () below for det
1dc0: 61 69 6c 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  ails */..#define
1dd0: 20 5a 5f 4f 4b 20 20 20 20 20 20 20 20 20 20 20   Z_OK           
1de0: 20 30 0a 23 64 65 66 69 6e 65 20 5a 5f 53 54 52   0.#define Z_STR
1df0: 45 41 4d 5f 45 4e 44 20 20 20 20 31 0a 23 64 65  EAM_END    1.#de
1e00: 66 69 6e 65 20 5a 5f 4e 45 45 44 5f 44 49 43 54  fine Z_NEED_DICT
1e10: 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 5a       2.#define Z
1e20: 5f 45 52 52 4e 4f 20 20 20 20 20 20 20 20 28 2d  _ERRNO        (-
1e30: 31 29 0a 23 64 65 66 69 6e 65 20 5a 5f 53 54 52  1).#define Z_STR
1e40: 45 41 4d 5f 45 52 52 4f 52 20 28 2d 32 29 0a 23  EAM_ERROR (-2).#
1e50: 64 65 66 69 6e 65 20 5a 5f 44 41 54 41 5f 45 52  define Z_DATA_ER
1e60: 52 4f 52 20 20 20 28 2d 33 29 0a 23 64 65 66 69  ROR   (-3).#defi
1e70: 6e 65 20 5a 5f 4d 45 4d 5f 45 52 52 4f 52 20 20  ne Z_MEM_ERROR  
1e80: 20 20 28 2d 34 29 0a 23 64 65 66 69 6e 65 20 5a    (-4).#define Z
1e90: 5f 42 55 46 5f 45 52 52 4f 52 20 20 20 20 28 2d  _BUF_ERROR    (-
1ea0: 35 29 0a 23 64 65 66 69 6e 65 20 5a 5f 56 45 52  5).#define Z_VER
1eb0: 53 49 4f 4e 5f 45 52 52 4f 52 20 28 2d 36 29 0a  SION_ERROR (-6).
1ec0: 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 73 20  /* Return codes 
1ed0: 66 6f 72 20 74 68 65 20 63 6f 6d 70 72 65 73 73  for the compress
1ee0: 69 6f 6e 2f 64 65 63 6f 6d 70 72 65 73 73 69 6f  ion/decompressio
1ef0: 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 20 4e 65 67  n functions. Neg
1f00: 61 74 69 76 65 20 76 61 6c 75 65 73 0a 20 2a 20  ative values. * 
1f10: 61 72 65 20 65 72 72 6f 72 73 2c 20 70 6f 73 69  are errors, posi
1f20: 74 69 76 65 20 76 61 6c 75 65 73 20 61 72 65 20  tive values are 
1f30: 75 73 65 64 20 66 6f 72 20 73 70 65 63 69 61 6c  used for special
1f40: 20 62 75 74 20 6e 6f 72 6d 61 6c 20 65 76 65 6e   but normal even
1f50: 74 73 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  ts.. */..#define
1f60: 20 5a 5f 4e 4f 5f 43 4f 4d 50 52 45 53 53 49 4f   Z_NO_COMPRESSIO
1f70: 4e 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66  N         0.#def
1f80: 69 6e 65 20 5a 5f 42 45 53 54 5f 53 50 45 45 44  ine Z_BEST_SPEED
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 23               1.#
1fa0: 64 65 66 69 6e 65 20 5a 5f 42 45 53 54 5f 43 4f  define Z_BEST_CO
1fb0: 4d 50 52 45 53 53 49 4f 4e 20 20 20 20 20 20 20  MPRESSION       
1fc0: 39 0a 23 64 65 66 69 6e 65 20 5a 5f 44 45 46 41  9.#define Z_DEFA
1fd0: 55 4c 54 5f 43 4f 4d 50 52 45 53 53 49 4f 4e 20  ULT_COMPRESSION 
1fe0: 20 28 2d 31 29 0a 2f 2a 20 63 6f 6d 70 72 65 73   (-1)./* compres
1ff0: 73 69 6f 6e 20 6c 65 76 65 6c 73 20 2a 2f 0a 0a  sion levels */..
2000: 23 64 65 66 69 6e 65 20 5a 5f 46 49 4c 54 45 52  #define Z_FILTER
2010: 45 44 20 20 20 20 20 20 20 20 20 20 20 20 31 0a  ED            1.
2020: 23 64 65 66 69 6e 65 20 5a 5f 48 55 46 46 4d 41  #define Z_HUFFMA
2030: 4e 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20 32 0a  N_ONLY        2.
2040: 23 64 65 66 69 6e 65 20 5a 5f 52 4c 45 20 20 20  #define Z_RLE   
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
2060: 23 64 65 66 69 6e 65 20 5a 5f 46 49 58 45 44 20  #define Z_FIXED 
2070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 0a                4.
2080: 23 64 65 66 69 6e 65 20 5a 5f 44 45 46 41 55 4c  #define Z_DEFAUL
2090: 54 5f 53 54 52 41 54 45 47 59 20 20 20 20 30 0a  T_STRATEGY    0.
20a0: 2f 2a 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 73  /* compression s
20b0: 74 72 61 74 65 67 79 3b 20 73 65 65 20 64 65 66  trategy; see def
20c0: 6c 61 74 65 49 6e 69 74 32 28 29 20 62 65 6c 6f  lateInit2() belo
20d0: 77 20 66 6f 72 20 64 65 74 61 69 6c 73 20 2a 2f  w for details */
20e0: 0a 0a 23 64 65 66 69 6e 65 20 5a 5f 42 49 4e 41  ..#define Z_BINA
20f0: 52 59 20 20 20 30 0a 23 64 65 66 69 6e 65 20 5a  RY   0.#define Z
2100: 5f 54 45 58 54 20 20 20 20 20 31 0a 23 64 65 66  _TEXT     1.#def
2110: 69 6e 65 20 5a 5f 41 53 43 49 49 20 20 20 20 5a  ine Z_ASCII    Z
2120: 5f 54 45 58 54 20 20 20 2f 2a 20 66 6f 72 20 63  _TEXT   /* for c
2130: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
2140: 68 20 31 2e 32 2e 32 20 61 6e 64 20 65 61 72 6c  h 1.2.2 and earl
2150: 69 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5a  ier */.#define Z
2160: 5f 55 4e 4b 4e 4f 57 4e 20 20 32 0a 2f 2a 20 50  _UNKNOWN  2./* P
2170: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 6f  ossible values o
2180: 66 20 74 68 65 20 64 61 74 61 5f 74 79 70 65 20  f the data_type 
2190: 66 69 65 6c 64 20 28 74 68 6f 75 67 68 20 73 65  field (though se
21a0: 65 20 69 6e 66 6c 61 74 65 28 29 29 20 2a 2f 0a  e inflate()) */.
21b0: 0a 23 64 65 66 69 6e 65 20 5a 5f 44 45 46 4c 41  .#define Z_DEFLA
21c0: 54 45 44 20 20 20 38 0a 2f 2a 20 54 68 65 20 64  TED   8./* The d
21d0: 65 66 6c 61 74 65 20 63 6f 6d 70 72 65 73 73 69  eflate compressi
21e0: 6f 6e 20 6d 65 74 68 6f 64 20 28 74 68 65 20 6f  on method (the o
21f0: 6e 6c 79 20 6f 6e 65 20 73 75 70 70 6f 72 74 65  nly one supporte
2200: 64 20 69 6e 20 74 68 69 73 20 76 65 72 73 69 6f  d in this versio
2210: 6e 29 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 5a  n) */..#define Z
2220: 5f 4e 55 4c 4c 20 20 30 20 20 2f 2a 20 66 6f 72  _NULL  0  /* for
2230: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 7a 61   initializing za
2240: 6c 6c 6f 63 2c 20 7a 66 72 65 65 2c 20 6f 70 61  lloc, zfree, opa
2250: 71 75 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  que */..#define 
2260: 7a 6c 69 62 5f 76 65 72 73 69 6f 6e 20 7a 6c 69  zlib_version zli
2270: 62 56 65 72 73 69 6f 6e 28 29 0a 2f 2a 20 66 6f  bVersion()./* fo
2280: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
2290: 77 69 74 68 20 76 65 72 73 69 6f 6e 73 20 3c 20  with versions < 
22a0: 31 2e 30 2e 32 20 2a 2f 0a 0a 0a 20 20 20 20 20  1.0.2 */...     
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c0: 20 20 20 2f 2a 20 62 61 73 69 63 20 66 75 6e 63     /* basic func
22d0: 74 69 6f 6e 73 20 2a 2f 0a 0a 5a 45 58 54 45 52  tions */..ZEXTER
22e0: 4e 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 5a  N const char * Z
22f0: 45 58 50 4f 52 54 20 7a 6c 69 62 56 65 72 73 69  EXPORT zlibVersi
2300: 6f 6e 20 4f 46 28 28 76 6f 69 64 29 29 3b 0a 2f  on OF((void));./
2310: 2a 20 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f  * The applicatio
2320: 6e 20 63 61 6e 20 63 6f 6d 70 61 72 65 20 7a 6c  n can compare zl
2330: 69 62 56 65 72 73 69 6f 6e 20 61 6e 64 20 5a 4c  ibVersion and ZL
2340: 49 42 5f 56 45 52 53 49 4f 4e 20 66 6f 72 20 63  IB_VERSION for c
2350: 6f 6e 73 69 73 74 65 6e 63 79 2e 0a 20 20 20 49  onsistency..   I
2360: 66 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  f the first char
2370: 61 63 74 65 72 20 64 69 66 66 65 72 73 2c 20 74  acter differs, t
2380: 68 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20  he library code 
2390: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 69 73  actually used is
23a0: 20 6e 6f 74 0a 20 20 20 63 6f 6d 70 61 74 69 62   not.   compatib
23b0: 6c 65 20 77 69 74 68 20 74 68 65 20 7a 6c 69 62  le with the zlib
23c0: 2e 68 20 68 65 61 64 65 72 20 66 69 6c 65 20 75  .h header file u
23d0: 73 65 64 20 62 79 20 74 68 65 20 61 70 70 6c 69  sed by the appli
23e0: 63 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 63 68  cation.  This ch
23f0: 65 63 6b 0a 20 20 20 69 73 20 61 75 74 6f 6d 61  eck.   is automa
2400: 74 69 63 61 6c 6c 79 20 6d 61 64 65 20 62 79 20  tically made by 
2410: 64 65 66 6c 61 74 65 49 6e 69 74 20 61 6e 64 20  deflateInit and 
2420: 69 6e 66 6c 61 74 65 49 6e 69 74 2e 0a 20 2a 2f  inflateInit.. */
2430: 0a 0a 2f 2a 0a 5a 45 58 54 45 52 4e 20 69 6e 74  ../*.ZEXTERN int
2440: 20 5a 45 58 50 4f 52 54 20 64 65 66 6c 61 74 65   ZEXPORT deflate
2450: 49 6e 69 74 20 4f 46 28 28 7a 5f 73 74 72 65 61  Init OF((z_strea
2460: 6d 70 20 73 74 72 6d 2c 20 69 6e 74 20 6c 65 76  mp strm, int lev
2470: 65 6c 29 29 3b 0a 0a 20 20 20 20 20 49 6e 69 74  el));..     Init
2480: 69 61 6c 69 7a 65 73 20 74 68 65 20 69 6e 74 65  ializes the inte
2490: 72 6e 61 6c 20 73 74 72 65 61 6d 20 73 74 61 74  rnal stream stat
24a0: 65 20 66 6f 72 20 63 6f 6d 70 72 65 73 73 69 6f  e for compressio
24b0: 6e 2e 20 20 54 68 65 20 66 69 65 6c 64 73 0a 20  n.  The fields. 
24c0: 20 20 7a 61 6c 6c 6f 63 2c 20 7a 66 72 65 65 20    zalloc, zfree 
24d0: 61 6e 64 20 6f 70 61 71 75 65 20 6d 75 73 74 20  and opaque must 
24e0: 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 62  be initialized b
24f0: 65 66 6f 72 65 20 62 79 20 74 68 65 20 63 61 6c  efore by the cal
2500: 6c 65 72 2e 20 20 49 66 0a 20 20 20 7a 61 6c 6c  ler.  If.   zall
2510: 6f 63 20 61 6e 64 20 7a 66 72 65 65 20 61 72 65  oc and zfree are
2520: 20 73 65 74 20 74 6f 20 5a 5f 4e 55 4c 4c 2c 20   set to Z_NULL, 
2530: 64 65 66 6c 61 74 65 49 6e 69 74 20 75 70 64 61  deflateInit upda
2540: 74 65 73 20 74 68 65 6d 20 74 6f 20 75 73 65 20  tes them to use 
2550: 64 65 66 61 75 6c 74 0a 20 20 20 61 6c 6c 6f 63  default.   alloc
2560: 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 2e  ation functions.
2570: 0a 0a 20 20 20 20 20 54 68 65 20 63 6f 6d 70 72  ..     The compr
2580: 65 73 73 69 6f 6e 20 6c 65 76 65 6c 20 6d 75 73  ession level mus
2590: 74 20 62 65 20 5a 5f 44 45 46 41 55 4c 54 5f 43  t be Z_DEFAULT_C
25a0: 4f 4d 50 52 45 53 53 49 4f 4e 2c 20 6f 72 20 62  OMPRESSION, or b
25b0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39 3a 0a  etween 0 and 9:.
25c0: 20 20 20 31 20 67 69 76 65 73 20 62 65 73 74 20     1 gives best 
25d0: 73 70 65 65 64 2c 20 39 20 67 69 76 65 73 20 62  speed, 9 gives b
25e0: 65 73 74 20 63 6f 6d 70 72 65 73 73 69 6f 6e 2c  est compression,
25f0: 20 30 20 67 69 76 65 73 20 6e 6f 20 63 6f 6d 70   0 gives no comp
2600: 72 65 73 73 69 6f 6e 20 61 74 20 61 6c 6c 0a 20  ression at all. 
2610: 20 20 28 74 68 65 20 69 6e 70 75 74 20 64 61 74    (the input dat
2620: 61 20 69 73 20 73 69 6d 70 6c 79 20 63 6f 70 69  a is simply copi
2630: 65 64 20 61 20 62 6c 6f 63 6b 20 61 74 20 61 20  ed a block at a 
2640: 74 69 6d 65 29 2e 20 20 5a 5f 44 45 46 41 55 4c  time).  Z_DEFAUL
2650: 54 5f 43 4f 4d 50 52 45 53 53 49 4f 4e 0a 20 20  T_COMPRESSION.  
2660: 20 72 65 71 75 65 73 74 73 20 61 20 64 65 66 61   requests a defa
2670: 75 6c 74 20 63 6f 6d 70 72 6f 6d 69 73 65 20 62  ult compromise b
2680: 65 74 77 65 65 6e 20 73 70 65 65 64 20 61 6e 64  etween speed and
2690: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 28 63 75   compression (cu
26a0: 72 72 65 6e 74 6c 79 0a 20 20 20 65 71 75 69 76  rrently.   equiv
26b0: 61 6c 65 6e 74 20 74 6f 20 6c 65 76 65 6c 20 36  alent to level 6
26c0: 29 2e 0a 0a 20 20 20 20 20 64 65 66 6c 61 74 65  )...     deflate
26d0: 49 6e 69 74 20 72 65 74 75 72 6e 73 20 5a 5f 4f  Init returns Z_O
26e0: 4b 20 69 66 20 73 75 63 63 65 73 73 2c 20 5a 5f  K if success, Z_
26f0: 4d 45 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65  MEM_ERROR if the
2700: 72 65 20 77 61 73 20 6e 6f 74 20 65 6e 6f 75 67  re was not enoug
2710: 68 0a 20 20 20 6d 65 6d 6f 72 79 2c 20 5a 5f 53  h.   memory, Z_S
2720: 54 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 6c  TREAM_ERROR if l
2730: 65 76 65 6c 20 69 73 20 6e 6f 74 20 61 20 76 61  evel is not a va
2740: 6c 69 64 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20  lid compression 
2750: 6c 65 76 65 6c 2c 20 6f 72 0a 20 20 20 5a 5f 56  level, or.   Z_V
2760: 45 52 53 49 4f 4e 5f 45 52 52 4f 52 20 69 66 20  ERSION_ERROR if 
2770: 74 68 65 20 7a 6c 69 62 20 6c 69 62 72 61 72 79  the zlib library
2780: 20 76 65 72 73 69 6f 6e 20 28 7a 6c 69 62 5f 76   version (zlib_v
2790: 65 72 73 69 6f 6e 29 20 69 73 20 69 6e 63 6f 6d  ersion) is incom
27a0: 70 61 74 69 62 6c 65 0a 20 20 20 77 69 74 68 20  patible.   with 
27b0: 74 68 65 20 76 65 72 73 69 6f 6e 20 61 73 73 75  the version assu
27c0: 6d 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c 65  med by the calle
27d0: 72 20 28 5a 4c 49 42 5f 56 45 52 53 49 4f 4e 29  r (ZLIB_VERSION)
27e0: 2e 20 20 6d 73 67 20 69 73 20 73 65 74 20 74 6f  .  msg is set to
27f0: 20 6e 75 6c 6c 0a 20 20 20 69 66 20 74 68 65 72   null.   if ther
2800: 65 20 69 73 20 6e 6f 20 65 72 72 6f 72 20 6d 65  e is no error me
2810: 73 73 61 67 65 2e 20 20 64 65 66 6c 61 74 65 49  ssage.  deflateI
2820: 6e 69 74 20 64 6f 65 73 20 6e 6f 74 20 70 65 72  nit does not per
2830: 66 6f 72 6d 20 61 6e 79 20 63 6f 6d 70 72 65 73  form any compres
2840: 73 69 6f 6e 3a 0a 20 20 20 74 68 69 73 20 77 69  sion:.   this wi
2850: 6c 6c 20 62 65 20 64 6f 6e 65 20 62 79 20 64 65  ll be done by de
2860: 66 6c 61 74 65 28 29 2e 0a 2a 2f 0a 0a 0a 5a 45  flate()..*/...ZE
2870: 58 54 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f 52  XTERN int ZEXPOR
2880: 54 20 64 65 66 6c 61 74 65 20 4f 46 28 28 7a 5f  T deflate OF((z_
2890: 73 74 72 65 61 6d 70 20 73 74 72 6d 2c 20 69 6e  streamp strm, in
28a0: 74 20 66 6c 75 73 68 29 29 3b 0a 2f 2a 0a 20 20  t flush));./*.  
28b0: 20 20 64 65 66 6c 61 74 65 20 63 6f 6d 70 72 65    deflate compre
28c0: 73 73 65 73 20 61 73 20 6d 75 63 68 20 64 61 74  sses as much dat
28d0: 61 20 61 73 20 70 6f 73 73 69 62 6c 65 2c 20 61  a as possible, a
28e0: 6e 64 20 73 74 6f 70 73 20 77 68 65 6e 20 74 68  nd stops when th
28f0: 65 20 69 6e 70 75 74 0a 20 20 62 75 66 66 65 72  e input.  buffer
2900: 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 20 6f   becomes empty o
2910: 72 20 74 68 65 20 6f 75 74 70 75 74 20 62 75 66  r the output buf
2920: 66 65 72 20 62 65 63 6f 6d 65 73 20 66 75 6c 6c  fer becomes full
2930: 2e 20 20 49 74 20 6d 61 79 20 69 6e 74 72 6f 64  .  It may introd
2940: 75 63 65 0a 20 20 73 6f 6d 65 20 6f 75 74 70 75  uce.  some outpu
2950: 74 20 6c 61 74 65 6e 63 79 20 28 72 65 61 64 69  t latency (readi
2960: 6e 67 20 69 6e 70 75 74 20 77 69 74 68 6f 75 74  ng input without
2970: 20 70 72 6f 64 75 63 69 6e 67 20 61 6e 79 20 6f   producing any o
2980: 75 74 70 75 74 29 20 65 78 63 65 70 74 20 77 68  utput) except wh
2990: 65 6e 0a 20 20 66 6f 72 63 65 64 20 74 6f 20 66  en.  forced to f
29a0: 6c 75 73 68 2e 0a 0a 20 20 20 20 54 68 65 20 64  lush...    The d
29b0: 65 74 61 69 6c 65 64 20 73 65 6d 61 6e 74 69 63  etailed semantic
29c0: 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  s are as follows
29d0: 2e 20 20 64 65 66 6c 61 74 65 20 70 65 72 66 6f  .  deflate perfo
29e0: 72 6d 73 20 6f 6e 65 20 6f 72 20 62 6f 74 68 20  rms one or both 
29f0: 6f 66 20 74 68 65 0a 20 20 66 6f 6c 6c 6f 77 69  of the.  followi
2a00: 6e 67 20 61 63 74 69 6f 6e 73 3a 0a 0a 20 20 2d  ng actions:..  -
2a10: 20 43 6f 6d 70 72 65 73 73 20 6d 6f 72 65 20 69   Compress more i
2a20: 6e 70 75 74 20 73 74 61 72 74 69 6e 67 20 61 74  nput starting at
2a30: 20 6e 65 78 74 5f 69 6e 20 61 6e 64 20 75 70 64   next_in and upd
2a40: 61 74 65 20 6e 65 78 74 5f 69 6e 20 61 6e 64 20  ate next_in and 
2a50: 61 76 61 69 6c 5f 69 6e 0a 20 20 20 20 61 63 63  avail_in.    acc
2a60: 6f 72 64 69 6e 67 6c 79 2e 20 20 49 66 20 6e 6f  ordingly.  If no
2a70: 74 20 61 6c 6c 20 69 6e 70 75 74 20 63 61 6e 20  t all input can 
2a80: 62 65 20 70 72 6f 63 65 73 73 65 64 20 28 62 65  be processed (be
2a90: 63 61 75 73 65 20 74 68 65 72 65 20 69 73 20 6e  cause there is n
2aa0: 6f 74 0a 20 20 20 20 65 6e 6f 75 67 68 20 72 6f  ot.    enough ro
2ab0: 6f 6d 20 69 6e 20 74 68 65 20 6f 75 74 70 75 74  om in the output
2ac0: 20 62 75 66 66 65 72 29 2c 20 6e 65 78 74 5f 69   buffer), next_i
2ad0: 6e 20 61 6e 64 20 61 76 61 69 6c 5f 69 6e 20 61  n and avail_in a
2ae0: 72 65 20 75 70 64 61 74 65 64 20 61 6e 64 0a 20  re updated and. 
2af0: 20 20 20 70 72 6f 63 65 73 73 69 6e 67 20 77 69     processing wi
2b00: 6c 6c 20 72 65 73 75 6d 65 20 61 74 20 74 68 69  ll resume at thi
2b10: 73 20 70 6f 69 6e 74 20 66 6f 72 20 74 68 65 20  s point for the 
2b20: 6e 65 78 74 20 63 61 6c 6c 20 6f 66 20 64 65 66  next call of def
2b30: 6c 61 74 65 28 29 2e 0a 0a 20 20 2d 20 50 72 6f  late()...  - Pro
2b40: 76 69 64 65 20 6d 6f 72 65 20 6f 75 74 70 75 74  vide more output
2b50: 20 73 74 61 72 74 69 6e 67 20 61 74 20 6e 65 78   starting at nex
2b60: 74 5f 6f 75 74 20 61 6e 64 20 75 70 64 61 74 65  t_out and update
2b70: 20 6e 65 78 74 5f 6f 75 74 20 61 6e 64 20 61 76   next_out and av
2b80: 61 69 6c 5f 6f 75 74 0a 20 20 20 20 61 63 63 6f  ail_out.    acco
2b90: 72 64 69 6e 67 6c 79 2e 20 20 54 68 69 73 20 61  rdingly.  This a
2ba0: 63 74 69 6f 6e 20 69 73 20 66 6f 72 63 65 64 20  ction is forced 
2bb0: 69 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  if the parameter
2bc0: 20 66 6c 75 73 68 20 69 73 20 6e 6f 6e 20 7a 65   flush is non ze
2bd0: 72 6f 2e 0a 20 20 20 20 46 6f 72 63 69 6e 67 20  ro..    Forcing 
2be0: 66 6c 75 73 68 20 66 72 65 71 75 65 6e 74 6c 79  flush frequently
2bf0: 20 64 65 67 72 61 64 65 73 20 74 68 65 20 63 6f   degrades the co
2c00: 6d 70 72 65 73 73 69 6f 6e 20 72 61 74 69 6f 2c  mpression ratio,
2c10: 20 73 6f 20 74 68 69 73 20 70 61 72 61 6d 65 74   so this paramet
2c20: 65 72 0a 20 20 20 20 73 68 6f 75 6c 64 20 62 65  er.    should be
2c30: 20 73 65 74 20 6f 6e 6c 79 20 77 68 65 6e 20 6e   set only when n
2c40: 65 63 65 73 73 61 72 79 20 28 69 6e 20 69 6e 74  ecessary (in int
2c50: 65 72 61 63 74 69 76 65 20 61 70 70 6c 69 63 61  eractive applica
2c60: 74 69 6f 6e 73 29 2e 20 20 53 6f 6d 65 0a 20 20  tions).  Some.  
2c70: 20 20 6f 75 74 70 75 74 20 6d 61 79 20 62 65 20    output may be 
2c80: 70 72 6f 76 69 64 65 64 20 65 76 65 6e 20 69 66  provided even if
2c90: 20 66 6c 75 73 68 20 69 73 20 6e 6f 74 20 73 65   flush is not se
2ca0: 74 2e 0a 0a 20 20 20 20 42 65 66 6f 72 65 20 74  t...    Before t
2cb0: 68 65 20 63 61 6c 6c 20 6f 66 20 64 65 66 6c 61  he call of defla
2cc0: 74 65 28 29 2c 20 74 68 65 20 61 70 70 6c 69 63  te(), the applic
2cd0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 65 6e 73  ation should ens
2ce0: 75 72 65 20 74 68 61 74 20 61 74 20 6c 65 61 73  ure that at leas
2cf0: 74 0a 20 20 6f 6e 65 20 6f 66 20 74 68 65 20 61  t.  one of the a
2d00: 63 74 69 6f 6e 73 20 69 73 20 70 6f 73 73 69 62  ctions is possib
2d10: 6c 65 2c 20 62 79 20 70 72 6f 76 69 64 69 6e 67  le, by providing
2d20: 20 6d 6f 72 65 20 69 6e 70 75 74 20 61 6e 64 2f   more input and/
2d30: 6f 72 20 63 6f 6e 73 75 6d 69 6e 67 20 6d 6f 72  or consuming mor
2d40: 65 0a 20 20 6f 75 74 70 75 74 2c 20 61 6e 64 20  e.  output, and 
2d50: 75 70 64 61 74 69 6e 67 20 61 76 61 69 6c 5f 69  updating avail_i
2d60: 6e 20 6f 72 20 61 76 61 69 6c 5f 6f 75 74 20 61  n or avail_out a
2d70: 63 63 6f 72 64 69 6e 67 6c 79 3b 20 61 76 61 69  ccordingly; avai
2d80: 6c 5f 6f 75 74 20 73 68 6f 75 6c 64 0a 20 20 6e  l_out should.  n
2d90: 65 76 65 72 20 62 65 20 7a 65 72 6f 20 62 65 66  ever be zero bef
2da0: 6f 72 65 20 74 68 65 20 63 61 6c 6c 2e 20 20 54  ore the call.  T
2db0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  he application c
2dc0: 61 6e 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 63  an consume the c
2dd0: 6f 6d 70 72 65 73 73 65 64 0a 20 20 6f 75 74 70  ompressed.  outp
2de0: 75 74 20 77 68 65 6e 20 69 74 20 77 61 6e 74 73  ut when it wants
2df0: 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68  , for example wh
2e00: 65 6e 20 74 68 65 20 6f 75 74 70 75 74 20 62 75  en the output bu
2e10: 66 66 65 72 20 69 73 20 66 75 6c 6c 20 28 61 76  ffer is full (av
2e20: 61 69 6c 5f 6f 75 74 0a 20 20 3d 3d 20 30 29 2c  ail_out.  == 0),
2e30: 20 6f 72 20 61 66 74 65 72 20 65 61 63 68 20 63   or after each c
2e40: 61 6c 6c 20 6f 66 20 64 65 66 6c 61 74 65 28 29  all of deflate()
2e50: 2e 20 20 49 66 20 64 65 66 6c 61 74 65 20 72 65  .  If deflate re
2e60: 74 75 72 6e 73 20 5a 5f 4f 4b 20 61 6e 64 20 77  turns Z_OK and w
2e70: 69 74 68 0a 20 20 7a 65 72 6f 20 61 76 61 69 6c  ith.  zero avail
2e80: 5f 6f 75 74 2c 20 69 74 20 6d 75 73 74 20 62 65  _out, it must be
2e90: 20 63 61 6c 6c 65 64 20 61 67 61 69 6e 20 61 66   called again af
2ea0: 74 65 72 20 6d 61 6b 69 6e 67 20 72 6f 6f 6d 20  ter making room 
2eb0: 69 6e 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20  in the output.  
2ec0: 62 75 66 66 65 72 20 62 65 63 61 75 73 65 20 74  buffer because t
2ed0: 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 6d 6f  here might be mo
2ee0: 72 65 20 6f 75 74 70 75 74 20 70 65 6e 64 69 6e  re output pendin
2ef0: 67 2e 0a 0a 20 20 20 20 4e 6f 72 6d 61 6c 6c 79  g...    Normally
2f00: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 66   the parameter f
2f10: 6c 75 73 68 20 69 73 20 73 65 74 20 74 6f 20 5a  lush is set to Z
2f20: 5f 4e 4f 5f 46 4c 55 53 48 2c 20 77 68 69 63 68  _NO_FLUSH, which
2f30: 20 61 6c 6c 6f 77 73 20 64 65 66 6c 61 74 65 20   allows deflate 
2f40: 74 6f 0a 20 20 64 65 63 69 64 65 20 68 6f 77 20  to.  decide how 
2f50: 6d 75 63 68 20 64 61 74 61 20 74 6f 20 61 63 63  much data to acc
2f60: 75 6d 75 6c 61 74 65 20 62 65 66 6f 72 65 20 70  umulate before p
2f70: 72 6f 64 75 63 69 6e 67 20 6f 75 74 70 75 74 2c  roducing output,
2f80: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 20 20 6d   in order to.  m
2f90: 61 78 69 6d 69 7a 65 20 63 6f 6d 70 72 65 73 73  aximize compress
2fa0: 69 6f 6e 2e 0a 0a 20 20 20 20 49 66 20 74 68 65  ion...    If the
2fb0: 20 70 61 72 61 6d 65 74 65 72 20 66 6c 75 73 68   parameter flush
2fc0: 20 69 73 20 73 65 74 20 74 6f 20 5a 5f 53 59 4e   is set to Z_SYN
2fd0: 43 5f 46 4c 55 53 48 2c 20 61 6c 6c 20 70 65 6e  C_FLUSH, all pen
2fe0: 64 69 6e 67 20 6f 75 74 70 75 74 20 69 73 0a 20  ding output is. 
2ff0: 20 66 6c 75 73 68 65 64 20 74 6f 20 74 68 65 20   flushed to the 
3000: 6f 75 74 70 75 74 20 62 75 66 66 65 72 20 61 6e  output buffer an
3010: 64 20 74 68 65 20 6f 75 74 70 75 74 20 69 73 20  d the output is 
3020: 61 6c 69 67 6e 65 64 20 6f 6e 20 61 20 62 79 74  aligned on a byt
3030: 65 20 62 6f 75 6e 64 61 72 79 2c 20 73 6f 0a 20  e boundary, so. 
3040: 20 74 68 61 74 20 74 68 65 20 64 65 63 6f 6d 70   that the decomp
3050: 72 65 73 73 6f 72 20 63 61 6e 20 67 65 74 20 61  ressor can get a
3060: 6c 6c 20 69 6e 70 75 74 20 64 61 74 61 20 61 76  ll input data av
3070: 61 69 6c 61 62 6c 65 20 73 6f 20 66 61 72 2e 20  ailable so far. 
3080: 20 28 49 6e 0a 20 20 70 61 72 74 69 63 75 6c 61   (In.  particula
3090: 72 20 61 76 61 69 6c 5f 69 6e 20 69 73 20 7a 65  r avail_in is ze
30a0: 72 6f 20 61 66 74 65 72 20 74 68 65 20 63 61 6c  ro after the cal
30b0: 6c 20 69 66 20 65 6e 6f 75 67 68 20 6f 75 74 70  l if enough outp
30c0: 75 74 20 73 70 61 63 65 20 68 61 73 20 62 65 65  ut space has bee
30d0: 6e 0a 20 20 70 72 6f 76 69 64 65 64 20 62 65 66  n.  provided bef
30e0: 6f 72 65 20 74 68 65 20 63 61 6c 6c 2e 29 20 46  ore the call.) F
30f0: 6c 75 73 68 69 6e 67 20 6d 61 79 20 64 65 67 72  lushing may degr
3100: 61 64 65 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20  ade compression 
3110: 66 6f 72 20 73 6f 6d 65 0a 20 20 63 6f 6d 70 72  for some.  compr
3120: 65 73 73 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  ession algorithm
3130: 73 20 61 6e 64 20 73 6f 20 69 74 20 73 68 6f 75  s and so it shou
3140: 6c 64 20 62 65 20 75 73 65 64 20 6f 6e 6c 79 20  ld be used only 
3150: 77 68 65 6e 20 6e 65 63 65 73 73 61 72 79 2e 20  when necessary. 
3160: 20 54 68 69 73 0a 20 20 63 6f 6d 70 6c 65 74 65   This.  complete
3170: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 65  s the current de
3180: 66 6c 61 74 65 20 62 6c 6f 63 6b 20 61 6e 64 20  flate block and 
3190: 66 6f 6c 6c 6f 77 73 20 69 74 20 77 69 74 68 20  follows it with 
31a0: 61 6e 20 65 6d 70 74 79 20 73 74 6f 72 65 64 20  an empty stored 
31b0: 62 6c 6f 63 6b 0a 20 20 74 68 61 74 20 69 73 20  block.  that is 
31c0: 74 68 72 65 65 20 62 69 74 73 20 70 6c 75 73 20  three bits plus 
31d0: 66 69 6c 6c 65 72 20 62 69 74 73 20 74 6f 20 74  filler bits to t
31e0: 68 65 20 6e 65 78 74 20 62 79 74 65 2c 20 66 6f  he next byte, fo
31f0: 6c 6c 6f 77 65 64 20 62 79 20 66 6f 75 72 20 62  llowed by four b
3200: 79 74 65 73 0a 20 20 28 30 30 20 30 30 20 66 66  ytes.  (00 00 ff
3210: 20 66 66 29 2e 0a 0a 20 20 20 20 49 66 20 66 6c   ff)...    If fl
3220: 75 73 68 20 69 73 20 73 65 74 20 74 6f 20 5a 5f  ush is set to Z_
3230: 50 41 52 54 49 41 4c 5f 46 4c 55 53 48 2c 20 61  PARTIAL_FLUSH, a
3240: 6c 6c 20 70 65 6e 64 69 6e 67 20 6f 75 74 70 75  ll pending outpu
3250: 74 20 69 73 20 66 6c 75 73 68 65 64 20 74 6f 20  t is flushed to 
3260: 74 68 65 0a 20 20 6f 75 74 70 75 74 20 62 75 66  the.  output buf
3270: 66 65 72 2c 20 62 75 74 20 74 68 65 20 6f 75 74  fer, but the out
3280: 70 75 74 20 69 73 20 6e 6f 74 20 61 6c 69 67 6e  put is not align
3290: 65 64 20 74 6f 20 61 20 62 79 74 65 20 62 6f 75  ed to a byte bou
32a0: 6e 64 61 72 79 2e 20 20 41 6c 6c 20 6f 66 20 74  ndary.  All of t
32b0: 68 65 0a 20 20 69 6e 70 75 74 20 64 61 74 61 20  he.  input data 
32c0: 73 6f 20 66 61 72 20 77 69 6c 6c 20 62 65 20 61  so far will be a
32d0: 76 61 69 6c 61 62 6c 65 20 74 6f 20 74 68 65 20  vailable to the 
32e0: 64 65 63 6f 6d 70 72 65 73 73 6f 72 2c 20 61 73  decompressor, as
32f0: 20 66 6f 72 20 5a 5f 53 59 4e 43 5f 46 4c 55 53   for Z_SYNC_FLUS
3300: 48 2e 0a 20 20 54 68 69 73 20 63 6f 6d 70 6c 65  H..  This comple
3310: 74 65 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  tes the current 
3320: 64 65 66 6c 61 74 65 20 62 6c 6f 63 6b 20 61 6e  deflate block an
3330: 64 20 66 6f 6c 6c 6f 77 73 20 69 74 20 77 69 74  d follows it wit
3340: 68 20 61 6e 20 65 6d 70 74 79 20 66 69 78 65 64  h an empty fixed
3350: 0a 20 20 63 6f 64 65 73 20 62 6c 6f 63 6b 20 74  .  codes block t
3360: 68 61 74 20 69 73 20 31 30 20 62 69 74 73 20 6c  hat is 10 bits l
3370: 6f 6e 67 2e 20 20 54 68 69 73 20 61 73 73 75 72  ong.  This assur
3380: 65 73 20 74 68 61 74 20 65 6e 6f 75 67 68 20 62  es that enough b
3390: 79 74 65 73 20 61 72 65 20 6f 75 74 70 75 74 0a  ytes are output.
33a0: 20 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 74    in order for t
33b0: 68 65 20 64 65 63 6f 6d 70 72 65 73 73 6f 72 20  he decompressor 
33c0: 74 6f 20 66 69 6e 69 73 68 20 74 68 65 20 62 6c  to finish the bl
33d0: 6f 63 6b 20 62 65 66 6f 72 65 20 74 68 65 20 65  ock before the e
33e0: 6d 70 74 79 20 66 69 78 65 64 20 63 6f 64 65 0a  mpty fixed code.
33f0: 20 20 62 6c 6f 63 6b 2e 0a 0a 20 20 20 20 49 66    block...    If
3400: 20 66 6c 75 73 68 20 69 73 20 73 65 74 20 74 6f   flush is set to
3410: 20 5a 5f 42 4c 4f 43 4b 2c 20 61 20 64 65 66 6c   Z_BLOCK, a defl
3420: 61 74 65 20 62 6c 6f 63 6b 20 69 73 20 63 6f 6d  ate block is com
3430: 70 6c 65 74 65 64 20 61 6e 64 20 65 6d 69 74 74  pleted and emitt
3440: 65 64 2c 20 61 73 0a 20 20 66 6f 72 20 5a 5f 53  ed, as.  for Z_S
3450: 59 4e 43 5f 46 4c 55 53 48 2c 20 62 75 74 20 74  YNC_FLUSH, but t
3460: 68 65 20 6f 75 74 70 75 74 20 69 73 20 6e 6f 74  he output is not
3470: 20 61 6c 69 67 6e 65 64 20 6f 6e 20 61 20 62 79   aligned on a by
3480: 74 65 20 62 6f 75 6e 64 61 72 79 2c 20 61 6e 64  te boundary, and
3490: 20 75 70 20 74 6f 0a 20 20 73 65 76 65 6e 20 62   up to.  seven b
34a0: 69 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  its of the curre
34b0: 6e 74 20 62 6c 6f 63 6b 20 61 72 65 20 68 65 6c  nt block are hel
34c0: 64 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20  d to be written 
34d0: 61 73 20 74 68 65 20 6e 65 78 74 20 62 79 74 65  as the next byte
34e0: 20 61 66 74 65 72 0a 20 20 74 68 65 20 6e 65 78   after.  the nex
34f0: 74 20 64 65 66 6c 61 74 65 20 62 6c 6f 63 6b 20  t deflate block 
3500: 69 73 20 63 6f 6d 70 6c 65 74 65 64 2e 20 20 49  is completed.  I
3510: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
3520: 20 64 65 63 6f 6d 70 72 65 73 73 6f 72 20 6d 61   decompressor ma
3530: 79 20 6e 6f 74 0a 20 20 62 65 20 70 72 6f 76 69  y not.  be provi
3540: 64 65 64 20 65 6e 6f 75 67 68 20 62 69 74 73 20  ded enough bits 
3550: 61 74 20 74 68 69 73 20 70 6f 69 6e 74 20 69 6e  at this point in
3560: 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65   order to comple
3570: 74 65 20 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e  te decompression
3580: 20 6f 66 0a 20 20 74 68 65 20 64 61 74 61 20 70   of.  the data p
3590: 72 6f 76 69 64 65 64 20 73 6f 20 66 61 72 20 74  rovided so far t
35a0: 6f 20 74 68 65 20 63 6f 6d 70 72 65 73 73 6f 72  o the compressor
35b0: 2e 20 20 49 74 20 6d 61 79 20 6e 65 65 64 20 74  .  It may need t
35c0: 6f 20 77 61 69 74 20 66 6f 72 20 74 68 65 20 6e  o wait for the n
35d0: 65 78 74 0a 20 20 62 6c 6f 63 6b 20 74 6f 20 62  ext.  block to b
35e0: 65 20 65 6d 69 74 74 65 64 2e 20 20 54 68 69 73  e emitted.  This
35f0: 20 69 73 20 66 6f 72 20 61 64 76 61 6e 63 65 64   is for advanced
3600: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68   applications th
3610: 61 74 20 6e 65 65 64 20 74 6f 20 63 6f 6e 74 72  at need to contr
3620: 6f 6c 0a 20 20 74 68 65 20 65 6d 69 73 73 69 6f  ol.  the emissio
3630: 6e 20 6f 66 20 64 65 66 6c 61 74 65 20 62 6c 6f  n of deflate blo
3640: 63 6b 73 2e 0a 0a 20 20 20 20 49 66 20 66 6c 75  cks...    If flu
3650: 73 68 20 69 73 20 73 65 74 20 74 6f 20 5a 5f 46  sh is set to Z_F
3660: 55 4c 4c 5f 46 4c 55 53 48 2c 20 61 6c 6c 20 6f  ULL_FLUSH, all o
3670: 75 74 70 75 74 20 69 73 20 66 6c 75 73 68 65 64  utput is flushed
3680: 20 61 73 20 77 69 74 68 0a 20 20 5a 5f 53 59 4e   as with.  Z_SYN
3690: 43 5f 46 4c 55 53 48 2c 20 61 6e 64 20 74 68 65  C_FLUSH, and the
36a0: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 73 74 61   compression sta
36b0: 74 65 20 69 73 20 72 65 73 65 74 20 73 6f 20 74  te is reset so t
36c0: 68 61 74 20 64 65 63 6f 6d 70 72 65 73 73 69 6f  hat decompressio
36d0: 6e 20 63 61 6e 0a 20 20 72 65 73 74 61 72 74 20  n can.  restart 
36e0: 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  from this point 
36f0: 69 66 20 70 72 65 76 69 6f 75 73 20 63 6f 6d 70  if previous comp
3700: 72 65 73 73 65 64 20 64 61 74 61 20 68 61 73 20  ressed data has 
3710: 62 65 65 6e 20 64 61 6d 61 67 65 64 20 6f 72 20  been damaged or 
3720: 69 66 0a 20 20 72 61 6e 64 6f 6d 20 61 63 63 65  if.  random acce
3730: 73 73 20 69 73 20 64 65 73 69 72 65 64 2e 20 20  ss is desired.  
3740: 55 73 69 6e 67 20 5a 5f 46 55 4c 4c 5f 46 4c 55  Using Z_FULL_FLU
3750: 53 48 20 74 6f 6f 20 6f 66 74 65 6e 20 63 61 6e  SH too often can
3760: 20 73 65 72 69 6f 75 73 6c 79 20 64 65 67 72 61   seriously degra
3770: 64 65 0a 20 20 63 6f 6d 70 72 65 73 73 69 6f 6e  de.  compression
3780: 2e 0a 0a 20 20 20 20 49 66 20 64 65 66 6c 61 74  ...    If deflat
3790: 65 20 72 65 74 75 72 6e 73 20 77 69 74 68 20 61  e returns with a
37a0: 76 61 69 6c 5f 6f 75 74 20 3d 3d 20 30 2c 20 74  vail_out == 0, t
37b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 75 73  his function mus
37c0: 74 20 62 65 20 63 61 6c 6c 65 64 20 61 67 61 69  t be called agai
37d0: 6e 0a 20 20 77 69 74 68 20 74 68 65 20 73 61 6d  n.  with the sam
37e0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66  e value of the f
37f0: 6c 75 73 68 20 70 61 72 61 6d 65 74 65 72 20 61  lush parameter a
3800: 6e 64 20 6d 6f 72 65 20 6f 75 74 70 75 74 20 73  nd more output s
3810: 70 61 63 65 20 28 75 70 64 61 74 65 64 0a 20 20  pace (updated.  
3820: 61 76 61 69 6c 5f 6f 75 74 29 2c 20 75 6e 74 69  avail_out), unti
3830: 6c 20 74 68 65 20 66 6c 75 73 68 20 69 73 20 63  l the flush is c
3840: 6f 6d 70 6c 65 74 65 20 28 64 65 66 6c 61 74 65  omplete (deflate
3850: 20 72 65 74 75 72 6e 73 20 77 69 74 68 20 6e 6f   returns with no
3860: 6e 2d 7a 65 72 6f 0a 20 20 61 76 61 69 6c 5f 6f  n-zero.  avail_o
3870: 75 74 29 2e 20 20 49 6e 20 74 68 65 20 63 61 73  ut).  In the cas
3880: 65 20 6f 66 20 61 20 5a 5f 46 55 4c 4c 5f 46 4c  e of a Z_FULL_FL
3890: 55 53 48 20 6f 72 20 5a 5f 53 59 4e 43 5f 46 4c  USH or Z_SYNC_FL
38a0: 55 53 48 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  USH, make sure t
38b0: 68 61 74 0a 20 20 61 76 61 69 6c 5f 6f 75 74 20  hat.  avail_out 
38c0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
38d0: 73 69 78 20 74 6f 20 61 76 6f 69 64 20 72 65 70  six to avoid rep
38e0: 65 61 74 65 64 20 66 6c 75 73 68 20 6d 61 72 6b  eated flush mark
38f0: 65 72 73 20 64 75 65 20 74 6f 0a 20 20 61 76 61  ers due to.  ava
3900: 69 6c 5f 6f 75 74 20 3d 3d 20 30 20 6f 6e 20 72  il_out == 0 on r
3910: 65 74 75 72 6e 2e 0a 0a 20 20 20 20 49 66 20 74  eturn...    If t
3920: 68 65 20 70 61 72 61 6d 65 74 65 72 20 66 6c 75  he parameter flu
3930: 73 68 20 69 73 20 73 65 74 20 74 6f 20 5a 5f 46  sh is set to Z_F
3940: 49 4e 49 53 48 2c 20 70 65 6e 64 69 6e 67 20 69  INISH, pending i
3950: 6e 70 75 74 20 69 73 20 70 72 6f 63 65 73 73 65  nput is processe
3960: 64 2c 0a 20 20 70 65 6e 64 69 6e 67 20 6f 75 74  d,.  pending out
3970: 70 75 74 20 69 73 20 66 6c 75 73 68 65 64 20 61  put is flushed a
3980: 6e 64 20 64 65 66 6c 61 74 65 20 72 65 74 75 72  nd deflate retur
3990: 6e 73 20 77 69 74 68 20 5a 5f 53 54 52 45 41 4d  ns with Z_STREAM
39a0: 5f 45 4e 44 20 69 66 20 74 68 65 72 65 20 77 61  _END if there wa
39b0: 73 0a 20 20 65 6e 6f 75 67 68 20 6f 75 74 70 75  s.  enough outpu
39c0: 74 20 73 70 61 63 65 3b 20 69 66 20 64 65 66 6c  t space; if defl
39d0: 61 74 65 20 72 65 74 75 72 6e 73 20 77 69 74 68  ate returns with
39e0: 20 5a 5f 4f 4b 2c 20 74 68 69 73 20 66 75 6e 63   Z_OK, this func
39f0: 74 69 6f 6e 20 6d 75 73 74 20 62 65 0a 20 20 63  tion must be.  c
3a00: 61 6c 6c 65 64 20 61 67 61 69 6e 20 77 69 74 68  alled again with
3a10: 20 5a 5f 46 49 4e 49 53 48 20 61 6e 64 20 6d 6f   Z_FINISH and mo
3a20: 72 65 20 6f 75 74 70 75 74 20 73 70 61 63 65 20  re output space 
3a30: 28 75 70 64 61 74 65 64 20 61 76 61 69 6c 5f 6f  (updated avail_o
3a40: 75 74 29 20 62 75 74 20 6e 6f 0a 20 20 6d 6f 72  ut) but no.  mor
3a50: 65 20 69 6e 70 75 74 20 64 61 74 61 2c 20 75 6e  e input data, un
3a60: 74 69 6c 20 69 74 20 72 65 74 75 72 6e 73 20 77  til it returns w
3a70: 69 74 68 20 5a 5f 53 54 52 45 41 4d 5f 45 4e 44  ith Z_STREAM_END
3a80: 20 6f 72 20 61 6e 20 65 72 72 6f 72 2e 20 20 41   or an error.  A
3a90: 66 74 65 72 0a 20 20 64 65 66 6c 61 74 65 20 68  fter.  deflate h
3aa0: 61 73 20 72 65 74 75 72 6e 65 64 20 5a 5f 53 54  as returned Z_ST
3ab0: 52 45 41 4d 5f 45 4e 44 2c 20 74 68 65 20 6f 6e  REAM_END, the on
3ac0: 6c 79 20 70 6f 73 73 69 62 6c 65 20 6f 70 65 72  ly possible oper
3ad0: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 73 74  ations on the st
3ae0: 72 65 61 6d 0a 20 20 61 72 65 20 64 65 66 6c 61  ream.  are defla
3af0: 74 65 52 65 73 65 74 20 6f 72 20 64 65 66 6c 61  teReset or defla
3b00: 74 65 45 6e 64 2e 0a 0a 20 20 20 20 5a 5f 46 49  teEnd...    Z_FI
3b10: 4e 49 53 48 20 63 61 6e 20 62 65 20 75 73 65 64  NISH can be used
3b20: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
3b30: 65 72 20 64 65 66 6c 61 74 65 49 6e 69 74 20 69  er deflateInit i
3b40: 66 20 61 6c 6c 20 74 68 65 20 63 6f 6d 70 72 65  f all the compre
3b50: 73 73 69 6f 6e 0a 20 20 69 73 20 74 6f 20 62 65  ssion.  is to be
3b60: 20 64 6f 6e 65 20 69 6e 20 61 20 73 69 6e 67 6c   done in a singl
3b70: 65 20 73 74 65 70 2e 20 20 49 6e 20 74 68 69 73  e step.  In this
3b80: 20 63 61 73 65 2c 20 61 76 61 69 6c 5f 6f 75 74   case, avail_out
3b90: 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   must be at leas
3ba0: 74 20 74 68 65 0a 20 20 76 61 6c 75 65 20 72 65  t the.  value re
3bb0: 74 75 72 6e 65 64 20 62 79 20 64 65 66 6c 61 74  turned by deflat
3bc0: 65 42 6f 75 6e 64 20 28 73 65 65 20 62 65 6c 6f  eBound (see belo
3bd0: 77 29 2e 20 20 54 68 65 6e 20 64 65 66 6c 61 74  w).  Then deflat
3be0: 65 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  e is guaranteed 
3bf0: 74 6f 0a 20 20 72 65 74 75 72 6e 20 5a 5f 53 54  to.  return Z_ST
3c00: 52 45 41 4d 5f 45 4e 44 2e 20 20 49 66 20 6e 6f  REAM_END.  If no
3c10: 74 20 65 6e 6f 75 67 68 20 6f 75 74 70 75 74 20  t enough output 
3c20: 73 70 61 63 65 20 69 73 20 70 72 6f 76 69 64 65  space is provide
3c30: 64 2c 20 64 65 66 6c 61 74 65 20 77 69 6c 6c 0a  d, deflate will.
3c40: 20 20 6e 6f 74 20 72 65 74 75 72 6e 20 5a 5f 53    not return Z_S
3c50: 54 52 45 41 4d 5f 45 4e 44 2c 20 61 6e 64 20 69  TREAM_END, and i
3c60: 74 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  t must be called
3c70: 20 61 67 61 69 6e 20 61 73 20 64 65 73 63 72 69   again as descri
3c80: 62 65 64 20 61 62 6f 76 65 2e 0a 0a 20 20 20 20  bed above...    
3c90: 64 65 66 6c 61 74 65 28 29 20 73 65 74 73 20 73  deflate() sets s
3ca0: 74 72 6d 2d 3e 61 64 6c 65 72 20 74 6f 20 74 68  trm->adler to th
3cb0: 65 20 61 64 6c 65 72 33 32 20 63 68 65 63 6b 73  e adler32 checks
3cc0: 75 6d 20 6f 66 20 61 6c 6c 20 69 6e 70 75 74 20  um of all input 
3cd0: 72 65 61 64 0a 20 20 73 6f 20 66 61 72 20 28 74  read.  so far (t
3ce0: 68 61 74 20 69 73 2c 20 74 6f 74 61 6c 5f 69 6e  hat is, total_in
3cf0: 20 62 79 74 65 73 29 2e 0a 0a 20 20 20 20 64 65   bytes)...    de
3d00: 66 6c 61 74 65 28 29 20 6d 61 79 20 75 70 64 61  flate() may upda
3d10: 74 65 20 73 74 72 6d 2d 3e 64 61 74 61 5f 74 79  te strm->data_ty
3d20: 70 65 20 69 66 20 69 74 20 63 61 6e 20 6d 61 6b  pe if it can mak
3d30: 65 20 61 20 67 6f 6f 64 20 67 75 65 73 73 20 61  e a good guess a
3d40: 62 6f 75 74 0a 20 20 74 68 65 20 69 6e 70 75 74  bout.  the input
3d50: 20 64 61 74 61 20 74 79 70 65 20 28 5a 5f 42 49   data type (Z_BI
3d60: 4e 41 52 59 20 6f 72 20 5a 5f 54 45 58 54 29 2e  NARY or Z_TEXT).
3d70: 20 20 49 6e 20 64 6f 75 62 74 2c 20 74 68 65 20    In doubt, the 
3d80: 64 61 74 61 20 69 73 20 63 6f 6e 73 69 64 65 72  data is consider
3d90: 65 64 0a 20 20 62 69 6e 61 72 79 2e 20 20 54 68  ed.  binary.  Th
3da0: 69 73 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79  is field is only
3db0: 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   for information
3dc0: 20 70 75 72 70 6f 73 65 73 20 61 6e 64 20 64 6f   purposes and do
3dd0: 65 73 20 6e 6f 74 20 61 66 66 65 63 74 20 74 68  es not affect th
3de0: 65 0a 20 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20  e.  compression 
3df0: 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20 61 6e 79  algorithm in any
3e00: 20 6d 61 6e 6e 65 72 2e 0a 0a 20 20 20 20 64 65   manner...    de
3e10: 66 6c 61 74 65 28 29 20 72 65 74 75 72 6e 73 20  flate() returns 
3e20: 5a 5f 4f 4b 20 69 66 20 73 6f 6d 65 20 70 72 6f  Z_OK if some pro
3e30: 67 72 65 73 73 20 68 61 73 20 62 65 65 6e 20 6d  gress has been m
3e40: 61 64 65 20 28 6d 6f 72 65 20 69 6e 70 75 74 0a  ade (more input.
3e50: 20 20 70 72 6f 63 65 73 73 65 64 20 6f 72 20 6d    processed or m
3e60: 6f 72 65 20 6f 75 74 70 75 74 20 70 72 6f 64 75  ore output produ
3e70: 63 65 64 29 2c 20 5a 5f 53 54 52 45 41 4d 5f 45  ced), Z_STREAM_E
3e80: 4e 44 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 20  ND if all input 
3e90: 68 61 73 20 62 65 65 6e 0a 20 20 63 6f 6e 73 75  has been.  consu
3ea0: 6d 65 64 20 61 6e 64 20 61 6c 6c 20 6f 75 74 70  med and all outp
3eb0: 75 74 20 68 61 73 20 62 65 65 6e 20 70 72 6f 64  ut has been prod
3ec0: 75 63 65 64 20 28 6f 6e 6c 79 20 77 68 65 6e 20  uced (only when 
3ed0: 66 6c 75 73 68 20 69 73 20 73 65 74 20 74 6f 0a  flush is set to.
3ee0: 20 20 5a 5f 46 49 4e 49 53 48 29 2c 20 5a 5f 53    Z_FINISH), Z_S
3ef0: 54 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 74  TREAM_ERROR if t
3f00: 68 65 20 73 74 72 65 61 6d 20 73 74 61 74 65 20  he stream state 
3f10: 77 61 73 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74  was inconsistent
3f20: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 0a 20 20   (for example.  
3f30: 69 66 20 6e 65 78 74 5f 69 6e 20 6f 72 20 6e 65  if next_in or ne
3f40: 78 74 5f 6f 75 74 20 77 61 73 20 5a 5f 4e 55 4c  xt_out was Z_NUL
3f50: 4c 29 2c 20 5a 5f 42 55 46 5f 45 52 52 4f 52 20  L), Z_BUF_ERROR 
3f60: 69 66 20 6e 6f 20 70 72 6f 67 72 65 73 73 20 69  if no progress i
3f70: 73 20 70 6f 73 73 69 62 6c 65 0a 20 20 28 66 6f  s possible.  (fo
3f80: 72 20 65 78 61 6d 70 6c 65 20 61 76 61 69 6c 5f  r example avail_
3f90: 69 6e 20 6f 72 20 61 76 61 69 6c 5f 6f 75 74 20  in or avail_out 
3fa0: 77 61 73 20 7a 65 72 6f 29 2e 20 20 4e 6f 74 65  was zero).  Note
3fb0: 20 74 68 61 74 20 5a 5f 42 55 46 5f 45 52 52 4f   that Z_BUF_ERRO
3fc0: 52 20 69 73 20 6e 6f 74 0a 20 20 66 61 74 61 6c  R is not.  fatal
3fd0: 2c 20 61 6e 64 20 64 65 66 6c 61 74 65 28 29 20  , and deflate() 
3fe0: 63 61 6e 20 62 65 20 63 61 6c 6c 65 64 20 61 67  can be called ag
3ff0: 61 69 6e 20 77 69 74 68 20 6d 6f 72 65 20 69 6e  ain with more in
4000: 70 75 74 20 61 6e 64 20 6d 6f 72 65 20 6f 75 74  put and more out
4010: 70 75 74 0a 20 20 73 70 61 63 65 20 74 6f 20 63  put.  space to c
4020: 6f 6e 74 69 6e 75 65 20 63 6f 6d 70 72 65 73 73  ontinue compress
4030: 69 6e 67 2e 0a 2a 2f 0a 0a 0a 5a 45 58 54 45 52  ing..*/...ZEXTER
4040: 4e 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 64 65  N int ZEXPORT de
4050: 66 6c 61 74 65 45 6e 64 20 4f 46 28 28 7a 5f 73  flateEnd OF((z_s
4060: 74 72 65 61 6d 70 20 73 74 72 6d 29 29 3b 0a 2f  treamp strm));./
4070: 2a 0a 20 20 20 20 20 41 6c 6c 20 64 79 6e 61 6d  *.     All dynam
4080: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
4090: 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
40a0: 20 66 6f 72 20 74 68 69 73 20 73 74 72 65 61 6d   for this stream
40b0: 20 61 72 65 20 66 72 65 65 64 2e 0a 20 20 20 54   are freed..   T
40c0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 69 73  his function dis
40d0: 63 61 72 64 73 20 61 6e 79 20 75 6e 70 72 6f 63  cards any unproc
40e0: 65 73 73 65 64 20 69 6e 70 75 74 20 61 6e 64 20  essed input and 
40f0: 64 6f 65 73 20 6e 6f 74 20 66 6c 75 73 68 20 61  does not flush a
4100: 6e 79 20 70 65 6e 64 69 6e 67 0a 20 20 20 6f 75  ny pending.   ou
4110: 74 70 75 74 2e 0a 0a 20 20 20 20 20 64 65 66 6c  tput...     defl
4120: 61 74 65 45 6e 64 20 72 65 74 75 72 6e 73 20 5a  ateEnd returns Z
4130: 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73 2c 20  _OK if success, 
4140: 5a 5f 53 54 52 45 41 4d 5f 45 52 52 4f 52 20 69  Z_STREAM_ERROR i
4150: 66 20 74 68 65 0a 20 20 20 73 74 72 65 61 6d 20  f the.   stream 
4160: 73 74 61 74 65 20 77 61 73 20 69 6e 63 6f 6e 73  state was incons
4170: 69 73 74 65 6e 74 2c 20 5a 5f 44 41 54 41 5f 45  istent, Z_DATA_E
4180: 52 52 4f 52 20 69 66 20 74 68 65 20 73 74 72 65  RROR if the stre
4190: 61 6d 20 77 61 73 20 66 72 65 65 64 0a 20 20 20  am was freed.   
41a0: 70 72 65 6d 61 74 75 72 65 6c 79 20 28 73 6f 6d  prematurely (som
41b0: 65 20 69 6e 70 75 74 20 6f 72 20 6f 75 74 70 75  e input or outpu
41c0: 74 20 77 61 73 20 64 69 73 63 61 72 64 65 64 29  t was discarded)
41d0: 2e 20 20 49 6e 20 74 68 65 20 65 72 72 6f 72 20  .  In the error 
41e0: 63 61 73 65 2c 20 6d 73 67 0a 20 20 20 6d 61 79  case, msg.   may
41f0: 20 62 65 20 73 65 74 20 62 75 74 20 74 68 65 6e   be set but then
4200: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 74 61   points to a sta
4210: 74 69 63 20 73 74 72 69 6e 67 20 28 77 68 69 63  tic string (whic
4220: 68 20 6d 75 73 74 20 6e 6f 74 20 62 65 0a 20 20  h must not be.  
4230: 20 64 65 61 6c 6c 6f 63 61 74 65 64 29 2e 0a 2a   deallocated)..*
4240: 2f 0a 0a 0a 2f 2a 0a 5a 45 58 54 45 52 4e 20 69  /.../*.ZEXTERN i
4250: 6e 74 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c 61  nt ZEXPORT infla
4260: 74 65 49 6e 69 74 20 4f 46 28 28 7a 5f 73 74 72  teInit OF((z_str
4270: 65 61 6d 70 20 73 74 72 6d 29 29 3b 0a 0a 20 20  eamp strm));..  
4280: 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 73 20 74     Initializes t
4290: 68 65 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 65  he internal stre
42a0: 61 6d 20 73 74 61 74 65 20 66 6f 72 20 64 65 63  am state for dec
42b0: 6f 6d 70 72 65 73 73 69 6f 6e 2e 20 20 54 68 65  ompression.  The
42c0: 20 66 69 65 6c 64 73 0a 20 20 20 6e 65 78 74 5f   fields.   next_
42d0: 69 6e 2c 20 61 76 61 69 6c 5f 69 6e 2c 20 7a 61  in, avail_in, za
42e0: 6c 6c 6f 63 2c 20 7a 66 72 65 65 20 61 6e 64 20  lloc, zfree and 
42f0: 6f 70 61 71 75 65 20 6d 75 73 74 20 62 65 20 69  opaque must be i
4300: 6e 69 74 69 61 6c 69 7a 65 64 20 62 65 66 6f 72  nitialized befor
4310: 65 20 62 79 0a 20 20 20 74 68 65 20 63 61 6c 6c  e by.   the call
4320: 65 72 2e 20 20 49 66 20 6e 65 78 74 5f 69 6e 20  er.  If next_in 
4330: 69 73 20 6e 6f 74 20 5a 5f 4e 55 4c 4c 20 61 6e  is not Z_NULL an
4340: 64 20 61 76 61 69 6c 5f 69 6e 20 69 73 20 6c 61  d avail_in is la
4350: 72 67 65 20 65 6e 6f 75 67 68 20 28 74 68 65 0a  rge enough (the.
4360: 20 20 20 65 78 61 63 74 20 76 61 6c 75 65 20 64     exact value d
4370: 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 63 6f  epends on the co
4380: 6d 70 72 65 73 73 69 6f 6e 20 6d 65 74 68 6f 64  mpression method
4390: 29 2c 20 69 6e 66 6c 61 74 65 49 6e 69 74 20 64  ), inflateInit d
43a0: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 0a 20 20  etermines the.  
43b0: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 6d 65 74   compression met
43c0: 68 6f 64 20 66 72 6f 6d 20 74 68 65 20 7a 6c 69  hod from the zli
43d0: 62 20 68 65 61 64 65 72 20 61 6e 64 20 61 6c 6c  b header and all
43e0: 6f 63 61 74 65 73 20 61 6c 6c 20 64 61 74 61 20  ocates all data 
43f0: 73 74 72 75 63 74 75 72 65 73 0a 20 20 20 61 63  structures.   ac
4400: 63 6f 72 64 69 6e 67 6c 79 3b 20 6f 74 68 65 72  cordingly; other
4410: 77 69 73 65 20 74 68 65 20 61 6c 6c 6f 63 61 74  wise the allocat
4420: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 64 65 66 65  ion will be defe
4430: 72 72 65 64 20 74 6f 20 74 68 65 20 66 69 72 73  rred to the firs
4440: 74 20 63 61 6c 6c 20 6f 66 0a 20 20 20 69 6e 66  t call of.   inf
4450: 6c 61 74 65 2e 20 20 49 66 20 7a 61 6c 6c 6f 63  late.  If zalloc
4460: 20 61 6e 64 20 7a 66 72 65 65 20 61 72 65 20 73   and zfree are s
4470: 65 74 20 74 6f 20 5a 5f 4e 55 4c 4c 2c 20 69 6e  et to Z_NULL, in
4480: 66 6c 61 74 65 49 6e 69 74 20 75 70 64 61 74 65  flateInit update
4490: 73 20 74 68 65 6d 20 74 6f 0a 20 20 20 75 73 65  s them to.   use
44a0: 20 64 65 66 61 75 6c 74 20 61 6c 6c 6f 63 61 74   default allocat
44b0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 0a  ion functions...
44c0: 20 20 20 20 20 69 6e 66 6c 61 74 65 49 6e 69 74       inflateInit
44d0: 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20 69 66   returns Z_OK if
44e0: 20 73 75 63 63 65 73 73 2c 20 5a 5f 4d 45 4d 5f   success, Z_MEM_
44f0: 45 52 52 4f 52 20 69 66 20 74 68 65 72 65 20 77  ERROR if there w
4500: 61 73 20 6e 6f 74 20 65 6e 6f 75 67 68 0a 20 20  as not enough.  
4510: 20 6d 65 6d 6f 72 79 2c 20 5a 5f 56 45 52 53 49   memory, Z_VERSI
4520: 4f 4e 5f 45 52 52 4f 52 20 69 66 20 74 68 65 20  ON_ERROR if the 
4530: 7a 6c 69 62 20 6c 69 62 72 61 72 79 20 76 65 72  zlib library ver
4540: 73 69 6f 6e 20 69 73 20 69 6e 63 6f 6d 70 61 74  sion is incompat
4550: 69 62 6c 65 20 77 69 74 68 20 74 68 65 0a 20 20  ible with the.  
4560: 20 76 65 72 73 69 6f 6e 20 61 73 73 75 6d 65 64   version assumed
4570: 20 62 79 20 74 68 65 20 63 61 6c 6c 65 72 2c 20   by the caller, 
4580: 6f 72 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52 4f  or Z_STREAM_ERRO
4590: 52 20 69 66 20 74 68 65 20 70 61 72 61 6d 65 74  R if the paramet
45a0: 65 72 73 20 61 72 65 0a 20 20 20 69 6e 76 61 6c  ers are.   inval
45b0: 69 64 2c 20 73 75 63 68 20 61 73 20 61 20 6e 75  id, such as a nu
45c0: 6c 6c 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ll pointer to th
45d0: 65 20 73 74 72 75 63 74 75 72 65 2e 20 20 6d 73  e structure.  ms
45e0: 67 20 69 73 20 73 65 74 20 74 6f 20 6e 75 6c 6c  g is set to null
45f0: 20 69 66 0a 20 20 20 74 68 65 72 65 20 69 73 20   if.   there is 
4600: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
4610: 2e 20 20 69 6e 66 6c 61 74 65 49 6e 69 74 20 64  .  inflateInit d
4620: 6f 65 73 20 6e 6f 74 20 70 65 72 66 6f 72 6d 20  oes not perform 
4630: 61 6e 79 20 64 65 63 6f 6d 70 72 65 73 73 69 6f  any decompressio
4640: 6e 0a 20 20 20 61 70 61 72 74 20 66 72 6f 6d 20  n.   apart from 
4650: 70 6f 73 73 69 62 6c 79 20 72 65 61 64 69 6e 67  possibly reading
4660: 20 74 68 65 20 7a 6c 69 62 20 68 65 61 64 65 72   the zlib header
4670: 20 69 66 20 70 72 65 73 65 6e 74 3a 20 61 63 74   if present: act
4680: 75 61 6c 20 64 65 63 6f 6d 70 72 65 73 73 69 6f  ual decompressio
4690: 6e 0a 20 20 20 77 69 6c 6c 20 62 65 20 64 6f 6e  n.   will be don
46a0: 65 20 62 79 20 69 6e 66 6c 61 74 65 28 29 2e 20  e by inflate(). 
46b0: 20 28 53 6f 20 6e 65 78 74 5f 69 6e 20 61 6e 64   (So next_in and
46c0: 20 61 76 61 69 6c 5f 69 6e 20 6d 61 79 20 62 65   avail_in may be
46d0: 20 6d 6f 64 69 66 69 65 64 2c 20 62 75 74 0a 20   modified, but. 
46e0: 20 20 6e 65 78 74 5f 6f 75 74 20 61 6e 64 20 61    next_out and a
46f0: 76 61 69 6c 5f 6f 75 74 20 61 72 65 20 75 6e 75  vail_out are unu
4700: 73 65 64 20 61 6e 64 20 75 6e 63 68 61 6e 67 65  sed and unchange
4710: 64 2e 29 20 54 68 65 20 63 75 72 72 65 6e 74 20  d.) The current 
4720: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 20  implementation. 
4730: 20 20 6f 66 20 69 6e 66 6c 61 74 65 49 6e 69 74    of inflateInit
4740: 28 29 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f 63  () does not proc
4750: 65 73 73 20 61 6e 79 20 68 65 61 64 65 72 20 69  ess any header i
4760: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d 2d 20 74 68  nformation -- th
4770: 61 74 20 69 73 20 64 65 66 65 72 72 65 64 0a 20  at is deferred. 
4780: 20 20 75 6e 74 69 6c 20 69 6e 66 6c 61 74 65 28    until inflate(
4790: 29 20 69 73 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  ) is called..*/.
47a0: 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45  ..ZEXTERN int ZE
47b0: 58 50 4f 52 54 20 69 6e 66 6c 61 74 65 20 4f 46  XPORT inflate OF
47c0: 28 28 7a 5f 73 74 72 65 61 6d 70 20 73 74 72 6d  ((z_streamp strm
47d0: 2c 20 69 6e 74 20 66 6c 75 73 68 29 29 3b 0a 2f  , int flush));./
47e0: 2a 0a 20 20 20 20 69 6e 66 6c 61 74 65 20 64 65  *.    inflate de
47f0: 63 6f 6d 70 72 65 73 73 65 73 20 61 73 20 6d 75  compresses as mu
4800: 63 68 20 64 61 74 61 20 61 73 20 70 6f 73 73 69  ch data as possi
4810: 62 6c 65 2c 20 61 6e 64 20 73 74 6f 70 73 20 77  ble, and stops w
4820: 68 65 6e 20 74 68 65 20 69 6e 70 75 74 0a 20 20  hen the input.  
4830: 62 75 66 66 65 72 20 62 65 63 6f 6d 65 73 20 65  buffer becomes e
4840: 6d 70 74 79 20 6f 72 20 74 68 65 20 6f 75 74 70  mpty or the outp
4850: 75 74 20 62 75 66 66 65 72 20 62 65 63 6f 6d 65  ut buffer become
4860: 73 20 66 75 6c 6c 2e 20 20 49 74 20 6d 61 79 20  s full.  It may 
4870: 69 6e 74 72 6f 64 75 63 65 0a 20 20 73 6f 6d 65  introduce.  some
4880: 20 6f 75 74 70 75 74 20 6c 61 74 65 6e 63 79 20   output latency 
4890: 28 72 65 61 64 69 6e 67 20 69 6e 70 75 74 20 77  (reading input w
48a0: 69 74 68 6f 75 74 20 70 72 6f 64 75 63 69 6e 67  ithout producing
48b0: 20 61 6e 79 20 6f 75 74 70 75 74 29 20 65 78 63   any output) exc
48c0: 65 70 74 20 77 68 65 6e 0a 20 20 66 6f 72 63 65  ept when.  force
48d0: 64 20 74 6f 20 66 6c 75 73 68 2e 0a 0a 20 20 54  d to flush...  T
48e0: 68 65 20 64 65 74 61 69 6c 65 64 20 73 65 6d 61  he detailed sema
48f0: 6e 74 69 63 73 20 61 72 65 20 61 73 20 66 6f 6c  ntics are as fol
4900: 6c 6f 77 73 2e 20 20 69 6e 66 6c 61 74 65 20 70  lows.  inflate p
4910: 65 72 66 6f 72 6d 73 20 6f 6e 65 20 6f 72 20 62  erforms one or b
4920: 6f 74 68 20 6f 66 20 74 68 65 0a 20 20 66 6f 6c  oth of the.  fol
4930: 6c 6f 77 69 6e 67 20 61 63 74 69 6f 6e 73 3a 0a  lowing actions:.
4940: 0a 20 20 2d 20 44 65 63 6f 6d 70 72 65 73 73 20  .  - Decompress 
4950: 6d 6f 72 65 20 69 6e 70 75 74 20 73 74 61 72 74  more input start
4960: 69 6e 67 20 61 74 20 6e 65 78 74 5f 69 6e 20 61  ing at next_in a
4970: 6e 64 20 75 70 64 61 74 65 20 6e 65 78 74 5f 69  nd update next_i
4980: 6e 20 61 6e 64 20 61 76 61 69 6c 5f 69 6e 0a 20  n and avail_in. 
4990: 20 20 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 20     accordingly. 
49a0: 20 49 66 20 6e 6f 74 20 61 6c 6c 20 69 6e 70 75   If not all inpu
49b0: 74 20 63 61 6e 20 62 65 20 70 72 6f 63 65 73 73  t can be process
49c0: 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 72  ed (because ther
49d0: 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 65 6e 6f  e is not.    eno
49e0: 75 67 68 20 72 6f 6f 6d 20 69 6e 20 74 68 65 20  ugh room in the 
49f0: 6f 75 74 70 75 74 20 62 75 66 66 65 72 29 2c 20  output buffer), 
4a00: 6e 65 78 74 5f 69 6e 20 69 73 20 75 70 64 61 74  next_in is updat
4a10: 65 64 20 61 6e 64 20 70 72 6f 63 65 73 73 69 6e  ed and processin
4a20: 67 20 77 69 6c 6c 0a 20 20 20 20 72 65 73 75 6d  g will.    resum
4a30: 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 20  e at this point 
4a40: 66 6f 72 20 74 68 65 20 6e 65 78 74 20 63 61 6c  for the next cal
4a50: 6c 20 6f 66 20 69 6e 66 6c 61 74 65 28 29 2e 0a  l of inflate()..
4a60: 0a 20 20 2d 20 50 72 6f 76 69 64 65 20 6d 6f 72  .  - Provide mor
4a70: 65 20 6f 75 74 70 75 74 20 73 74 61 72 74 69 6e  e output startin
4a80: 67 20 61 74 20 6e 65 78 74 5f 6f 75 74 20 61 6e  g at next_out an
4a90: 64 20 75 70 64 61 74 65 20 6e 65 78 74 5f 6f 75  d update next_ou
4aa0: 74 20 61 6e 64 20 61 76 61 69 6c 5f 6f 75 74 0a  t and avail_out.
4ab0: 20 20 20 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e      accordingly.
4ac0: 20 20 69 6e 66 6c 61 74 65 28 29 20 70 72 6f 76    inflate() prov
4ad0: 69 64 65 73 20 61 73 20 6d 75 63 68 20 6f 75 74  ides as much out
4ae0: 70 75 74 20 61 73 20 70 6f 73 73 69 62 6c 65 2c  put as possible,
4af0: 20 75 6e 74 69 6c 20 74 68 65 72 65 20 69 73 0a   until there is.
4b00: 20 20 20 20 6e 6f 20 6d 6f 72 65 20 69 6e 70 75      no more inpu
4b10: 74 20 64 61 74 61 20 6f 72 20 6e 6f 20 6d 6f 72  t data or no mor
4b20: 65 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 6f  e space in the o
4b30: 75 74 70 75 74 20 62 75 66 66 65 72 20 28 73 65  utput buffer (se
4b40: 65 20 62 65 6c 6f 77 20 61 62 6f 75 74 0a 20 20  e below about.  
4b50: 20 20 74 68 65 20 66 6c 75 73 68 20 70 61 72 61    the flush para
4b60: 6d 65 74 65 72 29 2e 0a 0a 20 20 20 20 42 65 66  meter)...    Bef
4b70: 6f 72 65 20 74 68 65 20 63 61 6c 6c 20 6f 66 20  ore the call of 
4b80: 69 6e 66 6c 61 74 65 28 29 2c 20 74 68 65 20 61  inflate(), the a
4b90: 70 70 6c 69 63 61 74 69 6f 6e 20 73 68 6f 75 6c  pplication shoul
4ba0: 64 20 65 6e 73 75 72 65 20 74 68 61 74 20 61 74  d ensure that at
4bb0: 20 6c 65 61 73 74 0a 20 20 6f 6e 65 20 6f 66 20   least.  one of 
4bc0: 74 68 65 20 61 63 74 69 6f 6e 73 20 69 73 20 70  the actions is p
4bd0: 6f 73 73 69 62 6c 65 2c 20 62 79 20 70 72 6f 76  ossible, by prov
4be0: 69 64 69 6e 67 20 6d 6f 72 65 20 69 6e 70 75 74  iding more input
4bf0: 20 61 6e 64 2f 6f 72 20 63 6f 6e 73 75 6d 69 6e   and/or consumin
4c00: 67 20 6d 6f 72 65 0a 20 20 6f 75 74 70 75 74 2c  g more.  output,
4c10: 20 61 6e 64 20 75 70 64 61 74 69 6e 67 20 74 68   and updating th
4c20: 65 20 6e 65 78 74 5f 2a 20 61 6e 64 20 61 76 61  e next_* and ava
4c30: 69 6c 5f 2a 20 76 61 6c 75 65 73 20 61 63 63 6f  il_* values acco
4c40: 72 64 69 6e 67 6c 79 2e 20 20 54 68 65 0a 20 20  rdingly.  The.  
4c50: 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20  application can 
4c60: 63 6f 6e 73 75 6d 65 20 74 68 65 20 75 6e 63 6f  consume the unco
4c70: 6d 70 72 65 73 73 65 64 20 6f 75 74 70 75 74 20  mpressed output 
4c80: 77 68 65 6e 20 69 74 20 77 61 6e 74 73 2c 20 66  when it wants, f
4c90: 6f 72 20 65 78 61 6d 70 6c 65 0a 20 20 77 68 65  or example.  whe
4ca0: 6e 20 74 68 65 20 6f 75 74 70 75 74 20 62 75 66  n the output buf
4cb0: 66 65 72 20 69 73 20 66 75 6c 6c 20 28 61 76 61  fer is full (ava
4cc0: 69 6c 5f 6f 75 74 20 3d 3d 20 30 29 2c 20 6f 72  il_out == 0), or
4cd0: 20 61 66 74 65 72 20 65 61 63 68 20 63 61 6c 6c   after each call
4ce0: 20 6f 66 0a 20 20 69 6e 66 6c 61 74 65 28 29 2e   of.  inflate().
4cf0: 20 20 49 66 20 69 6e 66 6c 61 74 65 20 72 65 74    If inflate ret
4d00: 75 72 6e 73 20 5a 5f 4f 4b 20 61 6e 64 20 77 69  urns Z_OK and wi
4d10: 74 68 20 7a 65 72 6f 20 61 76 61 69 6c 5f 6f 75  th zero avail_ou
4d20: 74 2c 20 69 74 20 6d 75 73 74 20 62 65 0a 20 20  t, it must be.  
4d30: 63 61 6c 6c 65 64 20 61 67 61 69 6e 20 61 66 74  called again aft
4d40: 65 72 20 6d 61 6b 69 6e 67 20 72 6f 6f 6d 20 69  er making room i
4d50: 6e 20 74 68 65 20 6f 75 74 70 75 74 20 62 75 66  n the output buf
4d60: 66 65 72 20 62 65 63 61 75 73 65 20 74 68 65 72  fer because ther
4d70: 65 20 6d 69 67 68 74 20 62 65 0a 20 20 6d 6f 72  e might be.  mor
4d80: 65 20 6f 75 74 70 75 74 20 70 65 6e 64 69 6e 67  e output pending
4d90: 2e 0a 0a 20 20 20 20 54 68 65 20 66 6c 75 73 68  ...    The flush
4da0: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 69 6e   parameter of in
4db0: 66 6c 61 74 65 28 29 20 63 61 6e 20 62 65 20 5a  flate() can be Z
4dc0: 5f 4e 4f 5f 46 4c 55 53 48 2c 20 5a 5f 53 59 4e  _NO_FLUSH, Z_SYN
4dd0: 43 5f 46 4c 55 53 48 2c 20 5a 5f 46 49 4e 49 53  C_FLUSH, Z_FINIS
4de0: 48 2c 0a 20 20 5a 5f 42 4c 4f 43 4b 2c 20 6f 72  H,.  Z_BLOCK, or
4df0: 20 5a 5f 54 52 45 45 53 2e 20 20 5a 5f 53 59 4e   Z_TREES.  Z_SYN
4e00: 43 5f 46 4c 55 53 48 20 72 65 71 75 65 73 74 73  C_FLUSH requests
4e10: 20 74 68 61 74 20 69 6e 66 6c 61 74 65 28 29 20   that inflate() 
4e20: 66 6c 75 73 68 20 61 73 20 6d 75 63 68 0a 20 20  flush as much.  
4e30: 6f 75 74 70 75 74 20 61 73 20 70 6f 73 73 69 62  output as possib
4e40: 6c 65 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  le to the output
4e50: 20 62 75 66 66 65 72 2e 20 20 5a 5f 42 4c 4f 43   buffer.  Z_BLOC
4e60: 4b 20 72 65 71 75 65 73 74 73 20 74 68 61 74 20  K requests that 
4e70: 69 6e 66 6c 61 74 65 28 29 0a 20 20 73 74 6f 70  inflate().  stop
4e80: 20 69 66 20 61 6e 64 20 77 68 65 6e 20 69 74 20   if and when it 
4e90: 67 65 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  gets to the next
4ea0: 20 64 65 66 6c 61 74 65 20 62 6c 6f 63 6b 20 62   deflate block b
4eb0: 6f 75 6e 64 61 72 79 2e 20 20 57 68 65 6e 20 64  oundary.  When d
4ec0: 65 63 6f 64 69 6e 67 0a 20 20 74 68 65 20 7a 6c  ecoding.  the zl
4ed0: 69 62 20 6f 72 20 67 7a 69 70 20 66 6f 72 6d 61  ib or gzip forma
4ee0: 74 2c 20 74 68 69 73 20 77 69 6c 6c 20 63 61 75  t, this will cau
4ef0: 73 65 20 69 6e 66 6c 61 74 65 28 29 20 74 6f 20  se inflate() to 
4f00: 72 65 74 75 72 6e 20 69 6d 6d 65 64 69 61 74 65  return immediate
4f10: 6c 79 0a 20 20 61 66 74 65 72 20 74 68 65 20 68  ly.  after the h
4f20: 65 61 64 65 72 20 61 6e 64 20 62 65 66 6f 72 65  eader and before
4f30: 20 74 68 65 20 66 69 72 73 74 20 62 6c 6f 63 6b   the first block
4f40: 2e 20 20 57 68 65 6e 20 64 6f 69 6e 67 20 61 20  .  When doing a 
4f50: 72 61 77 20 69 6e 66 6c 61 74 65 2c 0a 20 20 69  raw inflate,.  i
4f60: 6e 66 6c 61 74 65 28 29 20 77 69 6c 6c 20 67 6f  nflate() will go
4f70: 20 61 68 65 61 64 20 61 6e 64 20 70 72 6f 63 65   ahead and proce
4f80: 73 73 20 74 68 65 20 66 69 72 73 74 20 62 6c 6f  ss the first blo
4f90: 63 6b 2c 20 61 6e 64 20 77 69 6c 6c 20 72 65 74  ck, and will ret
4fa0: 75 72 6e 20 77 68 65 6e 20 69 74 0a 20 20 67 65  urn when it.  ge
4fb0: 74 73 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ts to the end of
4fc0: 20 74 68 61 74 20 62 6c 6f 63 6b 2c 20 6f 72 20   that block, or 
4fd0: 77 68 65 6e 20 69 74 20 72 75 6e 73 20 6f 75 74  when it runs out
4fe0: 20 6f 66 20 64 61 74 61 2e 0a 0a 20 20 20 20 54   of data...    T
4ff0: 68 65 20 5a 5f 42 4c 4f 43 4b 20 6f 70 74 69 6f  he Z_BLOCK optio
5000: 6e 20 61 73 73 69 73 74 73 20 69 6e 20 61 70 70  n assists in app
5010: 65 6e 64 69 6e 67 20 74 6f 20 6f 72 20 63 6f 6d  ending to or com
5020: 62 69 6e 69 6e 67 20 64 65 66 6c 61 74 65 20 73  bining deflate s
5030: 74 72 65 61 6d 73 2e 0a 20 20 41 6c 73 6f 20 74  treams..  Also t
5040: 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68 69 73  o assist in this
5050: 2c 20 6f 6e 20 72 65 74 75 72 6e 20 69 6e 66 6c  , on return infl
5060: 61 74 65 28 29 20 77 69 6c 6c 20 73 65 74 20 73  ate() will set s
5070: 74 72 6d 2d 3e 64 61 74 61 5f 74 79 70 65 20 74  trm->data_type t
5080: 6f 20 74 68 65 0a 20 20 6e 75 6d 62 65 72 20 6f  o the.  number o
5090: 66 20 75 6e 75 73 65 64 20 62 69 74 73 20 69 6e  f unused bits in
50a0: 20 74 68 65 20 6c 61 73 74 20 62 79 74 65 20 74   the last byte t
50b0: 61 6b 65 6e 20 66 72 6f 6d 20 73 74 72 6d 2d 3e  aken from strm->
50c0: 6e 65 78 74 5f 69 6e 2c 20 70 6c 75 73 20 36 34  next_in, plus 64
50d0: 20 69 66 0a 20 20 69 6e 66 6c 61 74 65 28 29 20   if.  inflate() 
50e0: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 64 65 63  is currently dec
50f0: 6f 64 69 6e 67 20 74 68 65 20 6c 61 73 74 20 62  oding the last b
5100: 6c 6f 63 6b 20 69 6e 20 74 68 65 20 64 65 66 6c  lock in the defl
5110: 61 74 65 20 73 74 72 65 61 6d 2c 20 70 6c 75 73  ate stream, plus
5120: 0a 20 20 31 32 38 20 69 66 20 69 6e 66 6c 61 74  .  128 if inflat
5130: 65 28 29 20 72 65 74 75 72 6e 65 64 20 69 6d 6d  e() returned imm
5140: 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 64  ediately after d
5150: 65 63 6f 64 69 6e 67 20 61 6e 20 65 6e 64 2d 6f  ecoding an end-o
5160: 66 2d 62 6c 6f 63 6b 20 63 6f 64 65 20 6f 72 0a  f-block code or.
5170: 20 20 64 65 63 6f 64 69 6e 67 20 74 68 65 20 63    decoding the c
5180: 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 75  omplete header u
5190: 70 20 74 6f 20 6a 75 73 74 20 62 65 66 6f 72 65  p to just before
51a0: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
51b0: 6f 66 20 74 68 65 20 64 65 66 6c 61 74 65 0a 20  of the deflate. 
51c0: 20 73 74 72 65 61 6d 2e 20 20 54 68 65 20 65 6e   stream.  The en
51d0: 64 2d 6f 66 2d 62 6c 6f 63 6b 20 77 69 6c 6c 20  d-of-block will 
51e0: 6e 6f 74 20 62 65 20 69 6e 64 69 63 61 74 65 64  not be indicated
51f0: 20 75 6e 74 69 6c 20 61 6c 6c 20 6f 66 20 74 68   until all of th
5200: 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 0a 20  e uncompressed. 
5210: 20 64 61 74 61 20 66 72 6f 6d 20 74 68 61 74 20   data from that 
5220: 62 6c 6f 63 6b 20 68 61 73 20 62 65 65 6e 20 77  block has been w
5230: 72 69 74 74 65 6e 20 74 6f 20 73 74 72 6d 2d 3e  ritten to strm->
5240: 6e 65 78 74 5f 6f 75 74 2e 20 20 54 68 65 20 6e  next_out.  The n
5250: 75 6d 62 65 72 20 6f 66 0a 20 20 75 6e 75 73 65  umber of.  unuse
5260: 64 20 62 69 74 73 20 6d 61 79 20 69 6e 20 67 65  d bits may in ge
5270: 6e 65 72 61 6c 20 62 65 20 67 72 65 61 74 65 72  neral be greater
5280: 20 74 68 61 6e 20 73 65 76 65 6e 2c 20 65 78 63   than seven, exc
5290: 65 70 74 20 77 68 65 6e 20 62 69 74 20 37 20 6f  ept when bit 7 o
52a0: 66 0a 20 20 64 61 74 61 5f 74 79 70 65 20 69 73  f.  data_type is
52b0: 20 73 65 74 2c 20 69 6e 20 77 68 69 63 68 20 63   set, in which c
52c0: 61 73 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ase the number o
52d0: 66 20 75 6e 75 73 65 64 20 62 69 74 73 20 77 69  f unused bits wi
52e0: 6c 6c 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a  ll be less than.
52f0: 20 20 65 69 67 68 74 2e 20 20 64 61 74 61 5f 74    eight.  data_t
5300: 79 70 65 20 69 73 20 73 65 74 20 61 73 20 6e 6f  ype is set as no
5310: 74 65 64 20 68 65 72 65 20 65 76 65 72 79 20 74  ted here every t
5320: 69 6d 65 20 69 6e 66 6c 61 74 65 28 29 20 72 65  ime inflate() re
5330: 74 75 72 6e 73 20 66 6f 72 20 61 6c 6c 0a 20 20  turns for all.  
5340: 66 6c 75 73 68 20 6f 70 74 69 6f 6e 73 2c 20 61  flush options, a
5350: 6e 64 20 73 6f 20 63 61 6e 20 62 65 20 75 73 65  nd so can be use
5360: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5370: 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 63 75 72  he amount of cur
5380: 72 65 6e 74 6c 79 0a 20 20 63 6f 6e 73 75 6d 65  rently.  consume
5390: 64 20 69 6e 70 75 74 20 69 6e 20 62 69 74 73 2e  d input in bits.
53a0: 0a 0a 20 20 20 20 54 68 65 20 5a 5f 54 52 45 45  ..    The Z_TREE
53b0: 53 20 6f 70 74 69 6f 6e 20 62 65 68 61 76 65 73  S option behaves
53c0: 20 61 73 20 5a 5f 42 4c 4f 43 4b 20 64 6f 65 73   as Z_BLOCK does
53d0: 2c 20 62 75 74 20 69 74 20 61 6c 73 6f 20 72 65  , but it also re
53e0: 74 75 72 6e 73 20 77 68 65 6e 20 74 68 65 0a 20  turns when the. 
53f0: 20 65 6e 64 20 6f 66 20 65 61 63 68 20 64 65 66   end of each def
5400: 6c 61 74 65 20 62 6c 6f 63 6b 20 68 65 61 64 65  late block heade
5410: 72 20 69 73 20 72 65 61 63 68 65 64 2c 20 62 65  r is reached, be
5420: 66 6f 72 65 20 61 6e 79 20 61 63 74 75 61 6c 20  fore any actual 
5430: 64 61 74 61 20 69 6e 20 74 68 61 74 0a 20 20 62  data in that.  b
5440: 6c 6f 63 6b 20 69 73 20 64 65 63 6f 64 65 64 2e  lock is decoded.
5450: 20 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 74 68    This allows th
5460: 65 20 63 61 6c 6c 65 72 20 74 6f 20 64 65 74 65  e caller to dete
5470: 72 6d 69 6e 65 20 74 68 65 20 6c 65 6e 67 74 68  rmine the length
5480: 20 6f 66 20 74 68 65 0a 20 20 64 65 66 6c 61 74   of the.  deflat
5490: 65 20 62 6c 6f 63 6b 20 68 65 61 64 65 72 20 66  e block header f
54a0: 6f 72 20 6c 61 74 65 72 20 75 73 65 20 69 6e 20  or later use in 
54b0: 72 61 6e 64 6f 6d 20 61 63 63 65 73 73 20 77 69  random access wi
54c0: 74 68 69 6e 20 61 20 64 65 66 6c 61 74 65 20 62  thin a deflate b
54d0: 6c 6f 63 6b 2e 0a 20 20 32 35 36 20 69 73 20 61  lock..  256 is a
54e0: 64 64 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75  dded to the valu
54f0: 65 20 6f 66 20 73 74 72 6d 2d 3e 64 61 74 61 5f  e of strm->data_
5500: 74 79 70 65 20 77 68 65 6e 20 69 6e 66 6c 61 74  type when inflat
5510: 65 28 29 20 72 65 74 75 72 6e 73 0a 20 20 69 6d  e() returns.  im
5520: 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
5530: 72 65 61 63 68 69 6e 67 20 74 68 65 20 65 6e 64  reaching the end
5540: 20 6f 66 20 74 68 65 20 64 65 66 6c 61 74 65 20   of the deflate 
5550: 62 6c 6f 63 6b 20 68 65 61 64 65 72 2e 0a 0a 20  block header... 
5560: 20 20 20 69 6e 66 6c 61 74 65 28 29 20 73 68 6f     inflate() sho
5570: 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 62 65 20  uld normally be 
5580: 63 61 6c 6c 65 64 20 75 6e 74 69 6c 20 69 74 20  called until it 
5590: 72 65 74 75 72 6e 73 20 5a 5f 53 54 52 45 41 4d  returns Z_STREAM
55a0: 5f 45 4e 44 20 6f 72 20 61 6e 0a 20 20 65 72 72  _END or an.  err
55b0: 6f 72 2e 20 20 48 6f 77 65 76 65 72 20 69 66 20  or.  However if 
55c0: 61 6c 6c 20 64 65 63 6f 6d 70 72 65 73 73 69 6f  all decompressio
55d0: 6e 20 69 73 20 74 6f 20 62 65 20 70 65 72 66 6f  n is to be perfo
55e0: 72 6d 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  rmed in a single
55f0: 20 73 74 65 70 20 28 61 0a 20 20 73 69 6e 67 6c   step (a.  singl
5600: 65 20 63 61 6c 6c 20 6f 66 20 69 6e 66 6c 61 74  e call of inflat
5610: 65 29 2c 20 74 68 65 20 70 61 72 61 6d 65 74 65  e), the paramete
5620: 72 20 66 6c 75 73 68 20 73 68 6f 75 6c 64 20 62  r flush should b
5630: 65 20 73 65 74 20 74 6f 20 5a 5f 46 49 4e 49 53  e set to Z_FINIS
5640: 48 2e 20 20 49 6e 0a 20 20 74 68 69 73 20 63 61  H.  In.  this ca
5650: 73 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 69  se all pending i
5660: 6e 70 75 74 20 69 73 20 70 72 6f 63 65 73 73 65  nput is processe
5670: 64 20 61 6e 64 20 61 6c 6c 20 70 65 6e 64 69 6e  d and all pendin
5680: 67 20 6f 75 74 70 75 74 20 69 73 20 66 6c 75 73  g output is flus
5690: 68 65 64 3b 0a 20 20 61 76 61 69 6c 5f 6f 75 74  hed;.  avail_out
56a0: 20 6d 75 73 74 20 62 65 20 6c 61 72 67 65 20 65   must be large e
56b0: 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 6c  nough to hold al
56c0: 6c 20 6f 66 20 74 68 65 20 75 6e 63 6f 6d 70 72  l of the uncompr
56d0: 65 73 73 65 64 20 64 61 74 61 20 66 6f 72 20 74  essed data for t
56e0: 68 65 0a 20 20 6f 70 65 72 61 74 69 6f 6e 20 74  he.  operation t
56f0: 6f 20 63 6f 6d 70 6c 65 74 65 2e 20 20 28 54 68  o complete.  (Th
5700: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 75 6e  e size of the un
5710: 63 6f 6d 70 72 65 73 73 65 64 20 64 61 74 61 20  compressed data 
5720: 6d 61 79 20 68 61 76 65 20 62 65 65 6e 0a 20 20  may have been.  
5730: 73 61 76 65 64 20 62 79 20 74 68 65 20 63 6f 6d  saved by the com
5740: 70 72 65 73 73 6f 72 20 66 6f 72 20 74 68 69 73  pressor for this
5750: 20 70 75 72 70 6f 73 65 2e 29 20 54 68 65 20 75   purpose.) The u
5760: 73 65 20 6f 66 20 5a 5f 46 49 4e 49 53 48 20 69  se of Z_FINISH i
5770: 73 20 6e 6f 74 0a 20 20 72 65 71 75 69 72 65 64  s not.  required
5780: 20 74 6f 20 70 65 72 66 6f 72 6d 20 61 6e 20 69   to perform an i
5790: 6e 66 6c 61 74 69 6f 6e 20 69 6e 20 6f 6e 65 20  nflation in one 
57a0: 73 74 65 70 2e 20 20 48 6f 77 65 76 65 72 20 69  step.  However i
57b0: 74 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  t may be used to
57c0: 0a 20 20 69 6e 66 6f 72 6d 20 69 6e 66 6c 61 74  .  inform inflat
57d0: 65 20 74 68 61 74 20 61 20 66 61 73 74 65 72 20  e that a faster 
57e0: 61 70 70 72 6f 61 63 68 20 63 61 6e 20 62 65 20  approach can be 
57f0: 75 73 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  used for the sin
5800: 67 6c 65 20 69 6e 66 6c 61 74 65 28 29 0a 20 20  gle inflate().  
5810: 63 61 6c 6c 2e 20 20 5a 5f 46 49 4e 49 53 48 20  call.  Z_FINISH 
5820: 61 6c 73 6f 20 69 6e 66 6f 72 6d 73 20 69 6e 66  also informs inf
5830: 6c 61 74 65 20 74 6f 20 6e 6f 74 20 6d 61 69 6e  late to not main
5840: 74 61 69 6e 20 61 20 73 6c 69 64 69 6e 67 20 77  tain a sliding w
5850: 69 6e 64 6f 77 20 69 66 20 74 68 65 0a 20 20 73  indow if the.  s
5860: 74 72 65 61 6d 20 63 6f 6d 70 6c 65 74 65 73 2c  tream completes,
5870: 20 77 68 69 63 68 20 72 65 64 75 63 65 73 20 69   which reduces i
5880: 6e 66 6c 61 74 65 27 73 20 6d 65 6d 6f 72 79 20  nflate's memory 
5890: 66 6f 6f 74 70 72 69 6e 74 2e 20 20 49 66 20 74  footprint.  If t
58a0: 68 65 20 73 74 72 65 61 6d 0a 20 20 64 6f 65 73  he stream.  does
58b0: 20 6e 6f 74 20 63 6f 6d 70 6c 65 74 65 2c 20 65   not complete, e
58c0: 69 74 68 65 72 20 62 65 63 61 75 73 65 20 6e 6f  ither because no
58d0: 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 73 74 72  t all of the str
58e0: 65 61 6d 20 69 73 20 70 72 6f 76 69 64 65 64 20  eam is provided 
58f0: 6f 72 20 6e 6f 74 0a 20 20 65 6e 6f 75 67 68 20  or not.  enough 
5900: 6f 75 74 70 75 74 20 73 70 61 63 65 20 69 73 20  output space is 
5910: 70 72 6f 76 69 64 65 64 2c 20 74 68 65 6e 20 61  provided, then a
5920: 20 73 6c 69 64 69 6e 67 20 77 69 6e 64 6f 77 20   sliding window 
5930: 77 69 6c 6c 20 62 65 20 61 6c 6c 6f 63 61 74 65  will be allocate
5940: 64 20 61 6e 64 0a 20 20 69 6e 66 6c 61 74 65 28  d and.  inflate(
5950: 29 20 63 61 6e 20 62 65 20 63 61 6c 6c 65 64 20  ) can be called 
5960: 61 67 61 69 6e 20 74 6f 20 63 6f 6e 74 69 6e 75  again to continu
5970: 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  e the operation 
5980: 61 73 20 69 66 20 5a 5f 4e 4f 5f 46 4c 55 53 48  as if Z_NO_FLUSH
5990: 20 68 61 64 0a 20 20 62 65 65 6e 20 75 73 65 64   had.  been used
59a0: 2e 0a 0a 20 20 20 20 20 49 6e 20 74 68 69 73 20  ...     In this 
59b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
59c0: 69 6e 66 6c 61 74 65 28 29 20 61 6c 77 61 79 73  inflate() always
59d0: 20 66 6c 75 73 68 65 73 20 61 73 20 6d 75 63 68   flushes as much
59e0: 20 6f 75 74 70 75 74 20 61 73 0a 20 20 70 6f 73   output as.  pos
59f0: 73 69 62 6c 65 20 74 6f 20 74 68 65 20 6f 75 74  sible to the out
5a00: 70 75 74 20 62 75 66 66 65 72 2c 20 61 6e 64 20  put buffer, and 
5a10: 61 6c 77 61 79 73 20 75 73 65 73 20 74 68 65 20  always uses the 
5a20: 66 61 73 74 65 72 20 61 70 70 72 6f 61 63 68 20  faster approach 
5a30: 6f 6e 20 74 68 65 0a 20 20 66 69 72 73 74 20 63  on the.  first c
5a40: 61 6c 6c 2e 20 20 53 6f 20 74 68 65 20 65 66 66  all.  So the eff
5a50: 65 63 74 73 20 6f 66 20 74 68 65 20 66 6c 75 73  ects of the flus
5a60: 68 20 70 61 72 61 6d 65 74 65 72 20 69 6e 20 74  h parameter in t
5a70: 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  his implementati
5a80: 6f 6e 20 61 72 65 0a 20 20 6f 6e 20 74 68 65 20  on are.  on the 
5a90: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
5aa0: 69 6e 66 6c 61 74 65 28 29 20 61 73 20 6e 6f 74  inflate() as not
5ab0: 65 64 20 62 65 6c 6f 77 2c 20 77 68 65 6e 20 69  ed below, when i
5ac0: 6e 66 6c 61 74 65 28 29 20 72 65 74 75 72 6e 73  nflate() returns
5ad0: 20 65 61 72 6c 79 0a 20 20 77 68 65 6e 20 5a 5f   early.  when Z_
5ae0: 42 4c 4f 43 4b 20 6f 72 20 5a 5f 54 52 45 45 53  BLOCK or Z_TREES
5af0: 20 69 73 20 75 73 65 64 2c 20 61 6e 64 20 77 68   is used, and wh
5b00: 65 6e 20 69 6e 66 6c 61 74 65 28 29 20 61 76 6f  en inflate() avo
5b10: 69 64 73 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ids the allocati
5b20: 6f 6e 20 6f 66 0a 20 20 6d 65 6d 6f 72 79 20 66  on of.  memory f
5b30: 6f 72 20 61 20 73 6c 69 64 69 6e 67 20 77 69 6e  or a sliding win
5b40: 64 6f 77 20 77 68 65 6e 20 5a 5f 46 49 4e 49 53  dow when Z_FINIS
5b50: 48 20 69 73 20 75 73 65 64 2e 0a 0a 20 20 20 20  H is used...    
5b60: 20 49 66 20 61 20 70 72 65 73 65 74 20 64 69 63   If a preset dic
5b70: 74 69 6f 6e 61 72 79 20 69 73 20 6e 65 65 64 65  tionary is neede
5b80: 64 20 61 66 74 65 72 20 74 68 69 73 20 63 61 6c  d after this cal
5b90: 6c 20 28 73 65 65 20 69 6e 66 6c 61 74 65 53 65  l (see inflateSe
5ba0: 74 44 69 63 74 69 6f 6e 61 72 79 0a 20 20 62 65  tDictionary.  be
5bb0: 6c 6f 77 29 2c 20 69 6e 66 6c 61 74 65 20 73 65  low), inflate se
5bc0: 74 73 20 73 74 72 6d 2d 3e 61 64 6c 65 72 20 74  ts strm->adler t
5bd0: 6f 20 74 68 65 20 41 64 6c 65 72 2d 33 32 20 63  o the Adler-32 c
5be0: 68 65 63 6b 73 75 6d 20 6f 66 20 74 68 65 20 64  hecksum of the d
5bf0: 69 63 74 69 6f 6e 61 72 79 0a 20 20 63 68 6f 73  ictionary.  chos
5c00: 65 6e 20 62 79 20 74 68 65 20 63 6f 6d 70 72 65  en by the compre
5c10: 73 73 6f 72 20 61 6e 64 20 72 65 74 75 72 6e 73  ssor and returns
5c20: 20 5a 5f 4e 45 45 44 5f 44 49 43 54 3b 20 6f 74   Z_NEED_DICT; ot
5c30: 68 65 72 77 69 73 65 20 69 74 20 73 65 74 73 0a  herwise it sets.
5c40: 20 20 73 74 72 6d 2d 3e 61 64 6c 65 72 20 74 6f    strm->adler to
5c50: 20 74 68 65 20 41 64 6c 65 72 2d 33 32 20 63 68   the Adler-32 ch
5c60: 65 63 6b 73 75 6d 20 6f 66 20 61 6c 6c 20 6f 75  ecksum of all ou
5c70: 74 70 75 74 20 70 72 6f 64 75 63 65 64 20 73 6f  tput produced so
5c80: 20 66 61 72 20 28 74 68 61 74 20 69 73 2c 0a 20   far (that is,. 
5c90: 20 74 6f 74 61 6c 5f 6f 75 74 20 62 79 74 65 73   total_out bytes
5ca0: 29 20 61 6e 64 20 72 65 74 75 72 6e 73 20 5a 5f  ) and returns Z_
5cb0: 4f 4b 2c 20 5a 5f 53 54 52 45 41 4d 5f 45 4e 44  OK, Z_STREAM_END
5cc0: 20 6f 72 20 61 6e 20 65 72 72 6f 72 20 63 6f 64   or an error cod
5cd0: 65 20 61 73 20 64 65 73 63 72 69 62 65 64 0a 20  e as described. 
5ce0: 20 62 65 6c 6f 77 2e 20 20 41 74 20 74 68 65 20   below.  At the 
5cf0: 65 6e 64 20 6f 66 20 74 68 65 20 73 74 72 65 61  end of the strea
5d00: 6d 2c 20 69 6e 66 6c 61 74 65 28 29 20 63 68 65  m, inflate() che
5d10: 63 6b 73 20 74 68 61 74 20 69 74 73 20 63 6f 6d  cks that its com
5d20: 70 75 74 65 64 20 61 64 6c 65 72 33 32 0a 20 20  puted adler32.  
5d30: 63 68 65 63 6b 73 75 6d 20 69 73 20 65 71 75 61  checksum is equa
5d40: 6c 20 74 6f 20 74 68 61 74 20 73 61 76 65 64 20  l to that saved 
5d50: 62 79 20 74 68 65 20 63 6f 6d 70 72 65 73 73 6f  by the compresso
5d60: 72 20 61 6e 64 20 72 65 74 75 72 6e 73 20 5a 5f  r and returns Z_
5d70: 53 54 52 45 41 4d 5f 45 4e 44 0a 20 20 6f 6e 6c  STREAM_END.  onl
5d80: 79 20 69 66 20 74 68 65 20 63 68 65 63 6b 73 75  y if the checksu
5d90: 6d 20 69 73 20 63 6f 72 72 65 63 74 2e 0a 0a 20  m is correct... 
5da0: 20 20 20 69 6e 66 6c 61 74 65 28 29 20 63 61 6e     inflate() can
5db0: 20 64 65 63 6f 6d 70 72 65 73 73 20 61 6e 64 20   decompress and 
5dc0: 63 68 65 63 6b 20 65 69 74 68 65 72 20 7a 6c 69  check either zli
5dd0: 62 2d 77 72 61 70 70 65 64 20 6f 72 20 67 7a 69  b-wrapped or gzi
5de0: 70 2d 77 72 61 70 70 65 64 0a 20 20 64 65 66 6c  p-wrapped.  defl
5df0: 61 74 65 20 64 61 74 61 2e 20 20 54 68 65 20 68  ate data.  The h
5e00: 65 61 64 65 72 20 74 79 70 65 20 69 73 20 64 65  eader type is de
5e10: 74 65 63 74 65 64 20 61 75 74 6f 6d 61 74 69 63  tected automatic
5e20: 61 6c 6c 79 2c 20 69 66 20 72 65 71 75 65 73 74  ally, if request
5e30: 65 64 20 77 68 65 6e 0a 20 20 69 6e 69 74 69 61  ed when.  initia
5e40: 6c 69 7a 69 6e 67 20 77 69 74 68 20 69 6e 66 6c  lizing with infl
5e50: 61 74 65 49 6e 69 74 32 28 29 2e 20 20 41 6e 79  ateInit2().  Any
5e60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e   information con
5e70: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 67 7a  tained in the gz
5e80: 69 70 0a 20 20 68 65 61 64 65 72 20 69 73 20 6e  ip.  header is n
5e90: 6f 74 20 72 65 74 61 69 6e 65 64 2c 20 73 6f 20  ot retained, so 
5ea0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61  applications tha
5eb0: 74 20 6e 65 65 64 20 74 68 61 74 20 69 6e 66 6f  t need that info
5ec0: 72 6d 61 74 69 6f 6e 20 73 68 6f 75 6c 64 0a 20  rmation should. 
5ed0: 20 69 6e 73 74 65 61 64 20 75 73 65 20 72 61 77   instead use raw
5ee0: 20 69 6e 66 6c 61 74 65 2c 20 73 65 65 20 69 6e   inflate, see in
5ef0: 66 6c 61 74 65 49 6e 69 74 32 28 29 20 62 65 6c  flateInit2() bel
5f00: 6f 77 2c 20 6f 72 20 69 6e 66 6c 61 74 65 42 61  ow, or inflateBa
5f10: 63 6b 28 29 20 61 6e 64 0a 20 20 70 65 72 66 6f  ck() and.  perfo
5f20: 72 6d 20 74 68 65 69 72 20 6f 77 6e 20 70 72 6f  rm their own pro
5f30: 63 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 67  cessing of the g
5f40: 7a 69 70 20 68 65 61 64 65 72 20 61 6e 64 20 74  zip header and t
5f50: 72 61 69 6c 65 72 2e 20 20 57 68 65 6e 20 70 72  railer.  When pr
5f60: 6f 63 65 73 73 69 6e 67 0a 20 20 67 7a 69 70 2d  ocessing.  gzip-
5f70: 77 72 61 70 70 65 64 20 64 65 66 6c 61 74 65 20  wrapped deflate 
5f80: 64 61 74 61 2c 20 73 74 72 6d 2d 3e 61 64 6c 65  data, strm->adle
5f90: 72 33 32 20 69 73 20 73 65 74 20 74 6f 20 74 68  r32 is set to th
5fa0: 65 20 43 52 43 2d 33 32 20 6f 66 20 74 68 65 20  e CRC-32 of the 
5fb0: 6f 75 74 70 75 74 0a 20 20 70 72 6f 64 75 63 74  output.  product
5fc0: 65 64 20 73 6f 20 66 61 72 2e 20 20 54 68 65 20  ed so far.  The 
5fd0: 43 52 43 2d 33 32 20 69 73 20 63 68 65 63 6b 65  CRC-32 is checke
5fe0: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 67 7a  d against the gz
5ff0: 69 70 20 74 72 61 69 6c 65 72 2e 0a 0a 20 20 20  ip trailer...   
6000: 20 69 6e 66 6c 61 74 65 28 29 20 72 65 74 75 72   inflate() retur
6010: 6e 73 20 5a 5f 4f 4b 20 69 66 20 73 6f 6d 65 20  ns Z_OK if some 
6020: 70 72 6f 67 72 65 73 73 20 68 61 73 20 62 65 65  progress has bee
6030: 6e 20 6d 61 64 65 20 28 6d 6f 72 65 20 69 6e 70  n made (more inp
6040: 75 74 20 70 72 6f 63 65 73 73 65 64 0a 20 20 6f  ut processed.  o
6050: 72 20 6d 6f 72 65 20 6f 75 74 70 75 74 20 70 72  r more output pr
6060: 6f 64 75 63 65 64 29 2c 20 5a 5f 53 54 52 45 41  oduced), Z_STREA
6070: 4d 5f 45 4e 44 20 69 66 20 74 68 65 20 65 6e 64  M_END if the end
6080: 20 6f 66 20 74 68 65 20 63 6f 6d 70 72 65 73 73   of the compress
6090: 65 64 20 64 61 74 61 20 68 61 73 0a 20 20 62 65  ed data has.  be
60a0: 65 6e 20 72 65 61 63 68 65 64 20 61 6e 64 20 61  en reached and a
60b0: 6c 6c 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20  ll uncompressed 
60c0: 6f 75 74 70 75 74 20 68 61 73 20 62 65 65 6e 20  output has been 
60d0: 70 72 6f 64 75 63 65 64 2c 20 5a 5f 4e 45 45 44  produced, Z_NEED
60e0: 5f 44 49 43 54 20 69 66 20 61 0a 20 20 70 72 65  _DICT if a.  pre
60f0: 73 65 74 20 64 69 63 74 69 6f 6e 61 72 79 20 69  set dictionary i
6100: 73 20 6e 65 65 64 65 64 20 61 74 20 74 68 69 73  s needed at this
6110: 20 70 6f 69 6e 74 2c 20 5a 5f 44 41 54 41 5f 45   point, Z_DATA_E
6120: 52 52 4f 52 20 69 66 20 74 68 65 20 69 6e 70 75  RROR if the inpu
6130: 74 20 64 61 74 61 20 77 61 73 0a 20 20 63 6f 72  t data was.  cor
6140: 72 75 70 74 65 64 20 28 69 6e 70 75 74 20 73 74  rupted (input st
6150: 72 65 61 6d 20 6e 6f 74 20 63 6f 6e 66 6f 72 6d  ream not conform
6160: 69 6e 67 20 74 6f 20 74 68 65 20 7a 6c 69 62 20  ing to the zlib 
6170: 66 6f 72 6d 61 74 20 6f 72 20 69 6e 63 6f 72 72  format or incorr
6180: 65 63 74 20 63 68 65 63 6b 0a 20 20 76 61 6c 75  ect check.  valu
6190: 65 29 2c 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52  e), Z_STREAM_ERR
61a0: 4f 52 20 69 66 20 74 68 65 20 73 74 72 65 61 6d  OR if the stream
61b0: 20 73 74 72 75 63 74 75 72 65 20 77 61 73 20 69   structure was i
61c0: 6e 63 6f 6e 73 69 73 74 65 6e 74 20 28 66 6f 72  nconsistent (for
61d0: 20 65 78 61 6d 70 6c 65 0a 20 20 6e 65 78 74 5f   example.  next_
61e0: 69 6e 20 6f 72 20 6e 65 78 74 5f 6f 75 74 20 77  in or next_out w
61f0: 61 73 20 5a 5f 4e 55 4c 4c 29 2c 20 5a 5f 4d 45  as Z_NULL), Z_ME
6200: 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65 72 65  M_ERROR if there
6210: 20 77 61 73 20 6e 6f 74 20 65 6e 6f 75 67 68 20   was not enough 
6220: 6d 65 6d 6f 72 79 2c 0a 20 20 5a 5f 42 55 46 5f  memory,.  Z_BUF_
6230: 45 52 52 4f 52 20 69 66 20 6e 6f 20 70 72 6f 67  ERROR if no prog
6240: 72 65 73 73 20 69 73 20 70 6f 73 73 69 62 6c 65  ress is possible
6250: 20 6f 72 20 69 66 20 74 68 65 72 65 20 77 61 73   or if there was
6260: 20 6e 6f 74 20 65 6e 6f 75 67 68 20 72 6f 6f 6d   not enough room
6270: 20 69 6e 20 74 68 65 0a 20 20 6f 75 74 70 75 74   in the.  output
6280: 20 62 75 66 66 65 72 20 77 68 65 6e 20 5a 5f 46   buffer when Z_F
6290: 49 4e 49 53 48 20 69 73 20 75 73 65 64 2e 20 20  INISH is used.  
62a0: 4e 6f 74 65 20 74 68 61 74 20 5a 5f 42 55 46 5f  Note that Z_BUF_
62b0: 45 52 52 4f 52 20 69 73 20 6e 6f 74 20 66 61 74  ERROR is not fat
62c0: 61 6c 2c 20 61 6e 64 0a 20 20 69 6e 66 6c 61 74  al, and.  inflat
62d0: 65 28 29 20 63 61 6e 20 62 65 20 63 61 6c 6c 65  e() can be calle
62e0: 64 20 61 67 61 69 6e 20 77 69 74 68 20 6d 6f 72  d again with mor
62f0: 65 20 69 6e 70 75 74 20 61 6e 64 20 6d 6f 72 65  e input and more
6300: 20 6f 75 74 70 75 74 20 73 70 61 63 65 20 74 6f   output space to
6310: 0a 20 20 63 6f 6e 74 69 6e 75 65 20 64 65 63 6f  .  continue deco
6320: 6d 70 72 65 73 73 69 6e 67 2e 20 20 49 66 20 5a  mpressing.  If Z
6330: 5f 44 41 54 41 5f 45 52 52 4f 52 20 69 73 20 72  _DATA_ERROR is r
6340: 65 74 75 72 6e 65 64 2c 20 74 68 65 20 61 70 70  eturned, the app
6350: 6c 69 63 61 74 69 6f 6e 20 6d 61 79 0a 20 20 74  lication may.  t
6360: 68 65 6e 20 63 61 6c 6c 20 69 6e 66 6c 61 74 65  hen call inflate
6370: 53 79 6e 63 28 29 20 74 6f 20 6c 6f 6f 6b 20 66  Sync() to look f
6380: 6f 72 20 61 20 67 6f 6f 64 20 63 6f 6d 70 72 65  or a good compre
6390: 73 73 69 6f 6e 20 62 6c 6f 63 6b 20 69 66 20 61  ssion block if a
63a0: 20 70 61 72 74 69 61 6c 0a 20 20 72 65 63 6f 76   partial.  recov
63b0: 65 72 79 20 6f 66 20 74 68 65 20 64 61 74 61 20  ery of the data 
63c0: 69 73 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 0a  is desired..*/..
63d0: 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45 58  .ZEXTERN int ZEX
63e0: 50 4f 52 54 20 69 6e 66 6c 61 74 65 45 6e 64 20  PORT inflateEnd 
63f0: 4f 46 28 28 7a 5f 73 74 72 65 61 6d 70 20 73 74  OF((z_streamp st
6400: 72 6d 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 41 6c  rm));./*.     Al
6410: 6c 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  l dynamically al
6420: 6c 6f 63 61 74 65 64 20 64 61 74 61 20 73 74 72  located data str
6430: 75 63 74 75 72 65 73 20 66 6f 72 20 74 68 69 73  uctures for this
6440: 20 73 74 72 65 61 6d 20 61 72 65 20 66 72 65 65   stream are free
6450: 64 2e 0a 20 20 20 54 68 69 73 20 66 75 6e 63 74  d..   This funct
6460: 69 6f 6e 20 64 69 73 63 61 72 64 73 20 61 6e 79  ion discards any
6470: 20 75 6e 70 72 6f 63 65 73 73 65 64 20 69 6e 70   unprocessed inp
6480: 75 74 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ut and does not 
6490: 66 6c 75 73 68 20 61 6e 79 20 70 65 6e 64 69 6e  flush any pendin
64a0: 67 0a 20 20 20 6f 75 74 70 75 74 2e 0a 0a 20 20  g.   output...  
64b0: 20 20 20 69 6e 66 6c 61 74 65 45 6e 64 20 72 65     inflateEnd re
64c0: 74 75 72 6e 73 20 5a 5f 4f 4b 20 69 66 20 73 75  turns Z_OK if su
64d0: 63 63 65 73 73 2c 20 5a 5f 53 54 52 45 41 4d 5f  ccess, Z_STREAM_
64e0: 45 52 52 4f 52 20 69 66 20 74 68 65 20 73 74 72  ERROR if the str
64f0: 65 61 6d 20 73 74 61 74 65 0a 20 20 20 77 61 73  eam state.   was
6500: 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 2e 20 20   inconsistent.  
6510: 49 6e 20 74 68 65 20 65 72 72 6f 72 20 63 61 73  In the error cas
6520: 65 2c 20 6d 73 67 20 6d 61 79 20 62 65 20 73 65  e, msg may be se
6530: 74 20 62 75 74 20 74 68 65 6e 20 70 6f 69 6e 74  t but then point
6540: 73 20 74 6f 20 61 0a 20 20 20 73 74 61 74 69 63  s to a.   static
6550: 20 73 74 72 69 6e 67 20 28 77 68 69 63 68 20 6d   string (which m
6560: 75 73 74 20 6e 6f 74 20 62 65 20 64 65 61 6c 6c  ust not be deall
6570: 6f 63 61 74 65 64 29 2e 0a 2a 2f 0a 0a 0a 20 20  ocated)..*/...  
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6590: 20 20 20 20 20 20 2f 2a 20 41 64 76 61 6e 63 65        /* Advance
65a0: 64 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 0a  d functions */..
65b0: 2f 2a 0a 20 20 20 20 54 68 65 20 66 6f 6c 6c 6f  /*.    The follo
65c0: 77 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 61  wing functions a
65d0: 72 65 20 6e 65 65 64 65 64 20 6f 6e 6c 79 20 69  re needed only i
65e0: 6e 20 73 6f 6d 65 20 73 70 65 63 69 61 6c 20 61  n some special a
65f0: 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  pplications..*/.
6600: 0a 2f 2a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20  ./*.ZEXTERN int 
6610: 5a 45 58 50 4f 52 54 20 64 65 66 6c 61 74 65 49  ZEXPORT deflateI
6620: 6e 69 74 32 20 4f 46 28 28 7a 5f 73 74 72 65 61  nit2 OF((z_strea
6630: 6d 70 20 73 74 72 6d 2c 0a 20 20 20 20 20 20 20  mp strm,.       
6640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
6660: 74 20 20 6c 65 76 65 6c 2c 0a 20 20 20 20 20 20  t  level,.      
6670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6690: 6e 74 20 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20  nt  method,.    
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66c0: 20 69 6e 74 20 20 77 69 6e 64 6f 77 42 69 74 73   int  windowBits
66d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 20 20 20 69 6e 74 20 20 6d 65 6d 4c         int  memL
6700: 65 76 65 6c 2c 0a 20 20 20 20 20 20 20 20 20 20  evel,.          
6710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6720: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 20             int  
6730: 73 74 72 61 74 65 67 79 29 29 3b 0a 0a 20 20 20  strategy));..   
6740: 20 20 54 68 69 73 20 69 73 20 61 6e 6f 74 68 65    This is anothe
6750: 72 20 76 65 72 73 69 6f 6e 20 6f 66 20 64 65 66  r version of def
6760: 6c 61 74 65 49 6e 69 74 20 77 69 74 68 20 6d 6f  lateInit with mo
6770: 72 65 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 6f  re compression o
6780: 70 74 69 6f 6e 73 2e 20 20 54 68 65 0a 20 20 20  ptions.  The.   
6790: 66 69 65 6c 64 73 20 6e 65 78 74 5f 69 6e 2c 20  fields next_in, 
67a0: 7a 61 6c 6c 6f 63 2c 20 7a 66 72 65 65 20 61 6e  zalloc, zfree an
67b0: 64 20 6f 70 61 71 75 65 20 6d 75 73 74 20 62 65  d opaque must be
67c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 65 66   initialized bef
67d0: 6f 72 65 20 62 79 20 74 68 65 0a 20 20 20 63 61  ore by the.   ca
67e0: 6c 6c 65 72 2e 0a 0a 20 20 20 20 20 54 68 65 20  ller...     The 
67f0: 6d 65 74 68 6f 64 20 70 61 72 61 6d 65 74 65 72  method parameter
6800: 20 69 73 20 74 68 65 20 63 6f 6d 70 72 65 73 73   is the compress
6810: 69 6f 6e 20 6d 65 74 68 6f 64 2e 20 20 49 74 20  ion method.  It 
6820: 6d 75 73 74 20 62 65 20 5a 5f 44 45 46 4c 41 54  must be Z_DEFLAT
6830: 45 44 20 69 6e 0a 20 20 20 74 68 69 73 20 76 65  ED in.   this ve
6840: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  rsion of the lib
6850: 72 61 72 79 2e 0a 0a 20 20 20 20 20 54 68 65 20  rary...     The 
6860: 77 69 6e 64 6f 77 42 69 74 73 20 70 61 72 61 6d  windowBits param
6870: 65 74 65 72 20 69 73 20 74 68 65 20 62 61 73 65  eter is the base
6880: 20 74 77 6f 20 6c 6f 67 61 72 69 74 68 6d 20 6f   two logarithm o
6890: 66 20 74 68 65 20 77 69 6e 64 6f 77 20 73 69 7a  f the window siz
68a0: 65 0a 20 20 20 28 74 68 65 20 73 69 7a 65 20 6f  e.   (the size o
68b0: 66 20 74 68 65 20 68 69 73 74 6f 72 79 20 62 75  f the history bu
68c0: 66 66 65 72 29 2e 20 20 49 74 20 73 68 6f 75 6c  ffer).  It shoul
68d0: 64 20 62 65 20 69 6e 20 74 68 65 20 72 61 6e 67  d be in the rang
68e0: 65 20 38 2e 2e 31 35 20 66 6f 72 20 74 68 69 73  e 8..15 for this
68f0: 0a 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  .   version of t
6900: 68 65 20 6c 69 62 72 61 72 79 2e 20 20 4c 61 72  he library.  Lar
6910: 67 65 72 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ger values of th
6920: 69 73 20 70 61 72 61 6d 65 74 65 72 20 72 65 73  is parameter res
6930: 75 6c 74 20 69 6e 20 62 65 74 74 65 72 0a 20 20  ult in better.  
6940: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 61 74 20   compression at 
6950: 74 68 65 20 65 78 70 65 6e 73 65 20 6f 66 20 6d  the expense of m
6960: 65 6d 6f 72 79 20 75 73 61 67 65 2e 20 20 54 68  emory usage.  Th
6970: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
6980: 69 73 20 31 35 20 69 66 0a 20 20 20 64 65 66 6c  is 15 if.   defl
6990: 61 74 65 49 6e 69 74 20 69 73 20 75 73 65 64 20  ateInit is used 
69a0: 69 6e 73 74 65 61 64 2e 0a 0a 20 20 20 20 20 77  instead...     w
69b0: 69 6e 64 6f 77 42 69 74 73 20 63 61 6e 20 61 6c  indowBits can al
69c0: 73 6f 20 62 65 20 2d 38 2e 2e 2d 31 35 20 66 6f  so be -8..-15 fo
69d0: 72 20 72 61 77 20 64 65 66 6c 61 74 65 2e 20 20  r raw deflate.  
69e0: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 2d 77  In this case, -w
69f0: 69 6e 64 6f 77 42 69 74 73 0a 20 20 20 64 65 74  indowBits.   det
6a00: 65 72 6d 69 6e 65 73 20 74 68 65 20 77 69 6e 64  ermines the wind
6a10: 6f 77 20 73 69 7a 65 2e 20 20 64 65 66 6c 61 74  ow size.  deflat
6a20: 65 28 29 20 77 69 6c 6c 20 74 68 65 6e 20 67 65  e() will then ge
6a30: 6e 65 72 61 74 65 20 72 61 77 20 64 65 66 6c 61  nerate raw defla
6a40: 74 65 20 64 61 74 61 0a 20 20 20 77 69 74 68 20  te data.   with 
6a50: 6e 6f 20 7a 6c 69 62 20 68 65 61 64 65 72 20 6f  no zlib header o
6a60: 72 20 74 72 61 69 6c 65 72 2c 20 61 6e 64 20 77  r trailer, and w
6a70: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 75 74 65 20  ill not compute 
6a80: 61 6e 20 61 64 6c 65 72 33 32 20 63 68 65 63 6b  an adler32 check
6a90: 20 76 61 6c 75 65 2e 0a 0a 20 20 20 20 20 77 69   value...     wi
6aa0: 6e 64 6f 77 42 69 74 73 20 63 61 6e 20 61 6c 73  ndowBits can als
6ab0: 6f 20 62 65 20 67 72 65 61 74 65 72 20 74 68 61  o be greater tha
6ac0: 6e 20 31 35 20 66 6f 72 20 6f 70 74 69 6f 6e 61  n 15 for optiona
6ad0: 6c 20 67 7a 69 70 20 65 6e 63 6f 64 69 6e 67 2e  l gzip encoding.
6ae0: 20 20 41 64 64 0a 20 20 20 31 36 20 74 6f 20 77    Add.   16 to w
6af0: 69 6e 64 6f 77 42 69 74 73 20 74 6f 20 77 72 69  indowBits to wri
6b00: 74 65 20 61 20 73 69 6d 70 6c 65 20 67 7a 69 70  te a simple gzip
6b10: 20 68 65 61 64 65 72 20 61 6e 64 20 74 72 61 69   header and trai
6b20: 6c 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  ler around the. 
6b30: 20 20 63 6f 6d 70 72 65 73 73 65 64 20 64 61 74    compressed dat
6b40: 61 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 7a  a instead of a z
6b50: 6c 69 62 20 77 72 61 70 70 65 72 2e 20 20 54 68  lib wrapper.  Th
6b60: 65 20 67 7a 69 70 20 68 65 61 64 65 72 20 77 69  e gzip header wi
6b70: 6c 6c 20 68 61 76 65 20 6e 6f 0a 20 20 20 66 69  ll have no.   fi
6b80: 6c 65 20 6e 61 6d 65 2c 20 6e 6f 20 65 78 74 72  le name, no extr
6b90: 61 20 64 61 74 61 2c 20 6e 6f 20 63 6f 6d 6d 65  a data, no comme
6ba0: 6e 74 2c 20 6e 6f 20 6d 6f 64 69 66 69 63 61 74  nt, no modificat
6bb0: 69 6f 6e 20 74 69 6d 65 20 28 73 65 74 20 74 6f  ion time (set to
6bc0: 20 7a 65 72 6f 29 2c 20 6e 6f 0a 20 20 20 68 65   zero), no.   he
6bd0: 61 64 65 72 20 63 72 63 2c 20 61 6e 64 20 74 68  ader crc, and th
6be0: 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  e operating syst
6bf0: 65 6d 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  em will be set t
6c00: 6f 20 32 35 35 20 28 75 6e 6b 6e 6f 77 6e 29 2e  o 255 (unknown).
6c10: 20 20 49 66 20 61 0a 20 20 20 67 7a 69 70 20 73    If a.   gzip s
6c20: 74 72 65 61 6d 20 69 73 20 62 65 69 6e 67 20 77  tream is being w
6c30: 72 69 74 74 65 6e 2c 20 73 74 72 6d 2d 3e 61 64  ritten, strm->ad
6c40: 6c 65 72 20 69 73 20 61 20 63 72 63 33 32 20 69  ler is a crc32 i
6c50: 6e 73 74 65 61 64 20 6f 66 20 61 6e 20 61 64 6c  nstead of an adl
6c60: 65 72 33 32 2e 0a 0a 20 20 20 20 20 54 68 65 20  er32...     The 
6c70: 6d 65 6d 4c 65 76 65 6c 20 70 61 72 61 6d 65 74  memLevel paramet
6c80: 65 72 20 73 70 65 63 69 66 69 65 73 20 68 6f 77  er specifies how
6c90: 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 73 68 6f   much memory sho
6ca0: 75 6c 64 20 62 65 20 61 6c 6c 6f 63 61 74 65 64  uld be allocated
6cb0: 0a 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65  .   for the inte
6cc0: 72 6e 61 6c 20 63 6f 6d 70 72 65 73 73 69 6f 6e  rnal compression
6cd0: 20 73 74 61 74 65 2e 20 20 6d 65 6d 4c 65 76 65   state.  memLeve
6ce0: 6c 3d 31 20 75 73 65 73 20 6d 69 6e 69 6d 75 6d  l=1 uses minimum
6cf0: 20 6d 65 6d 6f 72 79 20 62 75 74 20 69 73 0a 20   memory but is. 
6d00: 20 20 73 6c 6f 77 20 61 6e 64 20 72 65 64 75 63    slow and reduc
6d10: 65 73 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 72  es compression r
6d20: 61 74 69 6f 3b 20 6d 65 6d 4c 65 76 65 6c 3d 39  atio; memLevel=9
6d30: 20 75 73 65 73 20 6d 61 78 69 6d 75 6d 20 6d 65   uses maximum me
6d40: 6d 6f 72 79 20 66 6f 72 0a 20 20 20 6f 70 74 69  mory for.   opti
6d50: 6d 61 6c 20 73 70 65 65 64 2e 20 20 54 68 65 20  mal speed.  The 
6d60: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
6d70: 20 38 2e 20 20 53 65 65 20 7a 63 6f 6e 66 2e 68   8.  See zconf.h
6d80: 20 66 6f 72 20 74 6f 74 61 6c 20 6d 65 6d 6f 72   for total memor
6d90: 79 20 75 73 61 67 65 0a 20 20 20 61 73 20 61 20  y usage.   as a 
6da0: 66 75 6e 63 74 69 6f 6e 20 6f 66 20 77 69 6e 64  function of wind
6db0: 6f 77 42 69 74 73 20 61 6e 64 20 6d 65 6d 4c 65  owBits and memLe
6dc0: 76 65 6c 2e 0a 0a 20 20 20 20 20 54 68 65 20 73  vel...     The s
6dd0: 74 72 61 74 65 67 79 20 70 61 72 61 6d 65 74 65  trategy paramete
6de0: 72 20 69 73 20 75 73 65 64 20 74 6f 20 74 75 6e  r is used to tun
6df0: 65 20 74 68 65 20 63 6f 6d 70 72 65 73 73 69 6f  e the compressio
6e00: 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20 55 73  n algorithm.  Us
6e10: 65 20 74 68 65 0a 20 20 20 76 61 6c 75 65 20 5a  e the.   value Z
6e20: 5f 44 45 46 41 55 4c 54 5f 53 54 52 41 54 45 47  _DEFAULT_STRATEG
6e30: 59 20 66 6f 72 20 6e 6f 72 6d 61 6c 20 64 61 74  Y for normal dat
6e40: 61 2c 20 5a 5f 46 49 4c 54 45 52 45 44 20 66 6f  a, Z_FILTERED fo
6e50: 72 20 64 61 74 61 20 70 72 6f 64 75 63 65 64 20  r data produced 
6e60: 62 79 20 61 0a 20 20 20 66 69 6c 74 65 72 20 28  by a.   filter (
6e70: 6f 72 20 70 72 65 64 69 63 74 6f 72 29 2c 20 5a  or predictor), Z
6e80: 5f 48 55 46 46 4d 41 4e 5f 4f 4e 4c 59 20 74 6f  _HUFFMAN_ONLY to
6e90: 20 66 6f 72 63 65 20 48 75 66 66 6d 61 6e 20 65   force Huffman e
6ea0: 6e 63 6f 64 69 6e 67 20 6f 6e 6c 79 20 28 6e 6f  ncoding only (no
6eb0: 0a 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68  .   string match
6ec0: 29 2c 20 6f 72 20 5a 5f 52 4c 45 20 74 6f 20 6c  ), or Z_RLE to l
6ed0: 69 6d 69 74 20 6d 61 74 63 68 20 64 69 73 74 61  imit match dista
6ee0: 6e 63 65 73 20 74 6f 20 6f 6e 65 20 28 72 75 6e  nces to one (run
6ef0: 2d 6c 65 6e 67 74 68 0a 20 20 20 65 6e 63 6f 64  -length.   encod
6f00: 69 6e 67 29 2e 20 20 46 69 6c 74 65 72 65 64 20  ing).  Filtered 
6f10: 64 61 74 61 20 63 6f 6e 73 69 73 74 73 20 6d 6f  data consists mo
6f20: 73 74 6c 79 20 6f 66 20 73 6d 61 6c 6c 20 76 61  stly of small va
6f30: 6c 75 65 73 20 77 69 74 68 20 61 20 73 6f 6d 65  lues with a some
6f40: 77 68 61 74 0a 20 20 20 72 61 6e 64 6f 6d 20 64  what.   random d
6f50: 69 73 74 72 69 62 75 74 69 6f 6e 2e 20 20 49 6e  istribution.  In
6f60: 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
6f70: 63 6f 6d 70 72 65 73 73 69 6f 6e 20 61 6c 67 6f  compression algo
6f80: 72 69 74 68 6d 20 69 73 20 74 75 6e 65 64 20 74  rithm is tuned t
6f90: 6f 0a 20 20 20 63 6f 6d 70 72 65 73 73 20 74 68  o.   compress th
6fa0: 65 6d 20 62 65 74 74 65 72 2e 20 20 54 68 65 20  em better.  The 
6fb0: 65 66 66 65 63 74 20 6f 66 20 5a 5f 46 49 4c 54  effect of Z_FILT
6fc0: 45 52 45 44 20 69 73 20 74 6f 20 66 6f 72 63 65  ERED is to force
6fd0: 20 6d 6f 72 65 20 48 75 66 66 6d 61 6e 0a 20 20   more Huffman.  
6fe0: 20 63 6f 64 69 6e 67 20 61 6e 64 20 6c 65 73 73   coding and less
6ff0: 20 73 74 72 69 6e 67 20 6d 61 74 63 68 69 6e 67   string matching
7000: 3b 20 69 74 20 69 73 20 73 6f 6d 65 77 68 61 74  ; it is somewhat
7010: 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 62 65   intermediate be
7020: 74 77 65 65 6e 0a 20 20 20 5a 5f 44 45 46 41 55  tween.   Z_DEFAU
7030: 4c 54 5f 53 54 52 41 54 45 47 59 20 61 6e 64 20  LT_STRATEGY and 
7040: 5a 5f 48 55 46 46 4d 41 4e 5f 4f 4e 4c 59 2e 20  Z_HUFFMAN_ONLY. 
7050: 20 5a 5f 52 4c 45 20 69 73 20 64 65 73 69 67 6e   Z_RLE is design
7060: 65 64 20 74 6f 20 62 65 20 61 6c 6d 6f 73 74 20  ed to be almost 
7070: 61 73 0a 20 20 20 66 61 73 74 20 61 73 20 5a 5f  as.   fast as Z_
7080: 48 55 46 46 4d 41 4e 5f 4f 4e 4c 59 2c 20 62 75  HUFFMAN_ONLY, bu
7090: 74 20 67 69 76 65 20 62 65 74 74 65 72 20 63 6f  t give better co
70a0: 6d 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 50 4e  mpression for PN
70b0: 47 20 69 6d 61 67 65 20 64 61 74 61 2e 20 20 54  G image data.  T
70c0: 68 65 0a 20 20 20 73 74 72 61 74 65 67 79 20 70  he.   strategy p
70d0: 61 72 61 6d 65 74 65 72 20 6f 6e 6c 79 20 61 66  arameter only af
70e0: 66 65 63 74 73 20 74 68 65 20 63 6f 6d 70 72 65  fects the compre
70f0: 73 73 69 6f 6e 20 72 61 74 69 6f 20 62 75 74 20  ssion ratio but 
7100: 6e 6f 74 20 74 68 65 0a 20 20 20 63 6f 72 72 65  not the.   corre
7110: 63 74 6e 65 73 73 20 6f 66 20 74 68 65 20 63 6f  ctness of the co
7120: 6d 70 72 65 73 73 65 64 20 6f 75 74 70 75 74 20  mpressed output 
7130: 65 76 65 6e 20 69 66 20 69 74 20 69 73 20 6e 6f  even if it is no
7140: 74 20 73 65 74 20 61 70 70 72 6f 70 72 69 61 74  t set appropriat
7150: 65 6c 79 2e 0a 20 20 20 5a 5f 46 49 58 45 44 20  ely..   Z_FIXED 
7160: 70 72 65 76 65 6e 74 73 20 74 68 65 20 75 73 65  prevents the use
7170: 20 6f 66 20 64 79 6e 61 6d 69 63 20 48 75 66 66   of dynamic Huff
7180: 6d 61 6e 20 63 6f 64 65 73 2c 20 61 6c 6c 6f 77  man codes, allow
7190: 69 6e 67 20 66 6f 72 20 61 20 73 69 6d 70 6c 65  ing for a simple
71a0: 72 0a 20 20 20 64 65 63 6f 64 65 72 20 66 6f 72  r.   decoder for
71b0: 20 73 70 65 63 69 61 6c 20 61 70 70 6c 69 63 61   special applica
71c0: 74 69 6f 6e 73 2e 0a 0a 20 20 20 20 20 64 65 66  tions...     def
71d0: 6c 61 74 65 49 6e 69 74 32 20 72 65 74 75 72 6e  lateInit2 return
71e0: 73 20 5a 5f 4f 4b 20 69 66 20 73 75 63 63 65 73  s Z_OK if succes
71f0: 73 2c 20 5a 5f 4d 45 4d 5f 45 52 52 4f 52 20 69  s, Z_MEM_ERROR i
7200: 66 20 74 68 65 72 65 20 77 61 73 20 6e 6f 74 20  f there was not 
7210: 65 6e 6f 75 67 68 0a 20 20 20 6d 65 6d 6f 72 79  enough.   memory
7220: 2c 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52 4f 52  , Z_STREAM_ERROR
7230: 20 69 66 20 61 6e 79 20 70 61 72 61 6d 65 74 65   if any paramete
7240: 72 20 69 73 20 69 6e 76 61 6c 69 64 20 28 73 75  r is invalid (su
7250: 63 68 20 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  ch as an invalid
7260: 0a 20 20 20 6d 65 74 68 6f 64 29 2c 20 6f 72 20  .   method), or 
7270: 5a 5f 56 45 52 53 49 4f 4e 5f 45 52 52 4f 52 20  Z_VERSION_ERROR 
7280: 69 66 20 74 68 65 20 7a 6c 69 62 20 6c 69 62 72  if the zlib libr
7290: 61 72 79 20 76 65 72 73 69 6f 6e 20 28 7a 6c 69  ary version (zli
72a0: 62 5f 76 65 72 73 69 6f 6e 29 20 69 73 0a 20 20  b_version) is.  
72b0: 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77 69   incompatible wi
72c0: 74 68 20 74 68 65 20 76 65 72 73 69 6f 6e 20 61  th the version a
72d0: 73 73 75 6d 65 64 20 62 79 20 74 68 65 20 63 61  ssumed by the ca
72e0: 6c 6c 65 72 20 28 5a 4c 49 42 5f 56 45 52 53 49  ller (ZLIB_VERSI
72f0: 4f 4e 29 2e 20 20 6d 73 67 20 69 73 0a 20 20 20  ON).  msg is.   
7300: 73 65 74 20 74 6f 20 6e 75 6c 6c 20 69 66 20 74  set to null if t
7310: 68 65 72 65 20 69 73 20 6e 6f 20 65 72 72 6f 72  here is no error
7320: 20 6d 65 73 73 61 67 65 2e 20 20 64 65 66 6c 61   message.  defla
7330: 74 65 49 6e 69 74 32 20 64 6f 65 73 20 6e 6f 74  teInit2 does not
7340: 20 70 65 72 66 6f 72 6d 20 61 6e 79 0a 20 20 20   perform any.   
7350: 63 6f 6d 70 72 65 73 73 69 6f 6e 3a 20 74 68 69  compression: thi
7360: 73 20 77 69 6c 6c 20 62 65 20 64 6f 6e 65 20 62  s will be done b
7370: 79 20 64 65 66 6c 61 74 65 28 29 2e 0a 2a 2f 0a  y deflate()..*/.
7380: 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45 58  .ZEXTERN int ZEX
7390: 50 4f 52 54 20 64 65 66 6c 61 74 65 53 65 74 44  PORT deflateSetD
73a0: 69 63 74 69 6f 6e 61 72 79 20 4f 46 28 28 7a 5f  ictionary OF((z_
73b0: 73 74 72 65 61 6d 70 20 73 74 72 6d 2c 0a 20 20  streamp strm,.  
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73e0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
73f0: 20 42 79 74 65 66 20 2a 64 69 63 74 69 6f 6e 61   Bytef *dictiona
7400: 72 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry,.            
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7430: 20 75 49 6e 74 20 20 64 69 63 74 4c 65 6e 67 74   uInt  dictLengt
7440: 68 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 49 6e 69  h));./*.     Ini
7450: 74 69 61 6c 69 7a 65 73 20 74 68 65 20 63 6f 6d  tializes the com
7460: 70 72 65 73 73 69 6f 6e 20 64 69 63 74 69 6f 6e  pression diction
7470: 61 72 79 20 66 72 6f 6d 20 74 68 65 20 67 69 76  ary from the giv
7480: 65 6e 20 62 79 74 65 20 73 65 71 75 65 6e 63 65  en byte sequence
7490: 0a 20 20 20 77 69 74 68 6f 75 74 20 70 72 6f 64  .   without prod
74a0: 75 63 69 6e 67 20 61 6e 79 20 63 6f 6d 70 72 65  ucing any compre
74b0: 73 73 65 64 20 6f 75 74 70 75 74 2e 20 20 57 68  ssed output.  Wh
74c0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 7a 6c 69  en using the zli
74d0: 62 20 66 6f 72 6d 61 74 2c 20 74 68 69 73 0a 20  b format, this. 
74e0: 20 20 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20    function must 
74f0: 62 65 20 63 61 6c 6c 65 64 20 69 6d 6d 65 64 69  be called immedi
7500: 61 74 65 6c 79 20 61 66 74 65 72 20 64 65 66 6c  ately after defl
7510: 61 74 65 49 6e 69 74 2c 20 64 65 66 6c 61 74 65  ateInit, deflate
7520: 49 6e 69 74 32 20 6f 72 0a 20 20 20 64 65 66 6c  Init2 or.   defl
7530: 61 74 65 52 65 73 65 74 2c 20 61 6e 64 20 62 65  ateReset, and be
7540: 66 6f 72 65 20 61 6e 79 20 63 61 6c 6c 20 6f 66  fore any call of
7550: 20 64 65 66 6c 61 74 65 2e 20 20 57 68 65 6e 20   deflate.  When 
7560: 64 6f 69 6e 67 20 72 61 77 20 64 65 66 6c 61 74  doing raw deflat
7570: 65 2c 20 74 68 69 73 0a 20 20 20 66 75 6e 63 74  e, this.   funct
7580: 69 6f 6e 20 6d 75 73 74 20 62 65 20 63 61 6c 6c  ion must be call
7590: 65 64 20 65 69 74 68 65 72 20 62 65 66 6f 72 65  ed either before
75a0: 20 61 6e 79 20 63 61 6c 6c 20 6f 66 20 64 65 66   any call of def
75b0: 6c 61 74 65 2c 20 6f 72 20 69 6d 6d 65 64 69 61  late, or immedia
75c0: 74 65 6c 79 0a 20 20 20 61 66 74 65 72 20 74 68  tely.   after th
75d0: 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 6f 66 20  e completion of 
75e0: 61 20 64 65 66 6c 61 74 65 20 62 6c 6f 63 6b 2c  a deflate block,
75f0: 20 69 2e 65 2e 20 61 66 74 65 72 20 61 6c 6c 20   i.e. after all 
7600: 69 6e 70 75 74 20 68 61 73 20 62 65 65 6e 0a 20  input has been. 
7610: 20 20 63 6f 6e 73 75 6d 65 64 20 61 6e 64 20 61    consumed and a
7620: 6c 6c 20 6f 75 74 70 75 74 20 68 61 73 20 62 65  ll output has be
7630: 65 6e 20 64 65 6c 69 76 65 72 65 64 20 77 68 65  en delivered whe
7640: 6e 20 75 73 69 6e 67 20 61 6e 79 20 6f 66 20 74  n using any of t
7650: 68 65 20 66 6c 75 73 68 0a 20 20 20 6f 70 74 69  he flush.   opti
7660: 6f 6e 73 20 5a 5f 42 4c 4f 43 4b 2c 20 5a 5f 50  ons Z_BLOCK, Z_P
7670: 41 52 54 49 41 4c 5f 46 4c 55 53 48 2c 20 5a 5f  ARTIAL_FLUSH, Z_
7680: 53 59 4e 43 5f 46 4c 55 53 48 2c 20 6f 72 20 5a  SYNC_FLUSH, or Z
7690: 5f 46 55 4c 4c 5f 46 4c 55 53 48 2e 20 20 54 68  _FULL_FLUSH.  Th
76a0: 65 0a 20 20 20 63 6f 6d 70 72 65 73 73 6f 72 20  e.   compressor 
76b0: 61 6e 64 20 64 65 63 6f 6d 70 72 65 73 73 6f 72  and decompressor
76c0: 20 6d 75 73 74 20 75 73 65 20 65 78 61 63 74 6c   must use exactl
76d0: 79 20 74 68 65 20 73 61 6d 65 20 64 69 63 74 69  y the same dicti
76e0: 6f 6e 61 72 79 20 28 73 65 65 0a 20 20 20 69 6e  onary (see.   in
76f0: 66 6c 61 74 65 53 65 74 44 69 63 74 69 6f 6e 61  flateSetDictiona
7700: 72 79 29 2e 0a 0a 20 20 20 20 20 54 68 65 20 64  ry)...     The d
7710: 69 63 74 69 6f 6e 61 72 79 20 73 68 6f 75 6c 64  ictionary should
7720: 20 63 6f 6e 73 69 73 74 20 6f 66 20 73 74 72 69   consist of stri
7730: 6e 67 73 20 28 62 79 74 65 20 73 65 71 75 65 6e  ngs (byte sequen
7740: 63 65 73 29 20 74 68 61 74 20 61 72 65 20 6c 69  ces) that are li
7750: 6b 65 6c 79 0a 20 20 20 74 6f 20 62 65 20 65 6e  kely.   to be en
7760: 63 6f 75 6e 74 65 72 65 64 20 6c 61 74 65 72 20  countered later 
7770: 69 6e 20 74 68 65 20 64 61 74 61 20 74 6f 20 62  in the data to b
7780: 65 20 63 6f 6d 70 72 65 73 73 65 64 2c 20 77 69  e compressed, wi
7790: 74 68 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d  th the most comm
77a0: 6f 6e 6c 79 0a 20 20 20 75 73 65 64 20 73 74 72  only.   used str
77b0: 69 6e 67 73 20 70 72 65 66 65 72 61 62 6c 79 20  ings preferably 
77c0: 70 75 74 20 74 6f 77 61 72 64 73 20 74 68 65 20  put towards the 
77d0: 65 6e 64 20 6f 66 20 74 68 65 20 64 69 63 74 69  end of the dicti
77e0: 6f 6e 61 72 79 2e 20 20 55 73 69 6e 67 20 61 0a  onary.  Using a.
77f0: 20 20 20 64 69 63 74 69 6f 6e 61 72 79 20 69 73     dictionary is
7800: 20 6d 6f 73 74 20 75 73 65 66 75 6c 20 77 68 65   most useful whe
7810: 6e 20 74 68 65 20 64 61 74 61 20 74 6f 20 62 65  n the data to be
7820: 20 63 6f 6d 70 72 65 73 73 65 64 20 69 73 20 73   compressed is s
7830: 68 6f 72 74 20 61 6e 64 20 63 61 6e 20 62 65 0a  hort and can be.
7840: 20 20 20 70 72 65 64 69 63 74 65 64 20 77 69 74     predicted wit
7850: 68 20 67 6f 6f 64 20 61 63 63 75 72 61 63 79 3b  h good accuracy;
7860: 20 74 68 65 20 64 61 74 61 20 63 61 6e 20 74 68   the data can th
7870: 65 6e 20 62 65 20 63 6f 6d 70 72 65 73 73 65 64  en be compressed
7880: 20 62 65 74 74 65 72 20 74 68 61 6e 0a 20 20 20   better than.   
7890: 77 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74  with the default
78a0: 20 65 6d 70 74 79 20 64 69 63 74 69 6f 6e 61 72   empty dictionar
78b0: 79 2e 0a 0a 20 20 20 20 20 44 65 70 65 6e 64 69  y...     Dependi
78c0: 6e 67 20 6f 6e 20 74 68 65 20 73 69 7a 65 20 6f  ng on the size o
78d0: 66 20 74 68 65 20 63 6f 6d 70 72 65 73 73 69 6f  f the compressio
78e0: 6e 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  n data structure
78f0: 73 20 73 65 6c 65 63 74 65 64 20 62 79 0a 20 20  s selected by.  
7900: 20 64 65 66 6c 61 74 65 49 6e 69 74 20 6f 72 20   deflateInit or 
7910: 64 65 66 6c 61 74 65 49 6e 69 74 32 2c 20 61 20  deflateInit2, a 
7920: 70 61 72 74 20 6f 66 20 74 68 65 20 64 69 63 74  part of the dict
7930: 69 6f 6e 61 72 79 20 6d 61 79 20 69 6e 20 65 66  ionary may in ef
7940: 66 65 63 74 20 62 65 0a 20 20 20 64 69 73 63 61  fect be.   disca
7950: 72 64 65 64 2c 20 66 6f 72 20 65 78 61 6d 70 6c  rded, for exampl
7960: 65 20 69 66 20 74 68 65 20 64 69 63 74 69 6f 6e  e if the diction
7970: 61 72 79 20 69 73 20 6c 61 72 67 65 72 20 74 68  ary is larger th
7980: 61 6e 20 74 68 65 20 77 69 6e 64 6f 77 20 73 69  an the window si
7990: 7a 65 0a 20 20 20 70 72 6f 76 69 64 65 64 20 69  ze.   provided i
79a0: 6e 20 64 65 66 6c 61 74 65 49 6e 69 74 20 6f 72  n deflateInit or
79b0: 20 64 65 66 6c 61 74 65 49 6e 69 74 32 2e 20 20   deflateInit2.  
79c0: 54 68 75 73 20 74 68 65 20 73 74 72 69 6e 67 73  Thus the strings
79d0: 20 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 74 6f 20   most likely to 
79e0: 62 65 0a 20 20 20 75 73 65 66 75 6c 20 73 68 6f  be.   useful sho
79f0: 75 6c 64 20 62 65 20 70 75 74 20 61 74 20 74 68  uld be put at th
7a00: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 69 63  e end of the dic
7a10: 74 69 6f 6e 61 72 79 2c 20 6e 6f 74 20 61 74 20  tionary, not at 
7a20: 74 68 65 20 66 72 6f 6e 74 2e 20 20 49 6e 0a 20  the front.  In. 
7a30: 20 20 61 64 64 69 74 69 6f 6e 2c 20 74 68 65 20    addition, the 
7a40: 63 75 72 72 65 6e 74 20 69 6d 70 6c 65 6d 65 6e  current implemen
7a50: 74 61 74 69 6f 6e 20 6f 66 20 64 65 66 6c 61 74  tation of deflat
7a60: 65 20 77 69 6c 6c 20 75 73 65 20 61 74 20 6d 6f  e will use at mo
7a70: 73 74 20 74 68 65 20 77 69 6e 64 6f 77 0a 20 20  st the window.  
7a80: 20 73 69 7a 65 20 6d 69 6e 75 73 20 32 36 32 20   size minus 262 
7a90: 62 79 74 65 73 20 6f 66 20 74 68 65 20 70 72 6f  bytes of the pro
7aa0: 76 69 64 65 64 20 64 69 63 74 69 6f 6e 61 72 79  vided dictionary
7ab0: 2e 0a 0a 20 20 20 20 20 55 70 6f 6e 20 72 65 74  ...     Upon ret
7ac0: 75 72 6e 20 6f 66 20 74 68 69 73 20 66 75 6e 63  urn of this func
7ad0: 74 69 6f 6e 2c 20 73 74 72 6d 2d 3e 61 64 6c 65  tion, strm->adle
7ae0: 72 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  r is set to the 
7af0: 61 64 6c 65 72 33 32 20 76 61 6c 75 65 0a 20 20  adler32 value.  
7b00: 20 6f 66 20 74 68 65 20 64 69 63 74 69 6f 6e 61   of the dictiona
7b10: 72 79 3b 20 74 68 65 20 64 65 63 6f 6d 70 72 65  ry; the decompre
7b20: 73 73 6f 72 20 6d 61 79 20 6c 61 74 65 72 20 75  ssor may later u
7b30: 73 65 20 74 68 69 73 20 76 61 6c 75 65 20 74 6f  se this value to
7b40: 20 64 65 74 65 72 6d 69 6e 65 0a 20 20 20 77 68   determine.   wh
7b50: 69 63 68 20 64 69 63 74 69 6f 6e 61 72 79 20 68  ich dictionary h
7b60: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
7b70: 74 68 65 20 63 6f 6d 70 72 65 73 73 6f 72 2e 20  the compressor. 
7b80: 20 28 54 68 65 20 61 64 6c 65 72 33 32 20 76 61   (The adler32 va
7b90: 6c 75 65 0a 20 20 20 61 70 70 6c 69 65 73 20 74  lue.   applies t
7ba0: 6f 20 74 68 65 20 77 68 6f 6c 65 20 64 69 63 74  o the whole dict
7bb0: 69 6f 6e 61 72 79 20 65 76 65 6e 20 69 66 20 6f  ionary even if o
7bc0: 6e 6c 79 20 61 20 73 75 62 73 65 74 20 6f 66 20  nly a subset of 
7bd0: 74 68 65 20 64 69 63 74 69 6f 6e 61 72 79 20 69  the dictionary i
7be0: 73 0a 20 20 20 61 63 74 75 61 6c 6c 79 20 75 73  s.   actually us
7bf0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 72 65  ed by the compre
7c00: 73 73 6f 72 2e 29 20 49 66 20 61 20 72 61 77 20  ssor.) If a raw 
7c10: 64 65 66 6c 61 74 65 20 77 61 73 20 72 65 71 75  deflate was requ
7c20: 65 73 74 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  ested, then the.
7c30: 20 20 20 61 64 6c 65 72 33 32 20 76 61 6c 75 65     adler32 value
7c40: 20 69 73 20 6e 6f 74 20 63 6f 6d 70 75 74 65 64   is not computed
7c50: 20 61 6e 64 20 73 74 72 6d 2d 3e 61 64 6c 65 72   and strm->adler
7c60: 20 69 73 20 6e 6f 74 20 73 65 74 2e 0a 0a 20 20   is not set...  
7c70: 20 20 20 64 65 66 6c 61 74 65 53 65 74 44 69 63     deflateSetDic
7c80: 74 69 6f 6e 61 72 79 20 72 65 74 75 72 6e 73 20  tionary returns 
7c90: 5a 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73 2c  Z_OK if success,
7ca0: 20 6f 72 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52   or Z_STREAM_ERR
7cb0: 4f 52 20 69 66 20 61 0a 20 20 20 70 61 72 61 6d  OR if a.   param
7cc0: 65 74 65 72 20 69 73 20 69 6e 76 61 6c 69 64 20  eter is invalid 
7cd0: 28 65 2e 67 2e 20 20 64 69 63 74 69 6f 6e 61 72  (e.g.  dictionar
7ce0: 79 20 62 65 69 6e 67 20 5a 5f 4e 55 4c 4c 29 20  y being Z_NULL) 
7cf0: 6f 72 20 74 68 65 20 73 74 72 65 61 6d 20 73 74  or the stream st
7d00: 61 74 65 20 69 73 0a 20 20 20 69 6e 63 6f 6e 73  ate is.   incons
7d10: 69 73 74 65 6e 74 20 28 66 6f 72 20 65 78 61 6d  istent (for exam
7d20: 70 6c 65 20 69 66 20 64 65 66 6c 61 74 65 20 68  ple if deflate h
7d30: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
7d40: 63 61 6c 6c 65 64 20 66 6f 72 20 74 68 69 73 20  called for this 
7d50: 73 74 72 65 61 6d 0a 20 20 20 6f 72 20 69 66 20  stream.   or if 
7d60: 6e 6f 74 20 61 74 20 61 20 62 6c 6f 63 6b 20 62  not at a block b
7d70: 6f 75 6e 64 61 72 79 20 66 6f 72 20 72 61 77 20  oundary for raw 
7d80: 64 65 66 6c 61 74 65 29 2e 20 20 64 65 66 6c 61  deflate).  defla
7d90: 74 65 53 65 74 44 69 63 74 69 6f 6e 61 72 79 20  teSetDictionary 
7da0: 64 6f 65 73 0a 20 20 20 6e 6f 74 20 70 65 72 66  does.   not perf
7db0: 6f 72 6d 20 61 6e 79 20 63 6f 6d 70 72 65 73 73  orm any compress
7dc0: 69 6f 6e 3a 20 74 68 69 73 20 77 69 6c 6c 20 62  ion: this will b
7dd0: 65 20 64 6f 6e 65 20 62 79 20 64 65 66 6c 61 74  e done by deflat
7de0: 65 28 29 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e  e()..*/..ZEXTERN
7df0: 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 64 65 66   int ZEXPORT def
7e00: 6c 61 74 65 43 6f 70 79 20 4f 46 28 28 7a 5f 73  lateCopy OF((z_s
7e10: 74 72 65 61 6d 70 20 64 65 73 74 2c 0a 20 20 20  treamp dest,.   
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 7a 5f 73 74 72 65 61 6d 70 20 73 6f 75 72 63   z_streamp sourc
7e50: 65 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 53 65 74  e));./*.     Set
7e60: 73 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  s the destinatio
7e70: 6e 20 73 74 72 65 61 6d 20 61 73 20 61 20 63 6f  n stream as a co
7e80: 6d 70 6c 65 74 65 20 63 6f 70 79 20 6f 66 20 74  mplete copy of t
7e90: 68 65 20 73 6f 75 72 63 65 20 73 74 72 65 61 6d  he source stream
7ea0: 2e 0a 0a 20 20 20 20 20 54 68 69 73 20 66 75 6e  ...     This fun
7eb0: 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ction can be use
7ec0: 66 75 6c 20 77 68 65 6e 20 73 65 76 65 72 61 6c  ful when several
7ed0: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 73 74 72   compression str
7ee0: 61 74 65 67 69 65 73 20 77 69 6c 6c 20 62 65 0a  ategies will be.
7ef0: 20 20 20 74 72 69 65 64 2c 20 66 6f 72 20 65 78     tried, for ex
7f00: 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 72 65  ample when there
7f10: 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 61 79   are several way
7f20: 73 20 6f 66 20 70 72 65 2d 70 72 6f 63 65 73 73  s of pre-process
7f30: 69 6e 67 20 74 68 65 20 69 6e 70 75 74 0a 20 20  ing the input.  
7f40: 20 64 61 74 61 20 77 69 74 68 20 61 20 66 69 6c   data with a fil
7f50: 74 65 72 2e 20 20 54 68 65 20 73 74 72 65 61 6d  ter.  The stream
7f60: 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 64  s that will be d
7f70: 69 73 63 61 72 64 65 64 20 73 68 6f 75 6c 64 20  iscarded should 
7f80: 74 68 65 6e 20 62 65 20 66 72 65 65 64 0a 20 20  then be freed.  
7f90: 20 62 79 20 63 61 6c 6c 69 6e 67 20 64 65 66 6c   by calling defl
7fa0: 61 74 65 45 6e 64 2e 20 20 4e 6f 74 65 20 74 68  ateEnd.  Note th
7fb0: 61 74 20 64 65 66 6c 61 74 65 43 6f 70 79 20 64  at deflateCopy d
7fc0: 75 70 6c 69 63 61 74 65 73 20 74 68 65 20 69 6e  uplicates the in
7fd0: 74 65 72 6e 61 6c 0a 20 20 20 63 6f 6d 70 72 65  ternal.   compre
7fe0: 73 73 69 6f 6e 20 73 74 61 74 65 20 77 68 69 63  ssion state whic
7ff0: 68 20 63 61 6e 20 62 65 20 71 75 69 74 65 20 6c  h can be quite l
8000: 61 72 67 65 2c 20 73 6f 20 74 68 69 73 20 73 74  arge, so this st
8010: 72 61 74 65 67 79 20 69 73 20 73 6c 6f 77 20 61  rategy is slow a
8020: 6e 64 20 63 61 6e 0a 20 20 20 63 6f 6e 73 75 6d  nd can.   consum
8030: 65 20 6c 6f 74 73 20 6f 66 20 6d 65 6d 6f 72 79  e lots of memory
8040: 2e 0a 0a 20 20 20 20 20 64 65 66 6c 61 74 65 43  ...     deflateC
8050: 6f 70 79 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b  opy returns Z_OK
8060: 20 69 66 20 73 75 63 63 65 73 73 2c 20 5a 5f 4d   if success, Z_M
8070: 45 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65 72  EM_ERROR if ther
8080: 65 20 77 61 73 20 6e 6f 74 0a 20 20 20 65 6e 6f  e was not.   eno
8090: 75 67 68 20 6d 65 6d 6f 72 79 2c 20 5a 5f 53 54  ugh memory, Z_ST
80a0: 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 74 68  REAM_ERROR if th
80b0: 65 20 73 6f 75 72 63 65 20 73 74 72 65 61 6d 20  e source stream 
80c0: 73 74 61 74 65 20 77 61 73 20 69 6e 63 6f 6e 73  state was incons
80d0: 69 73 74 65 6e 74 0a 20 20 20 28 73 75 63 68 20  istent.   (such 
80e0: 61 73 20 7a 61 6c 6c 6f 63 20 62 65 69 6e 67 20  as zalloc being 
80f0: 5a 5f 4e 55 4c 4c 29 2e 20 20 6d 73 67 20 69 73  Z_NULL).  msg is
8100: 20 6c 65 66 74 20 75 6e 63 68 61 6e 67 65 64 20   left unchanged 
8110: 69 6e 20 62 6f 74 68 20 73 6f 75 72 63 65 20 61  in both source a
8120: 6e 64 0a 20 20 20 64 65 73 74 69 6e 61 74 69 6f  nd.   destinatio
8130: 6e 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69  n..*/..ZEXTERN i
8140: 6e 74 20 5a 45 58 50 4f 52 54 20 64 65 66 6c 61  nt ZEXPORT defla
8150: 74 65 52 65 73 65 74 20 4f 46 28 28 7a 5f 73 74  teReset OF((z_st
8160: 72 65 61 6d 70 20 73 74 72 6d 29 29 3b 0a 2f 2a  reamp strm));./*
8170: 0a 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74  .     This funct
8180: 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
8190: 74 20 74 6f 20 64 65 66 6c 61 74 65 45 6e 64 20  t to deflateEnd 
81a0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 64 65 66 6c  followed by defl
81b0: 61 74 65 49 6e 69 74 2c 0a 20 20 20 62 75 74 20  ateInit,.   but 
81c0: 64 6f 65 73 20 6e 6f 74 20 66 72 65 65 20 61 6e  does not free an
81d0: 64 20 72 65 61 6c 6c 6f 63 61 74 65 20 61 6c 6c  d reallocate all
81e0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 6f   the internal co
81f0: 6d 70 72 65 73 73 69 6f 6e 20 73 74 61 74 65 2e  mpression state.
8200: 20 20 54 68 65 0a 20 20 20 73 74 72 65 61 6d 20    The.   stream 
8210: 77 69 6c 6c 20 6b 65 65 70 20 74 68 65 20 73 61  will keep the sa
8220: 6d 65 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 6c  me compression l
8230: 65 76 65 6c 20 61 6e 64 20 61 6e 79 20 6f 74 68  evel and any oth
8240: 65 72 20 61 74 74 72 69 62 75 74 65 73 20 74 68  er attributes th
8250: 61 74 0a 20 20 20 6d 61 79 20 68 61 76 65 20 62  at.   may have b
8260: 65 65 6e 20 73 65 74 20 62 79 20 64 65 66 6c 61  een set by defla
8270: 74 65 49 6e 69 74 32 2e 0a 0a 20 20 20 20 20 64  teInit2...     d
8280: 65 66 6c 61 74 65 52 65 73 65 74 20 72 65 74 75  eflateReset retu
8290: 72 6e 73 20 5a 5f 4f 4b 20 69 66 20 73 75 63 63  rns Z_OK if succ
82a0: 65 73 73 2c 20 6f 72 20 5a 5f 53 54 52 45 41 4d  ess, or Z_STREAM
82b0: 5f 45 52 52 4f 52 20 69 66 20 74 68 65 20 73 6f  _ERROR if the so
82c0: 75 72 63 65 0a 20 20 20 73 74 72 65 61 6d 20 73  urce.   stream s
82d0: 74 61 74 65 20 77 61 73 20 69 6e 63 6f 6e 73 69  tate was inconsi
82e0: 73 74 65 6e 74 20 28 73 75 63 68 20 61 73 20 7a  stent (such as z
82f0: 61 6c 6c 6f 63 20 6f 72 20 73 74 61 74 65 20 62  alloc or state b
8300: 65 69 6e 67 20 5a 5f 4e 55 4c 4c 29 2e 0a 2a 2f  eing Z_NULL)..*/
8310: 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45  ..ZEXTERN int ZE
8320: 58 50 4f 52 54 20 64 65 66 6c 61 74 65 50 61 72  XPORT deflatePar
8330: 61 6d 73 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d  ams OF((z_stream
8340: 70 20 73 74 72 6d 2c 0a 20 20 20 20 20 20 20 20  p strm,.        
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
8370: 74 20 6c 65 76 65 6c 2c 0a 20 20 20 20 20 20 20  t level,.       
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
83a0: 6e 74 20 73 74 72 61 74 65 67 79 29 29 3b 0a 2f  nt strategy));./
83b0: 2a 0a 20 20 20 20 20 44 79 6e 61 6d 69 63 61 6c  *.     Dynamical
83c0: 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 63 6f  ly update the co
83d0: 6d 70 72 65 73 73 69 6f 6e 20 6c 65 76 65 6c 20  mpression level 
83e0: 61 6e 64 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20  and compression 
83f0: 73 74 72 61 74 65 67 79 2e 20 20 54 68 65 0a 20  strategy.  The. 
8400: 20 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e    interpretation
8410: 20 6f 66 20 6c 65 76 65 6c 20 61 6e 64 20 73 74   of level and st
8420: 72 61 74 65 67 79 20 69 73 20 61 73 20 69 6e 20  rategy is as in 
8430: 64 65 66 6c 61 74 65 49 6e 69 74 32 2e 20 20 54  deflateInit2.  T
8440: 68 69 73 20 63 61 6e 20 62 65 0a 20 20 20 75 73  his can be.   us
8450: 65 64 20 74 6f 20 73 77 69 74 63 68 20 62 65 74  ed to switch bet
8460: 77 65 65 6e 20 63 6f 6d 70 72 65 73 73 69 6f 6e  ween compression
8470: 20 61 6e 64 20 73 74 72 61 69 67 68 74 20 63 6f   and straight co
8480: 70 79 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  py of the input 
8490: 64 61 74 61 2c 20 6f 72 0a 20 20 20 74 6f 20 73  data, or.   to s
84a0: 77 69 74 63 68 20 74 6f 20 61 20 64 69 66 66 65  witch to a diffe
84b0: 72 65 6e 74 20 6b 69 6e 64 20 6f 66 20 69 6e 70  rent kind of inp
84c0: 75 74 20 64 61 74 61 20 72 65 71 75 69 72 69 6e  ut data requirin
84d0: 67 20 61 20 64 69 66 66 65 72 65 6e 74 20 73 74  g a different st
84e0: 72 61 74 65 67 79 2e 0a 20 20 20 49 66 20 74 68  rategy..   If th
84f0: 65 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 6c 65  e compression le
8500: 76 65 6c 20 69 73 20 63 68 61 6e 67 65 64 2c 20  vel is changed, 
8510: 74 68 65 20 69 6e 70 75 74 20 61 76 61 69 6c 61  the input availa
8520: 62 6c 65 20 73 6f 20 66 61 72 20 69 73 0a 20 20  ble so far is.  
8530: 20 63 6f 6d 70 72 65 73 73 65 64 20 77 69 74 68   compressed with
8540: 20 74 68 65 20 6f 6c 64 20 6c 65 76 65 6c 20 28   the old level (
8550: 61 6e 64 20 6d 61 79 20 62 65 20 66 6c 75 73 68  and may be flush
8560: 65 64 29 3b 20 74 68 65 20 6e 65 77 20 6c 65 76  ed); the new lev
8570: 65 6c 20 77 69 6c 6c 20 74 61 6b 65 0a 20 20 20  el will take.   
8580: 65 66 66 65 63 74 20 6f 6e 6c 79 20 61 74 20 74  effect only at t
8590: 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 6f 66 20  he next call of 
85a0: 64 65 66 6c 61 74 65 28 29 2e 0a 0a 20 20 20 20  deflate()...    
85b0: 20 42 65 66 6f 72 65 20 74 68 65 20 63 61 6c 6c   Before the call
85c0: 20 6f 66 20 64 65 66 6c 61 74 65 50 61 72 61 6d   of deflateParam
85d0: 73 2c 20 74 68 65 20 73 74 72 65 61 6d 20 73 74  s, the stream st
85e0: 61 74 65 20 6d 75 73 74 20 62 65 20 73 65 74 20  ate must be set 
85f0: 61 73 20 66 6f 72 0a 20 20 20 61 20 63 61 6c 6c  as for.   a call
8600: 20 6f 66 20 64 65 66 6c 61 74 65 28 29 2c 20 73   of deflate(), s
8610: 69 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e 74  ince the current
8620: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 70  ly available inp
8630: 75 74 20 6d 61 79 20 68 61 76 65 20 74 6f 20 62  ut may have to b
8640: 65 0a 20 20 20 63 6f 6d 70 72 65 73 73 65 64 20  e.   compressed 
8650: 61 6e 64 20 66 6c 75 73 68 65 64 2e 20 20 49 6e  and flushed.  In
8660: 20 70 61 72 74 69 63 75 6c 61 72 2c 20 73 74 72   particular, str
8670: 6d 2d 3e 61 76 61 69 6c 5f 6f 75 74 20 6d 75 73  m->avail_out mus
8680: 74 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 0a  t be non-zero...
8690: 20 20 20 20 20 64 65 66 6c 61 74 65 50 61 72 61       deflatePara
86a0: 6d 73 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20  ms returns Z_OK 
86b0: 69 66 20 73 75 63 63 65 73 73 2c 20 5a 5f 53 54  if success, Z_ST
86c0: 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 74 68  REAM_ERROR if th
86d0: 65 20 73 6f 75 72 63 65 0a 20 20 20 73 74 72 65  e source.   stre
86e0: 61 6d 20 73 74 61 74 65 20 77 61 73 20 69 6e 63  am state was inc
86f0: 6f 6e 73 69 73 74 65 6e 74 20 6f 72 20 69 66 20  onsistent or if 
8700: 61 20 70 61 72 61 6d 65 74 65 72 20 77 61 73 20  a parameter was 
8710: 69 6e 76 61 6c 69 64 2c 20 5a 5f 42 55 46 5f 45  invalid, Z_BUF_E
8720: 52 52 4f 52 20 69 66 0a 20 20 20 73 74 72 6d 2d  RROR if.   strm-
8730: 3e 61 76 61 69 6c 5f 6f 75 74 20 77 61 73 20 7a  >avail_out was z
8740: 65 72 6f 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e  ero..*/..ZEXTERN
8750: 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 64 65 66   int ZEXPORT def
8760: 6c 61 74 65 54 75 6e 65 20 4f 46 28 28 7a 5f 73  lateTune OF((z_s
8770: 74 72 65 61 6d 70 20 73 74 72 6d 2c 0a 20 20 20  treamp strm,.   
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87a0: 20 69 6e 74 20 67 6f 6f 64 5f 6c 65 6e 67 74 68   int good_length
87b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87d0: 20 20 20 20 20 20 69 6e 74 20 6d 61 78 5f 6c 61        int max_la
87e0: 7a 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  zy,.            
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8800: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 69 63 65          int nice
8810: 5f 6c 65 6e 67 74 68 2c 0a 20 20 20 20 20 20 20  _length,.       
8820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
8840: 20 6d 61 78 5f 63 68 61 69 6e 29 29 3b 0a 2f 2a   max_chain));./*
8850: 0a 20 20 20 20 20 46 69 6e 65 20 74 75 6e 65 20  .     Fine tune 
8860: 64 65 66 6c 61 74 65 27 73 20 69 6e 74 65 72 6e  deflate's intern
8870: 61 6c 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 70  al compression p
8880: 61 72 61 6d 65 74 65 72 73 2e 20 20 54 68 69 73  arameters.  This
8890: 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 0a   should only be.
88a0: 20 20 20 75 73 65 64 20 62 79 20 73 6f 6d 65 6f     used by someo
88b0: 6e 65 20 77 68 6f 20 75 6e 64 65 72 73 74 61 6e  ne who understan
88c0: 64 73 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d  ds the algorithm
88d0: 20 75 73 65 64 20 62 79 20 7a 6c 69 62 27 73 20   used by zlib's 
88e0: 64 65 66 6c 61 74 65 20 66 6f 72 0a 20 20 20 73  deflate for.   s
88f0: 65 61 72 63 68 69 6e 67 20 66 6f 72 20 74 68 65  earching for the
8900: 20 62 65 73 74 20 6d 61 74 63 68 69 6e 67 20 73   best matching s
8910: 74 72 69 6e 67 2c 20 61 6e 64 20 65 76 65 6e 20  tring, and even 
8920: 74 68 65 6e 20 6f 6e 6c 79 20 62 79 20 74 68 65  then only by the
8930: 20 6d 6f 73 74 0a 20 20 20 66 61 6e 61 74 69 63   most.   fanatic
8940: 20 6f 70 74 69 6d 69 7a 65 72 20 74 72 79 69 6e   optimizer tryin
8950: 67 20 74 6f 20 73 71 75 65 65 7a 65 20 6f 75 74  g to squeeze out
8960: 20 74 68 65 20 6c 61 73 74 20 63 6f 6d 70 72 65   the last compre
8970: 73 73 65 64 20 62 69 74 20 66 6f 72 20 74 68 65  ssed bit for the
8980: 69 72 0a 20 20 20 73 70 65 63 69 66 69 63 20 69  ir.   specific i
8990: 6e 70 75 74 20 64 61 74 61 2e 20 20 52 65 61 64  nput data.  Read
89a0: 20 74 68 65 20 64 65 66 6c 61 74 65 2e 63 20 73   the deflate.c s
89b0: 6f 75 72 63 65 20 63 6f 64 65 20 66 6f 72 20 74  ource code for t
89c0: 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
89d0: 65 0a 20 20 20 6d 61 78 5f 6c 61 7a 79 2c 20 67  e.   max_lazy, g
89e0: 6f 6f 64 5f 6c 65 6e 67 74 68 2c 20 6e 69 63 65  ood_length, nice
89f0: 5f 6c 65 6e 67 74 68 2c 20 61 6e 64 20 6d 61 78  _length, and max
8a00: 5f 63 68 61 69 6e 20 70 61 72 61 6d 65 74 65 72  _chain parameter
8a10: 73 2e 0a 0a 20 20 20 20 20 64 65 66 6c 61 74 65  s...     deflate
8a20: 54 75 6e 65 28 29 20 63 61 6e 20 62 65 20 63 61  Tune() can be ca
8a30: 6c 6c 65 64 20 61 66 74 65 72 20 64 65 66 6c 61  lled after defla
8a40: 74 65 49 6e 69 74 28 29 20 6f 72 20 64 65 66 6c  teInit() or defl
8a50: 61 74 65 49 6e 69 74 32 28 29 2c 20 61 6e 64 0a  ateInit2(), and.
8a60: 20 20 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20     returns Z_OK 
8a70: 6f 6e 20 73 75 63 63 65 73 73 2c 20 6f 72 20 5a  on success, or Z
8a80: 5f 53 54 52 45 41 4d 5f 45 52 52 4f 52 20 66 6f  _STREAM_ERROR fo
8a90: 72 20 61 6e 20 69 6e 76 61 6c 69 64 20 64 65 66  r an invalid def
8aa0: 6c 61 74 65 20 73 74 72 65 61 6d 2e 0a 20 2a 2f  late stream.. */
8ab0: 0a 0a 5a 45 58 54 45 52 4e 20 75 4c 6f 6e 67 20  ..ZEXTERN uLong 
8ac0: 5a 45 58 50 4f 52 54 20 64 65 66 6c 61 74 65 42  ZEXPORT deflateB
8ad0: 6f 75 6e 64 20 4f 46 28 28 7a 5f 73 74 72 65 61  ound OF((z_strea
8ae0: 6d 70 20 73 74 72 6d 2c 0a 20 20 20 20 20 20 20  mp strm,.       
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b10: 75 4c 6f 6e 67 20 73 6f 75 72 63 65 4c 65 6e 29  uLong sourceLen)
8b20: 29 3b 0a 2f 2a 0a 20 20 20 20 20 64 65 66 6c 61  );./*.     defla
8b30: 74 65 42 6f 75 6e 64 28 29 20 72 65 74 75 72 6e  teBound() return
8b40: 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  s an upper bound
8b50: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 72 65 73 73   on the compress
8b60: 65 64 20 73 69 7a 65 20 61 66 74 65 72 0a 20 20  ed size after.  
8b70: 20 64 65 66 6c 61 74 69 6f 6e 20 6f 66 20 73 6f   deflation of so
8b80: 75 72 63 65 4c 65 6e 20 62 79 74 65 73 2e 20 20  urceLen bytes.  
8b90: 49 74 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65  It must be calle
8ba0: 64 20 61 66 74 65 72 20 64 65 66 6c 61 74 65 49  d after deflateI
8bb0: 6e 69 74 28 29 20 6f 72 0a 20 20 20 64 65 66 6c  nit() or.   defl
8bc0: 61 74 65 49 6e 69 74 32 28 29 2c 20 61 6e 64 20  ateInit2(), and 
8bd0: 61 66 74 65 72 20 64 65 66 6c 61 74 65 53 65 74  after deflateSet
8be0: 48 65 61 64 65 72 28 29 2c 20 69 66 20 75 73 65  Header(), if use
8bf0: 64 2e 20 20 54 68 69 73 20 77 6f 75 6c 64 20 62  d.  This would b
8c00: 65 20 75 73 65 64 0a 20 20 20 74 6f 20 61 6c 6c  e used.   to all
8c10: 6f 63 61 74 65 20 61 6e 20 6f 75 74 70 75 74 20  ocate an output 
8c20: 62 75 66 66 65 72 20 66 6f 72 20 64 65 66 6c 61  buffer for defla
8c30: 74 69 6f 6e 20 69 6e 20 61 20 73 69 6e 67 6c 65  tion in a single
8c40: 20 70 61 73 73 2c 20 61 6e 64 20 73 6f 20 77 6f   pass, and so wo
8c50: 75 6c 64 20 62 65 0a 20 20 20 63 61 6c 6c 65 64  uld be.   called
8c60: 20 62 65 66 6f 72 65 20 64 65 66 6c 61 74 65 28   before deflate(
8c70: 29 2e 20 20 49 66 20 74 68 61 74 20 66 69 72 73  ).  If that firs
8c80: 74 20 64 65 66 6c 61 74 65 28 29 20 63 61 6c 6c  t deflate() call
8c90: 20 69 73 20 70 72 6f 76 69 64 65 64 20 74 68 65   is provided the
8ca0: 0a 20 20 20 73 6f 75 72 63 65 4c 65 6e 20 69 6e  .   sourceLen in
8cb0: 70 75 74 20 62 79 74 65 73 2c 20 61 6e 20 6f 75  put bytes, an ou
8cc0: 74 70 75 74 20 62 75 66 66 65 72 20 61 6c 6c 6f  tput buffer allo
8cd0: 63 61 74 65 64 20 74 6f 20 74 68 65 20 73 69 7a  cated to the siz
8ce0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 0a 20 20  e returned by.  
8cf0: 20 64 65 66 6c 61 74 65 42 6f 75 6e 64 28 29 2c   deflateBound(),
8d00: 20 61 6e 64 20 74 68 65 20 66 6c 75 73 68 20 76   and the flush v
8d10: 61 6c 75 65 20 5a 5f 46 49 4e 49 53 48 2c 20 74  alue Z_FINISH, t
8d20: 68 65 6e 20 64 65 66 6c 61 74 65 28 29 20 69 73  hen deflate() is
8d30: 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 74   guaranteed.   t
8d40: 6f 20 72 65 74 75 72 6e 20 5a 5f 53 54 52 45 41  o return Z_STREA
8d50: 4d 5f 45 4e 44 2e 20 20 4e 6f 74 65 20 74 68 61  M_END.  Note tha
8d60: 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  t it is possible
8d70: 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 72 65 73   for the compres
8d80: 73 65 64 20 73 69 7a 65 20 74 6f 0a 20 20 20 62  sed size to.   b
8d90: 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  e larger than th
8da0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
8db0: 20 62 79 20 64 65 66 6c 61 74 65 42 6f 75 6e 64   by deflateBound
8dc0: 28 29 20 69 66 20 66 6c 75 73 68 20 6f 70 74 69  () if flush opti
8dd0: 6f 6e 73 20 6f 74 68 65 72 0a 20 20 20 74 68 61  ons other.   tha
8de0: 6e 20 5a 5f 46 49 4e 49 53 48 20 6f 72 20 5a 5f  n Z_FINISH or Z_
8df0: 4e 4f 5f 46 4c 55 53 48 20 61 72 65 20 75 73 65  NO_FLUSH are use
8e00: 64 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69  d..*/..ZEXTERN i
8e10: 6e 74 20 5a 45 58 50 4f 52 54 20 64 65 66 6c 61  nt ZEXPORT defla
8e20: 74 65 50 65 6e 64 69 6e 67 20 4f 46 28 28 7a 5f  tePending OF((z_
8e30: 73 74 72 65 61 6d 70 20 73 74 72 6d 2c 0a 20 20  streamp strm,.  
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 2a 70       unsigned *p
8e70: 65 6e 64 69 6e 67 2c 0a 20 20 20 20 20 20 20 20  ending,.        
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8ea0: 6e 74 20 2a 62 69 74 73 29 29 3b 0a 2f 2a 0a 20  nt *bits));./*. 
8eb0: 20 20 20 20 64 65 66 6c 61 74 65 50 65 6e 64 69      deflatePendi
8ec0: 6e 67 28 29 20 72 65 74 75 72 6e 73 20 74 68 65  ng() returns the
8ed0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
8ee0: 20 61 6e 64 20 62 69 74 73 20 6f 66 20 6f 75 74   and bits of out
8ef0: 70 75 74 20 74 68 61 74 20 68 61 76 65 0a 20 20  put that have.  
8f00: 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64 2c   been generated,
8f10: 20 62 75 74 20 6e 6f 74 20 79 65 74 20 70 72 6f   but not yet pro
8f20: 76 69 64 65 64 20 69 6e 20 74 68 65 20 61 76 61  vided in the ava
8f30: 69 6c 61 62 6c 65 20 6f 75 74 70 75 74 2e 20 20  ilable output.  
8f40: 54 68 65 20 62 79 74 65 73 20 6e 6f 74 0a 20 20  The bytes not.  
8f50: 20 70 72 6f 76 69 64 65 64 20 77 6f 75 6c 64 20   provided would 
8f60: 62 65 20 64 75 65 20 74 6f 20 74 68 65 20 61 76  be due to the av
8f70: 61 69 6c 61 62 6c 65 20 6f 75 74 70 75 74 20 73  ailable output s
8f80: 70 61 63 65 20 68 61 76 69 6e 67 20 62 65 69 6e  pace having bein
8f90: 67 20 63 6f 6e 73 75 6d 65 64 2e 0a 20 20 20 54  g consumed..   T
8fa0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
8fb0: 73 20 6f 66 20 6f 75 74 70 75 74 20 6e 6f 74 20  s of output not 
8fc0: 70 72 6f 76 69 64 65 64 20 61 72 65 20 62 65 74  provided are bet
8fd0: 77 65 65 6e 20 30 20 61 6e 64 20 37 2c 20 77 68  ween 0 and 7, wh
8fe0: 65 72 65 20 74 68 65 79 0a 20 20 20 61 77 61 69  ere they.   awai
8ff0: 74 20 6d 6f 72 65 20 62 69 74 73 20 74 6f 20 6a  t more bits to j
9000: 6f 69 6e 20 74 68 65 6d 20 69 6e 20 6f 72 64 65  oin them in orde
9010: 72 20 74 6f 20 66 69 6c 6c 20 6f 75 74 20 61 20  r to fill out a 
9020: 66 75 6c 6c 20 62 79 74 65 2e 20 20 49 66 20 70  full byte.  If p
9030: 65 6e 64 69 6e 67 0a 20 20 20 6f 72 20 62 69 74  ending.   or bit
9040: 73 20 61 72 65 20 5a 5f 4e 55 4c 4c 2c 20 74 68  s are Z_NULL, th
9050: 65 6e 20 74 68 6f 73 65 20 76 61 6c 75 65 73 20  en those values 
9060: 61 72 65 20 6e 6f 74 20 73 65 74 2e 0a 0a 20 20  are not set...  
9070: 20 20 20 64 65 66 6c 61 74 65 50 65 6e 64 69 6e     deflatePendin
9080: 67 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20 69  g returns Z_OK i
9090: 66 20 73 75 63 63 65 73 73 2c 20 6f 72 20 5a 5f  f success, or Z_
90a0: 53 54 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20  STREAM_ERROR if 
90b0: 74 68 65 20 73 6f 75 72 63 65 0a 20 20 20 73 74  the source.   st
90c0: 72 65 61 6d 20 73 74 61 74 65 20 77 61 73 20 69  ream state was i
90d0: 6e 63 6f 6e 73 69 73 74 65 6e 74 2e 0a 20 2a 2f  nconsistent.. */
90e0: 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45  ..ZEXTERN int ZE
90f0: 58 50 4f 52 54 20 64 65 66 6c 61 74 65 50 72 69  XPORT deflatePri
9100: 6d 65 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d 70  me OF((z_streamp
9110: 20 73 74 72 6d 2c 0a 20 20 20 20 20 20 20 20 20   strm,.         
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9140: 62 69 74 73 2c 0a 20 20 20 20 20 20 20 20 20 20  bits,.          
9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9160: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76             int v
9170: 61 6c 75 65 29 29 3b 0a 2f 2a 0a 20 20 20 20 20  alue));./*.     
9180: 64 65 66 6c 61 74 65 50 72 69 6d 65 28 29 20 69  deflatePrime() i
9190: 6e 73 65 72 74 73 20 62 69 74 73 20 69 6e 20 74  nserts bits in t
91a0: 68 65 20 64 65 66 6c 61 74 65 20 6f 75 74 70 75  he deflate outpu
91b0: 74 20 73 74 72 65 61 6d 2e 20 20 54 68 65 20 69  t stream.  The i
91c0: 6e 74 65 6e 74 0a 20 20 20 69 73 20 74 68 61 74  ntent.   is that
91d0: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
91e0: 73 20 75 73 65 64 20 74 6f 20 73 74 61 72 74 20  s used to start 
91f0: 6f 66 66 20 74 68 65 20 64 65 66 6c 61 74 65 20  off the deflate 
9200: 6f 75 74 70 75 74 20 77 69 74 68 20 74 68 65 20  output with the 
9210: 62 69 74 73 0a 20 20 20 6c 65 66 74 6f 76 65 72  bits.   leftover
9220: 20 66 72 6f 6d 20 61 20 70 72 65 76 69 6f 75 73   from a previous
9230: 20 64 65 66 6c 61 74 65 20 73 74 72 65 61 6d 20   deflate stream 
9240: 77 68 65 6e 20 61 70 70 65 6e 64 69 6e 67 20 74  when appending t
9250: 6f 20 69 74 2e 20 20 41 73 20 73 75 63 68 2c 20  o it.  As such, 
9260: 74 68 69 73 0a 20 20 20 66 75 6e 63 74 69 6f 6e  this.   function
9270: 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 75 73 65   can only be use
9280: 64 20 66 6f 72 20 72 61 77 20 64 65 66 6c 61 74  d for raw deflat
9290: 65 2c 20 61 6e 64 20 6d 75 73 74 20 62 65 20 75  e, and must be u
92a0: 73 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 66  sed before the f
92b0: 69 72 73 74 0a 20 20 20 64 65 66 6c 61 74 65 28  irst.   deflate(
92c0: 29 20 63 61 6c 6c 20 61 66 74 65 72 20 61 20 64  ) call after a d
92d0: 65 66 6c 61 74 65 49 6e 69 74 32 28 29 20 6f 72  eflateInit2() or
92e0: 20 64 65 66 6c 61 74 65 52 65 73 65 74 28 29 2e   deflateReset().
92f0: 20 20 62 69 74 73 20 6d 75 73 74 20 62 65 20 6c    bits must be l
9300: 65 73 73 0a 20 20 20 74 68 61 6e 20 6f 72 20 65  ess.   than or e
9310: 71 75 61 6c 20 74 6f 20 31 36 2c 20 61 6e 64 20  qual to 16, and 
9320: 74 68 61 74 20 6d 61 6e 79 20 6f 66 20 74 68 65  that many of the
9330: 20 6c 65 61 73 74 20 73 69 67 6e 69 66 69 63 61   least significa
9340: 6e 74 20 62 69 74 73 20 6f 66 20 76 61 6c 75 65  nt bits of value
9350: 0a 20 20 20 77 69 6c 6c 20 62 65 20 69 6e 73 65  .   will be inse
9360: 72 74 65 64 20 69 6e 20 74 68 65 20 6f 75 74 70  rted in the outp
9370: 75 74 2e 0a 0a 20 20 20 20 20 64 65 66 6c 61 74  ut...     deflat
9380: 65 50 72 69 6d 65 20 72 65 74 75 72 6e 73 20 5a  ePrime returns Z
9390: 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73 2c 20  _OK if success, 
93a0: 5a 5f 42 55 46 5f 45 52 52 4f 52 20 69 66 20 74  Z_BUF_ERROR if t
93b0: 68 65 72 65 20 77 61 73 20 6e 6f 74 20 65 6e 6f  here was not eno
93c0: 75 67 68 0a 20 20 20 72 6f 6f 6d 20 69 6e 20 74  ugh.   room in t
93d0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 66  he internal buff
93e0: 65 72 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  er to insert the
93f0: 20 62 69 74 73 2c 20 6f 72 20 5a 5f 53 54 52 45   bits, or Z_STRE
9400: 41 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65 0a  AM_ERROR if the.
9410: 20 20 20 73 6f 75 72 63 65 20 73 74 72 65 61 6d     source stream
9420: 20 73 74 61 74 65 20 77 61 73 20 69 6e 63 6f 6e   state was incon
9430: 73 69 73 74 65 6e 74 2e 0a 2a 2f 0a 0a 5a 45 58  sistent..*/..ZEX
9440: 54 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f 52 54  TERN int ZEXPORT
9450: 20 64 65 66 6c 61 74 65 53 65 74 48 65 61 64 65   deflateSetHeade
9460: 72 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d 70 20  r OF((z_streamp 
9470: 73 74 72 6d 2c 0a 20 20 20 20 20 20 20 20 20 20  strm,.          
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
94a0: 7a 5f 68 65 61 64 65 72 70 20 68 65 61 64 29 29  z_headerp head))
94b0: 3b 0a 2f 2a 0a 20 20 20 20 20 64 65 66 6c 61 74  ;./*.     deflat
94c0: 65 53 65 74 48 65 61 64 65 72 28 29 20 70 72 6f  eSetHeader() pro
94d0: 76 69 64 65 73 20 67 7a 69 70 20 68 65 61 64 65  vides gzip heade
94e0: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  r information fo
94f0: 72 20 77 68 65 6e 20 61 20 67 7a 69 70 0a 20 20  r when a gzip.  
9500: 20 73 74 72 65 61 6d 20 69 73 20 72 65 71 75 65   stream is reque
9510: 73 74 65 64 20 62 79 20 64 65 66 6c 61 74 65 49  sted by deflateI
9520: 6e 69 74 32 28 29 2e 20 20 64 65 66 6c 61 74 65  nit2().  deflate
9530: 53 65 74 48 65 61 64 65 72 28 29 20 6d 61 79 20  SetHeader() may 
9540: 62 65 20 63 61 6c 6c 65 64 0a 20 20 20 61 66 74  be called.   aft
9550: 65 72 20 64 65 66 6c 61 74 65 49 6e 69 74 32 28  er deflateInit2(
9560: 29 20 6f 72 20 64 65 66 6c 61 74 65 52 65 73 65  ) or deflateRese
9570: 74 28 29 20 61 6e 64 20 62 65 66 6f 72 65 20 74  t() and before t
9580: 68 65 20 66 69 72 73 74 20 63 61 6c 6c 20 6f 66  he first call of
9590: 0a 20 20 20 64 65 66 6c 61 74 65 28 29 2e 20 20  .   deflate().  
95a0: 54 68 65 20 74 65 78 74 2c 20 74 69 6d 65 2c 20  The text, time, 
95b0: 6f 73 2c 20 65 78 74 72 61 20 66 69 65 6c 64 2c  os, extra field,
95c0: 20 6e 61 6d 65 2c 20 61 6e 64 20 63 6f 6d 6d 65   name, and comme
95d0: 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 20  nt information. 
95e0: 20 20 69 6e 20 74 68 65 20 70 72 6f 76 69 64 65    in the provide
95f0: 64 20 67 7a 5f 68 65 61 64 65 72 20 73 74 72 75  d gz_header stru
9600: 63 74 75 72 65 20 61 72 65 20 77 72 69 74 74 65  cture are writte
9610: 6e 20 74 6f 20 74 68 65 20 67 7a 69 70 20 68 65  n to the gzip he
9620: 61 64 65 72 20 28 78 66 6c 61 67 20 69 73 0a 20  ader (xflag is. 
9630: 20 20 69 67 6e 6f 72 65 64 20 2d 2d 20 74 68 65    ignored -- the
9640: 20 65 78 74 72 61 20 66 6c 61 67 73 20 61 72 65   extra flags are
9650: 20 73 65 74 20 61 63 63 6f 72 64 69 6e 67 20 74   set according t
9660: 6f 20 74 68 65 20 63 6f 6d 70 72 65 73 73 69 6f  o the compressio
9670: 6e 20 6c 65 76 65 6c 29 2e 20 20 54 68 65 0a 20  n level).  The. 
9680: 20 20 63 61 6c 6c 65 72 20 6d 75 73 74 20 61 73    caller must as
9690: 73 75 72 65 20 74 68 61 74 2c 20 69 66 20 6e 6f  sure that, if no
96a0: 74 20 5a 5f 4e 55 4c 4c 2c 20 6e 61 6d 65 20 61  t Z_NULL, name a
96b0: 6e 64 20 63 6f 6d 6d 65 6e 74 20 61 72 65 20 74  nd comment are t
96c0: 65 72 6d 69 6e 61 74 65 64 20 77 69 74 68 0a 20  erminated with. 
96d0: 20 20 61 20 7a 65 72 6f 20 62 79 74 65 2c 20 61    a zero byte, a
96e0: 6e 64 20 74 68 61 74 20 69 66 20 65 78 74 72 61  nd that if extra
96f0: 20 69 73 20 6e 6f 74 20 5a 5f 4e 55 4c 4c 2c 20   is not Z_NULL, 
9700: 74 68 61 74 20 65 78 74 72 61 5f 6c 65 6e 20 62  that extra_len b
9710: 79 74 65 73 20 61 72 65 0a 20 20 20 61 76 61 69  ytes are.   avai
9720: 6c 61 62 6c 65 20 74 68 65 72 65 2e 20 20 49 66  lable there.  If
9730: 20 68 63 72 63 20 69 73 20 74 72 75 65 2c 20 61   hcrc is true, a
9740: 20 67 7a 69 70 20 68 65 61 64 65 72 20 63 72 63   gzip header crc
9750: 20 69 73 20 69 6e 63 6c 75 64 65 64 2e 20 20 4e   is included.  N
9760: 6f 74 65 20 74 68 61 74 0a 20 20 20 74 68 65 20  ote that.   the 
9770: 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 73  current versions
9780: 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   of the command-
9790: 6c 69 6e 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  line version of 
97a0: 67 7a 69 70 20 28 75 70 20 74 68 72 6f 75 67 68  gzip (up through
97b0: 20 76 65 72 73 69 6f 6e 0a 20 20 20 31 2e 33 2e   version.   1.3.
97c0: 78 29 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72  x) do not suppor
97d0: 74 20 68 65 61 64 65 72 20 63 72 63 27 73 2c 20  t header crc's, 
97e0: 61 6e 64 20 77 69 6c 6c 20 72 65 70 6f 72 74 20  and will report 
97f0: 74 68 61 74 20 69 74 20 69 73 20 61 20 22 6d 75  that it is a "mu
9800: 6c 74 69 2d 70 61 72 74 0a 20 20 20 67 7a 69 70  lti-part.   gzip
9810: 20 66 69 6c 65 22 20 61 6e 64 20 67 69 76 65 20   file" and give 
9820: 75 70 2e 0a 0a 20 20 20 20 20 49 66 20 64 65 66  up...     If def
9830: 6c 61 74 65 53 65 74 48 65 61 64 65 72 20 69 73  lateSetHeader is
9840: 20 6e 6f 74 20 75 73 65 64 2c 20 74 68 65 20 64   not used, the d
9850: 65 66 61 75 6c 74 20 67 7a 69 70 20 68 65 61 64  efault gzip head
9860: 65 72 20 68 61 73 20 74 65 78 74 20 66 61 6c 73  er has text fals
9870: 65 2c 0a 20 20 20 74 68 65 20 74 69 6d 65 20 73  e,.   the time s
9880: 65 74 20 74 6f 20 7a 65 72 6f 2c 20 61 6e 64 20  et to zero, and 
9890: 6f 73 20 73 65 74 20 74 6f 20 32 35 35 2c 20 77  os set to 255, w
98a0: 69 74 68 20 6e 6f 20 65 78 74 72 61 2c 20 6e 61  ith no extra, na
98b0: 6d 65 2c 20 6f 72 20 63 6f 6d 6d 65 6e 74 0a 20  me, or comment. 
98c0: 20 20 66 69 65 6c 64 73 2e 20 20 54 68 65 20 67    fields.  The g
98d0: 7a 69 70 20 68 65 61 64 65 72 20 69 73 20 72 65  zip header is re
98e0: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 64 65  turned to the de
98f0: 66 61 75 6c 74 20 73 74 61 74 65 20 62 79 20 64  fault state by d
9900: 65 66 6c 61 74 65 52 65 73 65 74 28 29 2e 0a 0a  eflateReset()...
9910: 20 20 20 20 20 64 65 66 6c 61 74 65 53 65 74 48       deflateSetH
9920: 65 61 64 65 72 20 72 65 74 75 72 6e 73 20 5a 5f  eader returns Z_
9930: 4f 4b 20 69 66 20 73 75 63 63 65 73 73 2c 20 6f  OK if success, o
9940: 72 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52 4f 52  r Z_STREAM_ERROR
9950: 20 69 66 20 74 68 65 20 73 6f 75 72 63 65 0a 20   if the source. 
9960: 20 20 73 74 72 65 61 6d 20 73 74 61 74 65 20 77    stream state w
9970: 61 73 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 2e  as inconsistent.
9980: 0a 2a 2f 0a 0a 2f 2a 0a 5a 45 58 54 45 52 4e 20  .*/../*.ZEXTERN 
9990: 69 6e 74 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c  int ZEXPORT infl
99a0: 61 74 65 49 6e 69 74 32 20 4f 46 28 28 7a 5f 73  ateInit2 OF((z_s
99b0: 74 72 65 61 6d 70 20 73 74 72 6d 2c 0a 20 20 20  treamp strm,.   
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 69 6e 74 20 20 77 69 6e 64 6f 77 42 69 74    int  windowBit
99f0: 73 29 29 3b 0a 0a 20 20 20 20 20 54 68 69 73 20  s));..     This 
9a00: 69 73 20 61 6e 6f 74 68 65 72 20 76 65 72 73 69  is another versi
9a10: 6f 6e 20 6f 66 20 69 6e 66 6c 61 74 65 49 6e 69  on of inflateIni
9a20: 74 20 77 69 74 68 20 61 6e 20 65 78 74 72 61 20  t with an extra 
9a30: 70 61 72 61 6d 65 74 65 72 2e 20 20 54 68 65 0a  parameter.  The.
9a40: 20 20 20 66 69 65 6c 64 73 20 6e 65 78 74 5f 69     fields next_i
9a50: 6e 2c 20 61 76 61 69 6c 5f 69 6e 2c 20 7a 61 6c  n, avail_in, zal
9a60: 6c 6f 63 2c 20 7a 66 72 65 65 20 61 6e 64 20 6f  loc, zfree and o
9a70: 70 61 71 75 65 20 6d 75 73 74 20 62 65 20 69 6e  paque must be in
9a80: 69 74 69 61 6c 69 7a 65 64 0a 20 20 20 62 65 66  itialized.   bef
9a90: 6f 72 65 20 62 79 20 74 68 65 20 63 61 6c 6c 65  ore by the calle
9aa0: 72 2e 0a 0a 20 20 20 20 20 54 68 65 20 77 69 6e  r...     The win
9ab0: 64 6f 77 42 69 74 73 20 70 61 72 61 6d 65 74 65  dowBits paramete
9ac0: 72 20 69 73 20 74 68 65 20 62 61 73 65 20 74 77  r is the base tw
9ad0: 6f 20 6c 6f 67 61 72 69 74 68 6d 20 6f 66 20 74  o logarithm of t
9ae0: 68 65 20 6d 61 78 69 6d 75 6d 20 77 69 6e 64 6f  he maximum windo
9af0: 77 0a 20 20 20 73 69 7a 65 20 28 74 68 65 20 73  w.   size (the s
9b00: 69 7a 65 20 6f 66 20 74 68 65 20 68 69 73 74 6f  ize of the histo
9b10: 72 79 20 62 75 66 66 65 72 29 2e 20 20 49 74 20  ry buffer).  It 
9b20: 73 68 6f 75 6c 64 20 62 65 20 69 6e 20 74 68 65  should be in the
9b30: 20 72 61 6e 67 65 20 38 2e 2e 31 35 20 66 6f 72   range 8..15 for
9b40: 0a 20 20 20 74 68 69 73 20 76 65 72 73 69 6f 6e  .   this version
9b50: 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e   of the library.
9b60: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61    The default va
9b70: 6c 75 65 20 69 73 20 31 35 20 69 66 20 69 6e 66  lue is 15 if inf
9b80: 6c 61 74 65 49 6e 69 74 20 69 73 20 75 73 65 64  lateInit is used
9b90: 0a 20 20 20 69 6e 73 74 65 61 64 2e 20 20 77 69  .   instead.  wi
9ba0: 6e 64 6f 77 42 69 74 73 20 6d 75 73 74 20 62 65  ndowBits must be
9bb0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
9bc0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 77 69   equal to the wi
9bd0: 6e 64 6f 77 42 69 74 73 20 76 61 6c 75 65 0a 20  ndowBits value. 
9be0: 20 20 70 72 6f 76 69 64 65 64 20 74 6f 20 64 65    provided to de
9bf0: 66 6c 61 74 65 49 6e 69 74 32 28 29 20 77 68 69  flateInit2() whi
9c00: 6c 65 20 63 6f 6d 70 72 65 73 73 69 6e 67 2c 20  le compressing, 
9c10: 6f 72 20 69 74 20 6d 75 73 74 20 62 65 20 65 71  or it must be eq
9c20: 75 61 6c 20 74 6f 20 31 35 20 69 66 0a 20 20 20  ual to 15 if.   
9c30: 64 65 66 6c 61 74 65 49 6e 69 74 32 28 29 20 77  deflateInit2() w
9c40: 61 73 20 6e 6f 74 20 75 73 65 64 2e 20 20 49 66  as not used.  If
9c50: 20 61 20 63 6f 6d 70 72 65 73 73 65 64 20 73 74   a compressed st
9c60: 72 65 61 6d 20 77 69 74 68 20 61 20 6c 61 72 67  ream with a larg
9c70: 65 72 20 77 69 6e 64 6f 77 0a 20 20 20 73 69 7a  er window.   siz
9c80: 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 69 6e  e is given as in
9c90: 70 75 74 2c 20 69 6e 66 6c 61 74 65 28 29 20 77  put, inflate() w
9ca0: 69 6c 6c 20 72 65 74 75 72 6e 20 77 69 74 68 20  ill return with 
9cb0: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 0a 20  the error code. 
9cc0: 20 20 5a 5f 44 41 54 41 5f 45 52 52 4f 52 20 69    Z_DATA_ERROR i
9cd0: 6e 73 74 65 61 64 20 6f 66 20 74 72 79 69 6e 67  nstead of trying
9ce0: 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 61 20 6c   to allocate a l
9cf0: 61 72 67 65 72 20 77 69 6e 64 6f 77 2e 0a 0a 20  arger window... 
9d00: 20 20 20 20 77 69 6e 64 6f 77 42 69 74 73 20 63      windowBits c
9d10: 61 6e 20 61 6c 73 6f 20 62 65 20 7a 65 72 6f 20  an also be zero 
9d20: 74 6f 20 72 65 71 75 65 73 74 20 74 68 61 74 20  to request that 
9d30: 69 6e 66 6c 61 74 65 20 75 73 65 20 74 68 65 20  inflate use the 
9d40: 77 69 6e 64 6f 77 20 73 69 7a 65 20 69 6e 0a 20  window size in. 
9d50: 20 20 74 68 65 20 7a 6c 69 62 20 68 65 61 64 65    the zlib heade
9d60: 72 20 6f 66 20 74 68 65 20 63 6f 6d 70 72 65 73  r of the compres
9d70: 73 65 64 20 73 74 72 65 61 6d 2e 0a 0a 20 20 20  sed stream...   
9d80: 20 20 77 69 6e 64 6f 77 42 69 74 73 20 63 61 6e    windowBits can
9d90: 20 61 6c 73 6f 20 62 65 20 2d 38 2e 2e 2d 31 35   also be -8..-15
9da0: 20 66 6f 72 20 72 61 77 20 69 6e 66 6c 61 74 65   for raw inflate
9db0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
9dc0: 20 2d 77 69 6e 64 6f 77 42 69 74 73 0a 20 20 20   -windowBits.   
9dd0: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 77  determines the w
9de0: 69 6e 64 6f 77 20 73 69 7a 65 2e 20 20 69 6e 66  indow size.  inf
9df0: 6c 61 74 65 28 29 20 77 69 6c 6c 20 74 68 65 6e  late() will then
9e00: 20 70 72 6f 63 65 73 73 20 72 61 77 20 64 65 66   process raw def
9e10: 6c 61 74 65 20 64 61 74 61 2c 0a 20 20 20 6e 6f  late data,.   no
9e20: 74 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  t looking for a 
9e30: 7a 6c 69 62 20 6f 72 20 67 7a 69 70 20 68 65 61  zlib or gzip hea
9e40: 64 65 72 2c 20 6e 6f 74 20 67 65 6e 65 72 61 74  der, not generat
9e50: 69 6e 67 20 61 20 63 68 65 63 6b 20 76 61 6c 75  ing a check valu
9e60: 65 2c 20 61 6e 64 20 6e 6f 74 0a 20 20 20 6c 6f  e, and not.   lo
9e70: 6f 6b 69 6e 67 20 66 6f 72 20 61 6e 79 20 63 68  oking for any ch
9e80: 65 63 6b 20 76 61 6c 75 65 73 20 66 6f 72 20 63  eck values for c
9e90: 6f 6d 70 61 72 69 73 6f 6e 20 61 74 20 74 68 65  omparison at the
9ea0: 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 72 65   end of the stre
9eb0: 61 6d 2e 20 20 54 68 69 73 0a 20 20 20 69 73 20  am.  This.   is 
9ec0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 6f 74 68  for use with oth
9ed0: 65 72 20 66 6f 72 6d 61 74 73 20 74 68 61 74 20  er formats that 
9ee0: 75 73 65 20 74 68 65 20 64 65 66 6c 61 74 65 20  use the deflate 
9ef0: 63 6f 6d 70 72 65 73 73 65 64 20 64 61 74 61 20  compressed data 
9f00: 66 6f 72 6d 61 74 0a 20 20 20 73 75 63 68 20 61  format.   such a
9f10: 73 20 7a 69 70 2e 20 20 54 68 6f 73 65 20 66 6f  s zip.  Those fo
9f20: 72 6d 61 74 73 20 70 72 6f 76 69 64 65 20 74 68  rmats provide th
9f30: 65 69 72 20 6f 77 6e 20 63 68 65 63 6b 20 76 61  eir own check va
9f40: 6c 75 65 73 2e 20 20 49 66 20 61 20 63 75 73 74  lues.  If a cust
9f50: 6f 6d 0a 20 20 20 66 6f 72 6d 61 74 20 69 73 20  om.   format is 
9f60: 64 65 76 65 6c 6f 70 65 64 20 75 73 69 6e 67 20  developed using 
9f70: 74 68 65 20 72 61 77 20 64 65 66 6c 61 74 65 20  the raw deflate 
9f80: 66 6f 72 6d 61 74 20 66 6f 72 20 63 6f 6d 70 72  format for compr
9f90: 65 73 73 65 64 20 64 61 74 61 2c 20 69 74 20 69  essed data, it i
9fa0: 73 0a 20 20 20 72 65 63 6f 6d 6d 65 6e 64 65 64  s.   recommended
9fb0: 20 74 68 61 74 20 61 20 63 68 65 63 6b 20 76 61   that a check va
9fc0: 6c 75 65 20 73 75 63 68 20 61 73 20 61 6e 20 61  lue such as an a
9fd0: 64 6c 65 72 33 32 20 6f 72 20 61 20 63 72 63 33  dler32 or a crc3
9fe0: 32 20 62 65 20 61 70 70 6c 69 65 64 20 74 6f 0a  2 be applied to.
9ff0: 20 20 20 74 68 65 20 75 6e 63 6f 6d 70 72 65 73     the uncompres
a000: 73 65 64 20 64 61 74 61 20 61 73 20 69 73 20 64  sed data as is d
a010: 6f 6e 65 20 69 6e 20 74 68 65 20 7a 6c 69 62 2c  one in the zlib,
a020: 20 67 7a 69 70 2c 20 61 6e 64 20 7a 69 70 20 66   gzip, and zip f
a030: 6f 72 6d 61 74 73 2e 20 20 46 6f 72 0a 20 20 20  ormats.  For.   
a040: 6d 6f 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  most application
a050: 73 2c 20 74 68 65 20 7a 6c 69 62 20 66 6f 72 6d  s, the zlib form
a060: 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
a070: 64 20 61 73 20 69 73 2e 20 20 4e 6f 74 65 20 74  d as is.  Note t
a080: 68 61 74 20 63 6f 6d 6d 65 6e 74 73 0a 20 20 20  hat comments.   
a090: 61 62 6f 76 65 20 6f 6e 20 74 68 65 20 75 73 65  above on the use
a0a0: 20 69 6e 20 64 65 66 6c 61 74 65 49 6e 69 74 32   in deflateInit2
a0b0: 28 29 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68  () applies to th
a0c0: 65 20 6d 61 67 6e 69 74 75 64 65 20 6f 66 20 77  e magnitude of w
a0d0: 69 6e 64 6f 77 42 69 74 73 2e 0a 0a 20 20 20 20  indowBits...    
a0e0: 20 77 69 6e 64 6f 77 42 69 74 73 20 63 61 6e 20   windowBits can 
a0f0: 61 6c 73 6f 20 62 65 20 67 72 65 61 74 65 72 20  also be greater 
a100: 74 68 61 6e 20 31 35 20 66 6f 72 20 6f 70 74 69  than 15 for opti
a110: 6f 6e 61 6c 20 67 7a 69 70 20 64 65 63 6f 64 69  onal gzip decodi
a120: 6e 67 2e 20 20 41 64 64 0a 20 20 20 33 32 20 74  ng.  Add.   32 t
a130: 6f 20 77 69 6e 64 6f 77 42 69 74 73 20 74 6f 20  o windowBits to 
a140: 65 6e 61 62 6c 65 20 7a 6c 69 62 20 61 6e 64 20  enable zlib and 
a150: 67 7a 69 70 20 64 65 63 6f 64 69 6e 67 20 77 69  gzip decoding wi
a160: 74 68 20 61 75 74 6f 6d 61 74 69 63 20 68 65 61  th automatic hea
a170: 64 65 72 0a 20 20 20 64 65 74 65 63 74 69 6f 6e  der.   detection
a180: 2c 20 6f 72 20 61 64 64 20 31 36 20 74 6f 20 64  , or add 16 to d
a190: 65 63 6f 64 65 20 6f 6e 6c 79 20 74 68 65 20 67  ecode only the g
a1a0: 7a 69 70 20 66 6f 72 6d 61 74 20 28 74 68 65 20  zip format (the 
a1b0: 7a 6c 69 62 20 66 6f 72 6d 61 74 20 77 69 6c 6c  zlib format will
a1c0: 0a 20 20 20 72 65 74 75 72 6e 20 61 20 5a 5f 44  .   return a Z_D
a1d0: 41 54 41 5f 45 52 52 4f 52 29 2e 20 20 49 66 20  ATA_ERROR).  If 
a1e0: 61 20 67 7a 69 70 20 73 74 72 65 61 6d 20 69 73  a gzip stream is
a1f0: 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 2c 20   being decoded, 
a200: 73 74 72 6d 2d 3e 61 64 6c 65 72 20 69 73 20 61  strm->adler is a
a210: 0a 20 20 20 63 72 63 33 32 20 69 6e 73 74 65 61  .   crc32 instea
a220: 64 20 6f 66 20 61 6e 20 61 64 6c 65 72 33 32 2e  d of an adler32.
a230: 0a 0a 20 20 20 20 20 69 6e 66 6c 61 74 65 49 6e  ..     inflateIn
a240: 69 74 32 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b  it2 returns Z_OK
a250: 20 69 66 20 73 75 63 63 65 73 73 2c 20 5a 5f 4d   if success, Z_M
a260: 45 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65 72  EM_ERROR if ther
a270: 65 20 77 61 73 20 6e 6f 74 20 65 6e 6f 75 67 68  e was not enough
a280: 0a 20 20 20 6d 65 6d 6f 72 79 2c 20 5a 5f 56 45  .   memory, Z_VE
a290: 52 53 49 4f 4e 5f 45 52 52 4f 52 20 69 66 20 74  RSION_ERROR if t
a2a0: 68 65 20 7a 6c 69 62 20 6c 69 62 72 61 72 79 20  he zlib library 
a2b0: 76 65 72 73 69 6f 6e 20 69 73 20 69 6e 63 6f 6d  version is incom
a2c0: 70 61 74 69 62 6c 65 20 77 69 74 68 20 74 68 65  patible with the
a2d0: 0a 20 20 20 76 65 72 73 69 6f 6e 20 61 73 73 75  .   version assu
a2e0: 6d 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c 65  med by the calle
a2f0: 72 2c 20 6f 72 20 5a 5f 53 54 52 45 41 4d 5f 45  r, or Z_STREAM_E
a300: 52 52 4f 52 20 69 66 20 74 68 65 20 70 61 72 61  RROR if the para
a310: 6d 65 74 65 72 73 20 61 72 65 0a 20 20 20 69 6e  meters are.   in
a320: 76 61 6c 69 64 2c 20 73 75 63 68 20 61 73 20 61  valid, such as a
a330: 20 6e 75 6c 6c 20 70 6f 69 6e 74 65 72 20 74 6f   null pointer to
a340: 20 74 68 65 20 73 74 72 75 63 74 75 72 65 2e 20   the structure. 
a350: 20 6d 73 67 20 69 73 20 73 65 74 20 74 6f 20 6e   msg is set to n
a360: 75 6c 6c 20 69 66 0a 20 20 20 74 68 65 72 65 20  ull if.   there 
a370: 69 73 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73  is no error mess
a380: 61 67 65 2e 20 20 69 6e 66 6c 61 74 65 49 6e 69  age.  inflateIni
a390: 74 32 20 64 6f 65 73 20 6e 6f 74 20 70 65 72 66  t2 does not perf
a3a0: 6f 72 6d 20 61 6e 79 20 64 65 63 6f 6d 70 72 65  orm any decompre
a3b0: 73 73 69 6f 6e 0a 20 20 20 61 70 61 72 74 20 66  ssion.   apart f
a3c0: 72 6f 6d 20 70 6f 73 73 69 62 6c 79 20 72 65 61  rom possibly rea
a3d0: 64 69 6e 67 20 74 68 65 20 7a 6c 69 62 20 68 65  ding the zlib he
a3e0: 61 64 65 72 20 69 66 20 70 72 65 73 65 6e 74 3a  ader if present:
a3f0: 20 61 63 74 75 61 6c 20 64 65 63 6f 6d 70 72 65   actual decompre
a400: 73 73 69 6f 6e 0a 20 20 20 77 69 6c 6c 20 62 65  ssion.   will be
a410: 20 64 6f 6e 65 20 62 79 20 69 6e 66 6c 61 74 65   done by inflate
a420: 28 29 2e 20 20 28 53 6f 20 6e 65 78 74 5f 69 6e  ().  (So next_in
a430: 20 61 6e 64 20 61 76 61 69 6c 5f 69 6e 20 6d 61   and avail_in ma
a440: 79 20 62 65 20 6d 6f 64 69 66 69 65 64 2c 20 62  y be modified, b
a450: 75 74 0a 20 20 20 6e 65 78 74 5f 6f 75 74 20 61  ut.   next_out a
a460: 6e 64 20 61 76 61 69 6c 5f 6f 75 74 20 61 72 65  nd avail_out are
a470: 20 75 6e 75 73 65 64 20 61 6e 64 20 75 6e 63 68   unused and unch
a480: 61 6e 67 65 64 2e 29 20 54 68 65 20 63 75 72 72  anged.) The curr
a490: 65 6e 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ent implementati
a4a0: 6f 6e 0a 20 20 20 6f 66 20 69 6e 66 6c 61 74 65  on.   of inflate
a4b0: 49 6e 69 74 32 28 29 20 64 6f 65 73 20 6e 6f 74  Init2() does not
a4c0: 20 70 72 6f 63 65 73 73 20 61 6e 79 20 68 65 61   process any hea
a4d0: 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
a4e0: 2d 2d 20 74 68 61 74 20 69 73 0a 20 20 20 64 65  -- that is.   de
a4f0: 66 65 72 72 65 64 20 75 6e 74 69 6c 20 69 6e 66  ferred until inf
a500: 6c 61 74 65 28 29 20 69 73 20 63 61 6c 6c 65 64  late() is called
a510: 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e  ..*/..ZEXTERN in
a520: 74 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c 61 74  t ZEXPORT inflat
a530: 65 53 65 74 44 69 63 74 69 6f 6e 61 72 79 20 4f  eSetDictionary O
a540: 46 28 28 7a 5f 73 74 72 65 61 6d 70 20 73 74 72  F((z_streamp str
a550: 6d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m,.             
a560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a580: 63 6f 6e 73 74 20 42 79 74 65 66 20 2a 64 69 63  const Bytef *dic
a590: 74 69 6f 6e 61 72 79 2c 0a 20 20 20 20 20 20 20  tionary,.       
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5c0: 20 20 20 20 20 20 75 49 6e 74 20 20 64 69 63 74        uInt  dict
a5d0: 4c 65 6e 67 74 68 29 29 3b 0a 2f 2a 0a 20 20 20  Length));./*.   
a5e0: 20 20 49 6e 69 74 69 61 6c 69 7a 65 73 20 74 68    Initializes th
a5f0: 65 20 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e 20  e decompression 
a600: 64 69 63 74 69 6f 6e 61 72 79 20 66 72 6f 6d 20  dictionary from 
a610: 74 68 65 20 67 69 76 65 6e 20 75 6e 63 6f 6d 70  the given uncomp
a620: 72 65 73 73 65 64 20 62 79 74 65 0a 20 20 20 73  ressed byte.   s
a630: 65 71 75 65 6e 63 65 2e 20 20 54 68 69 73 20 66  equence.  This f
a640: 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  unction must be 
a650: 63 61 6c 6c 65 64 20 69 6d 6d 65 64 69 61 74 65  called immediate
a660: 6c 79 20 61 66 74 65 72 20 61 20 63 61 6c 6c 20  ly after a call 
a670: 6f 66 20 69 6e 66 6c 61 74 65 2c 0a 20 20 20 69  of inflate,.   i
a680: 66 20 74 68 61 74 20 63 61 6c 6c 20 72 65 74 75  f that call retu
a690: 72 6e 65 64 20 5a 5f 4e 45 45 44 5f 44 49 43 54  rned Z_NEED_DICT
a6a0: 2e 20 20 54 68 65 20 64 69 63 74 69 6f 6e 61 72  .  The dictionar
a6b0: 79 20 63 68 6f 73 65 6e 20 62 79 20 74 68 65 20  y chosen by the 
a6c0: 63 6f 6d 70 72 65 73 73 6f 72 0a 20 20 20 63 61  compressor.   ca
a6d0: 6e 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 20  n be determined 
a6e0: 66 72 6f 6d 20 74 68 65 20 61 64 6c 65 72 33 32  from the adler32
a6f0: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
a700: 62 79 20 74 68 61 74 20 63 61 6c 6c 20 6f 66 20  by that call of 
a710: 69 6e 66 6c 61 74 65 2e 0a 20 20 20 54 68 65 20  inflate..   The 
a720: 63 6f 6d 70 72 65 73 73 6f 72 20 61 6e 64 20 64  compressor and d
a730: 65 63 6f 6d 70 72 65 73 73 6f 72 20 6d 75 73 74  ecompressor must
a740: 20 75 73 65 20 65 78 61 63 74 6c 79 20 74 68 65   use exactly the
a750: 20 73 61 6d 65 20 64 69 63 74 69 6f 6e 61 72 79   same dictionary
a760: 20 28 73 65 65 0a 20 20 20 64 65 66 6c 61 74 65   (see.   deflate
a770: 53 65 74 44 69 63 74 69 6f 6e 61 72 79 29 2e 20  SetDictionary). 
a780: 20 46 6f 72 20 72 61 77 20 69 6e 66 6c 61 74 65   For raw inflate
a790: 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  , this function 
a7a0: 63 61 6e 20 62 65 20 63 61 6c 6c 65 64 20 61 74  can be called at
a7b0: 20 61 6e 79 0a 20 20 20 74 69 6d 65 20 74 6f 20   any.   time to 
a7c0: 73 65 74 20 74 68 65 20 64 69 63 74 69 6f 6e 61  set the dictiona
a7d0: 72 79 2e 20 20 49 66 20 74 68 65 20 70 72 6f 76  ry.  If the prov
a7e0: 69 64 65 64 20 64 69 63 74 69 6f 6e 61 72 79 20  ided dictionary 
a7f0: 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  is smaller than 
a800: 74 68 65 0a 20 20 20 77 69 6e 64 6f 77 20 61 6e  the.   window an
a810: 64 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  d there is alrea
a820: 64 79 20 64 61 74 61 20 69 6e 20 74 68 65 20 77  dy data in the w
a830: 69 6e 64 6f 77 2c 20 74 68 65 6e 20 74 68 65 20  indow, then the 
a840: 70 72 6f 76 69 64 65 64 20 64 69 63 74 69 6f 6e  provided diction
a850: 61 72 79 0a 20 20 20 77 69 6c 6c 20 61 6d 65 6e  ary.   will amen
a860: 64 20 77 68 61 74 27 73 20 74 68 65 72 65 2e 20  d what's there. 
a870: 20 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   The application
a880: 20 6d 75 73 74 20 69 6e 73 75 72 65 20 74 68 61   must insure tha
a890: 74 20 74 68 65 20 64 69 63 74 69 6f 6e 61 72 79  t the dictionary
a8a0: 0a 20 20 20 74 68 61 74 20 77 61 73 20 75 73 65  .   that was use
a8b0: 64 20 66 6f 72 20 63 6f 6d 70 72 65 73 73 69 6f  d for compressio
a8c0: 6e 20 69 73 20 70 72 6f 76 69 64 65 64 2e 0a 0a  n is provided...
a8d0: 20 20 20 20 20 69 6e 66 6c 61 74 65 53 65 74 44       inflateSetD
a8e0: 69 63 74 69 6f 6e 61 72 79 20 72 65 74 75 72 6e  ictionary return
a8f0: 73 20 5a 5f 4f 4b 20 69 66 20 73 75 63 63 65 73  s Z_OK if succes
a900: 73 2c 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52 4f  s, Z_STREAM_ERRO
a910: 52 20 69 66 20 61 0a 20 20 20 70 61 72 61 6d 65  R if a.   parame
a920: 74 65 72 20 69 73 20 69 6e 76 61 6c 69 64 20 28  ter is invalid (
a930: 65 2e 67 2e 20 20 64 69 63 74 69 6f 6e 61 72 79  e.g.  dictionary
a940: 20 62 65 69 6e 67 20 5a 5f 4e 55 4c 4c 29 20 6f   being Z_NULL) o
a950: 72 20 74 68 65 20 73 74 72 65 61 6d 20 73 74 61  r the stream sta
a960: 74 65 20 69 73 0a 20 20 20 69 6e 63 6f 6e 73 69  te is.   inconsi
a970: 73 74 65 6e 74 2c 20 5a 5f 44 41 54 41 5f 45 52  stent, Z_DATA_ER
a980: 52 4f 52 20 69 66 20 74 68 65 20 67 69 76 65 6e  ROR if the given
a990: 20 64 69 63 74 69 6f 6e 61 72 79 20 64 6f 65 73   dictionary does
a9a0: 6e 27 74 20 6d 61 74 63 68 20 74 68 65 0a 20 20  n't match the.  
a9b0: 20 65 78 70 65 63 74 65 64 20 6f 6e 65 20 28 69   expected one (i
a9c0: 6e 63 6f 72 72 65 63 74 20 61 64 6c 65 72 33 32  ncorrect adler32
a9d0: 20 76 61 6c 75 65 29 2e 20 20 69 6e 66 6c 61 74   value).  inflat
a9e0: 65 53 65 74 44 69 63 74 69 6f 6e 61 72 79 20 64  eSetDictionary d
a9f0: 6f 65 73 20 6e 6f 74 0a 20 20 20 70 65 72 66 6f  oes not.   perfo
aa00: 72 6d 20 61 6e 79 20 64 65 63 6f 6d 70 72 65 73  rm any decompres
aa10: 73 69 6f 6e 3a 20 74 68 69 73 20 77 69 6c 6c 20  sion: this will 
aa20: 62 65 20 64 6f 6e 65 20 62 79 20 73 75 62 73 65  be done by subse
aa30: 71 75 65 6e 74 20 63 61 6c 6c 73 20 6f 66 0a 20  quent calls of. 
aa40: 20 20 69 6e 66 6c 61 74 65 28 29 2e 0a 2a 2f 0a    inflate()..*/.
aa50: 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45 58  .ZEXTERN int ZEX
aa60: 50 4f 52 54 20 69 6e 66 6c 61 74 65 47 65 74 44  PORT inflateGetD
aa70: 69 63 74 69 6f 6e 61 72 79 20 4f 46 28 28 7a 5f  ictionary OF((z_
aa80: 73 74 72 65 61 6d 70 20 73 74 72 6d 2c 0a 20 20  streamp strm,.  
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 20 20 20 20 20 20 20 20 20 20 20 42 79 74 65 66             Bytef
aac0: 20 2a 64 69 63 74 69 6f 6e 61 72 79 2c 0a 20 20   *dictionary,.  
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aaf0: 20 20 20 20 20 20 20 20 20 20 20 75 49 6e 74 20             uInt 
ab00: 20 2a 64 69 63 74 4c 65 6e 67 74 68 29 29 3b 0a   *dictLength));.
ab10: 2f 2a 0a 20 20 20 20 20 52 65 74 75 72 6e 73 20  /*.     Returns 
ab20: 74 68 65 20 73 6c 69 64 69 6e 67 20 64 69 63 74  the sliding dict
ab30: 69 6f 6e 61 72 79 20 62 65 69 6e 67 20 6d 61 69  ionary being mai
ab40: 6e 74 61 69 6e 65 64 20 62 79 20 69 6e 66 6c 61  ntained by infla
ab50: 74 65 2e 20 20 64 69 63 74 4c 65 6e 67 74 68 20  te.  dictLength 
ab60: 69 73 0a 20 20 20 73 65 74 20 74 6f 20 74 68 65  is.   set to the
ab70: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
ab80: 20 69 6e 20 74 68 65 20 64 69 63 74 69 6f 6e 61   in the dictiona
ab90: 72 79 2c 20 61 6e 64 20 74 68 61 74 20 6d 61 6e  ry, and that man
aba0: 79 20 62 79 74 65 73 20 61 72 65 20 63 6f 70 69  y bytes are copi
abb0: 65 64 0a 20 20 20 74 6f 20 64 69 63 74 69 6f 6e  ed.   to diction
abc0: 61 72 79 2e 20 20 64 69 63 74 69 6f 6e 61 72 79  ary.  dictionary
abd0: 20 6d 75 73 74 20 68 61 76 65 20 65 6e 6f 75 67   must have enoug
abe0: 68 20 73 70 61 63 65 2c 20 77 68 65 72 65 20 33  h space, where 3
abf0: 32 37 36 38 20 62 79 74 65 73 20 69 73 0a 20 20  2768 bytes is.  
ac00: 20 61 6c 77 61 79 73 20 65 6e 6f 75 67 68 2e 20   always enough. 
ac10: 20 49 66 20 69 6e 66 6c 61 74 65 47 65 74 44 69   If inflateGetDi
ac20: 63 74 69 6f 6e 61 72 79 28 29 20 69 73 20 63 61  ctionary() is ca
ac30: 6c 6c 65 64 20 77 69 74 68 20 64 69 63 74 69 6f  lled with dictio
ac40: 6e 61 72 79 20 65 71 75 61 6c 20 74 6f 0a 20 20  nary equal to.  
ac50: 20 5a 5f 4e 55 4c 4c 2c 20 74 68 65 6e 20 6f 6e   Z_NULL, then on
ac60: 6c 79 20 74 68 65 20 64 69 63 74 69 6f 6e 61 72  ly the dictionar
ac70: 79 20 6c 65 6e 67 74 68 20 69 73 20 72 65 74 75  y length is retu
ac80: 72 6e 65 64 2c 20 61 6e 64 20 6e 6f 74 68 69 6e  rned, and nothin
ac90: 67 20 69 73 20 63 6f 70 69 65 64 2e 0a 20 20 20  g is copied..   
aca0: 53 69 6d 69 6c 61 72 79 2c 20 69 66 20 64 69 63  Similary, if dic
acb0: 74 4c 65 6e 67 74 68 20 69 73 20 5a 5f 4e 55 4c  tLength is Z_NUL
acc0: 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  L, then it is no
acd0: 74 20 73 65 74 2e 0a 0a 20 20 20 20 20 69 6e 66  t set...     inf
ace0: 6c 61 74 65 47 65 74 44 69 63 74 69 6f 6e 61 72  lateGetDictionar
acf0: 79 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20 6f  y returns Z_OK o
ad00: 6e 20 73 75 63 63 65 73 73 2c 20 6f 72 20 5a 5f  n success, or Z_
ad10: 53 54 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20  STREAM_ERROR if 
ad20: 74 68 65 0a 20 20 20 73 74 72 65 61 6d 20 73 74  the.   stream st
ad30: 61 74 65 20 69 73 20 69 6e 63 6f 6e 73 69 73 74  ate is inconsist
ad40: 65 6e 74 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e  ent..*/..ZEXTERN
ad50: 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 69 6e 66   int ZEXPORT inf
ad60: 6c 61 74 65 53 79 6e 63 20 4f 46 28 28 7a 5f 73  lateSync OF((z_s
ad70: 74 72 65 61 6d 70 20 73 74 72 6d 29 29 3b 0a 2f  treamp strm));./
ad80: 2a 0a 20 20 20 20 20 53 6b 69 70 73 20 69 6e 76  *.     Skips inv
ad90: 61 6c 69 64 20 63 6f 6d 70 72 65 73 73 65 64 20  alid compressed 
ada0: 64 61 74 61 20 75 6e 74 69 6c 20 61 20 70 6f 73  data until a pos
adb0: 73 69 62 6c 65 20 66 75 6c 6c 20 66 6c 75 73 68  sible full flush
adc0: 20 70 6f 69 6e 74 20 28 73 65 65 20 61 62 6f 76   point (see abov
add0: 65 0a 20 20 20 66 6f 72 20 74 68 65 20 64 65 73  e.   for the des
ade0: 63 72 69 70 74 69 6f 6e 20 6f 66 20 64 65 66 6c  cription of defl
adf0: 61 74 65 20 77 69 74 68 20 5a 5f 46 55 4c 4c 5f  ate with Z_FULL_
ae00: 46 4c 55 53 48 29 20 63 61 6e 20 62 65 20 66 6f  FLUSH) can be fo
ae10: 75 6e 64 2c 20 6f 72 20 75 6e 74 69 6c 20 61 6c  und, or until al
ae20: 6c 0a 20 20 20 61 76 61 69 6c 61 62 6c 65 20 69  l.   available i
ae30: 6e 70 75 74 20 69 73 20 73 6b 69 70 70 65 64 2e  nput is skipped.
ae40: 20 20 4e 6f 20 6f 75 74 70 75 74 20 69 73 20 70    No output is p
ae50: 72 6f 76 69 64 65 64 2e 0a 0a 20 20 20 20 20 69  rovided...     i
ae60: 6e 66 6c 61 74 65 53 79 6e 63 20 73 65 61 72 63  nflateSync searc
ae70: 68 65 73 20 66 6f 72 20 61 20 30 30 20 30 30 20  hes for a 00 00 
ae80: 46 46 20 46 46 20 70 61 74 74 65 72 6e 20 69 6e  FF FF pattern in
ae90: 20 74 68 65 20 63 6f 6d 70 72 65 73 73 65 64 20   the compressed 
aea0: 64 61 74 61 2e 0a 20 20 20 41 6c 6c 20 66 75 6c  data..   All ful
aeb0: 6c 20 66 6c 75 73 68 20 70 6f 69 6e 74 73 20 68  l flush points h
aec0: 61 76 65 20 74 68 69 73 20 70 61 74 74 65 72 6e  ave this pattern
aed0: 2c 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 6f 63  , but not all oc
aee0: 63 75 72 72 65 6e 63 65 73 20 6f 66 20 74 68 69  currences of thi
aef0: 73 0a 20 20 20 70 61 74 74 65 72 6e 20 61 72 65  s.   pattern are
af00: 20 66 75 6c 6c 20 66 6c 75 73 68 20 70 6f 69 6e   full flush poin
af10: 74 73 2e 0a 0a 20 20 20 20 20 69 6e 66 6c 61 74  ts...     inflat
af20: 65 53 79 6e 63 20 72 65 74 75 72 6e 73 20 5a 5f  eSync returns Z_
af30: 4f 4b 20 69 66 20 61 20 70 6f 73 73 69 62 6c 65  OK if a possible
af40: 20 66 75 6c 6c 20 66 6c 75 73 68 20 70 6f 69 6e   full flush poin
af50: 74 20 68 61 73 20 62 65 65 6e 20 66 6f 75 6e 64  t has been found
af60: 2c 0a 20 20 20 5a 5f 42 55 46 5f 45 52 52 4f 52  ,.   Z_BUF_ERROR
af70: 20 69 66 20 6e 6f 20 6d 6f 72 65 20 69 6e 70 75   if no more inpu
af80: 74 20 77 61 73 20 70 72 6f 76 69 64 65 64 2c 20  t was provided, 
af90: 5a 5f 44 41 54 41 5f 45 52 52 4f 52 20 69 66 20  Z_DATA_ERROR if 
afa0: 6e 6f 20 66 6c 75 73 68 20 70 6f 69 6e 74 0a 20  no flush point. 
afb0: 20 20 68 61 73 20 62 65 65 6e 20 66 6f 75 6e 64    has been found
afc0: 2c 20 6f 72 20 5a 5f 53 54 52 45 41 4d 5f 45 52  , or Z_STREAM_ER
afd0: 52 4f 52 20 69 66 20 74 68 65 20 73 74 72 65 61  ROR if the strea
afe0: 6d 20 73 74 72 75 63 74 75 72 65 20 77 61 73 20  m structure was 
aff0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 2e 0a 20 20  inconsistent..  
b000: 20 49 6e 20 74 68 65 20 73 75 63 63 65 73 73 20   In the success 
b010: 63 61 73 65 2c 20 74 68 65 20 61 70 70 6c 69 63  case, the applic
b020: 61 74 69 6f 6e 20 6d 61 79 20 73 61 76 65 20 74  ation may save t
b030: 68 65 20 63 75 72 72 65 6e 74 20 63 75 72 72 65  he current curre
b040: 6e 74 20 76 61 6c 75 65 20 6f 66 0a 20 20 20 74  nt value of.   t
b050: 6f 74 61 6c 5f 69 6e 20 77 68 69 63 68 20 69 6e  otal_in which in
b060: 64 69 63 61 74 65 73 20 77 68 65 72 65 20 76 61  dicates where va
b070: 6c 69 64 20 63 6f 6d 70 72 65 73 73 65 64 20 64  lid compressed d
b080: 61 74 61 20 77 61 73 20 66 6f 75 6e 64 2e 20 20  ata was found.  
b090: 49 6e 20 74 68 65 0a 20 20 20 65 72 72 6f 72 20  In the.   error 
b0a0: 63 61 73 65 2c 20 74 68 65 20 61 70 70 6c 69 63  case, the applic
b0b0: 61 74 69 6f 6e 20 6d 61 79 20 72 65 70 65 61 74  ation may repeat
b0c0: 65 64 6c 79 20 63 61 6c 6c 20 69 6e 66 6c 61 74  edly call inflat
b0d0: 65 53 79 6e 63 2c 20 70 72 6f 76 69 64 69 6e 67  eSync, providing
b0e0: 20 6d 6f 72 65 0a 20 20 20 69 6e 70 75 74 20 65   more.   input e
b0f0: 61 63 68 20 74 69 6d 65 2c 20 75 6e 74 69 6c 20  ach time, until 
b100: 73 75 63 63 65 73 73 20 6f 72 20 65 6e 64 20 6f  success or end o
b110: 66 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  f the input data
b120: 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e  ..*/..ZEXTERN in
b130: 74 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c 61 74  t ZEXPORT inflat
b140: 65 43 6f 70 79 20 4f 46 28 28 7a 5f 73 74 72 65  eCopy OF((z_stre
b150: 61 6d 70 20 64 65 73 74 2c 0a 20 20 20 20 20 20  amp dest,.      
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 5f                z_
b180: 73 74 72 65 61 6d 70 20 73 6f 75 72 63 65 29 29  streamp source))
b190: 3b 0a 2f 2a 0a 20 20 20 20 20 53 65 74 73 20 74  ;./*.     Sets t
b1a0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 73  he destination s
b1b0: 74 72 65 61 6d 20 61 73 20 61 20 63 6f 6d 70 6c  tream as a compl
b1c0: 65 74 65 20 63 6f 70 79 20 6f 66 20 74 68 65 20  ete copy of the 
b1d0: 73 6f 75 72 63 65 20 73 74 72 65 61 6d 2e 0a 0a  source stream...
b1e0: 20 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69       This functi
b1f0: 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 66 75 6c  on can be useful
b200: 20 77 68 65 6e 20 72 61 6e 64 6f 6d 6c 79 20 61   when randomly a
b210: 63 63 65 73 73 69 6e 67 20 61 20 6c 61 72 67 65  ccessing a large
b220: 20 73 74 72 65 61 6d 2e 20 20 54 68 65 0a 20 20   stream.  The.  
b230: 20 66 69 72 73 74 20 70 61 73 73 20 74 68 72 6f   first pass thro
b240: 75 67 68 20 74 68 65 20 73 74 72 65 61 6d 20 63  ugh the stream c
b250: 61 6e 20 70 65 72 69 6f 64 69 63 61 6c 6c 79 20  an periodically 
b260: 72 65 63 6f 72 64 20 74 68 65 20 69 6e 66 6c 61  record the infla
b270: 74 65 20 73 74 61 74 65 2c 0a 20 20 20 61 6c 6c  te state,.   all
b280: 6f 77 69 6e 67 20 72 65 73 74 61 72 74 69 6e 67  owing restarting
b290: 20 69 6e 66 6c 61 74 65 20 61 74 20 74 68 6f 73   inflate at thos
b2a0: 65 20 70 6f 69 6e 74 73 20 77 68 65 6e 20 72 61  e points when ra
b2b0: 6e 64 6f 6d 6c 79 20 61 63 63 65 73 73 69 6e 67  ndomly accessing
b2c0: 20 74 68 65 0a 20 20 20 73 74 72 65 61 6d 2e 0a   the.   stream..
b2d0: 0a 20 20 20 20 20 69 6e 66 6c 61 74 65 43 6f 70  .     inflateCop
b2e0: 79 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20 69  y returns Z_OK i
b2f0: 66 20 73 75 63 63 65 73 73 2c 20 5a 5f 4d 45 4d  f success, Z_MEM
b300: 5f 45 52 52 4f 52 20 69 66 20 74 68 65 72 65 20  _ERROR if there 
b310: 77 61 73 20 6e 6f 74 0a 20 20 20 65 6e 6f 75 67  was not.   enoug
b320: 68 20 6d 65 6d 6f 72 79 2c 20 5a 5f 53 54 52 45  h memory, Z_STRE
b330: 41 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65 20  AM_ERROR if the 
b340: 73 6f 75 72 63 65 20 73 74 72 65 61 6d 20 73 74  source stream st
b350: 61 74 65 20 77 61 73 20 69 6e 63 6f 6e 73 69 73  ate was inconsis
b360: 74 65 6e 74 0a 20 20 20 28 73 75 63 68 20 61 73  tent.   (such as
b370: 20 7a 61 6c 6c 6f 63 20 62 65 69 6e 67 20 5a 5f   zalloc being Z_
b380: 4e 55 4c 4c 29 2e 20 20 6d 73 67 20 69 73 20 6c  NULL).  msg is l
b390: 65 66 74 20 75 6e 63 68 61 6e 67 65 64 20 69 6e  eft unchanged in
b3a0: 20 62 6f 74 68 20 73 6f 75 72 63 65 20 61 6e 64   both source and
b3b0: 0a 20 20 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e  .   destination.
b3c0: 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74  .*/..ZEXTERN int
b3d0: 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c 61 74 65   ZEXPORT inflate
b3e0: 52 65 73 65 74 20 4f 46 28 28 7a 5f 73 74 72 65  Reset OF((z_stre
b3f0: 61 6d 70 20 73 74 72 6d 29 29 3b 0a 2f 2a 0a 20  amp strm));./*. 
b400: 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f      This functio
b410: 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20  n is equivalent 
b420: 74 6f 20 69 6e 66 6c 61 74 65 45 6e 64 20 66 6f  to inflateEnd fo
b430: 6c 6c 6f 77 65 64 20 62 79 20 69 6e 66 6c 61 74  llowed by inflat
b440: 65 49 6e 69 74 2c 0a 20 20 20 62 75 74 20 64 6f  eInit,.   but do
b450: 65 73 20 6e 6f 74 20 66 72 65 65 20 61 6e 64 20  es not free and 
b460: 72 65 61 6c 6c 6f 63 61 74 65 20 61 6c 6c 20 74  reallocate all t
b470: 68 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 63 6f  he internal deco
b480: 6d 70 72 65 73 73 69 6f 6e 20 73 74 61 74 65 2e  mpression state.
b490: 20 20 54 68 65 0a 20 20 20 73 74 72 65 61 6d 20    The.   stream 
b4a0: 77 69 6c 6c 20 6b 65 65 70 20 61 74 74 72 69 62  will keep attrib
b4b0: 75 74 65 73 20 74 68 61 74 20 6d 61 79 20 68 61  utes that may ha
b4c0: 76 65 20 62 65 65 6e 20 73 65 74 20 62 79 20 69  ve been set by i
b4d0: 6e 66 6c 61 74 65 49 6e 69 74 32 2e 0a 0a 20 20  nflateInit2...  
b4e0: 20 20 20 69 6e 66 6c 61 74 65 52 65 73 65 74 20     inflateReset 
b4f0: 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20 69 66 20  returns Z_OK if 
b500: 73 75 63 63 65 73 73 2c 20 6f 72 20 5a 5f 53 54  success, or Z_ST
b510: 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 74 68  REAM_ERROR if th
b520: 65 20 73 6f 75 72 63 65 0a 20 20 20 73 74 72 65  e source.   stre
b530: 61 6d 20 73 74 61 74 65 20 77 61 73 20 69 6e 63  am state was inc
b540: 6f 6e 73 69 73 74 65 6e 74 20 28 73 75 63 68 20  onsistent (such 
b550: 61 73 20 7a 61 6c 6c 6f 63 20 6f 72 20 73 74 61  as zalloc or sta
b560: 74 65 20 62 65 69 6e 67 20 5a 5f 4e 55 4c 4c 29  te being Z_NULL)
b570: 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e  ..*/..ZEXTERN in
b580: 74 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c 61 74  t ZEXPORT inflat
b590: 65 52 65 73 65 74 32 20 4f 46 28 28 7a 5f 73 74  eReset2 OF((z_st
b5a0: 72 65 61 6d 70 20 73 74 72 6d 2c 0a 20 20 20 20  reamp strm,.    
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5d0: 20 20 69 6e 74 20 77 69 6e 64 6f 77 42 69 74 73    int windowBits
b5e0: 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 54 68 69 73  ));./*.     This
b5f0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 68 65   function is the
b600: 20 73 61 6d 65 20 61 73 20 69 6e 66 6c 61 74 65   same as inflate
b610: 52 65 73 65 74 2c 20 62 75 74 20 69 74 20 61 6c  Reset, but it al
b620: 73 6f 20 70 65 72 6d 69 74 73 20 63 68 61 6e 67  so permits chang
b630: 69 6e 67 0a 20 20 20 74 68 65 20 77 72 61 70 20  ing.   the wrap 
b640: 61 6e 64 20 77 69 6e 64 6f 77 20 73 69 7a 65 20  and window size 
b650: 72 65 71 75 65 73 74 73 2e 20 20 54 68 65 20 77  requests.  The w
b660: 69 6e 64 6f 77 42 69 74 73 20 70 61 72 61 6d 65  indowBits parame
b670: 74 65 72 20 69 73 20 69 6e 74 65 72 70 72 65 74  ter is interpret
b680: 65 64 0a 20 20 20 74 68 65 20 73 61 6d 65 20 61  ed.   the same a
b690: 73 20 69 74 20 69 73 20 66 6f 72 20 69 6e 66 6c  s it is for infl
b6a0: 61 74 65 49 6e 69 74 32 2e 0a 0a 20 20 20 20 20  ateInit2...     
b6b0: 69 6e 66 6c 61 74 65 52 65 73 65 74 32 20 72 65  inflateReset2 re
b6c0: 74 75 72 6e 73 20 5a 5f 4f 4b 20 69 66 20 73 75  turns Z_OK if su
b6d0: 63 63 65 73 73 2c 20 6f 72 20 5a 5f 53 54 52 45  ccess, or Z_STRE
b6e0: 41 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65 20  AM_ERROR if the 
b6f0: 73 6f 75 72 63 65 0a 20 20 20 73 74 72 65 61 6d  source.   stream
b700: 20 73 74 61 74 65 20 77 61 73 20 69 6e 63 6f 6e   state was incon
b710: 73 69 73 74 65 6e 74 20 28 73 75 63 68 20 61 73  sistent (such as
b720: 20 7a 61 6c 6c 6f 63 20 6f 72 20 73 74 61 74 65   zalloc or state
b730: 20 62 65 69 6e 67 20 5a 5f 4e 55 4c 4c 29 2c 20   being Z_NULL), 
b740: 6f 72 20 69 66 0a 20 20 20 74 68 65 20 77 69 6e  or if.   the win
b750: 64 6f 77 42 69 74 73 20 70 61 72 61 6d 65 74 65  dowBits paramete
b760: 72 20 69 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2f  r is invalid..*/
b770: 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45  ..ZEXTERN int ZE
b780: 58 50 4f 52 54 20 69 6e 66 6c 61 74 65 50 72 69  XPORT inflatePri
b790: 6d 65 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d 70  me OF((z_streamp
b7a0: 20 73 74 72 6d 2c 0a 20 20 20 20 20 20 20 20 20   strm,.         
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
b7d0: 62 69 74 73 2c 0a 20 20 20 20 20 20 20 20 20 20  bits,.          
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7f0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76             int v
b800: 61 6c 75 65 29 29 3b 0a 2f 2a 0a 20 20 20 20 20  alue));./*.     
b810: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6e  This function in
b820: 73 65 72 74 73 20 62 69 74 73 20 69 6e 20 74 68  serts bits in th
b830: 65 20 69 6e 66 6c 61 74 65 20 69 6e 70 75 74 20  e inflate input 
b840: 73 74 72 65 61 6d 2e 20 20 54 68 65 20 69 6e 74  stream.  The int
b850: 65 6e 74 20 69 73 0a 20 20 20 74 68 61 74 20 74  ent is.   that t
b860: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
b870: 75 73 65 64 20 74 6f 20 73 74 61 72 74 20 69 6e  used to start in
b880: 66 6c 61 74 69 6e 67 20 61 74 20 61 20 62 69 74  flating at a bit
b890: 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 74 68 65   position in the
b8a0: 0a 20 20 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  .   middle of a 
b8b0: 62 79 74 65 2e 20 20 54 68 65 20 70 72 6f 76 69  byte.  The provi
b8c0: 64 65 64 20 62 69 74 73 20 77 69 6c 6c 20 62 65  ded bits will be
b8d0: 20 75 73 65 64 20 62 65 66 6f 72 65 20 61 6e 79   used before any
b8e0: 20 62 79 74 65 73 20 61 72 65 20 75 73 65 64 0a   bytes are used.
b8f0: 20 20 20 66 72 6f 6d 20 6e 65 78 74 5f 69 6e 2e     from next_in.
b900: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
b910: 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 75  should only be u
b920: 73 65 64 20 77 69 74 68 20 72 61 77 20 69 6e 66  sed with raw inf
b930: 6c 61 74 65 2c 20 61 6e 64 0a 20 20 20 73 68 6f  late, and.   sho
b940: 75 6c 64 20 62 65 20 75 73 65 64 20 62 65 66 6f  uld be used befo
b950: 72 65 20 74 68 65 20 66 69 72 73 74 20 69 6e 66  re the first inf
b960: 6c 61 74 65 28 29 20 63 61 6c 6c 20 61 66 74 65  late() call afte
b970: 72 20 69 6e 66 6c 61 74 65 49 6e 69 74 32 28 29  r inflateInit2()
b980: 20 6f 72 0a 20 20 20 69 6e 66 6c 61 74 65 52 65   or.   inflateRe
b990: 73 65 74 28 29 2e 20 20 62 69 74 73 20 6d 75 73  set().  bits mus
b9a0: 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 6f  t be less than o
b9b0: 72 20 65 71 75 61 6c 20 74 6f 20 31 36 2c 20 61  r equal to 16, a
b9c0: 6e 64 20 74 68 61 74 20 6d 61 6e 79 20 6f 66 20  nd that many of 
b9d0: 74 68 65 0a 20 20 20 6c 65 61 73 74 20 73 69 67  the.   least sig
b9e0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
b9f0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 69   value will be i
ba00: 6e 73 65 72 74 65 64 20 69 6e 20 74 68 65 20 69  nserted in the i
ba10: 6e 70 75 74 2e 0a 0a 20 20 20 20 20 49 66 20 62  nput...     If b
ba20: 69 74 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c  its is negative,
ba30: 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20   then the input 
ba40: 73 74 72 65 61 6d 20 62 69 74 20 62 75 66 66 65  stream bit buffe
ba50: 72 20 69 73 20 65 6d 70 74 69 65 64 2e 20 20 54  r is emptied.  T
ba60: 68 65 6e 0a 20 20 20 69 6e 66 6c 61 74 65 50 72  hen.   inflatePr
ba70: 69 6d 65 28 29 20 63 61 6e 20 62 65 20 63 61 6c  ime() can be cal
ba80: 6c 65 64 20 61 67 61 69 6e 20 74 6f 20 70 75 74  led again to put
ba90: 20 62 69 74 73 20 69 6e 20 74 68 65 20 62 75 66   bits in the buf
baa0: 66 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 73  fer.  This is us
bab0: 65 64 0a 20 20 20 74 6f 20 63 6c 65 61 72 20 6f  ed.   to clear o
bac0: 75 74 20 62 69 74 73 20 6c 65 66 74 6f 76 65 72  ut bits leftover
bad0: 20 61 66 74 65 72 20 66 65 65 64 69 6e 67 20 69   after feeding i
bae0: 6e 66 6c 61 74 65 20 61 20 62 6c 6f 63 6b 20 64  nflate a block d
baf0: 65 73 63 72 69 70 74 69 6f 6e 20 70 72 69 6f 72  escription prior
bb00: 0a 20 20 20 74 6f 20 66 65 65 64 69 6e 67 20 69  .   to feeding i
bb10: 6e 66 6c 61 74 65 20 63 6f 64 65 73 2e 0a 0a 20  nflate codes... 
bb20: 20 20 20 20 69 6e 66 6c 61 74 65 50 72 69 6d 65      inflatePrime
bb30: 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20 69 66   returns Z_OK if
bb40: 20 73 75 63 63 65 73 73 2c 20 6f 72 20 5a 5f 53   success, or Z_S
bb50: 54 52 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 74  TREAM_ERROR if t
bb60: 68 65 20 73 6f 75 72 63 65 0a 20 20 20 73 74 72  he source.   str
bb70: 65 61 6d 20 73 74 61 74 65 20 77 61 73 20 69 6e  eam state was in
bb80: 63 6f 6e 73 69 73 74 65 6e 74 2e 0a 2a 2f 0a 0a  consistent..*/..
bb90: 5a 45 58 54 45 52 4e 20 6c 6f 6e 67 20 5a 45 58  ZEXTERN long ZEX
bba0: 50 4f 52 54 20 69 6e 66 6c 61 74 65 4d 61 72 6b  PORT inflateMark
bbb0: 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d 70 20 73   OF((z_streamp s
bbc0: 74 72 6d 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 54  trm));./*.     T
bbd0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
bbe0: 75 72 6e 73 20 74 77 6f 20 76 61 6c 75 65 73 2c  urns two values,
bbf0: 20 6f 6e 65 20 69 6e 20 74 68 65 20 6c 6f 77 65   one in the lowe
bc00: 72 20 31 36 20 62 69 74 73 20 6f 66 20 74 68 65  r 16 bits of the
bc10: 20 72 65 74 75 72 6e 0a 20 20 20 76 61 6c 75 65   return.   value
bc20: 2c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20  , and the other 
bc30: 69 6e 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  in the remaining
bc40: 20 75 70 70 65 72 20 62 69 74 73 2c 20 6f 62 74   upper bits, obt
bc50: 61 69 6e 65 64 20 62 79 20 73 68 69 66 74 69 6e  ained by shiftin
bc60: 67 20 74 68 65 0a 20 20 20 72 65 74 75 72 6e 20  g the.   return 
bc70: 76 61 6c 75 65 20 64 6f 77 6e 20 31 36 20 62 69  value down 16 bi
bc80: 74 73 2e 20 20 49 66 20 74 68 65 20 75 70 70 65  ts.  If the uppe
bc90: 72 20 76 61 6c 75 65 20 69 73 20 2d 31 20 61 6e  r value is -1 an
bca0: 64 20 74 68 65 20 6c 6f 77 65 72 20 76 61 6c 75  d the lower valu
bcb0: 65 20 69 73 0a 20 20 20 7a 65 72 6f 2c 20 74 68  e is.   zero, th
bcc0: 65 6e 20 69 6e 66 6c 61 74 65 28 29 20 69 73 20  en inflate() is 
bcd0: 63 75 72 72 65 6e 74 6c 79 20 64 65 63 6f 64 69  currently decodi
bce0: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  ng information o
bcf0: 75 74 73 69 64 65 20 6f 66 20 61 20 62 6c 6f 63  utside of a bloc
bd00: 6b 2e 0a 20 20 20 49 66 20 74 68 65 20 75 70 70  k..   If the upp
bd10: 65 72 20 76 61 6c 75 65 20 69 73 20 2d 31 20 61  er value is -1 a
bd20: 6e 64 20 74 68 65 20 6c 6f 77 65 72 20 76 61 6c  nd the lower val
bd30: 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
bd40: 74 68 65 6e 20 69 6e 66 6c 61 74 65 20 69 73 20  then inflate is 
bd50: 69 6e 0a 20 20 20 74 68 65 20 6d 69 64 64 6c 65  in.   the middle
bd60: 20 6f 66 20 61 20 73 74 6f 72 65 64 20 62 6c 6f   of a stored blo
bd70: 63 6b 2c 20 77 69 74 68 20 74 68 65 20 6c 6f 77  ck, with the low
bd80: 65 72 20 76 61 6c 75 65 20 65 71 75 61 6c 69 6e  er value equalin
bd90: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  g the number of.
bda0: 20 20 20 62 79 74 65 73 20 66 72 6f 6d 20 74 68     bytes from th
bdb0: 65 20 69 6e 70 75 74 20 72 65 6d 61 69 6e 69 6e  e input remainin
bdc0: 67 20 74 6f 20 63 6f 70 79 2e 20 20 49 66 20 74  g to copy.  If t
bdd0: 68 65 20 75 70 70 65 72 20 76 61 6c 75 65 20 69  he upper value i
bde0: 73 20 6e 6f 74 20 2d 31 2c 20 74 68 65 6e 0a 20  s not -1, then. 
bdf0: 20 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62    it is the numb
be00: 65 72 20 6f 66 20 62 69 74 73 20 62 61 63 6b 20  er of bits back 
be10: 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
be20: 20 62 69 74 20 70 6f 73 69 74 69 6f 6e 20 69 6e   bit position in
be30: 20 74 68 65 20 69 6e 70 75 74 20 6f 66 0a 20 20   the input of.  
be40: 20 74 68 65 20 63 6f 64 65 20 28 6c 69 74 65 72   the code (liter
be50: 61 6c 20 6f 72 20 6c 65 6e 67 74 68 2f 64 69 73  al or length/dis
be60: 74 61 6e 63 65 20 70 61 69 72 29 20 63 75 72 72  tance pair) curr
be70: 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 72 6f 63  ently being proc
be80: 65 73 73 65 64 2e 20 20 49 6e 0a 20 20 20 74 68  essed.  In.   th
be90: 61 74 20 63 61 73 65 20 74 68 65 20 6c 6f 77 65  at case the lowe
bea0: 72 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 6e  r value is the n
beb0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61  umber of bytes a
bec0: 6c 72 65 61 64 79 20 65 6d 69 74 74 65 64 20 66  lready emitted f
bed0: 6f 72 20 74 68 61 74 0a 20 20 20 63 6f 64 65 2e  or that.   code.
bee0: 0a 0a 20 20 20 20 20 41 20 63 6f 64 65 20 69 73  ..     A code is
bef0: 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64   being processed
bf00: 20 69 66 20 69 6e 66 6c 61 74 65 20 69 73 20 77   if inflate is w
bf10: 61 69 74 69 6e 67 20 66 6f 72 20 6d 6f 72 65 20  aiting for more 
bf20: 69 6e 70 75 74 20 74 6f 20 63 6f 6d 70 6c 65 74  input to complet
bf30: 65 0a 20 20 20 64 65 63 6f 64 69 6e 67 20 6f 66  e.   decoding of
bf40: 20 74 68 65 20 63 6f 64 65 2c 20 6f 72 20 69 66   the code, or if
bf50: 20 69 74 20 68 61 73 20 63 6f 6d 70 6c 65 74 65   it has complete
bf60: 64 20 64 65 63 6f 64 69 6e 67 20 62 75 74 20 69  d decoding but i
bf70: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 0a 20 20  s waiting for.  
bf80: 20 6d 6f 72 65 20 6f 75 74 70 75 74 20 73 70 61   more output spa
bf90: 63 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  ce to write the 
bfa0: 6c 69 74 65 72 61 6c 20 6f 72 20 6d 61 74 63 68  literal or match
bfb0: 20 64 61 74 61 2e 0a 0a 20 20 20 20 20 69 6e 66   data...     inf
bfc0: 6c 61 74 65 4d 61 72 6b 28 29 20 69 73 20 75 73  lateMark() is us
bfd0: 65 64 20 74 6f 20 6d 61 72 6b 20 6c 6f 63 61 74  ed to mark locat
bfe0: 69 6f 6e 73 20 69 6e 20 74 68 65 20 69 6e 70 75  ions in the inpu
bff0: 74 20 64 61 74 61 20 66 6f 72 20 72 61 6e 64 6f  t data for rando
c000: 6d 0a 20 20 20 61 63 63 65 73 73 2c 20 77 68 69  m.   access, whi
c010: 63 68 20 6d 61 79 20 62 65 20 61 74 20 62 69 74  ch may be at bit
c020: 20 70 6f 73 69 74 69 6f 6e 73 2c 20 61 6e 64 20   positions, and 
c030: 74 6f 20 6e 6f 74 65 20 74 68 6f 73 65 20 63 61  to note those ca
c040: 73 65 73 20 77 68 65 72 65 20 74 68 65 0a 20 20  ses where the.  
c050: 20 6f 75 74 70 75 74 20 6f 66 20 61 20 63 6f 64   output of a cod
c060: 65 20 6d 61 79 20 73 70 61 6e 20 62 6f 75 6e 64  e may span bound
c070: 61 72 69 65 73 20 6f 66 20 72 61 6e 64 6f 6d 20  aries of random 
c080: 61 63 63 65 73 73 20 62 6c 6f 63 6b 73 2e 20 20  access blocks.  
c090: 54 68 65 20 63 75 72 72 65 6e 74 0a 20 20 20 6c  The current.   l
c0a0: 6f 63 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69  ocation in the i
c0b0: 6e 70 75 74 20 73 74 72 65 61 6d 20 63 61 6e 20  nput stream can 
c0c0: 62 65 20 64 65 74 65 72 6d 69 6e 65 64 20 66 72  be determined fr
c0d0: 6f 6d 20 61 76 61 69 6c 5f 69 6e 20 61 6e 64 20  om avail_in and 
c0e0: 64 61 74 61 5f 74 79 70 65 0a 20 20 20 61 73 20  data_type.   as 
c0f0: 6e 6f 74 65 64 20 69 6e 20 74 68 65 20 64 65 73  noted in the des
c100: 63 72 69 70 74 69 6f 6e 20 66 6f 72 20 74 68 65  cription for the
c110: 20 5a 5f 42 4c 4f 43 4b 20 66 6c 75 73 68 20 70   Z_BLOCK flush p
c120: 61 72 61 6d 65 74 65 72 20 66 6f 72 20 69 6e 66  arameter for inf
c130: 6c 61 74 65 2e 0a 0a 20 20 20 20 20 69 6e 66 6c  late...     infl
c140: 61 74 65 4d 61 72 6b 20 72 65 74 75 72 6e 73 20  ateMark returns 
c150: 74 68 65 20 76 61 6c 75 65 20 6e 6f 74 65 64 20  the value noted 
c160: 61 62 6f 76 65 20 6f 72 20 2d 31 20 3c 3c 20 31  above or -1 << 1
c170: 36 20 69 66 20 74 68 65 20 70 72 6f 76 69 64 65  6 if the provide
c180: 64 0a 20 20 20 73 6f 75 72 63 65 20 73 74 72 65  d.   source stre
c190: 61 6d 20 73 74 61 74 65 20 77 61 73 20 69 6e 63  am state was inc
c1a0: 6f 6e 73 69 73 74 65 6e 74 2e 0a 2a 2f 0a 0a 5a  onsistent..*/..Z
c1b0: 45 58 54 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f  EXTERN int ZEXPO
c1c0: 52 54 20 69 6e 66 6c 61 74 65 47 65 74 48 65 61  RT inflateGetHea
c1d0: 64 65 72 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d  der OF((z_stream
c1e0: 70 20 73 74 72 6d 2c 0a 20 20 20 20 20 20 20 20  p strm,.        
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c210: 20 67 7a 5f 68 65 61 64 65 72 70 20 68 65 61 64   gz_headerp head
c220: 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 69 6e 66 6c  ));./*.     infl
c230: 61 74 65 47 65 74 48 65 61 64 65 72 28 29 20 72  ateGetHeader() r
c240: 65 71 75 65 73 74 73 20 74 68 61 74 20 67 7a 69  equests that gzi
c250: 70 20 68 65 61 64 65 72 20 69 6e 66 6f 72 6d 61  p header informa
c260: 74 69 6f 6e 20 62 65 20 73 74 6f 72 65 64 20 69  tion be stored i
c270: 6e 20 74 68 65 0a 20 20 20 70 72 6f 76 69 64 65  n the.   provide
c280: 64 20 67 7a 5f 68 65 61 64 65 72 20 73 74 72 75  d gz_header stru
c290: 63 74 75 72 65 2e 20 20 69 6e 66 6c 61 74 65 47  cture.  inflateG
c2a0: 65 74 48 65 61 64 65 72 28 29 20 6d 61 79 20 62  etHeader() may b
c2b0: 65 20 63 61 6c 6c 65 64 20 61 66 74 65 72 0a 20  e called after. 
c2c0: 20 20 69 6e 66 6c 61 74 65 49 6e 69 74 32 28 29    inflateInit2()
c2d0: 20 6f 72 20 69 6e 66 6c 61 74 65 52 65 73 65 74   or inflateReset
c2e0: 28 29 2c 20 61 6e 64 20 62 65 66 6f 72 65 20 74  (), and before t
c2f0: 68 65 20 66 69 72 73 74 20 63 61 6c 6c 20 6f 66  he first call of
c300: 20 69 6e 66 6c 61 74 65 28 29 2e 0a 20 20 20 41   inflate()..   A
c310: 73 20 69 6e 66 6c 61 74 65 28 29 20 70 72 6f 63  s inflate() proc
c320: 65 73 73 65 73 20 74 68 65 20 67 7a 69 70 20 73  esses the gzip s
c330: 74 72 65 61 6d 2c 20 68 65 61 64 2d 3e 64 6f 6e  tream, head->don
c340: 65 20 69 73 20 7a 65 72 6f 20 75 6e 74 69 6c 20  e is zero until 
c350: 74 68 65 20 68 65 61 64 65 72 0a 20 20 20 69 73  the header.   is
c360: 20 63 6f 6d 70 6c 65 74 65 64 2c 20 61 74 20 77   completed, at w
c370: 68 69 63 68 20 74 69 6d 65 20 68 65 61 64 2d 3e  hich time head->
c380: 64 6f 6e 65 20 69 73 20 73 65 74 20 74 6f 20 6f  done is set to o
c390: 6e 65 2e 20 20 49 66 20 61 20 7a 6c 69 62 20 73  ne.  If a zlib s
c3a0: 74 72 65 61 6d 20 69 73 0a 20 20 20 62 65 69 6e  tream is.   bein
c3b0: 67 20 64 65 63 6f 64 65 64 2c 20 74 68 65 6e 20  g decoded, then 
c3c0: 68 65 61 64 2d 3e 64 6f 6e 65 20 69 73 20 73 65  head->done is se
c3d0: 74 20 74 6f 20 2d 31 20 74 6f 20 69 6e 64 69 63  t to -1 to indic
c3e0: 61 74 65 20 74 68 61 74 20 74 68 65 72 65 20 77  ate that there w
c3f0: 69 6c 6c 20 62 65 0a 20 20 20 6e 6f 20 67 7a 69  ill be.   no gzi
c400: 70 20 68 65 61 64 65 72 20 69 6e 66 6f 72 6d 61  p header informa
c410: 74 69 6f 6e 20 66 6f 72 74 68 63 6f 6d 69 6e 67  tion forthcoming
c420: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 5a 5f 42  .  Note that Z_B
c430: 4c 4f 43 4b 20 6f 72 20 5a 5f 54 52 45 45 53 20  LOCK or Z_TREES 
c440: 63 61 6e 20 62 65 0a 20 20 20 75 73 65 64 20 74  can be.   used t
c450: 6f 20 66 6f 72 63 65 20 69 6e 66 6c 61 74 65 28  o force inflate(
c460: 29 20 74 6f 20 72 65 74 75 72 6e 20 69 6d 6d 65  ) to return imme
c470: 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 68 65  diately after he
c480: 61 64 65 72 20 70 72 6f 63 65 73 73 69 6e 67 20  ader processing 
c490: 69 73 0a 20 20 20 63 6f 6d 70 6c 65 74 65 20 61  is.   complete a
c4a0: 6e 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 63  nd before any ac
c4b0: 74 75 61 6c 20 64 61 74 61 20 69 73 20 64 65 63  tual data is dec
c4c0: 6f 6d 70 72 65 73 73 65 64 2e 0a 0a 20 20 20 20  ompressed...    
c4d0: 20 54 68 65 20 74 65 78 74 2c 20 74 69 6d 65 2c   The text, time,
c4e0: 20 78 66 6c 61 67 73 2c 20 61 6e 64 20 6f 73 20   xflags, and os 
c4f0: 66 69 65 6c 64 73 20 61 72 65 20 66 69 6c 6c 65  fields are fille
c500: 64 20 69 6e 20 77 69 74 68 20 74 68 65 20 67 7a  d in with the gz
c510: 69 70 20 68 65 61 64 65 72 0a 20 20 20 63 6f 6e  ip header.   con
c520: 74 65 6e 74 73 2e 20 20 68 63 72 63 20 69 73 20  tents.  hcrc is 
c530: 73 65 74 20 74 6f 20 74 72 75 65 20 69 66 20 74  set to true if t
c540: 68 65 72 65 20 69 73 20 61 20 68 65 61 64 65 72  here is a header
c550: 20 43 52 43 2e 20 20 28 54 68 65 20 68 65 61 64   CRC.  (The head
c560: 65 72 20 43 52 43 0a 20 20 20 77 61 73 20 76 61  er CRC.   was va
c570: 6c 69 64 20 69 66 20 64 6f 6e 65 20 69 73 20 73  lid if done is s
c580: 65 74 20 74 6f 20 6f 6e 65 2e 29 20 49 66 20 65  et to one.) If e
c590: 78 74 72 61 20 69 73 20 6e 6f 74 20 5a 5f 4e 55  xtra is not Z_NU
c5a0: 4c 4c 2c 20 74 68 65 6e 20 65 78 74 72 61 5f 6d  LL, then extra_m
c5b0: 61 78 0a 20 20 20 63 6f 6e 74 61 69 6e 73 20 74  ax.   contains t
c5c0: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
c5d0: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 77 72  r of bytes to wr
c5e0: 69 74 65 20 74 6f 20 65 78 74 72 61 2e 20 20 4f  ite to extra.  O
c5f0: 6e 63 65 20 64 6f 6e 65 20 69 73 20 74 72 75 65  nce done is true
c600: 2c 0a 20 20 20 65 78 74 72 61 5f 6c 65 6e 20 63  ,.   extra_len c
c610: 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75  ontains the actu
c620: 61 6c 20 65 78 74 72 61 20 66 69 65 6c 64 20 6c  al extra field l
c630: 65 6e 67 74 68 2c 20 61 6e 64 20 65 78 74 72 61  ength, and extra
c640: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 20 20   contains the.  
c650: 20 65 78 74 72 61 20 66 69 65 6c 64 2c 20 6f 72   extra field, or
c660: 20 74 68 61 74 20 66 69 65 6c 64 20 74 72 75 6e   that field trun
c670: 63 61 74 65 64 20 69 66 20 65 78 74 72 61 5f 6d  cated if extra_m
c680: 61 78 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ax is less than 
c690: 65 78 74 72 61 5f 6c 65 6e 2e 0a 20 20 20 49 66  extra_len..   If
c6a0: 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 5a 5f 4e   name is not Z_N
c6b0: 55 4c 4c 2c 20 74 68 65 6e 20 75 70 20 74 6f 20  ULL, then up to 
c6c0: 6e 61 6d 65 5f 6d 61 78 20 63 68 61 72 61 63 74  name_max charact
c6d0: 65 72 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  ers are written 
c6e0: 74 68 65 72 65 2c 0a 20 20 20 74 65 72 6d 69 6e  there,.   termin
c6f0: 61 74 65 64 20 77 69 74 68 20 61 20 7a 65 72 6f  ated with a zero
c700: 20 75 6e 6c 65 73 73 20 74 68 65 20 6c 65 6e 67   unless the leng
c710: 74 68 20 69 73 20 67 72 65 61 74 65 72 20 74 68  th is greater th
c720: 61 6e 20 6e 61 6d 65 5f 6d 61 78 2e 20 20 49 66  an name_max.  If
c730: 0a 20 20 20 63 6f 6d 6d 65 6e 74 20 69 73 20 6e  .   comment is n
c740: 6f 74 20 5a 5f 4e 55 4c 4c 2c 20 74 68 65 6e 20  ot Z_NULL, then 
c750: 75 70 20 74 6f 20 63 6f 6d 6d 5f 6d 61 78 20 63  up to comm_max c
c760: 68 61 72 61 63 74 65 72 73 20 61 72 65 20 77 72  haracters are wr
c770: 69 74 74 65 6e 20 74 68 65 72 65 2c 0a 20 20 20  itten there,.   
c780: 74 65 72 6d 69 6e 61 74 65 64 20 77 69 74 68 20  terminated with 
c790: 61 20 7a 65 72 6f 20 75 6e 6c 65 73 73 20 74 68  a zero unless th
c7a0: 65 20 6c 65 6e 67 74 68 20 69 73 20 67 72 65 61  e length is grea
c7b0: 74 65 72 20 74 68 61 6e 20 63 6f 6d 6d 5f 6d 61  ter than comm_ma
c7c0: 78 2e 20 20 57 68 65 6e 20 61 6e 79 0a 20 20 20  x.  When any.   
c7d0: 6f 66 20 65 78 74 72 61 2c 20 6e 61 6d 65 2c 20  of extra, name, 
c7e0: 6f 72 20 63 6f 6d 6d 65 6e 74 20 61 72 65 20 6e  or comment are n
c7f0: 6f 74 20 5a 5f 4e 55 4c 4c 20 61 6e 64 20 74 68  ot Z_NULL and th
c800: 65 20 72 65 73 70 65 63 74 69 76 65 20 66 69 65  e respective fie
c810: 6c 64 20 69 73 20 6e 6f 74 0a 20 20 20 70 72 65  ld is not.   pre
c820: 73 65 6e 74 20 69 6e 20 74 68 65 20 68 65 61 64  sent in the head
c830: 65 72 2c 20 74 68 65 6e 20 74 68 61 74 20 66 69  er, then that fi
c840: 65 6c 64 20 69 73 20 73 65 74 20 74 6f 20 5a 5f  eld is set to Z_
c850: 4e 55 4c 4c 20 74 6f 20 73 69 67 6e 61 6c 20 69  NULL to signal i
c860: 74 73 0a 20 20 20 61 62 73 65 6e 63 65 2e 20 20  ts.   absence.  
c870: 54 68 69 73 20 61 6c 6c 6f 77 73 20 74 68 65 20  This allows the 
c880: 75 73 65 20 6f 66 20 64 65 66 6c 61 74 65 53 65  use of deflateSe
c890: 74 48 65 61 64 65 72 28 29 20 77 69 74 68 20 74  tHeader() with t
c8a0: 68 65 20 72 65 74 75 72 6e 65 64 0a 20 20 20 73  he returned.   s
c8b0: 74 72 75 63 74 75 72 65 20 74 6f 20 64 75 70 6c  tructure to dupl
c8c0: 69 63 61 74 65 20 74 68 65 20 68 65 61 64 65 72  icate the header
c8d0: 2e 20 20 48 6f 77 65 76 65 72 20 69 66 20 74 68  .  However if th
c8e0: 6f 73 65 20 66 69 65 6c 64 73 20 61 72 65 20 73  ose fields are s
c8f0: 65 74 20 74 6f 0a 20 20 20 61 6c 6c 6f 63 61 74  et to.   allocat
c900: 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68 65 6e 20  ed memory, then 
c910: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  the application 
c920: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 73 61 76  will need to sav
c930: 65 20 74 68 6f 73 65 20 70 6f 69 6e 74 65 72 73  e those pointers
c940: 0a 20 20 20 65 6c 73 65 77 68 65 72 65 20 73 6f  .   elsewhere so
c950: 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20 62   that they can b
c960: 65 20 65 76 65 6e 74 75 61 6c 6c 79 20 66 72 65  e eventually fre
c970: 65 64 2e 0a 0a 20 20 20 20 20 49 66 20 69 6e 66  ed...     If inf
c980: 6c 61 74 65 47 65 74 48 65 61 64 65 72 20 69 73  lateGetHeader is
c990: 20 6e 6f 74 20 75 73 65 64 2c 20 74 68 65 6e 20   not used, then 
c9a0: 74 68 65 20 68 65 61 64 65 72 20 69 6e 66 6f 72  the header infor
c9b0: 6d 61 74 69 6f 6e 20 69 73 20 73 69 6d 70 6c 79  mation is simply
c9c0: 0a 20 20 20 64 69 73 63 61 72 64 65 64 2e 20 20  .   discarded.  
c9d0: 54 68 65 20 68 65 61 64 65 72 20 69 73 20 61 6c  The header is al
c9e0: 77 61 79 73 20 63 68 65 63 6b 65 64 20 66 6f 72  ways checked for
c9f0: 20 76 61 6c 69 64 69 74 79 2c 20 69 6e 63 6c 75   validity, inclu
ca00: 64 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 0a  ding the header.
ca10: 20 20 20 43 52 43 20 69 66 20 70 72 65 73 65 6e     CRC if presen
ca20: 74 2e 20 20 69 6e 66 6c 61 74 65 52 65 73 65 74  t.  inflateReset
ca30: 28 29 20 77 69 6c 6c 20 72 65 73 65 74 20 74 68  () will reset th
ca40: 65 20 70 72 6f 63 65 73 73 20 74 6f 20 64 69 73  e process to dis
ca50: 63 61 72 64 20 74 68 65 20 68 65 61 64 65 72 0a  card the header.
ca60: 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20     information. 
ca70: 20 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   The application
ca80: 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f 20 63   would need to c
ca90: 61 6c 6c 20 69 6e 66 6c 61 74 65 47 65 74 48 65  all inflateGetHe
caa0: 61 64 65 72 28 29 20 61 67 61 69 6e 20 74 6f 0a  ader() again to.
cab0: 20 20 20 72 65 74 72 69 65 76 65 20 74 68 65 20     retrieve the 
cac0: 68 65 61 64 65 72 20 66 72 6f 6d 20 74 68 65 20  header from the 
cad0: 6e 65 78 74 20 67 7a 69 70 20 73 74 72 65 61 6d  next gzip stream
cae0: 2e 0a 0a 20 20 20 20 20 69 6e 66 6c 61 74 65 47  ...     inflateG
caf0: 65 74 48 65 61 64 65 72 20 72 65 74 75 72 6e 73  etHeader returns
cb00: 20 5a 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73   Z_OK if success
cb10: 2c 20 6f 72 20 5a 5f 53 54 52 45 41 4d 5f 45 52  , or Z_STREAM_ER
cb20: 52 4f 52 20 69 66 20 74 68 65 20 73 6f 75 72 63  ROR if the sourc
cb30: 65 0a 20 20 20 73 74 72 65 61 6d 20 73 74 61 74  e.   stream stat
cb40: 65 20 77 61 73 20 69 6e 63 6f 6e 73 69 73 74 65  e was inconsiste
cb50: 6e 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 5a 45 58 54 45  nt..*/../*.ZEXTE
cb60: 52 4e 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 69  RN int ZEXPORT i
cb70: 6e 66 6c 61 74 65 42 61 63 6b 49 6e 69 74 20 4f  nflateBackInit O
cb80: 46 28 28 7a 5f 73 74 72 65 61 6d 70 20 73 74 72  F((z_streamp str
cb90: 6d 2c 20 69 6e 74 20 77 69 6e 64 6f 77 42 69 74  m, int windowBit
cba0: 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s,.             
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbc0: 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67             unsig
cbd0: 6e 65 64 20 63 68 61 72 20 46 41 52 20 2a 77 69  ned char FAR *wi
cbe0: 6e 64 6f 77 29 29 3b 0a 0a 20 20 20 20 20 49 6e  ndow));..     In
cbf0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74  itialize the int
cc00: 65 72 6e 61 6c 20 73 74 72 65 61 6d 20 73 74 61  ernal stream sta
cc10: 74 65 20 66 6f 72 20 64 65 63 6f 6d 70 72 65 73  te for decompres
cc20: 73 69 6f 6e 20 75 73 69 6e 67 20 69 6e 66 6c 61  sion using infla
cc30: 74 65 42 61 63 6b 28 29 0a 20 20 20 63 61 6c 6c  teBack().   call
cc40: 73 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20 7a  s.  The fields z
cc50: 61 6c 6c 6f 63 2c 20 7a 66 72 65 65 20 61 6e 64  alloc, zfree and
cc60: 20 6f 70 61 71 75 65 20 69 6e 20 73 74 72 6d 20   opaque in strm 
cc70: 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
cc80: 7a 65 64 0a 20 20 20 62 65 66 6f 72 65 20 74 68  zed.   before th
cc90: 65 20 63 61 6c 6c 2e 20 20 49 66 20 7a 61 6c 6c  e call.  If zall
cca0: 6f 63 20 61 6e 64 20 7a 66 72 65 65 20 61 72 65  oc and zfree are
ccb0: 20 5a 5f 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68   Z_NULL, then th
ccc0: 65 20 64 65 66 61 75 6c 74 20 6c 69 62 72 61 72  e default librar
ccd0: 79 2d 0a 20 20 20 64 65 72 69 76 65 64 20 6d 65  y-.   derived me
cce0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ccf0: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 75 73 65  routines are use
cd00: 64 2e 20 20 77 69 6e 64 6f 77 42 69 74 73 20 69  d.  windowBits i
cd10: 73 20 74 68 65 20 62 61 73 65 20 74 77 6f 0a 20  s the base two. 
cd20: 20 20 6c 6f 67 61 72 69 74 68 6d 20 6f 66 20 74    logarithm of t
cd30: 68 65 20 77 69 6e 64 6f 77 20 73 69 7a 65 2c 20  he window size, 
cd40: 69 6e 20 74 68 65 20 72 61 6e 67 65 20 38 2e 2e  in the range 8..
cd50: 31 35 2e 20 20 77 69 6e 64 6f 77 20 69 73 20 61  15.  window is a
cd60: 20 63 61 6c 6c 65 72 0a 20 20 20 73 75 70 70 6c   caller.   suppl
cd70: 69 65 64 20 62 75 66 66 65 72 20 6f 66 20 74 68  ied buffer of th
cd80: 61 74 20 73 69 7a 65 2e 20 20 45 78 63 65 70 74  at size.  Except
cd90: 20 66 6f 72 20 73 70 65 63 69 61 6c 20 61 70 70   for special app
cda0: 6c 69 63 61 74 69 6f 6e 73 20 77 68 65 72 65 20  lications where 
cdb0: 69 74 20 69 73 0a 20 20 20 61 73 73 75 72 65 64  it is.   assured
cdc0: 20 74 68 61 74 20 64 65 66 6c 61 74 65 20 77 61   that deflate wa
cdd0: 73 20 75 73 65 64 20 77 69 74 68 20 73 6d 61 6c  s used with smal
cde0: 6c 20 77 69 6e 64 6f 77 20 73 69 7a 65 73 2c 20  l window sizes, 
cdf0: 77 69 6e 64 6f 77 42 69 74 73 20 6d 75 73 74 20  windowBits must 
ce00: 62 65 20 31 35 0a 20 20 20 61 6e 64 20 61 20 33  be 15.   and a 3
ce10: 32 4b 20 62 79 74 65 20 77 69 6e 64 6f 77 20 6d  2K byte window m
ce20: 75 73 74 20 62 65 20 73 75 70 70 6c 69 65 64 20  ust be supplied 
ce30: 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 64 65  to be able to de
ce40: 63 6f 6d 70 72 65 73 73 20 67 65 6e 65 72 61 6c  compress general
ce50: 0a 20 20 20 64 65 66 6c 61 74 65 20 73 74 72 65  .   deflate stre
ce60: 61 6d 73 2e 0a 0a 20 20 20 20 20 53 65 65 20 69  ams...     See i
ce70: 6e 66 6c 61 74 65 42 61 63 6b 28 29 20 66 6f 72  nflateBack() for
ce80: 20 74 68 65 20 75 73 61 67 65 20 6f 66 20 74 68   the usage of th
ce90: 65 73 65 20 72 6f 75 74 69 6e 65 73 2e 0a 0a 20  ese routines... 
cea0: 20 20 20 20 69 6e 66 6c 61 74 65 42 61 63 6b 49      inflateBackI
ceb0: 6e 69 74 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  nit will return 
cec0: 5a 5f 4f 4b 20 6f 6e 20 73 75 63 63 65 73 73 2c  Z_OK on success,
ced0: 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52 4f 52 20   Z_STREAM_ERROR 
cee0: 69 66 20 61 6e 79 20 6f 66 0a 20 20 20 74 68 65  if any of.   the
cef0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
cf00: 69 6e 76 61 6c 69 64 2c 20 5a 5f 4d 45 4d 5f 45  invalid, Z_MEM_E
cf10: 52 52 4f 52 20 69 66 20 74 68 65 20 69 6e 74 65  RROR if the inte
cf20: 72 6e 61 6c 20 73 74 61 74 65 20 63 6f 75 6c 64  rnal state could
cf30: 20 6e 6f 74 20 62 65 0a 20 20 20 61 6c 6c 6f 63   not be.   alloc
cf40: 61 74 65 64 2c 20 6f 72 20 5a 5f 56 45 52 53 49  ated, or Z_VERSI
cf50: 4f 4e 5f 45 52 52 4f 52 20 69 66 20 74 68 65 20  ON_ERROR if the 
cf60: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c  version of the l
cf70: 69 62 72 61 72 79 20 64 6f 65 73 20 6e 6f 74 20  ibrary does not 
cf80: 6d 61 74 63 68 0a 20 20 20 74 68 65 20 76 65 72  match.   the ver
cf90: 73 69 6f 6e 20 6f 66 20 74 68 65 20 68 65 61 64  sion of the head
cfa0: 65 72 20 66 69 6c 65 2e 0a 2a 2f 0a 0a 74 79 70  er file..*/..typ
cfb0: 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 28 2a  edef unsigned (*
cfc0: 69 6e 5f 66 75 6e 63 29 20 4f 46 28 28 76 6f 69  in_func) OF((voi
cfd0: 64 20 46 41 52 20 2a 2c 0a 20 20 20 20 20 20 20  d FAR *,.       
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 20 20 20 20 20 20 7a 5f 63 6f 6e 73 74           z_const
d000: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 46   unsigned char F
d010: 41 52 20 2a 20 46 41 52 20 2a 29 29 3b 0a 74 79  AR * FAR *));.ty
d020: 70 65 64 65 66 20 69 6e 74 20 28 2a 6f 75 74 5f  pedef int (*out_
d030: 66 75 6e 63 29 20 4f 46 28 28 76 6f 69 64 20 46  func) OF((void F
d040: 41 52 20 2a 2c 20 75 6e 73 69 67 6e 65 64 20 63  AR *, unsigned c
d050: 68 61 72 20 46 41 52 20 2a 2c 20 75 6e 73 69 67  har FAR *, unsig
d060: 6e 65 64 29 29 3b 0a 0a 5a 45 58 54 45 52 4e 20  ned));..ZEXTERN 
d070: 69 6e 74 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c  int ZEXPORT infl
d080: 61 74 65 42 61 63 6b 20 4f 46 28 28 7a 5f 73 74  ateBack OF((z_st
d090: 72 65 61 6d 70 20 73 74 72 6d 2c 0a 20 20 20 20  reamp strm,.    
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 69 6e 5f 66 75 6e 63 20 69 6e 2c 20 76 6f 69 64  in_func in, void
d0d0: 20 46 41 52 20 2a 69 6e 5f 64 65 73 63 2c 0a 20   FAR *in_desc,. 
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d100: 20 20 20 6f 75 74 5f 66 75 6e 63 20 6f 75 74 2c     out_func out,
d110: 20 76 6f 69 64 20 46 41 52 20 2a 6f 75 74 5f 64   void FAR *out_d
d120: 65 73 63 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 69  esc));./*.     i
d130: 6e 66 6c 61 74 65 42 61 63 6b 28 29 20 64 6f 65  nflateBack() doe
d140: 73 20 61 20 72 61 77 20 69 6e 66 6c 61 74 65 20  s a raw inflate 
d150: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63 61  with a single ca
d160: 6c 6c 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 2d  ll using a call-
d170: 62 61 63 6b 0a 20 20 20 69 6e 74 65 72 66 61 63  back.   interfac
d180: 65 20 66 6f 72 20 69 6e 70 75 74 20 61 6e 64 20  e for input and 
d190: 6f 75 74 70 75 74 2e 20 20 54 68 69 73 20 69 73  output.  This is
d1a0: 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 6d 6f 72   potentially mor
d1b0: 65 20 65 66 66 69 63 69 65 6e 74 20 74 68 61 6e  e efficient than
d1c0: 0a 20 20 20 69 6e 66 6c 61 74 65 28 29 20 66 6f  .   inflate() fo
d1d0: 72 20 66 69 6c 65 20 69 2f 6f 20 61 70 70 6c 69  r file i/o appli
d1e0: 63 61 74 69 6f 6e 73 2c 20 69 6e 20 74 68 61 74  cations, in that
d1f0: 20 69 74 20 61 76 6f 69 64 73 20 63 6f 70 79 69   it avoids copyi
d200: 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 0a 20  ng between the. 
d210: 20 20 6f 75 74 70 75 74 20 61 6e 64 20 74 68 65    output and the
d220: 20 73 6c 69 64 69 6e 67 20 77 69 6e 64 6f 77 20   sliding window 
d230: 62 79 20 73 69 6d 70 6c 79 20 6d 61 6b 69 6e 67  by simply making
d240: 20 74 68 65 20 77 69 6e 64 6f 77 20 69 74 73 65   the window itse
d250: 6c 66 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20  lf the output.  
d260: 20 62 75 66 66 65 72 2e 20 20 69 6e 66 6c 61 74   buffer.  inflat
d270: 65 28 29 20 63 61 6e 20 62 65 20 66 61 73 74 65  e() can be faste
d280: 72 20 6f 6e 20 6d 6f 64 65 72 6e 20 43 50 55 73  r on modern CPUs
d290: 20 77 68 65 6e 20 75 73 65 64 20 77 69 74 68 20   when used with 
d2a0: 6c 61 72 67 65 0a 20 20 20 62 75 66 66 65 72 73  large.   buffers
d2b0: 2e 20 20 69 6e 66 6c 61 74 65 42 61 63 6b 28 29  .  inflateBack()
d2c0: 20 74 72 75 73 74 73 20 74 68 65 20 61 70 70 6c   trusts the appl
d2d0: 69 63 61 74 69 6f 6e 20 74 6f 20 6e 6f 74 20 63  ication to not c
d2e0: 68 61 6e 67 65 20 74 68 65 20 6f 75 74 70 75 74  hange the output
d2f0: 0a 20 20 20 62 75 66 66 65 72 20 70 61 73 73 65  .   buffer passe
d300: 64 20 62 79 20 74 68 65 20 6f 75 74 70 75 74 20  d by the output 
d310: 66 75 6e 63 74 69 6f 6e 2c 20 61 74 20 6c 65 61  function, at lea
d320: 73 74 20 75 6e 74 69 6c 20 69 6e 66 6c 61 74 65  st until inflate
d330: 42 61 63 6b 28 29 20 72 65 74 75 72 6e 73 2e 0a  Back() returns..
d340: 0a 20 20 20 20 20 69 6e 66 6c 61 74 65 42 61 63  .     inflateBac
d350: 6b 49 6e 69 74 28 29 20 6d 75 73 74 20 62 65 20  kInit() must be 
d360: 63 61 6c 6c 65 64 20 66 69 72 73 74 20 74 6f 20  called first to 
d370: 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 69 6e 74  allocate the int
d380: 65 72 6e 61 6c 20 73 74 61 74 65 0a 20 20 20 61  ernal state.   a
d390: 6e 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  nd to initialize
d3a0: 20 74 68 65 20 73 74 61 74 65 20 77 69 74 68 20   the state with 
d3b0: 74 68 65 20 75 73 65 72 2d 70 72 6f 76 69 64 65  the user-provide
d3c0: 64 20 77 69 6e 64 6f 77 20 62 75 66 66 65 72 2e  d window buffer.
d3d0: 0a 20 20 20 69 6e 66 6c 61 74 65 42 61 63 6b 28  .   inflateBack(
d3e0: 29 20 6d 61 79 20 74 68 65 6e 20 62 65 20 75 73  ) may then be us
d3f0: 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
d400: 73 20 74 6f 20 69 6e 66 6c 61 74 65 20 61 20 63  s to inflate a c
d410: 6f 6d 70 6c 65 74 65 2c 20 72 61 77 0a 20 20 20  omplete, raw.   
d420: 64 65 66 6c 61 74 65 20 73 74 72 65 61 6d 20 77  deflate stream w
d430: 69 74 68 20 65 61 63 68 20 63 61 6c 6c 2e 20 20  ith each call.  
d440: 69 6e 66 6c 61 74 65 42 61 63 6b 45 6e 64 28 29  inflateBackEnd()
d450: 20 69 73 20 74 68 65 6e 20 63 61 6c 6c 65 64 20   is then called 
d460: 74 6f 20 66 72 65 65 20 74 68 65 0a 20 20 20 61  to free the.   a
d470: 6c 6c 6f 63 61 74 65 64 20 73 74 61 74 65 2e 0a  llocated state..
d480: 0a 20 20 20 20 20 41 20 72 61 77 20 64 65 66 6c  .     A raw defl
d490: 61 74 65 20 73 74 72 65 61 6d 20 69 73 20 6f 6e  ate stream is on
d4a0: 65 20 77 69 74 68 20 6e 6f 20 7a 6c 69 62 20 6f  e with no zlib o
d4b0: 72 20 67 7a 69 70 20 68 65 61 64 65 72 20 6f 72  r gzip header or
d4c0: 20 74 72 61 69 6c 65 72 2e 0a 20 20 20 54 68 69   trailer..   Thi
d4d0: 73 20 72 6f 75 74 69 6e 65 20 77 6f 75 6c 64 20  s routine would 
d4e0: 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 75 73 65 64  normally be used
d4f0: 20 69 6e 20 61 20 75 74 69 6c 69 74 79 20 74 68   in a utility th
d500: 61 74 20 72 65 61 64 73 20 7a 69 70 20 6f 72 20  at reads zip or 
d510: 67 7a 69 70 0a 20 20 20 66 69 6c 65 73 20 61 6e  gzip.   files an
d520: 64 20 77 72 69 74 65 73 20 6f 75 74 20 75 6e 63  d writes out unc
d530: 6f 6d 70 72 65 73 73 65 64 20 66 69 6c 65 73 2e  ompressed files.
d540: 20 20 54 68 65 20 75 74 69 6c 69 74 79 20 77 6f    The utility wo
d550: 75 6c 64 20 64 65 63 6f 64 65 20 74 68 65 0a 20  uld decode the. 
d560: 20 20 68 65 61 64 65 72 20 61 6e 64 20 70 72 6f    header and pro
d570: 63 65 73 73 20 74 68 65 20 74 72 61 69 6c 65 72  cess the trailer
d580: 20 6f 6e 20 69 74 73 20 6f 77 6e 2c 20 68 65 6e   on its own, hen
d590: 63 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ce this routine 
d5a0: 65 78 70 65 63 74 73 20 6f 6e 6c 79 0a 20 20 20  expects only.   
d5b0: 74 68 65 20 72 61 77 20 64 65 66 6c 61 74 65 20  the raw deflate 
d5c0: 73 74 72 65 61 6d 20 74 6f 20 64 65 63 6f 6d 70  stream to decomp
d5d0: 72 65 73 73 2e 20 20 54 68 69 73 20 69 73 20 64  ress.  This is d
d5e0: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
d5f0: 65 20 6e 6f 72 6d 61 6c 0a 20 20 20 62 65 68 61  e normal.   beha
d600: 76 69 6f 72 20 6f 66 20 69 6e 66 6c 61 74 65 28  vior of inflate(
d610: 29 2c 20 77 68 69 63 68 20 65 78 70 65 63 74 73  ), which expects
d620: 20 65 69 74 68 65 72 20 61 20 7a 6c 69 62 20 6f   either a zlib o
d630: 72 20 67 7a 69 70 20 68 65 61 64 65 72 20 61 6e  r gzip header an
d640: 64 0a 20 20 20 74 72 61 69 6c 65 72 20 61 72 6f  d.   trailer aro
d650: 75 6e 64 20 74 68 65 20 64 65 66 6c 61 74 65 20  und the deflate 
d660: 73 74 72 65 61 6d 2e 0a 0a 20 20 20 20 20 69 6e  stream...     in
d670: 66 6c 61 74 65 42 61 63 6b 28 29 20 75 73 65 73  flateBack() uses
d680: 20 74 77 6f 20 73 75 62 72 6f 75 74 69 6e 65 73   two subroutines
d690: 20 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65   supplied by the
d6a0: 20 63 61 6c 6c 65 72 20 74 68 61 74 20 61 72 65   caller that are
d6b0: 20 74 68 65 6e 0a 20 20 20 63 61 6c 6c 65 64 20   then.   called 
d6c0: 62 79 20 69 6e 66 6c 61 74 65 42 61 63 6b 28 29  by inflateBack()
d6d0: 20 66 6f 72 20 69 6e 70 75 74 20 61 6e 64 20 6f   for input and o
d6e0: 75 74 70 75 74 2e 20 20 69 6e 66 6c 61 74 65 42  utput.  inflateB
d6f0: 61 63 6b 28 29 20 63 61 6c 6c 73 20 74 68 6f 73  ack() calls thos
d700: 65 0a 20 20 20 72 6f 75 74 69 6e 65 73 20 75 6e  e.   routines un
d710: 74 69 6c 20 69 74 20 72 65 61 64 73 20 61 20 63  til it reads a c
d720: 6f 6d 70 6c 65 74 65 20 64 65 66 6c 61 74 65 20  omplete deflate 
d730: 73 74 72 65 61 6d 20 61 6e 64 20 77 72 69 74 65  stream and write
d740: 73 20 6f 75 74 20 61 6c 6c 20 6f 66 20 74 68 65  s out all of the
d750: 0a 20 20 20 75 6e 63 6f 6d 70 72 65 73 73 65 64  .   uncompressed
d760: 20 64 61 74 61 2c 20 6f 72 20 75 6e 74 69 6c 20   data, or until 
d770: 69 74 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 6e  it encounters an
d780: 20 65 72 72 6f 72 2e 20 20 54 68 65 20 66 75 6e   error.  The fun
d790: 63 74 69 6f 6e 27 73 0a 20 20 20 70 61 72 61 6d  ction's.   param
d7a0: 65 74 65 72 73 20 61 6e 64 20 72 65 74 75 72 6e  eters and return
d7b0: 20 74 79 70 65 73 20 61 72 65 20 64 65 66 69 6e   types are defin
d7c0: 65 64 20 61 62 6f 76 65 20 69 6e 20 74 68 65 20  ed above in the 
d7d0: 69 6e 5f 66 75 6e 63 20 61 6e 64 20 6f 75 74 5f  in_func and out_
d7e0: 66 75 6e 63 0a 20 20 20 74 79 70 65 64 65 66 73  func.   typedefs
d7f0: 2e 20 20 69 6e 66 6c 61 74 65 42 61 63 6b 28 29  .  inflateBack()
d800: 20 77 69 6c 6c 20 63 61 6c 6c 20 69 6e 28 69 6e   will call in(in
d810: 5f 64 65 73 63 2c 20 26 62 75 66 29 20 77 68 69  _desc, &buf) whi
d820: 63 68 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e  ch should return
d830: 20 74 68 65 0a 20 20 20 6e 75 6d 62 65 72 20 6f   the.   number o
d840: 66 20 62 79 74 65 73 20 6f 66 20 70 72 6f 76 69  f bytes of provi
d850: 64 65 64 20 69 6e 70 75 74 2c 20 61 6e 64 20 61  ded input, and a
d860: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 61 74   pointer to that
d870: 20 69 6e 70 75 74 20 69 6e 20 62 75 66 2e 20 20   input in buf.  
d880: 49 66 0a 20 20 20 74 68 65 72 65 20 69 73 20 6e  If.   there is n
d890: 6f 20 69 6e 70 75 74 20 61 76 61 69 6c 61 62 6c  o input availabl
d8a0: 65 2c 20 69 6e 28 29 20 6d 75 73 74 20 72 65 74  e, in() must ret
d8b0: 75 72 6e 20 7a 65 72 6f 2d 2d 62 75 66 20 69 73  urn zero--buf is
d8c0: 20 69 67 6e 6f 72 65 64 20 69 6e 20 74 68 61 74   ignored in that
d8d0: 0a 20 20 20 63 61 73 65 2d 2d 61 6e 64 20 69 6e  .   case--and in
d8e0: 66 6c 61 74 65 42 61 63 6b 28 29 20 77 69 6c 6c  flateBack() will
d8f0: 20 72 65 74 75 72 6e 20 61 20 62 75 66 66 65 72   return a buffer
d900: 20 65 72 72 6f 72 2e 20 20 69 6e 66 6c 61 74 65   error.  inflate
d910: 42 61 63 6b 28 29 20 77 69 6c 6c 20 63 61 6c 6c  Back() will call
d920: 0a 20 20 20 6f 75 74 28 6f 75 74 5f 64 65 73 63  .   out(out_desc
d930: 2c 20 62 75 66 2c 20 6c 65 6e 29 20 74 6f 20 77  , buf, len) to w
d940: 72 69 74 65 20 74 68 65 20 75 6e 63 6f 6d 70 72  rite the uncompr
d950: 65 73 73 65 64 20 64 61 74 61 20 62 75 66 5b 30  essed data buf[0
d960: 2e 2e 6c 65 6e 2d 31 5d 2e 20 20 6f 75 74 28 29  ..len-1].  out()
d970: 0a 20 20 20 73 68 6f 75 6c 64 20 72 65 74 75 72  .   should retur
d980: 6e 20 7a 65 72 6f 20 6f 6e 20 73 75 63 63 65 73  n zero on succes
d990: 73 2c 20 6f 72 20 6e 6f 6e 2d 7a 65 72 6f 20 6f  s, or non-zero o
d9a0: 6e 20 66 61 69 6c 75 72 65 2e 20 20 49 66 20 6f  n failure.  If o
d9b0: 75 74 28 29 20 72 65 74 75 72 6e 73 0a 20 20 20  ut() returns.   
d9c0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 69 6e 66 6c 61 74  non-zero, inflat
d9d0: 65 42 61 63 6b 28 29 20 77 69 6c 6c 20 72 65 74  eBack() will ret
d9e0: 75 72 6e 20 77 69 74 68 20 61 6e 20 65 72 72 6f  urn with an erro
d9f0: 72 2e 20 20 4e 65 69 74 68 65 72 20 69 6e 28 29  r.  Neither in()
da00: 20 6e 6f 72 20 6f 75 74 28 29 0a 20 20 20 61 72   nor out().   ar
da10: 65 20 70 65 72 6d 69 74 74 65 64 20 74 6f 20 63  e permitted to c
da20: 68 61 6e 67 65 20 74 68 65 20 63 6f 6e 74 65 6e  hange the conten
da30: 74 73 20 6f 66 20 74 68 65 20 77 69 6e 64 6f 77  ts of the window
da40: 20 70 72 6f 76 69 64 65 64 20 74 6f 0a 20 20 20   provided to.   
da50: 69 6e 66 6c 61 74 65 42 61 63 6b 49 6e 69 74 28  inflateBackInit(
da60: 29 2c 20 77 68 69 63 68 20 69 73 20 61 6c 73 6f  ), which is also
da70: 20 74 68 65 20 62 75 66 66 65 72 20 74 68 61 74   the buffer that
da80: 20 6f 75 74 28 29 20 75 73 65 73 20 74 6f 20 77   out() uses to w
da90: 72 69 74 65 20 66 72 6f 6d 2e 0a 20 20 20 54 68  rite from..   Th
daa0: 65 20 6c 65 6e 67 74 68 20 77 72 69 74 74 65 6e  e length written
dab0: 20 62 79 20 6f 75 74 28 29 20 77 69 6c 6c 20 62   by out() will b
dac0: 65 20 61 74 20 6d 6f 73 74 20 74 68 65 20 77 69  e at most the wi
dad0: 6e 64 6f 77 20 73 69 7a 65 2e 20 20 41 6e 79 20  ndow size.  Any 
dae0: 6e 6f 6e 2d 7a 65 72 6f 0a 20 20 20 61 6d 6f 75  non-zero.   amou
daf0: 6e 74 20 6f 66 20 69 6e 70 75 74 20 6d 61 79 20  nt of input may 
db00: 62 65 20 70 72 6f 76 69 64 65 64 20 62 79 20 69  be provided by i
db10: 6e 28 29 2e 0a 0a 20 20 20 20 20 46 6f 72 20 63  n()...     For c
db20: 6f 6e 76 65 6e 69 65 6e 63 65 2c 20 69 6e 66 6c  onvenience, infl
db30: 61 74 65 42 61 63 6b 28 29 20 63 61 6e 20 62 65  ateBack() can be
db40: 20 70 72 6f 76 69 64 65 64 20 69 6e 70 75 74 20   provided input 
db50: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c  on the first cal
db60: 6c 20 62 79 0a 20 20 20 73 65 74 74 69 6e 67 20  l by.   setting 
db70: 73 74 72 6d 2d 3e 6e 65 78 74 5f 69 6e 20 61 6e  strm->next_in an
db80: 64 20 73 74 72 6d 2d 3e 61 76 61 69 6c 5f 69 6e  d strm->avail_in
db90: 2e 20 20 49 66 20 74 68 61 74 20 69 6e 70 75 74  .  If that input
dba0: 20 69 73 20 65 78 68 61 75 73 74 65 64 2c 20 74   is exhausted, t
dbb0: 68 65 6e 0a 20 20 20 69 6e 28 29 20 77 69 6c 6c  hen.   in() will
dbc0: 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 54 68 65   be called.  The
dbd0: 72 65 66 6f 72 65 20 73 74 72 6d 2d 3e 6e 65 78  refore strm->nex
dbe0: 74 5f 69 6e 20 6d 75 73 74 20 62 65 20 69 6e 69  t_in must be ini
dbf0: 74 69 61 6c 69 7a 65 64 20 62 65 66 6f 72 65 0a  tialized before.
dc00: 20 20 20 63 61 6c 6c 69 6e 67 20 69 6e 66 6c 61     calling infla
dc10: 74 65 42 61 63 6b 28 29 2e 20 20 49 66 20 73 74  teBack().  If st
dc20: 72 6d 2d 3e 6e 65 78 74 5f 69 6e 20 69 73 20 5a  rm->next_in is Z
dc30: 5f 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 6e 28 29  _NULL, then in()
dc40: 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 0a   will be called.
dc50: 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66     immediately f
dc60: 6f 72 20 69 6e 70 75 74 2e 20 20 49 66 20 73 74  or input.  If st
dc70: 72 6d 2d 3e 6e 65 78 74 5f 69 6e 20 69 73 20 6e  rm->next_in is n
dc80: 6f 74 20 5a 5f 4e 55 4c 4c 2c 20 74 68 65 6e 20  ot Z_NULL, then 
dc90: 73 74 72 6d 2d 3e 61 76 61 69 6c 5f 69 6e 0a 20  strm->avail_in. 
dca0: 20 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20 69    must also be i
dcb0: 6e 69 74 69 61 6c 69 7a 65 64 2c 20 61 6e 64 20  nitialized, and 
dcc0: 74 68 65 6e 20 69 66 20 73 74 72 6d 2d 3e 61 76  then if strm->av
dcd0: 61 69 6c 5f 69 6e 20 69 73 20 6e 6f 74 20 7a 65  ail_in is not ze
dce0: 72 6f 2c 20 69 6e 70 75 74 20 77 69 6c 6c 0a 20  ro, input will. 
dcf0: 20 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 74    initially be t
dd00: 61 6b 65 6e 20 66 72 6f 6d 20 73 74 72 6d 2d 3e  aken from strm->
dd10: 6e 65 78 74 5f 69 6e 5b 30 20 2e 2e 20 20 73 74  next_in[0 ..  st
dd20: 72 6d 2d 3e 61 76 61 69 6c 5f 69 6e 20 2d 20 31  rm->avail_in - 1
dd30: 5d 2e 0a 0a 20 20 20 20 20 54 68 65 20 69 6e 5f  ]...     The in_
dd40: 64 65 73 63 20 61 6e 64 20 6f 75 74 5f 64 65 73  desc and out_des
dd50: 63 20 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20  c parameters of 
dd60: 69 6e 66 6c 61 74 65 42 61 63 6b 28 29 20 69 73  inflateBack() is
dd70: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 0a 20   passed as the. 
dd80: 20 20 66 69 72 73 74 20 70 61 72 61 6d 65 74 65    first paramete
dd90: 72 20 6f 66 20 69 6e 28 29 20 61 6e 64 20 6f 75  r of in() and ou
dda0: 74 28 29 20 72 65 73 70 65 63 74 69 76 65 6c 79  t() respectively
ddb0: 20 77 68 65 6e 20 74 68 65 79 20 61 72 65 20 63   when they are c
ddc0: 61 6c 6c 65 64 2e 20 20 54 68 65 73 65 0a 20 20  alled.  These.  
ddd0: 20 64 65 73 63 72 69 70 74 6f 72 73 20 63 61 6e   descriptors can
dde0: 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 75   be optionally u
ddf0: 73 65 64 20 74 6f 20 70 61 73 73 20 61 6e 79 20  sed to pass any 
de00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
de10: 20 74 68 65 20 63 61 6c 6c 65 72 2d 0a 20 20 20   the caller-.   
de20: 73 75 70 70 6c 69 65 64 20 69 6e 28 29 20 61 6e  supplied in() an
de30: 64 20 6f 75 74 28 29 20 66 75 6e 63 74 69 6f 6e  d out() function
de40: 73 20 6e 65 65 64 20 74 6f 20 64 6f 20 74 68 65  s need to do the
de50: 69 72 20 6a 6f 62 2e 0a 0a 20 20 20 20 20 4f 6e  ir job...     On
de60: 20 72 65 74 75 72 6e 2c 20 69 6e 66 6c 61 74 65   return, inflate
de70: 42 61 63 6b 28 29 20 77 69 6c 6c 20 73 65 74 20  Back() will set 
de80: 73 74 72 6d 2d 3e 6e 65 78 74 5f 69 6e 20 61 6e  strm->next_in an
de90: 64 20 73 74 72 6d 2d 3e 61 76 61 69 6c 5f 69 6e  d strm->avail_in
dea0: 20 74 6f 0a 20 20 20 70 61 73 73 20 62 61 63 6b   to.   pass back
deb0: 20 61 6e 79 20 75 6e 75 73 65 64 20 69 6e 70 75   any unused inpu
dec0: 74 20 74 68 61 74 20 77 61 73 20 70 72 6f 76 69  t that was provi
ded0: 64 65 64 20 62 79 20 74 68 65 20 6c 61 73 74 20  ded by the last 
dee0: 69 6e 28 29 20 63 61 6c 6c 2e 20 20 54 68 65 0a  in() call.  The.
def0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73     return values
df00: 20 6f 66 20 69 6e 66 6c 61 74 65 42 61 63 6b 28   of inflateBack(
df10: 29 20 63 61 6e 20 62 65 20 5a 5f 53 54 52 45 41  ) can be Z_STREA
df20: 4d 5f 45 4e 44 20 6f 6e 20 73 75 63 63 65 73 73  M_END on success
df30: 2c 20 5a 5f 42 55 46 5f 45 52 52 4f 52 0a 20 20  , Z_BUF_ERROR.  
df40: 20 69 66 20 69 6e 28 29 20 6f 72 20 6f 75 74 28   if in() or out(
df50: 29 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72  ) returned an er
df60: 72 6f 72 2c 20 5a 5f 44 41 54 41 5f 45 52 52 4f  ror, Z_DATA_ERRO
df70: 52 20 69 66 20 74 68 65 72 65 20 77 61 73 20 61  R if there was a
df80: 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 0a 20 20   format error.  
df90: 20 69 6e 20 74 68 65 20 64 65 66 6c 61 74 65 20   in the deflate 
dfa0: 73 74 72 65 61 6d 20 28 69 6e 20 77 68 69 63 68  stream (in which
dfb0: 20 63 61 73 65 20 73 74 72 6d 2d 3e 6d 73 67 20   case strm->msg 
dfc0: 69 73 20 73 65 74 20 74 6f 20 69 6e 64 69 63 61  is set to indica
dfd0: 74 65 20 74 68 65 20 6e 61 74 75 72 65 0a 20 20  te the nature.  
dfe0: 20 6f 66 20 74 68 65 20 65 72 72 6f 72 29 2c 20   of the error), 
dff0: 6f 72 20 5a 5f 53 54 52 45 41 4d 5f 45 52 52 4f  or Z_STREAM_ERRO
e000: 52 20 69 66 20 74 68 65 20 73 74 72 65 61 6d 20  R if the stream 
e010: 77 61 73 20 6e 6f 74 20 70 72 6f 70 65 72 6c 79  was not properly
e020: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0a 20 20   initialized..  
e030: 20 49 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   In the case of 
e040: 5a 5f 42 55 46 5f 45 52 52 4f 52 2c 20 61 6e 20  Z_BUF_ERROR, an 
e050: 69 6e 70 75 74 20 6f 72 20 6f 75 74 70 75 74 20  input or output 
e060: 65 72 72 6f 72 20 63 61 6e 20 62 65 20 64 69 73  error can be dis
e070: 74 69 6e 67 75 69 73 68 65 64 0a 20 20 20 75 73  tinguished.   us
e080: 69 6e 67 20 73 74 72 6d 2d 3e 6e 65 78 74 5f 69  ing strm->next_i
e090: 6e 20 77 68 69 63 68 20 77 69 6c 6c 20 62 65 20  n which will be 
e0a0: 5a 5f 4e 55 4c 4c 20 6f 6e 6c 79 20 69 66 20 69  Z_NULL only if i
e0b0: 6e 28 29 20 72 65 74 75 72 6e 65 64 20 61 6e 20  n() returned an 
e0c0: 65 72 72 6f 72 2e 20 20 49 66 0a 20 20 20 73 74  error.  If.   st
e0d0: 72 6d 2d 3e 6e 65 78 74 5f 69 6e 20 69 73 20 6e  rm->next_in is n
e0e0: 6f 74 20 5a 5f 4e 55 4c 4c 2c 20 74 68 65 6e 20  ot Z_NULL, then 
e0f0: 74 68 65 20 5a 5f 42 55 46 5f 45 52 52 4f 52 20  the Z_BUF_ERROR 
e100: 77 61 73 20 64 75 65 20 74 6f 20 6f 75 74 28 29  was due to out()
e110: 20 72 65 74 75 72 6e 69 6e 67 0a 20 20 20 6e 6f   returning.   no
e120: 6e 2d 7a 65 72 6f 2e 20 20 28 69 6e 28 29 20 77  n-zero.  (in() w
e130: 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 63 61  ill always be ca
e140: 6c 6c 65 64 20 62 65 66 6f 72 65 20 6f 75 74 28  lled before out(
e150: 29 2c 20 73 6f 20 73 74 72 6d 2d 3e 6e 65 78 74  ), so strm->next
e160: 5f 69 6e 20 69 73 0a 20 20 20 61 73 73 75 72 65  _in is.   assure
e170: 64 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  d to be defined 
e180: 69 66 20 6f 75 74 28 29 20 72 65 74 75 72 6e 73  if out() returns
e190: 20 6e 6f 6e 2d 7a 65 72 6f 2e 29 20 4e 6f 74 65   non-zero.) Note
e1a0: 20 74 68 61 74 20 69 6e 66 6c 61 74 65 42 61 63   that inflateBac
e1b0: 6b 28 29 0a 20 20 20 63 61 6e 6e 6f 74 20 72 65  k().   cannot re
e1c0: 74 75 72 6e 20 5a 5f 4f 4b 2e 0a 2a 2f 0a 0a 5a  turn Z_OK..*/..Z
e1d0: 45 58 54 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f  EXTERN int ZEXPO
e1e0: 52 54 20 69 6e 66 6c 61 74 65 42 61 63 6b 45 6e  RT inflateBackEn
e1f0: 64 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d 70 20  d OF((z_streamp 
e200: 73 74 72 6d 29 29 3b 0a 2f 2a 0a 20 20 20 20 20  strm));./*.     
e210: 41 6c 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  All memory alloc
e220: 61 74 65 64 20 62 79 20 69 6e 66 6c 61 74 65 42  ated by inflateB
e230: 61 63 6b 49 6e 69 74 28 29 20 69 73 20 66 72 65  ackInit() is fre
e240: 65 64 2e 0a 0a 20 20 20 20 20 69 6e 66 6c 61 74  ed...     inflat
e250: 65 42 61 63 6b 45 6e 64 28 29 20 72 65 74 75 72  eBackEnd() retur
e260: 6e 73 20 5a 5f 4f 4b 20 6f 6e 20 73 75 63 63 65  ns Z_OK on succe
e270: 73 73 2c 20 6f 72 20 5a 5f 53 54 52 45 41 4d 5f  ss, or Z_STREAM_
e280: 45 52 52 4f 52 20 69 66 20 74 68 65 20 73 74 72  ERROR if the str
e290: 65 61 6d 0a 20 20 20 73 74 61 74 65 20 77 61 73  eam.   state was
e2a0: 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 2e 0a 2a   inconsistent..*
e2b0: 2f 0a 0a 5a 45 58 54 45 52 4e 20 75 4c 6f 6e 67  /..ZEXTERN uLong
e2c0: 20 5a 45 58 50 4f 52 54 20 7a 6c 69 62 43 6f 6d   ZEXPORT zlibCom
e2d0: 70 69 6c 65 46 6c 61 67 73 20 4f 46 28 28 76 6f  pileFlags OF((vo
e2e0: 69 64 29 29 3b 0a 2f 2a 20 52 65 74 75 72 6e 20  id));./* Return 
e2f0: 66 6c 61 67 73 20 69 6e 64 69 63 61 74 69 6e 67  flags indicating
e300: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
e310: 74 69 6f 6e 73 2e 0a 0a 20 20 20 20 54 79 70 65  tions...    Type
e320: 20 73 69 7a 65 73 2c 20 74 77 6f 20 62 69 74 73   sizes, two bits
e330: 20 65 61 63 68 2c 20 30 30 20 3d 20 31 36 20 62   each, 00 = 16 b
e340: 69 74 73 2c 20 30 31 20 3d 20 33 32 2c 20 31 30  its, 01 = 32, 10
e350: 20 3d 20 36 34 2c 20 31 31 20 3d 20 6f 74 68 65   = 64, 11 = othe
e360: 72 3a 0a 20 20 20 20 20 31 2e 30 3a 20 73 69 7a  r:.     1.0: siz
e370: 65 20 6f 66 20 75 49 6e 74 0a 20 20 20 20 20 33  e of uInt.     3
e380: 2e 32 3a 20 73 69 7a 65 20 6f 66 20 75 4c 6f 6e  .2: size of uLon
e390: 67 0a 20 20 20 20 20 35 2e 34 3a 20 73 69 7a 65  g.     5.4: size
e3a0: 20 6f 66 20 76 6f 69 64 70 66 20 28 70 6f 69 6e   of voidpf (poin
e3b0: 74 65 72 29 0a 20 20 20 20 20 37 2e 36 3a 20 73  ter).     7.6: s
e3c0: 69 7a 65 20 6f 66 20 7a 5f 6f 66 66 5f 74 0a 0a  ize of z_off_t..
e3d0: 20 20 20 20 43 6f 6d 70 69 6c 65 72 2c 20 61 73      Compiler, as
e3e0: 73 65 6d 62 6c 65 72 2c 20 61 6e 64 20 64 65 62  sembler, and deb
e3f0: 75 67 20 6f 70 74 69 6f 6e 73 3a 0a 20 20 20 20  ug options:.    
e400: 20 38 3a 20 44 45 42 55 47 0a 20 20 20 20 20 39   8: DEBUG.     9
e410: 3a 20 41 53 4d 56 20 6f 72 20 41 53 4d 49 4e 46  : ASMV or ASMINF
e420: 20 2d 2d 20 75 73 65 20 41 53 4d 20 63 6f 64 65   -- use ASM code
e430: 0a 20 20 20 20 20 31 30 3a 20 5a 4c 49 42 5f 57  .     10: ZLIB_W
e440: 49 4e 41 50 49 20 2d 2d 20 65 78 70 6f 72 74 65  INAPI -- exporte
e450: 64 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  d functions use 
e460: 74 68 65 20 57 49 4e 41 50 49 20 63 61 6c 6c 69  the WINAPI calli
e470: 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 0a 20 20  ng convention.  
e480: 20 20 20 31 31 3a 20 30 20 28 72 65 73 65 72 76     11: 0 (reserv
e490: 65 64 29 0a 0a 20 20 20 20 4f 6e 65 2d 74 69 6d  ed)..    One-tim
e4a0: 65 20 74 61 62 6c 65 20 62 75 69 6c 64 69 6e 67  e table building
e4b0: 20 28 73 6d 61 6c 6c 65 72 20 63 6f 64 65 2c 20   (smaller code, 
e4c0: 62 75 74 20 6e 6f 74 20 74 68 72 65 61 64 2d 73  but not thread-s
e4d0: 61 66 65 20 69 66 20 74 72 75 65 29 3a 0a 20 20  afe if true):.  
e4e0: 20 20 20 31 32 3a 20 42 55 49 4c 44 46 49 58 45     12: BUILDFIXE
e4f0: 44 20 2d 2d 20 62 75 69 6c 64 20 73 74 61 74 69  D -- build stati
e500: 63 20 62 6c 6f 63 6b 20 64 65 63 6f 64 69 6e 67  c block decoding
e510: 20 74 61 62 6c 65 73 20 77 68 65 6e 20 6e 65 65   tables when nee
e520: 64 65 64 0a 20 20 20 20 20 31 33 3a 20 44 59 4e  ded.     13: DYN
e530: 41 4d 49 43 5f 43 52 43 5f 54 41 42 4c 45 20 2d  AMIC_CRC_TABLE -
e540: 2d 20 62 75 69 6c 64 20 43 52 43 20 63 61 6c 63  - build CRC calc
e550: 75 6c 61 74 69 6f 6e 20 74 61 62 6c 65 73 20 77  ulation tables w
e560: 68 65 6e 20 6e 65 65 64 65 64 0a 20 20 20 20 20  hen needed.     
e570: 31 34 2c 31 35 3a 20 30 20 28 72 65 73 65 72 76  14,15: 0 (reserv
e580: 65 64 29 0a 0a 20 20 20 20 4c 69 62 72 61 72 79  ed)..    Library
e590: 20 63 6f 6e 74 65 6e 74 20 28 69 6e 64 69 63 61   content (indica
e5a0: 74 65 73 20 6d 69 73 73 69 6e 67 20 66 75 6e 63  tes missing func
e5b0: 74 69 6f 6e 61 6c 69 74 79 29 3a 0a 20 20 20 20  tionality):.    
e5c0: 20 31 36 3a 20 4e 4f 5f 47 5a 43 4f 4d 50 52 45   16: NO_GZCOMPRE
e5d0: 53 53 20 2d 2d 20 67 7a 2a 20 66 75 6e 63 74 69  SS -- gz* functi
e5e0: 6f 6e 73 20 63 61 6e 6e 6f 74 20 63 6f 6d 70 72  ons cannot compr
e5f0: 65 73 73 20 28 74 6f 20 61 76 6f 69 64 20 6c 69  ess (to avoid li
e600: 6e 6b 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20  nking.          
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e620: 64 65 66 6c 61 74 65 20 63 6f 64 65 20 77 68 65  deflate code whe
e630: 6e 20 6e 6f 74 20 6e 65 65 64 65 64 29 0a 20 20  n not needed).  
e640: 20 20 20 31 37 3a 20 4e 4f 5f 47 5a 49 50 20 2d     17: NO_GZIP -
e650: 2d 20 64 65 66 6c 61 74 65 20 63 61 6e 27 74 20  - deflate can't 
e660: 77 72 69 74 65 20 67 7a 69 70 20 73 74 72 65 61  write gzip strea
e670: 6d 73 2c 20 61 6e 64 20 69 6e 66 6c 61 74 65 20  ms, and inflate 
e680: 63 61 6e 27 74 20 64 65 74 65 63 74 0a 20 20 20  can't detect.   
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 20 61 6e 64 20 64 65 63 6f 64 65 20 67 7a 69 70   and decode gzip
e6b0: 20 73 74 72 65 61 6d 73 20 28 74 6f 20 61 76 6f   streams (to avo
e6c0: 69 64 20 6c 69 6e 6b 69 6e 67 20 63 72 63 20 63  id linking crc c
e6d0: 6f 64 65 29 0a 20 20 20 20 20 31 38 2d 31 39 3a  ode).     18-19:
e6e0: 20 30 20 28 72 65 73 65 72 76 65 64 29 0a 0a 20   0 (reserved).. 
e6f0: 20 20 20 4f 70 65 72 61 74 69 6f 6e 20 76 61 72     Operation var
e700: 69 61 74 69 6f 6e 73 20 28 63 68 61 6e 67 65 73  iations (changes
e710: 20 69 6e 20 6c 69 62 72 61 72 79 20 66 75 6e 63   in library func
e720: 74 69 6f 6e 61 6c 69 74 79 29 3a 0a 20 20 20 20  tionality):.    
e730: 20 32 30 3a 20 50 4b 5a 49 50 5f 42 55 47 5f 57   20: PKZIP_BUG_W
e740: 4f 52 4b 41 52 4f 55 4e 44 20 2d 2d 20 73 6c 69  ORKAROUND -- sli
e750: 67 68 74 6c 79 20 6d 6f 72 65 20 70 65 72 6d 69  ghtly more permi
e760: 73 73 69 76 65 20 69 6e 66 6c 61 74 65 0a 20 20  ssive inflate.  
e770: 20 20 20 32 31 3a 20 46 41 53 54 45 53 54 20 2d     21: FASTEST -
e780: 2d 20 64 65 66 6c 61 74 65 20 61 6c 67 6f 72 69  - deflate algori
e790: 74 68 6d 20 77 69 74 68 20 6f 6e 6c 79 20 6f 6e  thm with only on
e7a0: 65 2c 20 6c 6f 77 65 73 74 20 63 6f 6d 70 72 65  e, lowest compre
e7b0: 73 73 69 6f 6e 20 6c 65 76 65 6c 0a 20 20 20 20  ssion level.    
e7c0: 20 32 32 2c 32 33 3a 20 30 20 28 72 65 73 65 72   22,23: 0 (reser
e7d0: 76 65 64 29 0a 0a 20 20 20 20 54 68 65 20 73 70  ved)..    The sp
e7e0: 72 69 6e 74 66 20 76 61 72 69 61 6e 74 20 75 73  rintf variant us
e7f0: 65 64 20 62 79 20 67 7a 70 72 69 6e 74 66 20 28  ed by gzprintf (
e800: 7a 65 72 6f 20 69 73 20 62 65 73 74 29 3a 0a 20  zero is best):. 
e810: 20 20 20 20 32 34 3a 20 30 20 3d 20 76 73 2a 2c      24: 0 = vs*,
e820: 20 31 20 3d 20 73 2a 20 2d 2d 20 31 20 6d 65 61   1 = s* -- 1 mea
e830: 6e 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 30  ns limited to 20
e840: 20 61 72 67 75 6d 65 6e 74 73 20 61 66 74 65 72   arguments after
e850: 20 74 68 65 20 66 6f 72 6d 61 74 0a 20 20 20 20   the format.    
e860: 20 32 35 3a 20 30 20 3d 20 2a 6e 70 72 69 6e 74   25: 0 = *nprint
e870: 66 2c 20 31 20 3d 20 2a 70 72 69 6e 74 66 20 2d  f, 1 = *printf -
e880: 2d 20 31 20 6d 65 61 6e 73 20 67 7a 70 72 69 6e  - 1 means gzprin
e890: 74 66 28 29 20 6e 6f 74 20 73 65 63 75 72 65 21  tf() not secure!
e8a0: 0a 20 20 20 20 20 32 36 3a 20 30 20 3d 20 72 65  .     26: 0 = re
e8b0: 74 75 72 6e 73 20 76 61 6c 75 65 2c 20 31 20 3d  turns value, 1 =
e8c0: 20 76 6f 69 64 20 2d 2d 20 31 20 6d 65 61 6e 73   void -- 1 means
e8d0: 20 69 6e 66 65 72 72 65 64 20 73 74 72 69 6e 67   inferred string
e8e0: 20 6c 65 6e 67 74 68 20 72 65 74 75 72 6e 65 64   length returned
e8f0: 0a 0a 20 20 20 20 52 65 6d 61 69 6e 64 65 72 3a  ..    Remainder:
e900: 0a 20 20 20 20 20 32 37 2d 33 31 3a 20 30 20 28  .     27-31: 0 (
e910: 72 65 73 65 72 76 65 64 29 0a 20 2a 2f 0a 0a 23  reserved). */..#
e920: 69 66 6e 64 65 66 20 5a 5f 53 4f 4c 4f 0a 0a 20  ifndef Z_SOLO.. 
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e940: 20 20 20 20 20 20 20 2f 2a 20 75 74 69 6c 69 74         /* utilit
e950: 79 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 0a  y functions */..
e960: 2f 2a 0a 20 20 20 20 20 54 68 65 20 66 6f 6c 6c  /*.     The foll
e970: 6f 77 69 6e 67 20 75 74 69 6c 69 74 79 20 66 75  owing utility fu
e980: 6e 63 74 69 6f 6e 73 20 61 72 65 20 69 6d 70 6c  nctions are impl
e990: 65 6d 65 6e 74 65 64 20 6f 6e 20 74 6f 70 20 6f  emented on top o
e9a0: 66 20 74 68 65 20 62 61 73 69 63 0a 20 20 20 73  f the basic.   s
e9b0: 74 72 65 61 6d 2d 6f 72 69 65 6e 74 65 64 20 66  tream-oriented f
e9c0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 6f 20 73 69  unctions.  To si
e9d0: 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65 72  mplify the inter
e9e0: 66 61 63 65 2c 20 73 6f 6d 65 20 64 65 66 61 75  face, some defau
e9f0: 6c 74 20 6f 70 74 69 6f 6e 73 0a 20 20 20 61 72  lt options.   ar
ea00: 65 20 61 73 73 75 6d 65 64 20 28 63 6f 6d 70 72  e assumed (compr
ea10: 65 73 73 69 6f 6e 20 6c 65 76 65 6c 20 61 6e 64  ession level and
ea20: 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 73   memory usage, s
ea30: 74 61 6e 64 61 72 64 20 6d 65 6d 6f 72 79 20 61  tandard memory a
ea40: 6c 6c 6f 63 61 74 69 6f 6e 0a 20 20 20 66 75 6e  llocation.   fun
ea50: 63 74 69 6f 6e 73 29 2e 20 20 54 68 65 20 73 6f  ctions).  The so
ea60: 75 72 63 65 20 63 6f 64 65 20 6f 66 20 74 68 65  urce code of the
ea70: 73 65 20 75 74 69 6c 69 74 79 20 66 75 6e 63 74  se utility funct
ea80: 69 6f 6e 73 20 63 61 6e 20 62 65 20 6d 6f 64 69  ions can be modi
ea90: 66 69 65 64 20 69 66 0a 20 20 20 79 6f 75 20 6e  fied if.   you n
eaa0: 65 65 64 20 73 70 65 63 69 61 6c 20 6f 70 74 69  eed special opti
eab0: 6f 6e 73 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e  ons..*/..ZEXTERN
eac0: 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 63 6f 6d   int ZEXPORT com
ead0: 70 72 65 73 73 20 4f 46 28 28 42 79 74 65 66 20  press OF((Bytef 
eae0: 2a 64 65 73 74 2c 20 20 20 75 4c 6f 6e 67 66 20  *dest,   uLongf 
eaf0: 2a 64 65 73 74 4c 65 6e 2c 0a 20 20 20 20 20 20  *destLen,.      
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb10: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
eb20: 20 42 79 74 65 66 20 2a 73 6f 75 72 63 65 2c 20   Bytef *source, 
eb30: 75 4c 6f 6e 67 20 73 6f 75 72 63 65 4c 65 6e 29  uLong sourceLen)
eb40: 29 3b 0a 2f 2a 0a 20 20 20 20 20 43 6f 6d 70 72  );./*.     Compr
eb50: 65 73 73 65 73 20 74 68 65 20 73 6f 75 72 63 65  esses the source
eb60: 20 62 75 66 66 65 72 20 69 6e 74 6f 20 74 68 65   buffer into the
eb70: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
eb80: 66 65 72 2e 20 20 73 6f 75 72 63 65 4c 65 6e 20  fer.  sourceLen 
eb90: 69 73 0a 20 20 20 74 68 65 20 62 79 74 65 20 6c  is.   the byte l
eba0: 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 6f 75  ength of the sou
ebb0: 72 63 65 20 62 75 66 66 65 72 2e 20 20 55 70 6f  rce buffer.  Upo
ebc0: 6e 20 65 6e 74 72 79 2c 20 64 65 73 74 4c 65 6e  n entry, destLen
ebd0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 73 69   is the total si
ebe0: 7a 65 0a 20 20 20 6f 66 20 74 68 65 20 64 65 73  ze.   of the des
ebf0: 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c  tination buffer,
ec00: 20 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 61   which must be a
ec10: 74 20 6c 65 61 73 74 20 74 68 65 20 76 61 6c 75  t least the valu
ec20: 65 20 72 65 74 75 72 6e 65 64 20 62 79 0a 20 20  e returned by.  
ec30: 20 63 6f 6d 70 72 65 73 73 42 6f 75 6e 64 28 73   compressBound(s
ec40: 6f 75 72 63 65 4c 65 6e 29 2e 20 20 55 70 6f 6e  ourceLen).  Upon
ec50: 20 65 78 69 74 2c 20 64 65 73 74 4c 65 6e 20 69   exit, destLen i
ec60: 73 20 74 68 65 20 61 63 74 75 61 6c 20 73 69 7a  s the actual siz
ec70: 65 20 6f 66 20 74 68 65 0a 20 20 20 63 6f 6d 70  e of the.   comp
ec80: 72 65 73 73 65 64 20 62 75 66 66 65 72 2e 0a 0a  ressed buffer...
ec90: 20 20 20 20 20 63 6f 6d 70 72 65 73 73 20 72 65       compress re
eca0: 74 75 72 6e 73 20 5a 5f 4f 4b 20 69 66 20 73 75  turns Z_OK if su
ecb0: 63 63 65 73 73 2c 20 5a 5f 4d 45 4d 5f 45 52 52  ccess, Z_MEM_ERR
ecc0: 4f 52 20 69 66 20 74 68 65 72 65 20 77 61 73 20  OR if there was 
ecd0: 6e 6f 74 0a 20 20 20 65 6e 6f 75 67 68 20 6d 65  not.   enough me
ece0: 6d 6f 72 79 2c 20 5a 5f 42 55 46 5f 45 52 52 4f  mory, Z_BUF_ERRO
ecf0: 52 20 69 66 20 74 68 65 72 65 20 77 61 73 20 6e  R if there was n
ed00: 6f 74 20 65 6e 6f 75 67 68 20 72 6f 6f 6d 20 69  ot enough room i
ed10: 6e 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20 20  n the output.   
ed20: 62 75 66 66 65 72 2e 0a 2a 2f 0a 0a 5a 45 58 54  buffer..*/..ZEXT
ed30: 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f 52 54 20  ERN int ZEXPORT 
ed40: 63 6f 6d 70 72 65 73 73 32 20 4f 46 28 28 42 79  compress2 OF((By
ed50: 74 65 66 20 2a 64 65 73 74 2c 20 20 20 75 4c 6f  tef *dest,   uLo
ed60: 6e 67 66 20 2a 64 65 73 74 4c 65 6e 2c 0a 20 20  ngf *destLen,.  
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed90: 63 6f 6e 73 74 20 42 79 74 65 66 20 2a 73 6f 75  const Bytef *sou
eda0: 72 63 65 2c 20 75 4c 6f 6e 67 20 73 6f 75 72 63  rce, uLong sourc
edb0: 65 4c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20  eLen,.          
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edd0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65          int leve
ede0: 6c 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 43 6f 6d  l));./*.     Com
edf0: 70 72 65 73 73 65 73 20 74 68 65 20 73 6f 75 72  presses the sour
ee00: 63 65 20 62 75 66 66 65 72 20 69 6e 74 6f 20 74  ce buffer into t
ee10: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  he destination b
ee20: 75 66 66 65 72 2e 20 20 54 68 65 20 6c 65 76 65  uffer.  The leve
ee30: 6c 0a 20 20 20 70 61 72 61 6d 65 74 65 72 20 68  l.   parameter h
ee40: 61 73 20 74 68 65 20 73 61 6d 65 20 6d 65 61 6e  as the same mean
ee50: 69 6e 67 20 61 73 20 69 6e 20 64 65 66 6c 61 74  ing as in deflat
ee60: 65 49 6e 69 74 2e 20 20 73 6f 75 72 63 65 4c 65  eInit.  sourceLe
ee70: 6e 20 69 73 20 74 68 65 20 62 79 74 65 0a 20 20  n is the byte.  
ee80: 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
ee90: 6f 75 72 63 65 20 62 75 66 66 65 72 2e 20 20 55  ource buffer.  U
eea0: 70 6f 6e 20 65 6e 74 72 79 2c 20 64 65 73 74 4c  pon entry, destL
eeb0: 65 6e 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  en is the total 
eec0: 73 69 7a 65 20 6f 66 20 74 68 65 0a 20 20 20 64  size of the.   d
eed0: 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65  estination buffe
eee0: 72 2c 20 77 68 69 63 68 20 6d 75 73 74 20 62 65  r, which must be
eef0: 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 76 61   at least the va
ef00: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 0a  lue returned by.
ef10: 20 20 20 63 6f 6d 70 72 65 73 73 42 6f 75 6e 64     compressBound
ef20: 28 73 6f 75 72 63 65 4c 65 6e 29 2e 20 20 55 70  (sourceLen).  Up
ef30: 6f 6e 20 65 78 69 74 2c 20 64 65 73 74 4c 65 6e  on exit, destLen
ef40: 20 69 73 20 74 68 65 20 61 63 74 75 61 6c 20 73   is the actual s
ef50: 69 7a 65 20 6f 66 20 74 68 65 0a 20 20 20 63 6f  ize of the.   co
ef60: 6d 70 72 65 73 73 65 64 20 62 75 66 66 65 72 2e  mpressed buffer.
ef70: 0a 0a 20 20 20 20 20 63 6f 6d 70 72 65 73 73 32  ..     compress2
ef80: 20 72 65 74 75 72 6e 73 20 5a 5f 4f 4b 20 69 66   returns Z_OK if
ef90: 20 73 75 63 63 65 73 73 2c 20 5a 5f 4d 45 4d 5f   success, Z_MEM_
efa0: 45 52 52 4f 52 20 69 66 20 74 68 65 72 65 20 77  ERROR if there w
efb0: 61 73 20 6e 6f 74 20 65 6e 6f 75 67 68 0a 20 20  as not enough.  
efc0: 20 6d 65 6d 6f 72 79 2c 20 5a 5f 42 55 46 5f 45   memory, Z_BUF_E
efd0: 52 52 4f 52 20 69 66 20 74 68 65 72 65 20 77 61  RROR if there wa
efe0: 73 20 6e 6f 74 20 65 6e 6f 75 67 68 20 72 6f 6f  s not enough roo
eff0: 6d 20 69 6e 20 74 68 65 20 6f 75 74 70 75 74 20  m in the output 
f000: 62 75 66 66 65 72 2c 0a 20 20 20 5a 5f 53 54 52  buffer,.   Z_STR
f010: 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 74 68 65  EAM_ERROR if the
f020: 20 6c 65 76 65 6c 20 70 61 72 61 6d 65 74 65 72   level parameter
f030: 20 69 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2f 0a   is invalid..*/.
f040: 0a 5a 45 58 54 45 52 4e 20 75 4c 6f 6e 67 20 5a  .ZEXTERN uLong Z
f050: 45 58 50 4f 52 54 20 63 6f 6d 70 72 65 73 73 42  EXPORT compressB
f060: 6f 75 6e 64 20 4f 46 28 28 75 4c 6f 6e 67 20 73  ound OF((uLong s
f070: 6f 75 72 63 65 4c 65 6e 29 29 3b 0a 2f 2a 0a 20  ourceLen));./*. 
f080: 20 20 20 20 63 6f 6d 70 72 65 73 73 42 6f 75 6e      compressBoun
f090: 64 28 29 20 72 65 74 75 72 6e 73 20 61 6e 20 75  d() returns an u
f0a0: 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68  pper bound on th
f0b0: 65 20 63 6f 6d 70 72 65 73 73 65 64 20 73 69 7a  e compressed siz
f0c0: 65 20 61 66 74 65 72 0a 20 20 20 63 6f 6d 70 72  e after.   compr
f0d0: 65 73 73 28 29 20 6f 72 20 63 6f 6d 70 72 65 73  ess() or compres
f0e0: 73 32 28 29 20 6f 6e 20 73 6f 75 72 63 65 4c 65  s2() on sourceLe
f0f0: 6e 20 62 79 74 65 73 2e 20 20 49 74 20 77 6f 75  n bytes.  It wou
f100: 6c 64 20 62 65 20 75 73 65 64 20 62 65 66 6f 72  ld be used befor
f110: 65 20 61 0a 20 20 20 63 6f 6d 70 72 65 73 73 28  e a.   compress(
f120: 29 20 6f 72 20 63 6f 6d 70 72 65 73 73 32 28 29  ) or compress2()
f130: 20 63 61 6c 6c 20 74 6f 20 61 6c 6c 6f 63 61 74   call to allocat
f140: 65 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  e the destinatio
f150: 6e 20 62 75 66 66 65 72 2e 0a 2a 2f 0a 0a 5a 45  n buffer..*/..ZE
f160: 58 54 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f 52  XTERN int ZEXPOR
f170: 54 20 75 6e 63 6f 6d 70 72 65 73 73 20 4f 46 28  T uncompress OF(
f180: 28 42 79 74 65 66 20 2a 64 65 73 74 2c 20 20 20  (Bytef *dest,   
f190: 75 4c 6f 6e 67 66 20 2a 64 65 73 74 4c 65 6e 2c  uLongf *destLen,
f1a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1c0: 20 20 20 20 63 6f 6e 73 74 20 42 79 74 65 66 20      const Bytef 
f1d0: 2a 73 6f 75 72 63 65 2c 20 75 4c 6f 6e 67 20 73  *source, uLong s
f1e0: 6f 75 72 63 65 4c 65 6e 29 29 3b 0a 2f 2a 0a 20  ourceLen));./*. 
f1f0: 20 20 20 20 44 65 63 6f 6d 70 72 65 73 73 65 73      Decompresses
f200: 20 74 68 65 20 73 6f 75 72 63 65 20 62 75 66 66   the source buff
f210: 65 72 20 69 6e 74 6f 20 74 68 65 20 64 65 73 74  er into the dest
f220: 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2e 20  ination buffer. 
f230: 20 73 6f 75 72 63 65 4c 65 6e 20 69 73 0a 20 20   sourceLen is.  
f240: 20 74 68 65 20 62 79 74 65 20 6c 65 6e 67 74 68   the byte length
f250: 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 62   of the source b
f260: 75 66 66 65 72 2e 20 20 55 70 6f 6e 20 65 6e 74  uffer.  Upon ent
f270: 72 79 2c 20 64 65 73 74 4c 65 6e 20 69 73 20 74  ry, destLen is t
f280: 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 0a 20 20  he total size.  
f290: 20 6f 66 20 74 68 65 20 64 65 73 74 69 6e 61 74   of the destinat
f2a0: 69 6f 6e 20 62 75 66 66 65 72 2c 20 77 68 69 63  ion buffer, whic
f2b0: 68 20 6d 75 73 74 20 62 65 20 6c 61 72 67 65 20  h must be large 
f2c0: 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 74  enough to hold t
f2d0: 68 65 20 65 6e 74 69 72 65 0a 20 20 20 75 6e 63  he entire.   unc
f2e0: 6f 6d 70 72 65 73 73 65 64 20 64 61 74 61 2e 20  ompressed data. 
f2f0: 20 28 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68   (The size of th
f300: 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 64  e uncompressed d
f310: 61 74 61 20 6d 75 73 74 20 68 61 76 65 20 62 65  ata must have be
f320: 65 6e 20 73 61 76 65 64 0a 20 20 20 70 72 65 76  en saved.   prev
f330: 69 6f 75 73 6c 79 20 62 79 20 74 68 65 20 63 6f  iously by the co
f340: 6d 70 72 65 73 73 6f 72 20 61 6e 64 20 74 72 61  mpressor and tra
f350: 6e 73 6d 69 74 74 65 64 20 74 6f 20 74 68 65 20  nsmitted to the 
f360: 64 65 63 6f 6d 70 72 65 73 73 6f 72 20 62 79 20  decompressor by 
f370: 73 6f 6d 65 0a 20 20 20 6d 65 63 68 61 6e 69 73  some.   mechanis
f380: 6d 20 6f 75 74 73 69 64 65 20 74 68 65 20 73 63  m outside the sc
f390: 6f 70 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 70  ope of this comp
f3a0: 72 65 73 73 69 6f 6e 20 6c 69 62 72 61 72 79 2e  ression library.
f3b0: 29 20 55 70 6f 6e 20 65 78 69 74 2c 20 64 65 73  ) Upon exit, des
f3c0: 74 4c 65 6e 0a 20 20 20 69 73 20 74 68 65 20 61  tLen.   is the a
f3d0: 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  ctual size of th
f3e0: 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 62  e uncompressed b
f3f0: 75 66 66 65 72 2e 0a 0a 20 20 20 20 20 75 6e 63  uffer...     unc
f400: 6f 6d 70 72 65 73 73 20 72 65 74 75 72 6e 73 20  ompress returns 
f410: 5a 5f 4f 4b 20 69 66 20 73 75 63 63 65 73 73 2c  Z_OK if success,
f420: 20 5a 5f 4d 45 4d 5f 45 52 52 4f 52 20 69 66 20   Z_MEM_ERROR if 
f430: 74 68 65 72 65 20 77 61 73 20 6e 6f 74 0a 20 20  there was not.  
f440: 20 65 6e 6f 75 67 68 20 6d 65 6d 6f 72 79 2c 20   enough memory, 
f450: 5a 5f 42 55 46 5f 45 52 52 4f 52 20 69 66 20 74  Z_BUF_ERROR if t
f460: 68 65 72 65 20 77 61 73 20 6e 6f 74 20 65 6e 6f  here was not eno
f470: 75 67 68 20 72 6f 6f 6d 20 69 6e 20 74 68 65 20  ugh room in the 
f480: 6f 75 74 70 75 74 0a 20 20 20 62 75 66 66 65 72  output.   buffer
f490: 2c 20 6f 72 20 5a 5f 44 41 54 41 5f 45 52 52 4f  , or Z_DATA_ERRO
f4a0: 52 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 64  R if the input d
f4b0: 61 74 61 20 77 61 73 20 63 6f 72 72 75 70 74 65  ata was corrupte
f4c0: 64 20 6f 72 20 69 6e 63 6f 6d 70 6c 65 74 65 2e  d or incomplete.
f4d0: 20 20 49 6e 0a 20 20 20 74 68 65 20 63 61 73 65    In.   the case
f4e0: 20 77 68 65 72 65 20 74 68 65 72 65 20 69 73 20   where there is 
f4f0: 6e 6f 74 20 65 6e 6f 75 67 68 20 72 6f 6f 6d 2c  not enough room,
f500: 20 75 6e 63 6f 6d 70 72 65 73 73 28 29 20 77 69   uncompress() wi
f510: 6c 6c 20 66 69 6c 6c 20 74 68 65 20 6f 75 74 70  ll fill the outp
f520: 75 74 0a 20 20 20 62 75 66 66 65 72 20 77 69 74  ut.   buffer wit
f530: 68 20 74 68 65 20 75 6e 63 6f 6d 70 72 65 73 73  h the uncompress
f540: 65 64 20 64 61 74 61 20 75 70 20 74 6f 20 74 68  ed data up to th
f550: 61 74 20 70 6f 69 6e 74 2e 0a 2a 2f 0a 0a 20 20  at point..*/..  
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f570: 20 20 20 20 20 20 2f 2a 20 67 7a 69 70 20 66 69        /* gzip fi
f580: 6c 65 20 61 63 63 65 73 73 20 66 75 6e 63 74 69  le access functi
f590: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 20 20 20 20 20  ons */../*.     
f5a0: 54 68 69 73 20 6c 69 62 72 61 72 79 20 73 75 70  This library sup
f5b0: 70 6f 72 74 73 20 72 65 61 64 69 6e 67 20 61 6e  ports reading an
f5c0: 64 20 77 72 69 74 69 6e 67 20 66 69 6c 65 73 20  d writing files 
f5d0: 69 6e 20 67 7a 69 70 20 28 2e 67 7a 29 20 66 6f  in gzip (.gz) fo
f5e0: 72 6d 61 74 20 77 69 74 68 0a 20 20 20 61 6e 20  rmat with.   an 
f5f0: 69 6e 74 65 72 66 61 63 65 20 73 69 6d 69 6c 61  interface simila
f600: 72 20 74 6f 20 74 68 61 74 20 6f 66 20 73 74 64  r to that of std
f610: 69 6f 2c 20 75 73 69 6e 67 20 74 68 65 20 66 75  io, using the fu
f620: 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 73 74 61  nctions that sta
f630: 72 74 20 77 69 74 68 0a 20 20 20 22 67 7a 22 2e  rt with.   "gz".
f640: 20 20 54 68 65 20 67 7a 69 70 20 66 6f 72 6d 61    The gzip forma
f650: 74 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  t is different f
f660: 72 6f 6d 20 74 68 65 20 7a 6c 69 62 20 66 6f 72  rom the zlib for
f670: 6d 61 74 2e 20 20 67 7a 69 70 20 69 73 20 61 20  mat.  gzip is a 
f680: 67 7a 69 70 0a 20 20 20 77 72 61 70 70 65 72 2c  gzip.   wrapper,
f690: 20 64 6f 63 75 6d 65 6e 74 65 64 20 69 6e 20 52   documented in R
f6a0: 46 43 20 31 39 35 32 2c 20 77 72 61 70 70 65 64  FC 1952, wrapped
f6b0: 20 61 72 6f 75 6e 64 20 61 20 64 65 66 6c 61 74   around a deflat
f6c0: 65 20 73 74 72 65 61 6d 2e 0a 2a 2f 0a 0a 74 79  e stream..*/..ty
f6d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 67 7a 46  pedef struct gzF
f6e0: 69 6c 65 5f 73 20 2a 67 7a 46 69 6c 65 3b 20 20  ile_s *gzFile;  
f6f0: 20 20 2f 2a 20 73 65 6d 69 2d 6f 70 61 71 75 65    /* semi-opaque
f700: 20 67 7a 69 70 20 66 69 6c 65 20 64 65 73 63 72   gzip file descr
f710: 69 70 74 6f 72 20 2a 2f 0a 0a 2f 2a 0a 5a 45 58  iptor */../*.ZEX
f720: 54 45 52 4e 20 67 7a 46 69 6c 65 20 5a 45 58 50  TERN gzFile ZEXP
f730: 4f 52 54 20 67 7a 6f 70 65 6e 20 4f 46 28 28 63  ORT gzopen OF((c
f740: 6f 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68 2c  onst char *path,
f750: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64   const char *mod
f760: 65 29 29 3b 0a 0a 20 20 20 20 20 4f 70 65 6e 73  e));..     Opens
f770: 20 61 20 67 7a 69 70 20 28 2e 67 7a 29 20 66 69   a gzip (.gz) fi
f780: 6c 65 20 66 6f 72 20 72 65 61 64 69 6e 67 20 6f  le for reading o
f790: 72 20 77 72 69 74 69 6e 67 2e 20 20 54 68 65 20  r writing.  The 
f7a0: 6d 6f 64 65 20 70 61 72 61 6d 65 74 65 72 20 69  mode parameter i
f7b0: 73 20 61 73 0a 20 20 20 69 6e 20 66 6f 70 65 6e  s as.   in fopen
f7c0: 20 28 22 72 62 22 20 6f 72 20 22 77 62 22 29 20   ("rb" or "wb") 
f7d0: 62 75 74 20 63 61 6e 20 61 6c 73 6f 20 69 6e 63  but can also inc
f7e0: 6c 75 64 65 20 61 20 63 6f 6d 70 72 65 73 73 69  lude a compressi
f7f0: 6f 6e 20 6c 65 76 65 6c 20 28 22 77 62 39 22 29  on level ("wb9")
f800: 20 6f 72 0a 20 20 20 61 20 73 74 72 61 74 65 67   or.   a strateg
f810: 79 3a 20 27 66 27 20 66 6f 72 20 66 69 6c 74 65  y: 'f' for filte
f820: 72 65 64 20 64 61 74 61 20 61 73 20 69 6e 20 22  red data as in "
f830: 77 62 36 66 22 2c 20 27 68 27 20 66 6f 72 20 48  wb6f", 'h' for H
f840: 75 66 66 6d 61 6e 2d 6f 6e 6c 79 0a 20 20 20 63  uffman-only.   c
f850: 6f 6d 70 72 65 73 73 69 6f 6e 20 61 73 20 69 6e  ompression as in
f860: 20 22 77 62 31 68 22 2c 20 27 52 27 20 66 6f 72   "wb1h", 'R' for
f870: 20 72 75 6e 2d 6c 65 6e 67 74 68 20 65 6e 63 6f   run-length enco
f880: 64 69 6e 67 20 61 73 20 69 6e 20 22 77 62 31 52  ding as in "wb1R
f890: 22 2c 20 6f 72 20 27 46 27 0a 20 20 20 66 6f 72  ", or 'F'.   for
f8a0: 20 66 69 78 65 64 20 63 6f 64 65 20 63 6f 6d 70   fixed code comp
f8b0: 72 65 73 73 69 6f 6e 20 61 73 20 69 6e 20 22 77  ression as in "w
f8c0: 62 39 46 22 2e 20 20 28 53 65 65 20 74 68 65 20  b9F".  (See the 
f8d0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 20  description of. 
f8e0: 20 20 64 65 66 6c 61 74 65 49 6e 69 74 32 20 66    deflateInit2 f
f8f0: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74  or more informat
f900: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 73 74  ion about the st
f910: 72 61 74 65 67 79 20 70 61 72 61 6d 65 74 65 72  rategy parameter
f920: 2e 29 20 20 27 54 27 20 77 69 6c 6c 0a 20 20 20  .)  'T' will.   
f930: 72 65 71 75 65 73 74 20 74 72 61 6e 73 70 61 72  request transpar
f940: 65 6e 74 20 77 72 69 74 69 6e 67 20 6f 72 20 61  ent writing or a
f950: 70 70 65 6e 64 69 6e 67 20 77 69 74 68 20 6e 6f  ppending with no
f960: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 61 6e 64   compression and
f970: 20 6e 6f 74 20 75 73 69 6e 67 0a 20 20 20 74 68   not using.   th
f980: 65 20 67 7a 69 70 20 66 6f 72 6d 61 74 2e 0a 0a  e gzip format...
f990: 20 20 20 20 20 22 61 22 20 63 61 6e 20 62 65 20       "a" can be 
f9a0: 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f 66 20  used instead of 
f9b0: 22 77 22 20 74 6f 20 72 65 71 75 65 73 74 20 74  "w" to request t
f9c0: 68 61 74 20 74 68 65 20 67 7a 69 70 20 73 74 72  hat the gzip str
f9d0: 65 61 6d 20 74 68 61 74 20 77 69 6c 6c 0a 20 20  eam that will.  
f9e0: 20 62 65 20 77 72 69 74 74 65 6e 20 62 65 20 61   be written be a
f9f0: 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 66  ppended to the f
fa00: 69 6c 65 2e 20 20 22 2b 22 20 77 69 6c 6c 20 72  ile.  "+" will r
fa10: 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f  esult in an erro
fa20: 72 2c 20 73 69 6e 63 65 0a 20 20 20 72 65 61 64  r, since.   read
fa30: 69 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20  ing and writing 
fa40: 74 6f 20 74 68 65 20 73 61 6d 65 20 67 7a 69 70  to the same gzip
fa50: 20 66 69 6c 65 20 69 73 20 6e 6f 74 20 73 75 70   file is not sup
fa60: 70 6f 72 74 65 64 2e 20 20 54 68 65 20 61 64 64  ported.  The add
fa70: 69 74 69 6f 6e 20 6f 66 0a 20 20 20 22 78 22 20  ition of.   "x" 
fa80: 77 68 65 6e 20 77 72 69 74 69 6e 67 20 77 69 6c  when writing wil
fa90: 6c 20 63 72 65 61 74 65 20 74 68 65 20 66 69 6c  l create the fil
faa0: 65 20 65 78 63 6c 75 73 69 76 65 6c 79 2c 20 77  e exclusively, w
fab0: 68 69 63 68 20 66 61 69 6c 73 20 69 66 20 74 68  hich fails if th
fac0: 65 20 66 69 6c 65 0a 20 20 20 61 6c 72 65 61 64  e file.   alread
fad0: 79 20 65 78 69 73 74 73 2e 20 20 4f 6e 20 73 79  y exists.  On sy
fae0: 73 74 65 6d 73 20 74 68 61 74 20 73 75 70 70 6f  stems that suppo
faf0: 72 74 20 69 74 2c 20 74 68 65 20 61 64 64 69 74  rt it, the addit
fb00: 69 6f 6e 20 6f 66 20 22 65 22 20 77 68 65 6e 0a  ion of "e" when.
fb10: 20 20 20 72 65 61 64 69 6e 67 20 6f 72 20 77 72     reading or wr
fb20: 69 74 69 6e 67 20 77 69 6c 6c 20 73 65 74 20 74  iting will set t
fb30: 68 65 20 66 6c 61 67 20 74 6f 20 63 6c 6f 73 65  he flag to close
fb40: 20 74 68 65 20 66 69 6c 65 20 6f 6e 20 61 6e 20   the file on an 
fb50: 65 78 65 63 76 65 28 29 20 63 61 6c 6c 2e 0a 0a  execve() call...
fb60: 20 20 20 20 20 54 68 65 73 65 20 66 75 6e 63 74       These funct
fb70: 69 6f 6e 73 2c 20 61 73 20 77 65 6c 6c 20 61 73  ions, as well as
fb80: 20 67 7a 69 70 2c 20 77 69 6c 6c 20 72 65 61 64   gzip, will read
fb90: 20 61 6e 64 20 64 65 63 6f 64 65 20 61 20 73 65   and decode a se
fba0: 71 75 65 6e 63 65 20 6f 66 20 67 7a 69 70 0a 20  quence of gzip. 
fbb0: 20 20 73 74 72 65 61 6d 73 20 69 6e 20 61 20 66    streams in a f
fbc0: 69 6c 65 2e 20 20 54 68 65 20 61 70 70 65 6e 64  ile.  The append
fbd0: 20 66 75 6e 63 74 69 6f 6e 20 6f 66 20 67 7a 6f   function of gzo
fbe0: 70 65 6e 28 29 20 63 61 6e 20 62 65 20 75 73 65  pen() can be use
fbf0: 64 20 74 6f 20 63 72 65 61 74 65 0a 20 20 20 73  d to create.   s
fc00: 75 63 68 20 61 20 66 69 6c 65 2e 20 20 28 41 6c  uch a file.  (Al
fc10: 73 6f 20 73 65 65 20 67 7a 66 6c 75 73 68 28 29  so see gzflush()
fc20: 20 66 6f 72 20 61 6e 6f 74 68 65 72 20 77 61 79   for another way
fc30: 20 74 6f 20 64 6f 20 74 68 69 73 2e 29 20 20 57   to do this.)  W
fc40: 68 65 6e 0a 20 20 20 61 70 70 65 6e 64 69 6e 67  hen.   appending
fc50: 2c 20 67 7a 6f 70 65 6e 20 64 6f 65 73 20 6e 6f  , gzopen does no
fc60: 74 20 74 65 73 74 20 77 68 65 74 68 65 72 20 74  t test whether t
fc70: 68 65 20 66 69 6c 65 20 62 65 67 69 6e 73 20 77  he file begins w
fc80: 69 74 68 20 61 20 67 7a 69 70 20 73 74 72 65 61  ith a gzip strea
fc90: 6d 2c 0a 20 20 20 6e 6f 72 20 64 6f 65 73 20 69  m,.   nor does i
fca0: 74 20 6c 6f 6f 6b 20 66 6f 72 20 74 68 65 20 65  t look for the e
fcb0: 6e 64 20 6f 66 20 74 68 65 20 67 7a 69 70 20 73  nd of the gzip s
fcc0: 74 72 65 61 6d 73 20 74 6f 20 62 65 67 69 6e 20  treams to begin 
fcd0: 61 70 70 65 6e 64 69 6e 67 2e 20 20 67 7a 6f 70  appending.  gzop
fce0: 65 6e 0a 20 20 20 77 69 6c 6c 20 73 69 6d 70 6c  en.   will simpl
fcf0: 79 20 61 70 70 65 6e 64 20 61 20 67 7a 69 70 20  y append a gzip 
fd00: 73 74 72 65 61 6d 20 74 6f 20 74 68 65 20 65 78  stream to the ex
fd10: 69 73 74 69 6e 67 20 66 69 6c 65 2e 0a 0a 20 20  isting file...  
fd20: 20 20 20 67 7a 6f 70 65 6e 20 63 61 6e 20 62 65     gzopen can be
fd30: 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
fd40: 66 69 6c 65 20 77 68 69 63 68 20 69 73 20 6e 6f  file which is no
fd50: 74 20 69 6e 20 67 7a 69 70 20 66 6f 72 6d 61 74  t in gzip format
fd60: 3b 20 69 6e 20 74 68 69 73 0a 20 20 20 63 61 73  ; in this.   cas
fd70: 65 20 67 7a 72 65 61 64 20 77 69 6c 6c 20 64 69  e gzread will di
fd80: 72 65 63 74 6c 79 20 72 65 61 64 20 66 72 6f 6d  rectly read from
fd90: 20 74 68 65 20 66 69 6c 65 20 77 69 74 68 6f 75   the file withou
fda0: 74 20 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e 2e  t decompression.
fdb0: 20 20 57 68 65 6e 0a 20 20 20 72 65 61 64 69 6e    When.   readin
fdc0: 67 2c 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20  g, this will be 
fdd0: 64 65 74 65 63 74 65 64 20 61 75 74 6f 6d 61 74  detected automat
fde0: 69 63 61 6c 6c 79 20 62 79 20 6c 6f 6f 6b 69 6e  ically by lookin
fdf0: 67 20 66 6f 72 20 74 68 65 20 6d 61 67 69 63 20  g for the magic 
fe00: 74 77 6f 2d 0a 20 20 20 62 79 74 65 20 67 7a 69  two-.   byte gzi
fe10: 70 20 68 65 61 64 65 72 2e 0a 0a 20 20 20 20 20  p header...     
fe20: 67 7a 6f 70 65 6e 20 72 65 74 75 72 6e 73 20 4e  gzopen returns N
fe30: 55 4c 4c 20 69 66 20 74 68 65 20 66 69 6c 65 20  ULL if the file 
fe40: 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 6f 70 65  could not be ope
fe50: 6e 65 64 2c 20 69 66 20 74 68 65 72 65 20 77 61  ned, if there wa
fe60: 73 0a 20 20 20 69 6e 73 75 66 66 69 63 69 65 6e  s.   insufficien
fe70: 74 20 6d 65 6d 6f 72 79 20 74 6f 20 61 6c 6c 6f  t memory to allo
fe80: 63 61 74 65 20 74 68 65 20 67 7a 46 69 6c 65 20  cate the gzFile 
fe90: 73 74 61 74 65 2c 20 6f 72 20 69 66 20 61 6e 20  state, or if an 
fea0: 69 6e 76 61 6c 69 64 20 6d 6f 64 65 20 77 61 73  invalid mode was
feb0: 0a 20 20 20 73 70 65 63 69 66 69 65 64 20 28 61  .   specified (a
fec0: 6e 20 27 72 27 2c 20 27 77 27 2c 20 6f 72 20 27  n 'r', 'w', or '
fed0: 61 27 20 77 61 73 20 6e 6f 74 20 70 72 6f 76 69  a' was not provi
fee0: 64 65 64 2c 20 6f 72 20 27 2b 27 20 77 61 73 20  ded, or '+' was 
fef0: 70 72 6f 76 69 64 65 64 29 2e 0a 20 20 20 65 72  provided)..   er
ff00: 72 6e 6f 20 63 61 6e 20 62 65 20 63 68 65 63 6b  rno can be check
ff10: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
ff20: 69 66 20 74 68 65 20 72 65 61 73 6f 6e 20 67 7a  if the reason gz
ff30: 6f 70 65 6e 20 66 61 69 6c 65 64 20 77 61 73 20  open failed was 
ff40: 74 68 61 74 20 74 68 65 0a 20 20 20 66 69 6c 65  that the.   file
ff50: 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 6f 70   could not be op
ff60: 65 6e 65 64 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52  ened..*/..ZEXTER
ff70: 4e 20 67 7a 46 69 6c 65 20 5a 45 58 50 4f 52 54  N gzFile ZEXPORT
ff80: 20 67 7a 64 6f 70 65 6e 20 4f 46 28 28 69 6e 74   gzdopen OF((int
ff90: 20 66 64 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   fd, const char 
ffa0: 2a 6d 6f 64 65 29 29 3b 0a 2f 2a 0a 20 20 20 20  *mode));./*.    
ffb0: 20 67 7a 64 6f 70 65 6e 20 61 73 73 6f 63 69 61   gzdopen associa
ffc0: 74 65 73 20 61 20 67 7a 46 69 6c 65 20 77 69 74  tes a gzFile wit
ffd0: 68 20 74 68 65 20 66 69 6c 65 20 64 65 73 63 72  h the file descr
ffe0: 69 70 74 6f 72 20 66 64 2e 20 20 46 69 6c 65 20  iptor fd.  File 
fff0: 64 65 73 63 72 69 70 74 6f 72 73 0a 20 20 20 61  descriptors.   a
10000 72 65 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  re obtained from
10010 20 63 61 6c 6c 73 20 6c 69 6b 65 20 6f 70 65 6e   calls like open
10020 2c 20 64 75 70 2c 20 63 72 65 61 74 2c 20 70 69  , dup, creat, pi
10030 70 65 20 6f 72 20 66 69 6c 65 6e 6f 20 28 69 66  pe or fileno (if
10040 20 74 68 65 20 66 69 6c 65 0a 20 20 20 68 61 73   the file.   has
10050 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79   been previously
10060 20 6f 70 65 6e 65 64 20 77 69 74 68 20 66 6f 70   opened with fop
10070 65 6e 29 2e 20 20 54 68 65 20 6d 6f 64 65 20 70  en).  The mode p
10080 61 72 61 6d 65 74 65 72 20 69 73 20 61 73 20 69  arameter is as i
10090 6e 20 67 7a 6f 70 65 6e 2e 0a 0a 20 20 20 20 20  n gzopen...     
100a0 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 6f 66  The next call of
100b0 20 67 7a 63 6c 6f 73 65 20 6f 6e 20 74 68 65 20   gzclose on the 
100c0 72 65 74 75 72 6e 65 64 20 67 7a 46 69 6c 65 20  returned gzFile 
100d0 77 69 6c 6c 20 61 6c 73 6f 20 63 6c 6f 73 65 20  will also close 
100e0 74 68 65 20 66 69 6c 65 0a 20 20 20 64 65 73 63  the file.   desc
100f0 72 69 70 74 6f 72 20 66 64 2c 20 6a 75 73 74 20  riptor fd, just 
10100 6c 69 6b 65 20 66 63 6c 6f 73 65 28 66 64 6f 70  like fclose(fdop
10110 65 6e 28 66 64 2c 20 6d 6f 64 65 29 29 20 63 6c  en(fd, mode)) cl
10120 6f 73 65 73 20 74 68 65 20 66 69 6c 65 20 64 65  oses the file de
10130 73 63 72 69 70 74 6f 72 0a 20 20 20 66 64 2e 20  scriptor.   fd. 
10140 20 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20   If you want to 
10150 6b 65 65 70 20 66 64 20 6f 70 65 6e 2c 20 75 73  keep fd open, us
10160 65 20 66 64 20 3d 20 64 75 70 28 66 64 5f 6b 65  e fd = dup(fd_ke
10170 65 70 29 3b 20 67 7a 20 3d 20 67 7a 64 6f 70 65  ep); gz = gzdope
10180 6e 28 66 64 2c 0a 20 20 20 6d 6f 64 65 29 3b 2e  n(fd,.   mode);.
10190 20 20 54 68 65 20 64 75 70 6c 69 63 61 74 65 64    The duplicated
101a0 20 64 65 73 63 72 69 70 74 6f 72 20 73 68 6f 75   descriptor shou
101b0 6c 64 20 62 65 20 73 61 76 65 64 20 74 6f 20 61  ld be saved to a
101c0 76 6f 69 64 20 61 20 6c 65 61 6b 2c 20 73 69 6e  void a leak, sin
101d0 63 65 0a 20 20 20 67 7a 64 6f 70 65 6e 20 64 6f  ce.   gzdopen do
101e0 65 73 20 6e 6f 74 20 63 6c 6f 73 65 20 66 64 20  es not close fd 
101f0 69 66 20 69 74 20 66 61 69 6c 73 2e 20 20 49 66  if it fails.  If
10200 20 79 6f 75 20 61 72 65 20 75 73 69 6e 67 20 66   you are using f
10210 69 6c 65 6e 6f 28 29 20 74 6f 20 67 65 74 20 74  ileno() to get t
10220 68 65 0a 20 20 20 66 69 6c 65 20 64 65 73 63 72  he.   file descr
10230 69 70 74 6f 72 20 66 72 6f 6d 20 61 20 46 49 4c  iptor from a FIL
10240 45 20 2a 2c 20 74 68 65 6e 20 79 6f 75 20 77 69  E *, then you wi
10250 6c 6c 20 68 61 76 65 20 74 6f 20 75 73 65 20 64  ll have to use d
10260 75 70 28 29 20 74 6f 20 61 76 6f 69 64 0a 20 20  up() to avoid.  
10270 20 64 6f 75 62 6c 65 2d 63 6c 6f 73 65 28 29 69   double-close()i
10280 6e 67 20 74 68 65 20 66 69 6c 65 20 64 65 73 63  ng the file desc
10290 72 69 70 74 6f 72 2e 20 20 42 6f 74 68 20 67 7a  riptor.  Both gz
102a0 63 6c 6f 73 65 28 29 20 61 6e 64 20 66 63 6c 6f  close() and fclo
102b0 73 65 28 29 20 77 69 6c 6c 0a 20 20 20 63 6c 6f  se() will.   clo
102c0 73 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  se the associate
102d0 64 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f  d file descripto
102e0 72 2c 20 73 6f 20 74 68 65 79 20 6e 65 65 64 20  r, so they need 
102f0 74 6f 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  to have differen
10300 74 20 66 69 6c 65 0a 20 20 20 64 65 73 63 72 69  t file.   descri
10310 70 74 6f 72 73 2e 0a 0a 20 20 20 20 20 67 7a 64  ptors...     gzd
10320 6f 70 65 6e 20 72 65 74 75 72 6e 73 20 4e 55 4c  open returns NUL
10330 4c 20 69 66 20 74 68 65 72 65 20 77 61 73 20 69  L if there was i
10340 6e 73 75 66 66 69 63 69 65 6e 74 20 6d 65 6d 6f  nsufficient memo
10350 72 79 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ry to allocate t
10360 68 65 0a 20 20 20 67 7a 46 69 6c 65 20 73 74 61  he.   gzFile sta
10370 74 65 2c 20 69 66 20 61 6e 20 69 6e 76 61 6c 69  te, if an invali
10380 64 20 6d 6f 64 65 20 77 61 73 20 73 70 65 63 69  d mode was speci
10390 66 69 65 64 20 28 61 6e 20 27 72 27 2c 20 27 77  fied (an 'r', 'w
103a0 27 2c 20 6f 72 20 27 61 27 20 77 61 73 20 6e 6f  ', or 'a' was no
103b0 74 0a 20 20 20 70 72 6f 76 69 64 65 64 2c 20 6f  t.   provided, o
103c0 72 20 27 2b 27 20 77 61 73 20 70 72 6f 76 69 64  r '+' was provid
103d0 65 64 29 2c 20 6f 72 20 69 66 20 66 64 20 69 73  ed), or if fd is
103e0 20 2d 31 2e 20 20 54 68 65 20 66 69 6c 65 20 64   -1.  The file d
103f0 65 73 63 72 69 70 74 6f 72 20 69 73 20 6e 6f 74  escriptor is not
10400 0a 20 20 20 75 73 65 64 20 75 6e 74 69 6c 20 74  .   used until t
10410 68 65 20 6e 65 78 74 20 67 7a 2a 20 72 65 61 64  he next gz* read
10420 2c 20 77 72 69 74 65 2c 20 73 65 65 6b 2c 20 6f  , write, seek, o
10430 72 20 63 6c 6f 73 65 20 6f 70 65 72 61 74 69 6f  r close operatio
10440 6e 2c 20 73 6f 20 67 7a 64 6f 70 65 6e 0a 20 20  n, so gzdopen.  
10450 20 77 69 6c 6c 20 6e 6f 74 20 64 65 74 65 63 74   will not detect
10460 20 69 66 20 66 64 20 69 73 20 69 6e 76 61 6c 69   if fd is invali
10470 64 20 28 75 6e 6c 65 73 73 20 66 64 20 69 73 20  d (unless fd is 
10480 2d 31 29 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e  -1)..*/..ZEXTERN
10490 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 67 7a 62   int ZEXPORT gzb
104a0 75 66 66 65 72 20 4f 46 28 28 67 7a 46 69 6c 65  uffer OF((gzFile
104b0 20 66 69 6c 65 2c 20 75 6e 73 69 67 6e 65 64 20   file, unsigned 
104c0 73 69 7a 65 29 29 3b 0a 2f 2a 0a 20 20 20 20 20  size));./*.     
104d0 53 65 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  Set the internal
104e0 20 62 75 66 66 65 72 20 73 69 7a 65 20 75 73 65   buffer size use
104f0 64 20 62 79 20 74 68 69 73 20 6c 69 62 72 61 72  d by this librar
10500 79 27 73 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  y's functions.  
10510 54 68 65 0a 20 20 20 64 65 66 61 75 6c 74 20 62  The.   default b
10520 75 66 66 65 72 20 73 69 7a 65 20 69 73 20 38 31  uffer size is 81
10530 39 32 20 62 79 74 65 73 2e 20 20 54 68 69 73 20  92 bytes.  This 
10540 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  function must be
10550 20 63 61 6c 6c 65 64 20 61 66 74 65 72 0a 20 20   called after.  
10560 20 67 7a 6f 70 65 6e 28 29 20 6f 72 20 67 7a 64   gzopen() or gzd
10570 6f 70 65 6e 28 29 2c 20 61 6e 64 20 62 65 66 6f  open(), and befo
10580 72 65 20 61 6e 79 20 6f 74 68 65 72 20 63 61 6c  re any other cal
10590 6c 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  ls that read or 
105a0 77 72 69 74 65 20 74 68 65 0a 20 20 20 66 69 6c  write the.   fil
105b0 65 2e 20 20 54 68 65 20 62 75 66 66 65 72 20 6d  e.  The buffer m
105c0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
105d0 20 69 73 20 61 6c 77 61 79 73 20 64 65 66 65 72   is always defer
105e0 72 65 64 20 74 6f 20 74 68 65 20 66 69 72 73 74  red to the first
105f0 20 72 65 61 64 20 6f 72 0a 20 20 20 77 72 69 74   read or.   writ
10600 65 2e 20 20 54 77 6f 20 62 75 66 66 65 72 73 20  e.  Two buffers 
10610 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 2c 20 65  are allocated, e
10620 69 74 68 65 72 20 62 6f 74 68 20 6f 66 20 74 68  ither both of th
10630 65 20 73 70 65 63 69 66 69 65 64 20 73 69 7a 65  e specified size
10640 20 77 68 65 6e 0a 20 20 20 77 72 69 74 69 6e 67   when.   writing
10650 2c 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  , or one of the 
10660 73 70 65 63 69 66 69 65 64 20 73 69 7a 65 20 61  specified size a
10670 6e 64 20 74 68 65 20 6f 74 68 65 72 20 74 77 69  nd the other twi
10680 63 65 20 74 68 61 74 20 73 69 7a 65 20 77 68 65  ce that size whe
10690 6e 0a 20 20 20 72 65 61 64 69 6e 67 2e 20 20 41  n.   reading.  A
106a0 20 6c 61 72 67 65 72 20 62 75 66 66 65 72 20 73   larger buffer s
106b0 69 7a 65 20 6f 66 2c 20 66 6f 72 20 65 78 61 6d  ize of, for exam
106c0 70 6c 65 2c 20 36 34 4b 20 6f 72 20 31 32 38 4b  ple, 64K or 128K
106d0 20 62 79 74 65 73 20 77 69 6c 6c 0a 20 20 20 6e   bytes will.   n
106e0 6f 74 69 63 65 61 62 6c 79 20 69 6e 63 72 65 61  oticeably increa
106f0 73 65 20 74 68 65 20 73 70 65 65 64 20 6f 66 20  se the speed of 
10700 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e 20 28 72  decompression (r
10710 65 61 64 69 6e 67 29 2e 0a 0a 20 20 20 20 20 54  eading)...     T
10720 68 65 20 6e 65 77 20 62 75 66 66 65 72 20 73 69  he new buffer si
10730 7a 65 20 61 6c 73 6f 20 61 66 66 65 63 74 73 20  ze also affects 
10740 74 68 65 20 6d 61 78 69 6d 75 6d 20 6c 65 6e 67  the maximum leng
10750 74 68 20 66 6f 72 20 67 7a 70 72 69 6e 74 66 28  th for gzprintf(
10760 29 2e 0a 0a 20 20 20 20 20 67 7a 62 75 66 66 65  )...     gzbuffe
10770 72 28 29 20 72 65 74 75 72 6e 73 20 30 20 6f 6e  r() returns 0 on
10780 20 73 75 63 63 65 73 73 2c 20 6f 72 20 2d 31 20   success, or -1 
10790 6f 6e 20 66 61 69 6c 75 72 65 2c 20 73 75 63 68  on failure, such
107a0 20 61 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64   as being called
107b0 0a 20 20 20 74 6f 6f 20 6c 61 74 65 2e 0a 2a 2f  .   too late..*/
107c0 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45  ..ZEXTERN int ZE
107d0 58 50 4f 52 54 20 67 7a 73 65 74 70 61 72 61 6d  XPORT gzsetparam
107e0 73 20 4f 46 28 28 67 7a 46 69 6c 65 20 66 69 6c  s OF((gzFile fil
107f0 65 2c 20 69 6e 74 20 6c 65 76 65 6c 2c 20 69 6e  e, int level, in
10800 74 20 73 74 72 61 74 65 67 79 29 29 3b 0a 2f 2a  t strategy));./*
10810 0a 20 20 20 20 20 44 79 6e 61 6d 69 63 61 6c 6c  .     Dynamicall
10820 79 20 75 70 64 61 74 65 20 74 68 65 20 63 6f 6d  y update the com
10830 70 72 65 73 73 69 6f 6e 20 6c 65 76 65 6c 20 6f  pression level o
10840 72 20 73 74 72 61 74 65 67 79 2e 20 20 53 65 65  r strategy.  See
10850 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
10860 0a 20 20 20 6f 66 20 64 65 66 6c 61 74 65 49 6e  .   of deflateIn
10870 69 74 32 20 66 6f 72 20 74 68 65 20 6d 65 61 6e  it2 for the mean
10880 69 6e 67 20 6f 66 20 74 68 65 73 65 20 70 61 72  ing of these par
10890 61 6d 65 74 65 72 73 2e 0a 0a 20 20 20 20 20 67  ameters...     g
108a0 7a 73 65 74 70 61 72 61 6d 73 20 72 65 74 75 72  zsetparams retur
108b0 6e 73 20 5a 5f 4f 4b 20 69 66 20 73 75 63 63 65  ns Z_OK if succe
108c0 73 73 2c 20 6f 72 20 5a 5f 53 54 52 45 41 4d 5f  ss, or Z_STREAM_
108d0 45 52 52 4f 52 20 69 66 20 74 68 65 20 66 69 6c  ERROR if the fil
108e0 65 20 77 61 73 20 6e 6f 74 0a 20 20 20 6f 70 65  e was not.   ope
108f0 6e 65 64 20 66 6f 72 20 77 72 69 74 69 6e 67 2e  ned for writing.
10900 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74  .*/..ZEXTERN int
10910 20 5a 45 58 50 4f 52 54 20 67 7a 72 65 61 64 20   ZEXPORT gzread 
10920 4f 46 28 28 67 7a 46 69 6c 65 20 66 69 6c 65 2c  OF((gzFile file,
10930 20 76 6f 69 64 70 20 62 75 66 2c 20 75 6e 73 69   voidp buf, unsi
10940 67 6e 65 64 20 6c 65 6e 29 29 3b 0a 2f 2a 0a 20  gned len));./*. 
10950 20 20 20 20 52 65 61 64 73 20 74 68 65 20 67 69      Reads the gi
10960 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e  ven number of un
10970 63 6f 6d 70 72 65 73 73 65 64 20 62 79 74 65 73  compressed bytes
10980 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 70 72 65   from the compre
10990 73 73 65 64 20 66 69 6c 65 2e 20 20 49 66 0a 20  ssed file.  If. 
109a0 20 20 74 68 65 20 69 6e 70 75 74 20 66 69 6c 65    the input file
109b0 20 69 73 20 6e 6f 74 20 69 6e 20 67 7a 69 70 20   is not in gzip 
109c0 66 6f 72 6d 61 74 2c 20 67 7a 72 65 61 64 20 63  format, gzread c
109d0 6f 70 69 65 73 20 74 68 65 20 67 69 76 65 6e 20  opies the given 
109e0 6e 75 6d 62 65 72 20 6f 66 0a 20 20 20 62 79 74  number of.   byt
109f0 65 73 20 69 6e 74 6f 20 74 68 65 20 62 75 66 66  es into the buff
10a00 65 72 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  er directly from
10a10 20 74 68 65 20 66 69 6c 65 2e 0a 0a 20 20 20 20   the file...    
10a20 20 41 66 74 65 72 20 72 65 61 63 68 69 6e 67 20   After reaching 
10a30 74 68 65 20 65 6e 64 20 6f 66 20 61 20 67 7a 69  the end of a gzi
10a40 70 20 73 74 72 65 61 6d 20 69 6e 20 74 68 65 20  p stream in the 
10a50 69 6e 70 75 74 2c 20 67 7a 72 65 61 64 20 77 69  input, gzread wi
10a60 6c 6c 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 74  ll continue.   t
10a70 6f 20 72 65 61 64 2c 20 6c 6f 6f 6b 69 6e 67 20  o read, looking 
10a80 66 6f 72 20 61 6e 6f 74 68 65 72 20 67 7a 69 70  for another gzip
10a90 20 73 74 72 65 61 6d 2e 20 20 41 6e 79 20 6e 75   stream.  Any nu
10aa0 6d 62 65 72 20 6f 66 20 67 7a 69 70 20 73 74 72  mber of gzip str
10ab0 65 61 6d 73 20 6d 61 79 20 62 65 0a 20 20 20 63  eams may be.   c
10ac0 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 20 74  oncatenated in t
10ad0 68 65 20 69 6e 70 75 74 20 66 69 6c 65 2c 20 61  he input file, a
10ae0 6e 64 20 77 69 6c 6c 20 61 6c 6c 20 62 65 20 64  nd will all be d
10af0 65 63 6f 6d 70 72 65 73 73 65 64 20 62 79 20 67  ecompressed by g
10b00 7a 72 65 61 64 28 29 2e 0a 20 20 20 49 66 20 73  zread()..   If s
10b10 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74  omething other t
10b20 68 61 6e 20 61 20 67 7a 69 70 20 73 74 72 65 61  han a gzip strea
10b30 6d 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  m is encountered
10b40 20 61 66 74 65 72 20 61 20 67 7a 69 70 20 73 74   after a gzip st
10b50 72 65 61 6d 2c 0a 20 20 20 74 68 61 74 20 72 65  ream,.   that re
10b60 6d 61 69 6e 69 6e 67 20 74 72 61 69 6c 69 6e 67  maining trailing
10b70 20 67 61 72 62 61 67 65 20 69 73 20 69 67 6e 6f   garbage is igno
10b80 72 65 64 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f  red (and no erro
10b90 72 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e 0a  r is returned)..
10ba0 0a 20 20 20 20 20 67 7a 72 65 61 64 20 63 61 6e  .     gzread can
10bb0 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 61 64   be used to read
10bc0 20 61 20 67 7a 69 70 20 66 69 6c 65 20 74 68 61   a gzip file tha
10bd0 74 20 69 73 20 62 65 69 6e 67 20 63 6f 6e 63 75  t is being concu
10be0 72 72 65 6e 74 6c 79 20 77 72 69 74 74 65 6e 2e  rrently written.
10bf0 0a 20 20 20 55 70 6f 6e 20 72 65 61 63 68 69 6e  .   Upon reachin
10c00 67 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  g the end of the
10c10 20 69 6e 70 75 74 2c 20 67 7a 72 65 61 64 20 77   input, gzread w
10c20 69 6c 6c 20 72 65 74 75 72 6e 20 77 69 74 68 20  ill return with 
10c30 74 68 65 20 61 76 61 69 6c 61 62 6c 65 0a 20 20  the available.  
10c40 20 64 61 74 61 2e 20 20 49 66 20 74 68 65 20 65   data.  If the e
10c50 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
10c60 65 64 20 62 79 20 67 7a 65 72 72 6f 72 20 69 73  ed by gzerror is
10c70 20 5a 5f 4f 4b 20 6f 72 20 5a 5f 42 55 46 5f 45   Z_OK or Z_BUF_E
10c80 52 52 4f 52 2c 20 74 68 65 6e 0a 20 20 20 67 7a  RROR, then.   gz
10c90 63 6c 65 61 72 65 72 72 20 63 61 6e 20 62 65 20  clearerr can be 
10ca0 75 73 65 64 20 74 6f 20 63 6c 65 61 72 20 74 68  used to clear th
10cb0 65 20 65 6e 64 20 6f 66 20 66 69 6c 65 20 69 6e  e end of file in
10cc0 64 69 63 61 74 6f 72 20 69 6e 20 6f 72 64 65 72  dicator in order
10cd0 20 74 6f 20 70 65 72 6d 69 74 0a 20 20 20 67 7a   to permit.   gz
10ce0 72 65 61 64 20 74 6f 20 62 65 20 74 72 69 65 64  read to be tried
10cf0 20 61 67 61 69 6e 2e 20 20 5a 5f 4f 4b 20 69 6e   again.  Z_OK in
10d00 64 69 63 61 74 65 73 20 74 68 61 74 20 61 20 67  dicates that a g
10d10 7a 69 70 20 73 74 72 65 61 6d 20 77 61 73 20 63  zip stream was c
10d20 6f 6d 70 6c 65 74 65 64 0a 20 20 20 6f 6e 20 74  ompleted.   on t
10d30 68 65 20 6c 61 73 74 20 67 7a 72 65 61 64 2e 20  he last gzread. 
10d40 20 5a 5f 42 55 46 5f 45 52 52 4f 52 20 69 6e 64   Z_BUF_ERROR ind
10d50 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20  icates that the 
10d60 69 6e 70 75 74 20 66 69 6c 65 20 65 6e 64 65 64  input file ended
10d70 20 69 6e 20 74 68 65 0a 20 20 20 6d 69 64 64 6c   in the.   middl
10d80 65 20 6f 66 20 61 20 67 7a 69 70 20 73 74 72 65  e of a gzip stre
10d90 61 6d 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 67  am.  Note that g
10da0 7a 72 65 61 64 20 64 6f 65 73 20 6e 6f 74 20 72  zread does not r
10db0 65 74 75 72 6e 20 2d 31 20 69 6e 20 74 68 65 20  eturn -1 in the 
10dc0 65 76 65 6e 74 0a 20 20 20 6f 66 20 61 6e 20 69  event.   of an i
10dd0 6e 63 6f 6d 70 6c 65 74 65 20 67 7a 69 70 20 73  ncomplete gzip s
10de0 74 72 65 61 6d 2e 20 20 54 68 69 73 20 65 72 72  tream.  This err
10df0 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 20 75  or is deferred u
10e00 6e 74 69 6c 20 67 7a 63 6c 6f 73 65 28 29 2c 20  ntil gzclose(), 
10e10 77 68 69 63 68 0a 20 20 20 77 69 6c 6c 20 72 65  which.   will re
10e20 74 75 72 6e 20 5a 5f 42 55 46 5f 45 52 52 4f 52  turn Z_BUF_ERROR
10e30 20 69 66 20 74 68 65 20 6c 61 73 74 20 67 7a 72   if the last gzr
10e40 65 61 64 20 65 6e 64 65 64 20 69 6e 20 74 68 65  ead ended in the
10e50 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 67 7a 69   middle of a gzi
10e60 70 0a 20 20 20 73 74 72 65 61 6d 2e 20 20 41 6c  p.   stream.  Al
10e70 74 65 72 6e 61 74 69 76 65 6c 79 2c 20 67 7a 65  ternatively, gze
10e80 72 72 6f 72 20 63 61 6e 20 62 65 20 75 73 65 64  rror can be used
10e90 20 62 65 66 6f 72 65 20 67 7a 63 6c 6f 73 65 20   before gzclose 
10ea0 74 6f 20 64 65 74 65 63 74 20 74 68 69 73 0a 20  to detect this. 
10eb0 20 20 63 61 73 65 2e 0a 0a 20 20 20 20 20 67 7a    case...     gz
10ec0 72 65 61 64 20 72 65 74 75 72 6e 73 20 74 68 65  read returns the
10ed0 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 63 6f 6d   number of uncom
10ee0 70 72 65 73 73 65 64 20 62 79 74 65 73 20 61 63  pressed bytes ac
10ef0 74 75 61 6c 6c 79 20 72 65 61 64 2c 20 6c 65 73  tually read, les
10f00 73 20 74 68 61 6e 0a 20 20 20 6c 65 6e 20 66 6f  s than.   len fo
10f10 72 20 65 6e 64 20 6f 66 20 66 69 6c 65 2c 20 6f  r end of file, o
10f20 72 20 2d 31 20 66 6f 72 20 65 72 72 6f 72 2e 0a  r -1 for error..
10f30 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20  */..ZEXTERN int 
10f40 5a 45 58 50 4f 52 54 20 67 7a 77 72 69 74 65 20  ZEXPORT gzwrite 
10f50 4f 46 28 28 67 7a 46 69 6c 65 20 66 69 6c 65 2c  OF((gzFile file,
10f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f80 20 76 6f 69 64 70 63 20 62 75 66 2c 20 75 6e 73   voidpc buf, uns
10f90 69 67 6e 65 64 20 6c 65 6e 29 29 3b 0a 2f 2a 0a  igned len));./*.
10fa0 20 20 20 20 20 57 72 69 74 65 73 20 74 68 65 20       Writes the 
10fb0 67 69 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20  given number of 
10fc0 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 62 79 74  uncompressed byt
10fd0 65 73 20 69 6e 74 6f 20 74 68 65 20 63 6f 6d 70  es into the comp
10fe0 72 65 73 73 65 64 20 66 69 6c 65 2e 0a 20 20 20  ressed file..   
10ff0 67 7a 77 72 69 74 65 20 72 65 74 75 72 6e 73 20  gzwrite returns 
11000 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e  the number of un
11010 63 6f 6d 70 72 65 73 73 65 64 20 62 79 74 65 73  compressed bytes
11020 20 77 72 69 74 74 65 6e 20 6f 72 20 30 20 69 6e   written or 0 in
11030 20 63 61 73 65 20 6f 66 0a 20 20 20 65 72 72 6f   case of.   erro
11040 72 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69  r..*/..ZEXTERN i
11050 6e 74 20 5a 45 58 50 4f 52 54 56 41 20 67 7a 70  nt ZEXPORTVA gzp
11060 72 69 6e 74 66 20 5a 5f 41 52 47 28 28 67 7a 46  rintf Z_ARG((gzF
11070 69 6c 65 20 66 69 6c 65 2c 20 63 6f 6e 73 74 20  ile file, const 
11080 63 68 61 72 20 2a 66 6f 72 6d 61 74 2c 20 2e 2e  char *format, ..
11090 2e 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 43 6f 6e  .));./*.     Con
110a0 76 65 72 74 73 2c 20 66 6f 72 6d 61 74 73 2c 20  verts, formats, 
110b0 61 6e 64 20 77 72 69 74 65 73 20 74 68 65 20 61  and writes the a
110c0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
110d0 63 6f 6d 70 72 65 73 73 65 64 20 66 69 6c 65 20  compressed file 
110e0 75 6e 64 65 72 0a 20 20 20 63 6f 6e 74 72 6f 6c  under.   control
110f0 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 74 20 73   of the format s
11100 74 72 69 6e 67 2c 20 61 73 20 69 6e 20 66 70 72  tring, as in fpr
11110 69 6e 74 66 2e 20 20 67 7a 70 72 69 6e 74 66 20  intf.  gzprintf 
11120 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
11130 65 72 20 6f 66 0a 20 20 20 75 6e 63 6f 6d 70 72  er of.   uncompr
11140 65 73 73 65 64 20 62 79 74 65 73 20 61 63 74 75  essed bytes actu
11150 61 6c 6c 79 20 77 72 69 74 74 65 6e 2c 20 6f 72  ally written, or
11160 20 30 20 69 6e 20 63 61 73 65 20 6f 66 20 65 72   0 in case of er
11170 72 6f 72 2e 20 20 54 68 65 20 6e 75 6d 62 65 72  ror.  The number
11180 20 6f 66 0a 20 20 20 75 6e 63 6f 6d 70 72 65 73   of.   uncompres
11190 73 65 64 20 62 79 74 65 73 20 77 72 69 74 74 65  sed bytes writte
111a0 6e 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  n is limited to 
111b0 38 31 39 31 2c 20 6f 72 20 6f 6e 65 20 6c 65 73  8191, or one les
111c0 73 20 74 68 61 6e 20 74 68 65 20 62 75 66 66 65  s than the buffe
111d0 72 0a 20 20 20 73 69 7a 65 20 67 69 76 65 6e 20  r.   size given 
111e0 74 6f 20 67 7a 62 75 66 66 65 72 28 29 2e 20 20  to gzbuffer().  
111f0 54 68 65 20 63 61 6c 6c 65 72 20 73 68 6f 75 6c  The caller shoul
11200 64 20 61 73 73 75 72 65 20 74 68 61 74 20 74 68  d assure that th
11210 69 73 20 6c 69 6d 69 74 20 69 73 20 6e 6f 74 0a  is limit is not.
11220 20 20 20 65 78 63 65 65 64 65 64 2e 20 20 49 66     exceeded.  If
11230 20 69 74 20 69 73 20 65 78 63 65 65 64 65 64 2c   it is exceeded,
11240 20 74 68 65 6e 20 67 7a 70 72 69 6e 74 66 28 29   then gzprintf()
11250 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 61 6e 20   will return an 
11260 65 72 72 6f 72 20 28 30 29 20 77 69 74 68 0a 20  error (0) with. 
11270 20 20 6e 6f 74 68 69 6e 67 20 77 72 69 74 74 65    nothing writte
11280 6e 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  n.  In this case
11290 2c 20 74 68 65 72 65 20 6d 61 79 20 61 6c 73 6f  , there may also
112a0 20 62 65 20 61 20 62 75 66 66 65 72 20 6f 76 65   be a buffer ove
112b0 72 66 6c 6f 77 20 77 69 74 68 0a 20 20 20 75 6e  rflow with.   un
112c0 70 72 65 64 69 63 74 61 62 6c 65 20 63 6f 6e 73  predictable cons
112d0 65 71 75 65 6e 63 65 73 2c 20 77 68 69 63 68 20  equences, which 
112e0 69 73 20 70 6f 73 73 69 62 6c 65 20 6f 6e 6c 79  is possible only
112f0 20 69 66 20 7a 6c 69 62 20 77 61 73 20 63 6f 6d   if zlib was com
11300 70 69 6c 65 64 20 77 69 74 68 0a 20 20 20 74 68  piled with.   th
11310 65 20 69 6e 73 65 63 75 72 65 20 66 75 6e 63 74  e insecure funct
11320 69 6f 6e 73 20 73 70 72 69 6e 74 66 28 29 20 6f  ions sprintf() o
11330 72 20 76 73 70 72 69 6e 74 66 28 29 20 62 65 63  r vsprintf() bec
11340 61 75 73 65 20 74 68 65 20 73 65 63 75 72 65 20  ause the secure 
11350 73 6e 70 72 69 6e 74 66 28 29 0a 20 20 20 6f 72  snprintf().   or
11360 20 76 73 6e 70 72 69 6e 74 66 28 29 20 66 75 6e   vsnprintf() fun
11370 63 74 69 6f 6e 73 20 77 65 72 65 20 6e 6f 74 20  ctions were not 
11380 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73  available.  This
11390 20 63 61 6e 20 62 65 20 64 65 74 65 72 6d 69 6e   can be determin
113a0 65 64 20 75 73 69 6e 67 0a 20 20 20 7a 6c 69 62  ed using.   zlib
113b0 43 6f 6d 70 69 6c 65 46 6c 61 67 73 28 29 2e 0a  CompileFlags()..
113c0 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20  */..ZEXTERN int 
113d0 5a 45 58 50 4f 52 54 20 67 7a 70 75 74 73 20 4f  ZEXPORT gzputs O
113e0 46 28 28 67 7a 46 69 6c 65 20 66 69 6c 65 2c 20  F((gzFile file, 
113f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 29 29 3b  const char *s));
11400 0a 2f 2a 0a 20 20 20 20 20 57 72 69 74 65 73 20  ./*.     Writes 
11410 74 68 65 20 67 69 76 65 6e 20 6e 75 6c 6c 2d 74  the given null-t
11420 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67  erminated string
11430 20 74 6f 20 74 68 65 20 63 6f 6d 70 72 65 73 73   to the compress
11440 65 64 20 66 69 6c 65 2c 20 65 78 63 6c 75 64 69  ed file, excludi
11450 6e 67 0a 20 20 20 74 68 65 20 74 65 72 6d 69 6e  ng.   the termin
11460 61 74 69 6e 67 20 6e 75 6c 6c 20 63 68 61 72 61  ating null chara
11470 63 74 65 72 2e 0a 0a 20 20 20 20 20 67 7a 70 75  cter...     gzpu
11480 74 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  ts returns the n
11490 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
114a0 65 72 73 20 77 72 69 74 74 65 6e 2c 20 6f 72 20  ers written, or 
114b0 2d 31 20 69 6e 20 63 61 73 65 20 6f 66 20 65 72  -1 in case of er
114c0 72 6f 72 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e  ror..*/..ZEXTERN
114d0 20 63 68 61 72 20 2a 20 5a 45 58 50 4f 52 54 20   char * ZEXPORT 
114e0 67 7a 67 65 74 73 20 4f 46 28 28 67 7a 46 69 6c  gzgets OF((gzFil
114f0 65 20 66 69 6c 65 2c 20 63 68 61 72 20 2a 62 75  e file, char *bu
11500 66 2c 20 69 6e 74 20 6c 65 6e 29 29 3b 0a 2f 2a  f, int len));./*
11510 0a 20 20 20 20 20 52 65 61 64 73 20 62 79 74 65  .     Reads byte
11520 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 70 72  s from the compr
11530 65 73 73 65 64 20 66 69 6c 65 20 75 6e 74 69 6c  essed file until
11540 20 6c 65 6e 2d 31 20 63 68 61 72 61 63 74 65 72   len-1 character
11550 73 20 61 72 65 20 72 65 61 64 2c 20 6f 72 20 61  s are read, or a
11560 0a 20 20 20 6e 65 77 6c 69 6e 65 20 63 68 61 72  .   newline char
11570 61 63 74 65 72 20 69 73 20 72 65 61 64 20 61 6e  acter is read an
11580 64 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f  d transferred to
11590 20 62 75 66 2c 20 6f 72 20 61 6e 20 65 6e 64 2d   buf, or an end-
115a0 6f 66 2d 66 69 6c 65 0a 20 20 20 63 6f 6e 64 69  of-file.   condi
115b0 74 69 6f 6e 20 69 73 20 65 6e 63 6f 75 6e 74 65  tion is encounte
115c0 72 65 64 2e 20 20 49 66 20 61 6e 79 20 63 68 61  red.  If any cha
115d0 72 61 63 74 65 72 73 20 61 72 65 20 72 65 61 64  racters are read
115e0 20 6f 72 20 69 66 20 6c 65 6e 20 3d 3d 20 31 2c   or if len == 1,
115f0 20 74 68 65 0a 20 20 20 73 74 72 69 6e 67 20 69   the.   string i
11600 73 20 74 65 72 6d 69 6e 61 74 65 64 20 77 69 74  s terminated wit
11610 68 20 61 20 6e 75 6c 6c 20 63 68 61 72 61 63 74  h a null charact
11620 65 72 2e 20 20 49 66 20 6e 6f 20 63 68 61 72 61  er.  If no chara
11630 63 74 65 72 73 20 61 72 65 20 72 65 61 64 20 64  cters are read d
11640 75 65 0a 20 20 20 74 6f 20 61 6e 20 65 6e 64 2d  ue.   to an end-
11650 6f 66 2d 66 69 6c 65 20 6f 72 20 6c 65 6e 20 3c  of-file or len <
11660 20 31 2c 20 74 68 65 6e 20 74 68 65 20 62 75 66   1, then the buf
11670 66 65 72 20 69 73 20 6c 65 66 74 20 75 6e 74 6f  fer is left unto
11680 75 63 68 65 64 2e 0a 0a 20 20 20 20 20 67 7a 67  uched...     gzg
11690 65 74 73 20 72 65 74 75 72 6e 73 20 62 75 66 20  ets returns buf 
116a0 77 68 69 63 68 20 69 73 20 61 20 6e 75 6c 6c 2d  which is a null-
116b0 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e  terminated strin
116c0 67 2c 20 6f 72 20 69 74 20 72 65 74 75 72 6e 73  g, or it returns
116d0 20 4e 55 4c 4c 0a 20 20 20 66 6f 72 20 65 6e 64   NULL.   for end
116e0 2d 6f 66 2d 66 69 6c 65 20 6f 72 20 69 6e 20 63  -of-file or in c
116f0 61 73 65 20 6f 66 20 65 72 72 6f 72 2e 20 20 49  ase of error.  I
11700 66 20 74 68 65 72 65 20 77 61 73 20 61 6e 20 65  f there was an e
11710 72 72 6f 72 2c 20 74 68 65 20 63 6f 6e 74 65 6e  rror, the conten
11720 74 73 20 61 74 0a 20 20 20 62 75 66 20 61 72 65  ts at.   buf are
11730 20 69 6e 64 65 74 65 72 6d 69 6e 61 74 65 2e 0a   indeterminate..
11740 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20  */..ZEXTERN int 
11750 5a 45 58 50 4f 52 54 20 67 7a 70 75 74 63 20 4f  ZEXPORT gzputc O
11760 46 28 28 67 7a 46 69 6c 65 20 66 69 6c 65 2c 20  F((gzFile file, 
11770 69 6e 74 20 63 29 29 3b 0a 2f 2a 0a 20 20 20 20  int c));./*.    
11780 20 57 72 69 74 65 73 20 63 2c 20 63 6f 6e 76 65   Writes c, conve
11790 72 74 65 64 20 74 6f 20 61 6e 20 75 6e 73 69 67  rted to an unsig
117a0 6e 65 64 20 63 68 61 72 2c 20 69 6e 74 6f 20 74  ned char, into t
117b0 68 65 20 63 6f 6d 70 72 65 73 73 65 64 20 66 69  he compressed fi
117c0 6c 65 2e 20 20 67 7a 70 75 74 63 0a 20 20 20 72  le.  gzputc.   r
117d0 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65  eturns the value
117e0 20 74 68 61 74 20 77 61 73 20 77 72 69 74 74 65   that was writte
117f0 6e 2c 20 6f 72 20 2d 31 20 69 6e 20 63 61 73 65  n, or -1 in case
11800 20 6f 66 20 65 72 72 6f 72 2e 0a 2a 2f 0a 0a 5a   of error..*/..Z
11810 45 58 54 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f  EXTERN int ZEXPO
11820 52 54 20 67 7a 67 65 74 63 20 4f 46 28 28 67 7a  RT gzgetc OF((gz
11830 46 69 6c 65 20 66 69 6c 65 29 29 3b 0a 2f 2a 0a  File file));./*.
11840 20 20 20 20 20 52 65 61 64 73 20 6f 6e 65 20 62       Reads one b
11850 79 74 65 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d  yte from the com
11860 70 72 65 73 73 65 64 20 66 69 6c 65 2e 20 20 67  pressed file.  g
11870 7a 67 65 74 63 20 72 65 74 75 72 6e 73 20 74 68  zgetc returns th
11880 69 73 20 62 79 74 65 20 6f 72 20 2d 31 0a 20 20  is byte or -1.  
11890 20 69 6e 20 63 61 73 65 20 6f 66 20 65 6e 64 20   in case of end 
118a0 6f 66 20 66 69 6c 65 20 6f 72 20 65 72 72 6f 72  of file or error
118b0 2e 20 20 54 68 69 73 20 69 73 20 69 6d 70 6c 65  .  This is imple
118c0 6d 65 6e 74 65 64 20 61 73 20 61 20 6d 61 63 72  mented as a macr
118d0 6f 20 66 6f 72 20 73 70 65 65 64 2e 0a 20 20 20  o for speed..   
118e0 41 73 20 73 75 63 68 2c 20 69 74 20 64 6f 65 73  As such, it does
118f0 20 6e 6f 74 20 64 6f 20 61 6c 6c 20 6f 66 20 74   not do all of t
11900 68 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20  he checking the 
11910 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 73 20  other functions 
11920 64 6f 2e 20 20 49 2e 65 2e 0a 20 20 20 69 74 20  do.  I.e..   it 
11930 64 6f 65 73 20 6e 6f 74 20 63 68 65 63 6b 20 74  does not check t
11940 6f 20 73 65 65 20 69 66 20 66 69 6c 65 20 69 73  o see if file is
11950 20 4e 55 4c 4c 2c 20 6e 6f 72 20 77 68 65 74 68   NULL, nor wheth
11960 65 72 20 74 68 65 20 73 74 72 75 63 74 75 72 65  er the structure
11970 20 66 69 6c 65 0a 20 20 20 70 6f 69 6e 74 73 20   file.   points 
11980 74 6f 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 62  to has been clob
11990 62 65 72 65 64 20 6f 72 20 6e 6f 74 2e 0a 2a 2f  bered or not..*/
119a0 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45  ..ZEXTERN int ZE
119b0 58 50 4f 52 54 20 67 7a 75 6e 67 65 74 63 20 4f  XPORT gzungetc O
119c0 46 28 28 69 6e 74 20 63 2c 20 67 7a 46 69 6c 65  F((int c, gzFile
119d0 20 66 69 6c 65 29 29 3b 0a 2f 2a 0a 20 20 20 20   file));./*.    
119e0 20 50 75 73 68 20 6f 6e 65 20 63 68 61 72 61 63   Push one charac
119f0 74 65 72 20 62 61 63 6b 20 6f 6e 74 6f 20 74 68  ter back onto th
11a00 65 20 73 74 72 65 61 6d 20 74 6f 20 62 65 20 72  e stream to be r
11a10 65 61 64 20 61 73 20 74 68 65 20 66 69 72 73 74  ead as the first
11a20 20 63 68 61 72 61 63 74 65 72 0a 20 20 20 6f 6e   character.   on
11a30 20 74 68 65 20 6e 65 78 74 20 72 65 61 64 2e 20   the next read. 
11a40 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 63 68   At least one ch
11a50 61 72 61 63 74 65 72 20 6f 66 20 70 75 73 68 2d  aracter of push-
11a60 62 61 63 6b 20 69 73 20 61 6c 6c 6f 77 65 64 2e  back is allowed.
11a70 0a 20 20 20 67 7a 75 6e 67 65 74 63 28 29 20 72  .   gzungetc() r
11a80 65 74 75 72 6e 73 20 74 68 65 20 63 68 61 72 61  eturns the chara
11a90 63 74 65 72 20 70 75 73 68 65 64 2c 20 6f 72 20  cter pushed, or 
11aa0 2d 31 20 6f 6e 20 66 61 69 6c 75 72 65 2e 20 20  -1 on failure.  
11ab0 67 7a 75 6e 67 65 74 63 28 29 20 77 69 6c 6c 0a  gzungetc() will.
11ac0 20 20 20 66 61 69 6c 20 69 66 20 63 20 69 73 20     fail if c is 
11ad0 2d 31 2c 20 61 6e 64 20 6d 61 79 20 66 61 69 6c  -1, and may fail
11ae0 20 69 66 20 61 20 63 68 61 72 61 63 74 65 72 20   if a character 
11af0 68 61 73 20 62 65 65 6e 20 70 75 73 68 65 64 20  has been pushed 
11b00 62 75 74 20 6e 6f 74 20 72 65 61 64 0a 20 20 20  but not read.   
11b10 79 65 74 2e 20 20 49 66 20 67 7a 75 6e 67 65 74  yet.  If gzunget
11b20 63 20 69 73 20 75 73 65 64 20 69 6d 6d 65 64 69  c is used immedi
11b30 61 74 65 6c 79 20 61 66 74 65 72 20 67 7a 6f 70  ately after gzop
11b40 65 6e 20 6f 72 20 67 7a 64 6f 70 65 6e 2c 20 61  en or gzdopen, a
11b50 74 20 6c 65 61 73 74 20 74 68 65 0a 20 20 20 6f  t least the.   o
11b60 75 74 70 75 74 20 62 75 66 66 65 72 20 73 69 7a  utput buffer siz
11b70 65 20 6f 66 20 70 75 73 68 65 64 20 63 68 61 72  e of pushed char
11b80 61 63 74 65 72 73 20 69 73 20 61 6c 6c 6f 77 65  acters is allowe
11b90 64 2e 20 20 28 53 65 65 20 67 7a 62 75 66 66 65  d.  (See gzbuffe
11ba0 72 20 61 62 6f 76 65 2e 29 0a 20 20 20 54 68 65  r above.).   The
11bb0 20 70 75 73 68 65 64 20 63 68 61 72 61 63 74 65   pushed characte
11bc0 72 20 77 69 6c 6c 20 62 65 20 64 69 73 63 61 72  r will be discar
11bd0 64 65 64 20 69 66 20 74 68 65 20 73 74 72 65 61  ded if the strea
11be0 6d 20 69 73 20 72 65 70 6f 73 69 74 69 6f 6e 65  m is repositione
11bf0 64 20 77 69 74 68 0a 20 20 20 67 7a 73 65 65 6b  d with.   gzseek
11c00 28 29 20 6f 72 20 67 7a 72 65 77 69 6e 64 28 29  () or gzrewind()
11c10 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e  ..*/..ZEXTERN in
11c20 74 20 5a 45 58 50 4f 52 54 20 67 7a 66 6c 75 73  t ZEXPORT gzflus
11c30 68 20 4f 46 28 28 67 7a 46 69 6c 65 20 66 69 6c  h OF((gzFile fil
11c40 65 2c 20 69 6e 74 20 66 6c 75 73 68 29 29 3b 0a  e, int flush));.
11c50 2f 2a 0a 20 20 20 20 20 46 6c 75 73 68 65 73 20  /*.     Flushes 
11c60 61 6c 6c 20 70 65 6e 64 69 6e 67 20 6f 75 74 70  all pending outp
11c70 75 74 20 69 6e 74 6f 20 74 68 65 20 63 6f 6d 70  ut into the comp
11c80 72 65 73 73 65 64 20 66 69 6c 65 2e 20 20 54 68  ressed file.  Th
11c90 65 20 70 61 72 61 6d 65 74 65 72 20 66 6c 75 73  e parameter flus
11ca0 68 0a 20 20 20 69 73 20 61 73 20 69 6e 20 74 68  h.   is as in th
11cb0 65 20 64 65 66 6c 61 74 65 28 29 20 66 75 6e 63  e deflate() func
11cc0 74 69 6f 6e 2e 20 20 54 68 65 20 72 65 74 75 72  tion.  The retur
11cd0 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 7a  n value is the z
11ce0 6c 69 62 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  lib error number
11cf0 0a 20 20 20 28 73 65 65 20 66 75 6e 63 74 69 6f  .   (see functio
11d00 6e 20 67 7a 65 72 72 6f 72 20 62 65 6c 6f 77 29  n gzerror below)
11d10 2e 20 20 67 7a 66 6c 75 73 68 20 69 73 20 6f 6e  .  gzflush is on
11d20 6c 79 20 70 65 72 6d 69 74 74 65 64 20 77 68 65  ly permitted whe
11d30 6e 20 77 72 69 74 69 6e 67 2e 0a 0a 20 20 20 20  n writing...    
11d40 20 49 66 20 74 68 65 20 66 6c 75 73 68 20 70 61   If the flush pa
11d50 72 61 6d 65 74 65 72 20 69 73 20 5a 5f 46 49 4e  rameter is Z_FIN
11d60 49 53 48 2c 20 74 68 65 20 72 65 6d 61 69 6e 69  ISH, the remaini
11d70 6e 67 20 64 61 74 61 20 69 73 20 77 72 69 74 74  ng data is writt
11d80 65 6e 20 61 6e 64 20 74 68 65 0a 20 20 20 67 7a  en and the.   gz
11d90 69 70 20 73 74 72 65 61 6d 20 69 73 20 63 6f 6d  ip stream is com
11da0 70 6c 65 74 65 64 20 69 6e 20 74 68 65 20 6f 75  pleted in the ou
11db0 74 70 75 74 2e 20 20 49 66 20 67 7a 77 72 69 74  tput.  If gzwrit
11dc0 65 28 29 20 69 73 20 63 61 6c 6c 65 64 20 61 67  e() is called ag
11dd0 61 69 6e 2c 20 61 20 6e 65 77 0a 20 20 20 67 7a  ain, a new.   gz
11de0 69 70 20 73 74 72 65 61 6d 20 77 69 6c 6c 20 62  ip stream will b
11df0 65 20 73 74 61 72 74 65 64 20 69 6e 20 74 68 65  e started in the
11e00 20 6f 75 74 70 75 74 2e 20 20 67 7a 72 65 61 64   output.  gzread
11e10 28 29 20 69 73 20 61 62 6c 65 20 74 6f 20 72 65  () is able to re
11e20 61 64 20 73 75 63 68 0a 20 20 20 63 6f 6e 63 61  ad such.   conca
11e30 74 65 6e 74 65 64 20 67 7a 69 70 20 73 74 72 65  tented gzip stre
11e40 61 6d 73 2e 0a 0a 20 20 20 20 20 67 7a 66 6c 75  ams...     gzflu
11e50 73 68 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c  sh should be cal
11e60 6c 65 64 20 6f 6e 6c 79 20 77 68 65 6e 20 73 74  led only when st
11e70 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79  rictly necessary
11e80 20 62 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c   because it will
11e90 0a 20 20 20 64 65 67 72 61 64 65 20 63 6f 6d 70  .   degrade comp
11ea0 72 65 73 73 69 6f 6e 20 69 66 20 63 61 6c 6c 65  ression if calle
11eb0 64 20 74 6f 6f 20 6f 66 74 65 6e 2e 0a 2a 2f 0a  d too often..*/.
11ec0 0a 2f 2a 0a 5a 45 58 54 45 52 4e 20 7a 5f 6f 66  ./*.ZEXTERN z_of
11ed0 66 5f 74 20 5a 45 58 50 4f 52 54 20 67 7a 73 65  f_t ZEXPORT gzse
11ee0 65 6b 20 4f 46 28 28 67 7a 46 69 6c 65 20 66 69  ek OF((gzFile fi
11ef0 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  le,.            
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 20 20 20 20 20 20 7a 5f 6f 66 66 5f 74 20 6f         z_off_t o
11f20 66 66 73 65 74 2c 20 69 6e 74 20 77 68 65 6e 63  ffset, int whenc
11f30 65 29 29 3b 0a 0a 20 20 20 20 20 53 65 74 73 20  e));..     Sets 
11f40 74 68 65 20 73 74 61 72 74 69 6e 67 20 70 6f 73  the starting pos
11f50 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 6e 65  ition for the ne
11f60 78 74 20 67 7a 72 65 61 64 20 6f 72 20 67 7a 77  xt gzread or gzw
11f70 72 69 74 65 20 6f 6e 20 74 68 65 20 67 69 76 65  rite on the give
11f80 6e 0a 20 20 20 63 6f 6d 70 72 65 73 73 65 64 20  n.   compressed 
11f90 66 69 6c 65 2e 20 20 54 68 65 20 6f 66 66 73 65  file.  The offse
11fa0 74 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 6e  t represents a n
11fb0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11fc0 6e 20 74 68 65 0a 20 20 20 75 6e 63 6f 6d 70 72  n the.   uncompr
11fd0 65 73 73 65 64 20 64 61 74 61 20 73 74 72 65 61  essed data strea
11fe0 6d 2e 20 20 54 68 65 20 77 68 65 6e 63 65 20 70  m.  The whence p
11ff0 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 66 69  arameter is defi
12000 6e 65 64 20 61 73 20 69 6e 20 6c 73 65 65 6b 28  ned as in lseek(
12010 32 29 3b 0a 20 20 20 74 68 65 20 76 61 6c 75 65  2);.   the value
12020 20 53 45 45 4b 5f 45 4e 44 20 69 73 20 6e 6f 74   SEEK_END is not
12030 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 20   supported...   
12040 20 20 49 66 20 74 68 65 20 66 69 6c 65 20 69 73    If the file is
12050 20 6f 70 65 6e 65 64 20 66 6f 72 20 72 65 61 64   opened for read
12060 69 6e 67 2c 20 74 68 69 73 20 66 75 6e 63 74 69  ing, this functi
12070 6f 6e 20 69 73 20 65 6d 75 6c 61 74 65 64 20 62  on is emulated b
12080 75 74 20 63 61 6e 20 62 65 0a 20 20 20 65 78 74  ut can be.   ext
12090 72 65 6d 65 6c 79 20 73 6c 6f 77 2e 20 20 49 66  remely slow.  If
120a0 20 74 68 65 20 66 69 6c 65 20 69 73 20 6f 70 65   the file is ope
120b0 6e 65 64 20 66 6f 72 20 77 72 69 74 69 6e 67 2c  ned for writing,
120c0 20 6f 6e 6c 79 20 66 6f 72 77 61 72 64 20 73 65   only forward se
120d0 65 6b 73 20 61 72 65 0a 20 20 20 73 75 70 70 6f  eks are.   suppo
120e0 72 74 65 64 3b 20 67 7a 73 65 65 6b 20 74 68 65  rted; gzseek the
120f0 6e 20 63 6f 6d 70 72 65 73 73 65 73 20 61 20 73  n compresses a s
12100 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 65  equence of zeroe
12110 73 20 75 70 20 74 6f 20 74 68 65 20 6e 65 77 0a  s up to the new.
12120 20 20 20 73 74 61 72 74 69 6e 67 20 70 6f 73 69     starting posi
12130 74 69 6f 6e 2e 0a 0a 20 20 20 20 20 67 7a 73 65  tion...     gzse
12140 65 6b 20 72 65 74 75 72 6e 73 20 74 68 65 20 72  ek returns the r
12150 65 73 75 6c 74 69 6e 67 20 6f 66 66 73 65 74 20  esulting offset 
12160 6c 6f 63 61 74 69 6f 6e 20 61 73 20 6d 65 61 73  location as meas
12170 75 72 65 64 20 69 6e 20 62 79 74 65 73 20 66 72  ured in bytes fr
12180 6f 6d 0a 20 20 20 74 68 65 20 62 65 67 69 6e 6e  om.   the beginn
12190 69 6e 67 20 6f 66 20 74 68 65 20 75 6e 63 6f 6d  ing of the uncom
121a0 70 72 65 73 73 65 64 20 73 74 72 65 61 6d 2c 20  pressed stream, 
121b0 6f 72 20 2d 31 20 69 6e 20 63 61 73 65 20 6f 66  or -1 in case of
121c0 20 65 72 72 6f 72 2c 20 69 6e 0a 20 20 20 70 61   error, in.   pa
121d0 72 74 69 63 75 6c 61 72 20 69 66 20 74 68 65 20  rticular if the 
121e0 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 20 66  file is opened f
121f0 6f 72 20 77 72 69 74 69 6e 67 20 61 6e 64 20 74  or writing and t
12200 68 65 20 6e 65 77 20 73 74 61 72 74 69 6e 67 20  he new starting 
12210 70 6f 73 69 74 69 6f 6e 0a 20 20 20 77 6f 75 6c  position.   woul
12220 64 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20  d be before the 
12230 63 75 72 72 65 6e 74 20 70 6f 73 69 74 69 6f 6e  current position
12240 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 69 6e  ..*/..ZEXTERN in
12250 74 20 5a 45 58 50 4f 52 54 20 20 20 20 67 7a 72  t ZEXPORT    gzr
12260 65 77 69 6e 64 20 4f 46 28 28 67 7a 46 69 6c 65  ewind OF((gzFile
12270 20 66 69 6c 65 29 29 3b 0a 2f 2a 0a 20 20 20 20   file));./*.    
12280 20 52 65 77 69 6e 64 73 20 74 68 65 20 67 69 76   Rewinds the giv
12290 65 6e 20 66 69 6c 65 2e 20 54 68 69 73 20 66 75  en file. This fu
122a0 6e 63 74 69 6f 6e 20 69 73 20 73 75 70 70 6f 72  nction is suppor
122b0 74 65 64 20 6f 6e 6c 79 20 66 6f 72 20 72 65 61  ted only for rea
122c0 64 69 6e 67 2e 0a 0a 20 20 20 20 20 67 7a 72 65  ding...     gzre
122d0 77 69 6e 64 28 66 69 6c 65 29 20 69 73 20 65 71  wind(file) is eq
122e0 75 69 76 61 6c 65 6e 74 20 74 6f 20 28 69 6e 74  uivalent to (int
122f0 29 67 7a 73 65 65 6b 28 66 69 6c 65 2c 20 30 4c  )gzseek(file, 0L
12300 2c 20 53 45 45 4b 5f 53 45 54 29 0a 2a 2f 0a 0a  , SEEK_SET).*/..
12310 2f 2a 0a 5a 45 58 54 45 52 4e 20 7a 5f 6f 66 66  /*.ZEXTERN z_off
12320 5f 74 20 5a 45 58 50 4f 52 54 20 20 20 20 67 7a  _t ZEXPORT    gz
12330 74 65 6c 6c 20 4f 46 28 28 67 7a 46 69 6c 65 20  tell OF((gzFile 
12340 66 69 6c 65 29 29 3b 0a 0a 20 20 20 20 20 52 65  file));..     Re
12350 74 75 72 6e 73 20 74 68 65 20 73 74 61 72 74 69  turns the starti
12360 6e 67 20 70 6f 73 69 74 69 6f 6e 20 66 6f 72 20  ng position for 
12370 74 68 65 20 6e 65 78 74 20 67 7a 72 65 61 64 20  the next gzread 
12380 6f 72 20 67 7a 77 72 69 74 65 20 6f 6e 20 74 68  or gzwrite on th
12390 65 20 67 69 76 65 6e 0a 20 20 20 63 6f 6d 70 72  e given.   compr
123a0 65 73 73 65 64 20 66 69 6c 65 2e 20 20 54 68 69  essed file.  Thi
123b0 73 20 70 6f 73 69 74 69 6f 6e 20 72 65 70 72 65  s position repre
123c0 73 65 6e 74 73 20 61 20 6e 75 6d 62 65 72 20 6f  sents a number o
123d0 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 0a 20  f bytes in the. 
123e0 20 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 64    uncompressed d
123f0 61 74 61 20 73 74 72 65 61 6d 2c 20 61 6e 64 20  ata stream, and 
12400 69 73 20 7a 65 72 6f 20 77 68 65 6e 20 73 74 61  is zero when sta
12410 72 74 69 6e 67 2c 20 65 76 65 6e 20 69 66 20 61  rting, even if a
12420 70 70 65 6e 64 69 6e 67 20 6f 72 0a 20 20 20 72  ppending or.   r
12430 65 61 64 69 6e 67 20 61 20 67 7a 69 70 20 73 74  eading a gzip st
12440 72 65 61 6d 20 66 72 6f 6d 20 74 68 65 20 6d 69  ream from the mi
12450 64 64 6c 65 20 6f 66 20 61 20 66 69 6c 65 20 75  ddle of a file u
12460 73 69 6e 67 20 67 7a 64 6f 70 65 6e 28 29 2e 0a  sing gzdopen()..
12470 0a 20 20 20 20 20 67 7a 74 65 6c 6c 28 66 69 6c  .     gztell(fil
12480 65 29 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  e) is equivalent
12490 20 74 6f 20 67 7a 73 65 65 6b 28 66 69 6c 65 2c   to gzseek(file,
124a0 20 30 4c 2c 20 53 45 45 4b 5f 43 55 52 29 0a 2a   0L, SEEK_CUR).*
124b0 2f 0a 0a 2f 2a 0a 5a 45 58 54 45 52 4e 20 7a 5f  /../*.ZEXTERN z_
124c0 6f 66 66 5f 74 20 5a 45 58 50 4f 52 54 20 67 7a  off_t ZEXPORT gz
124d0 6f 66 66 73 65 74 20 4f 46 28 28 67 7a 46 69 6c  offset OF((gzFil
124e0 65 20 66 69 6c 65 29 29 3b 0a 0a 20 20 20 20 20  e file));..     
124f0 52 65 74 75 72 6e 73 20 74 68 65 20 63 75 72 72  Returns the curr
12500 65 6e 74 20 6f 66 66 73 65 74 20 69 6e 20 74 68  ent offset in th
12510 65 20 66 69 6c 65 20 62 65 69 6e 67 20 72 65 61  e file being rea
12520 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 20 20 54  d or written.  T
12530 68 69 73 20 6f 66 66 73 65 74 0a 20 20 20 69 6e  his offset.   in
12540 63 6c 75 64 65 73 20 74 68 65 20 63 6f 75 6e 74  cludes the count
12550 20 6f 66 20 62 79 74 65 73 20 74 68 61 74 20 70   of bytes that p
12560 72 65 63 65 64 65 20 74 68 65 20 67 7a 69 70 20  recede the gzip 
12570 73 74 72 65 61 6d 2c 20 66 6f 72 20 65 78 61 6d  stream, for exam
12580 70 6c 65 20 77 68 65 6e 0a 20 20 20 61 70 70 65  ple when.   appe
12590 6e 64 69 6e 67 20 6f 72 20 77 68 65 6e 20 75 73  nding or when us
125a0 69 6e 67 20 67 7a 64 6f 70 65 6e 28 29 20 66 6f  ing gzdopen() fo
125b0 72 20 72 65 61 64 69 6e 67 2e 20 20 57 68 65 6e  r reading.  When
125c0 20 72 65 61 64 69 6e 67 2c 20 74 68 65 20 6f 66   reading, the of
125d0 66 73 65 74 0a 20 20 20 64 6f 65 73 20 6e 6f 74  fset.   does not
125e0 20 69 6e 63 6c 75 64 65 20 61 73 20 79 65 74 20   include as yet 
125f0 75 6e 75 73 65 64 20 62 75 66 66 65 72 65 64 20  unused buffered 
12600 69 6e 70 75 74 2e 20 20 54 68 69 73 20 69 6e 66  input.  This inf
12610 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  ormation can be 
12620 75 73 65 64 0a 20 20 20 66 6f 72 20 61 20 70 72  used.   for a pr
12630 6f 67 72 65 73 73 20 69 6e 64 69 63 61 74 6f 72  ogress indicator
12640 2e 20 20 4f 6e 20 65 72 72 6f 72 2c 20 67 7a 6f  .  On error, gzo
12650 66 66 73 65 74 28 29 20 72 65 74 75 72 6e 73 20  ffset() returns 
12660 2d 31 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20  -1..*/..ZEXTERN 
12670 69 6e 74 20 5a 45 58 50 4f 52 54 20 67 7a 65 6f  int ZEXPORT gzeo
12680 66 20 4f 46 28 28 67 7a 46 69 6c 65 20 66 69 6c  f OF((gzFile fil
12690 65 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 52 65 74  e));./*.     Ret
126a0 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 69 66  urns true (1) if
126b0 20 74 68 65 20 65 6e 64 2d 6f 66 2d 66 69 6c 65   the end-of-file
126c0 20 69 6e 64 69 63 61 74 6f 72 20 68 61 73 20 62   indicator has b
126d0 65 65 6e 20 73 65 74 20 77 68 69 6c 65 20 72 65  een set while re
126e0 61 64 69 6e 67 2c 0a 20 20 20 66 61 6c 73 65 20  ading,.   false 
126f0 28 30 29 20 6f 74 68 65 72 77 69 73 65 2e 20 20  (0) otherwise.  
12700 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 65 6e  Note that the en
12710 64 2d 6f 66 2d 66 69 6c 65 20 69 6e 64 69 63 61  d-of-file indica
12720 74 6f 72 20 69 73 20 73 65 74 20 6f 6e 6c 79 20  tor is set only 
12730 69 66 20 74 68 65 0a 20 20 20 72 65 61 64 20 74  if the.   read t
12740 72 69 65 64 20 74 6f 20 67 6f 20 70 61 73 74 20  ried to go past 
12750 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
12760 6e 70 75 74 2c 20 62 75 74 20 63 61 6d 65 20 75  nput, but came u
12770 70 20 73 68 6f 72 74 2e 20 20 54 68 65 72 65 66  p short.  Theref
12780 6f 72 65 2c 0a 20 20 20 6a 75 73 74 20 6c 69 6b  ore,.   just lik
12790 65 20 66 65 6f 66 28 29 2c 20 67 7a 65 6f 66 28  e feof(), gzeof(
127a0 29 20 6d 61 79 20 72 65 74 75 72 6e 20 66 61 6c  ) may return fal
127b0 73 65 20 65 76 65 6e 20 69 66 20 74 68 65 72 65  se even if there
127c0 20 69 73 20 6e 6f 20 6d 6f 72 65 20 64 61 74 61   is no more data
127d0 20 74 6f 0a 20 20 20 72 65 61 64 2c 20 69 6e 20   to.   read, in 
127e0 74 68 65 20 65 76 65 6e 74 20 74 68 61 74 20 74  the event that t
127f0 68 65 20 6c 61 73 74 20 72 65 61 64 20 72 65 71  he last read req
12800 75 65 73 74 20 77 61 73 20 66 6f 72 20 74 68 65  uest was for the
12810 20 65 78 61 63 74 20 6e 75 6d 62 65 72 20 6f 66   exact number of
12820 0a 20 20 20 62 79 74 65 73 20 72 65 6d 61 69 6e  .   bytes remain
12830 69 6e 67 20 69 6e 20 74 68 65 20 69 6e 70 75 74  ing in the input
12840 20 66 69 6c 65 2e 20 20 54 68 69 73 20 77 69 6c   file.  This wil
12850 6c 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20  l happen if the 
12860 69 6e 70 75 74 20 66 69 6c 65 20 73 69 7a 65 0a  input file size.
12870 20 20 20 69 73 20 61 6e 20 65 78 61 63 74 20 6d     is an exact m
12880 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20 62  ultiple of the b
12890 75 66 66 65 72 20 73 69 7a 65 2e 0a 0a 20 20 20  uffer size...   
128a0 20 20 49 66 20 67 7a 65 6f 66 28 29 20 72 65 74    If gzeof() ret
128b0 75 72 6e 73 20 74 72 75 65 2c 20 74 68 65 6e 20  urns true, then 
128c0 74 68 65 20 72 65 61 64 20 66 75 6e 63 74 69 6f  the read functio
128d0 6e 73 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 6e  ns will return n
128e0 6f 20 6d 6f 72 65 20 64 61 74 61 2c 0a 20 20 20  o more data,.   
128f0 75 6e 6c 65 73 73 20 74 68 65 20 65 6e 64 2d 6f  unless the end-o
12900 66 2d 66 69 6c 65 20 69 6e 64 69 63 61 74 6f 72  f-file indicator
12910 20 69 73 20 72 65 73 65 74 20 62 79 20 67 7a 63   is reset by gzc
12920 6c 65 61 72 65 72 72 28 29 20 61 6e 64 20 74 68  learerr() and th
12930 65 20 69 6e 70 75 74 20 66 69 6c 65 0a 20 20 20  e input file.   
12940 68 61 73 20 67 72 6f 77 6e 20 73 69 6e 63 65 20  has grown since 
12950 74 68 65 20 70 72 65 76 69 6f 75 73 20 65 6e 64  the previous end
12960 20 6f 66 20 66 69 6c 65 20 77 61 73 20 64 65 74   of file was det
12970 65 63 74 65 64 2e 0a 2a 2f 0a 0a 5a 45 58 54 45  ected..*/..ZEXTE
12980 52 4e 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 67  RN int ZEXPORT g
12990 7a 64 69 72 65 63 74 20 4f 46 28 28 67 7a 46 69  zdirect OF((gzFi
129a0 6c 65 20 66 69 6c 65 29 29 3b 0a 2f 2a 0a 20 20  le file));./*.  
129b0 20 20 20 52 65 74 75 72 6e 73 20 74 72 75 65 20     Returns true 
129c0 28 31 29 20 69 66 20 66 69 6c 65 20 69 73 20 62  (1) if file is b
129d0 65 69 6e 67 20 63 6f 70 69 65 64 20 64 69 72 65  eing copied dire
129e0 63 74 6c 79 20 77 68 69 6c 65 20 72 65 61 64 69  ctly while readi
129f0 6e 67 2c 20 6f 72 20 66 61 6c 73 65 0a 20 20 20  ng, or false.   
12a00 28 30 29 20 69 66 20 66 69 6c 65 20 69 73 20 61  (0) if file is a
12a10 20 67 7a 69 70 20 73 74 72 65 61 6d 20 62 65 69   gzip stream bei
12a20 6e 67 20 64 65 63 6f 6d 70 72 65 73 73 65 64 2e  ng decompressed.
12a30 0a 0a 20 20 20 20 20 49 66 20 74 68 65 20 69 6e  ..     If the in
12a40 70 75 74 20 66 69 6c 65 20 69 73 20 65 6d 70 74  put file is empt
12a50 79 2c 20 67 7a 64 69 72 65 63 74 28 29 20 77 69  y, gzdirect() wi
12a60 6c 6c 20 72 65 74 75 72 6e 20 74 72 75 65 2c 20  ll return true, 
12a70 73 69 6e 63 65 20 74 68 65 20 69 6e 70 75 74 0a  since the input.
12a80 20 20 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74     does not cont
12a90 61 69 6e 20 61 20 67 7a 69 70 20 73 74 72 65 61  ain a gzip strea
12aa0 6d 2e 0a 0a 20 20 20 20 20 49 66 20 67 7a 64 69  m...     If gzdi
12ab0 72 65 63 74 28 29 20 69 73 20 75 73 65 64 20 69  rect() is used i
12ac0 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
12ad0 20 67 7a 6f 70 65 6e 28 29 20 6f 72 20 67 7a 64   gzopen() or gzd
12ae0 6f 70 65 6e 28 29 20 69 74 20 77 69 6c 6c 0a 20  open() it will. 
12af0 20 20 63 61 75 73 65 20 62 75 66 66 65 72 73 20    cause buffers 
12b00 74 6f 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20  to be allocated 
12b10 74 6f 20 61 6c 6c 6f 77 20 72 65 61 64 69 6e 67  to allow reading
12b20 20 74 68 65 20 66 69 6c 65 20 74 6f 20 64 65 74   the file to det
12b30 65 72 6d 69 6e 65 20 69 66 20 69 74 0a 20 20 20  ermine if it.   
12b40 69 73 20 61 20 67 7a 69 70 20 66 69 6c 65 2e 20  is a gzip file. 
12b50 20 54 68 65 72 65 66 6f 72 65 20 69 66 20 67 7a   Therefore if gz
12b60 62 75 66 66 65 72 28 29 20 69 73 20 75 73 65 64  buffer() is used
12b70 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 63  , it should be c
12b80 61 6c 6c 65 64 20 62 65 66 6f 72 65 0a 20 20 20  alled before.   
12b90 67 7a 64 69 72 65 63 74 28 29 2e 0a 0a 20 20 20  gzdirect()...   
12ba0 20 20 57 68 65 6e 20 77 72 69 74 69 6e 67 2c 20    When writing, 
12bb0 67 7a 64 69 72 65 63 74 28 29 20 72 65 74 75 72  gzdirect() retur
12bc0 6e 73 20 74 72 75 65 20 28 31 29 20 69 66 20 74  ns true (1) if t
12bd0 72 61 6e 73 70 61 72 65 6e 74 20 77 72 69 74 69  ransparent writi
12be0 6e 67 20 77 61 73 0a 20 20 20 72 65 71 75 65 73  ng was.   reques
12bf0 74 65 64 20 28 22 77 54 22 20 66 6f 72 20 74 68  ted ("wT" for th
12c00 65 20 67 7a 6f 70 65 6e 28 29 20 6d 6f 64 65 29  e gzopen() mode)
12c10 2c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 20 6f  , or false (0) o
12c20 74 68 65 72 77 69 73 65 2e 20 20 28 4e 6f 74 65  therwise.  (Note
12c30 3a 0a 20 20 20 67 7a 64 69 72 65 63 74 28 29 20  :.   gzdirect() 
12c40 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 20 77 68  is not needed wh
12c50 65 6e 20 77 72 69 74 69 6e 67 2e 20 20 54 72 61  en writing.  Tra
12c60 6e 73 70 61 72 65 6e 74 20 77 72 69 74 69 6e 67  nsparent writing
12c70 20 6d 75 73 74 20 62 65 0a 20 20 20 65 78 70 6c   must be.   expl
12c80 69 63 69 74 6c 79 20 72 65 71 75 65 73 74 65 64  icitly requested
12c90 2c 20 73 6f 20 74 68 65 20 61 70 70 6c 69 63 61  , so the applica
12ca0 74 69 6f 6e 20 61 6c 72 65 61 64 79 20 6b 6e 6f  tion already kno
12cb0 77 73 20 74 68 65 20 61 6e 73 77 65 72 2e 20 20  ws the answer.  
12cc0 57 68 65 6e 0a 20 20 20 6c 69 6e 6b 69 6e 67 20  When.   linking 
12cd0 73 74 61 74 69 63 61 6c 6c 79 2c 20 75 73 69 6e  statically, usin
12ce0 67 20 67 7a 64 69 72 65 63 74 28 29 20 77 69 6c  g gzdirect() wil
12cf0 6c 20 69 6e 63 6c 75 64 65 20 61 6c 6c 20 6f 66  l include all of
12d00 20 74 68 65 20 7a 6c 69 62 20 63 6f 64 65 20 66   the zlib code f
12d10 6f 72 0a 20 20 20 67 7a 69 70 20 66 69 6c 65 20  or.   gzip file 
12d20 72 65 61 64 69 6e 67 20 61 6e 64 20 64 65 63 6f  reading and deco
12d30 6d 70 72 65 73 73 69 6f 6e 2c 20 77 68 69 63 68  mpression, which
12d40 20 6d 61 79 20 6e 6f 74 20 62 65 20 64 65 73 69   may not be desi
12d50 72 65 64 2e 29 0a 2a 2f 0a 0a 5a 45 58 54 45 52  red.).*/..ZEXTER
12d60 4e 20 69 6e 74 20 5a 45 58 50 4f 52 54 20 20 20  N int ZEXPORT   
12d70 20 67 7a 63 6c 6f 73 65 20 4f 46 28 28 67 7a 46   gzclose OF((gzF
12d80 69 6c 65 20 66 69 6c 65 29 29 3b 0a 2f 2a 0a 20  ile file));./*. 
12d90 20 20 20 20 46 6c 75 73 68 65 73 20 61 6c 6c 20      Flushes all 
12da0 70 65 6e 64 69 6e 67 20 6f 75 74 70 75 74 20 69  pending output i
12db0 66 20 6e 65 63 65 73 73 61 72 79 2c 20 63 6c 6f  f necessary, clo
12dc0 73 65 73 20 74 68 65 20 63 6f 6d 70 72 65 73 73  ses the compress
12dd0 65 64 20 66 69 6c 65 20 61 6e 64 0a 20 20 20 64  ed file and.   d
12de0 65 61 6c 6c 6f 63 61 74 65 73 20 74 68 65 20 28  eallocates the (
12df0 64 65 29 63 6f 6d 70 72 65 73 73 69 6f 6e 20 73  de)compression s
12e00 74 61 74 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  tate.  Note that
12e10 20 6f 6e 63 65 20 66 69 6c 65 20 69 73 20 63 6c   once file is cl
12e20 6f 73 65 64 2c 20 79 6f 75 0a 20 20 20 63 61 6e  osed, you.   can
12e30 6e 6f 74 20 63 61 6c 6c 20 67 7a 65 72 72 6f 72  not call gzerror
12e40 20 77 69 74 68 20 66 69 6c 65 2c 20 73 69 6e 63   with file, sinc
12e50 65 20 69 74 73 20 73 74 72 75 63 74 75 72 65 73  e its structures
12e60 20 68 61 76 65 20 62 65 65 6e 20 64 65 61 6c 6c   have been deall
12e70 6f 63 61 74 65 64 2e 0a 20 20 20 67 7a 63 6c 6f  ocated..   gzclo
12e80 73 65 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 63  se must not be c
12e90 61 6c 6c 65 64 20 6d 6f 72 65 20 74 68 61 6e 20  alled more than 
12ea0 6f 6e 63 65 20 6f 6e 20 74 68 65 20 73 61 6d 65  once on the same
12eb0 20 66 69 6c 65 2c 20 6a 75 73 74 20 61 73 20 66   file, just as f
12ec0 72 65 65 0a 20 20 20 6d 75 73 74 20 6e 6f 74 20  ree.   must not 
12ed0 62 65 20 63 61 6c 6c 65 64 20 6d 6f 72 65 20 74  be called more t
12ee0 68 61 6e 20 6f 6e 63 65 20 6f 6e 20 74 68 65 20  han once on the 
12ef0 73 61 6d 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  same allocation.
12f00 0a 0a 20 20 20 20 20 67 7a 63 6c 6f 73 65 20 77  ..     gzclose w
12f10 69 6c 6c 20 72 65 74 75 72 6e 20 5a 5f 53 54 52  ill return Z_STR
12f20 45 41 4d 5f 45 52 52 4f 52 20 69 66 20 66 69 6c  EAM_ERROR if fil
12f30 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 2c 20  e is not valid, 
12f40 5a 5f 45 52 52 4e 4f 20 6f 6e 20 61 0a 20 20 20  Z_ERRNO on a.   
12f50 66 69 6c 65 20 6f 70 65 72 61 74 69 6f 6e 20 65  file operation e
12f60 72 72 6f 72 2c 20 5a 5f 4d 45 4d 5f 45 52 52 4f  rror, Z_MEM_ERRO
12f70 52 20 69 66 20 6f 75 74 20 6f 66 20 6d 65 6d 6f  R if out of memo
12f80 72 79 2c 20 5a 5f 42 55 46 5f 45 52 52 4f 52 20  ry, Z_BUF_ERROR 
12f90 69 66 20 74 68 65 0a 20 20 20 6c 61 73 74 20 72  if the.   last r
12fa0 65 61 64 20 65 6e 64 65 64 20 69 6e 20 74 68 65  ead ended in the
12fb0 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 67 7a 69   middle of a gzi
12fc0 70 20 73 74 72 65 61 6d 2c 20 6f 72 20 5a 5f 4f  p stream, or Z_O
12fd0 4b 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 2a 2f  K on success..*/
12fe0 0a 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45  ..ZEXTERN int ZE
12ff0 58 50 4f 52 54 20 67 7a 63 6c 6f 73 65 5f 72 20  XPORT gzclose_r 
13000 4f 46 28 28 67 7a 46 69 6c 65 20 66 69 6c 65 29  OF((gzFile file)
13010 29 3b 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a  );.ZEXTERN int Z
13020 45 58 50 4f 52 54 20 67 7a 63 6c 6f 73 65 5f 77  EXPORT gzclose_w
13030 20 4f 46 28 28 67 7a 46 69 6c 65 20 66 69 6c 65   OF((gzFile file
13040 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 53 61 6d 65  ));./*.     Same
13050 20 61 73 20 67 7a 63 6c 6f 73 65 28 29 2c 20 62   as gzclose(), b
13060 75 74 20 67 7a 63 6c 6f 73 65 5f 72 28 29 20 69  ut gzclose_r() i
13070 73 20 6f 6e 6c 79 20 66 6f 72 20 75 73 65 20 77  s only for use w
13080 68 65 6e 20 72 65 61 64 69 6e 67 2c 20 61 6e 64  hen reading, and
13090 0a 20 20 20 67 7a 63 6c 6f 73 65 5f 77 28 29 20  .   gzclose_w() 
130a0 69 73 20 6f 6e 6c 79 20 66 6f 72 20 75 73 65 20  is only for use 
130b0 77 68 65 6e 20 77 72 69 74 69 6e 67 20 6f 72 20  when writing or 
130c0 61 70 70 65 6e 64 69 6e 67 2e 20 20 54 68 65 20  appending.  The 
130d0 61 64 76 61 6e 74 61 67 65 20 74 6f 0a 20 20 20  advantage to.   
130e0 75 73 69 6e 67 20 74 68 65 73 65 20 69 6e 73 74  using these inst
130f0 65 61 64 20 6f 66 20 67 7a 63 6c 6f 73 65 28 29  ead of gzclose()
13100 20 69 73 20 74 68 61 74 20 74 68 65 79 20 61 76   is that they av
13110 6f 69 64 20 6c 69 6e 6b 69 6e 67 20 69 6e 20 7a  oid linking in z
13120 6c 69 62 0a 20 20 20 63 6f 6d 70 72 65 73 73 69  lib.   compressi
13130 6f 6e 20 6f 72 20 64 65 63 6f 6d 70 72 65 73 73  on or decompress
13140 69 6f 6e 20 63 6f 64 65 20 74 68 61 74 20 69 73  ion code that is
13150 20 6e 6f 74 20 75 73 65 64 20 77 68 65 6e 20 6f   not used when o
13160 6e 6c 79 20 72 65 61 64 69 6e 67 20 6f 72 20 6f  nly reading or o
13170 6e 6c 79 0a 20 20 20 77 72 69 74 69 6e 67 20 72  nly.   writing r
13180 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 49 66  espectively.  If
13190 20 67 7a 63 6c 6f 73 65 28 29 20 69 73 20 75 73   gzclose() is us
131a0 65 64 2c 20 74 68 65 6e 20 62 6f 74 68 20 63 6f  ed, then both co
131b0 6d 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 20 20  mpression and.  
131c0 20 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e 20 63   decompression c
131d0 6f 64 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 6c  ode will be incl
131e0 75 64 65 64 20 74 68 65 20 61 70 70 6c 69 63 61  uded the applica
131f0 74 69 6f 6e 20 77 68 65 6e 20 6c 69 6e 6b 69 6e  tion when linkin
13200 67 20 74 6f 20 61 20 73 74 61 74 69 63 0a 20 20  g to a static.  
13210 20 7a 6c 69 62 20 6c 69 62 72 61 72 79 2e 0a 2a   zlib library..*
13220 2f 0a 0a 5a 45 58 54 45 52 4e 20 63 6f 6e 73 74  /..ZEXTERN const
13230 20 63 68 61 72 20 2a 20 5a 45 58 50 4f 52 54 20   char * ZEXPORT 
13240 67 7a 65 72 72 6f 72 20 4f 46 28 28 67 7a 46 69  gzerror OF((gzFi
13250 6c 65 20 66 69 6c 65 2c 20 69 6e 74 20 2a 65 72  le file, int *er
13260 72 6e 75 6d 29 29 3b 0a 2f 2a 0a 20 20 20 20 20  rnum));./*.     
13270 52 65 74 75 72 6e 73 20 74 68 65 20 65 72 72 6f  Returns the erro
13280 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68  r message for th
13290 65 20 6c 61 73 74 20 65 72 72 6f 72 20 77 68 69  e last error whi
132a0 63 68 20 6f 63 63 75 72 72 65 64 20 6f 6e 20 74  ch occurred on t
132b0 68 65 20 67 69 76 65 6e 0a 20 20 20 63 6f 6d 70  he given.   comp
132c0 72 65 73 73 65 64 20 66 69 6c 65 2e 20 20 65 72  ressed file.  er
132d0 72 6e 75 6d 20 69 73 20 73 65 74 20 74 6f 20 7a  rnum is set to z
132e0 6c 69 62 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  lib error number
132f0 2e 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  .  If an error o
13300 63 63 75 72 72 65 64 0a 20 20 20 69 6e 20 74 68  ccurred.   in th
13310 65 20 66 69 6c 65 20 73 79 73 74 65 6d 20 61 6e  e file system an
13320 64 20 6e 6f 74 20 69 6e 20 74 68 65 20 63 6f 6d  d not in the com
13330 70 72 65 73 73 69 6f 6e 20 6c 69 62 72 61 72 79  pression library
13340 2c 20 65 72 72 6e 75 6d 20 69 73 20 73 65 74 20  , errnum is set 
13350 74 6f 0a 20 20 20 5a 5f 45 52 52 4e 4f 20 61 6e  to.   Z_ERRNO an
13360 64 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  d the applicatio
13370 6e 20 6d 61 79 20 63 6f 6e 73 75 6c 74 20 65 72  n may consult er
13380 72 6e 6f 20 74 6f 20 67 65 74 20 74 68 65 20 65  rno to get the e
13390 78 61 63 74 20 65 72 72 6f 72 20 63 6f 64 65 2e  xact error code.
133a0 0a 0a 20 20 20 20 20 54 68 65 20 61 70 70 6c 69  ..     The appli
133b0 63 61 74 69 6f 6e 20 6d 75 73 74 20 6e 6f 74 20  cation must not 
133c0 6d 6f 64 69 66 79 20 74 68 65 20 72 65 74 75 72  modify the retur
133d0 6e 65 64 20 73 74 72 69 6e 67 2e 20 20 46 75 74  ned string.  Fut
133e0 75 72 65 20 63 61 6c 6c 73 20 74 6f 0a 20 20 20  ure calls to.   
133f0 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 61  this function ma
13400 79 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  y invalidate the
13410 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75   previously retu
13420 72 6e 65 64 20 73 74 72 69 6e 67 2e 20 20 49 66  rned string.  If
13430 20 66 69 6c 65 20 69 73 0a 20 20 20 63 6c 6f 73   file is.   clos
13440 65 64 2c 20 74 68 65 6e 20 74 68 65 20 73 74 72  ed, then the str
13450 69 6e 67 20 70 72 65 76 69 6f 75 73 6c 79 20 72  ing previously r
13460 65 74 75 72 6e 65 64 20 62 79 20 67 7a 65 72 72  eturned by gzerr
13470 6f 72 20 77 69 6c 6c 20 6e 6f 20 6c 6f 6e 67 65  or will no longe
13480 72 20 62 65 0a 20 20 20 61 76 61 69 6c 61 62 6c  r be.   availabl
13490 65 2e 0a 0a 20 20 20 20 20 67 7a 65 72 72 6f 72  e...     gzerror
134a0 28 29 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  () should be use
134b0 64 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  d to distinguish
134c0 20 65 72 72 6f 72 73 20 66 72 6f 6d 20 65 6e 64   errors from end
134d0 2d 6f 66 2d 66 69 6c 65 20 66 6f 72 20 74 68 6f  -of-file for tho
134e0 73 65 0a 20 20 20 66 75 6e 63 74 69 6f 6e 73 20  se.   functions 
134f0 61 62 6f 76 65 20 74 68 61 74 20 64 6f 20 6e 6f  above that do no
13500 74 20 64 69 73 74 69 6e 67 75 69 73 68 20 74 68  t distinguish th
13510 6f 73 65 20 63 61 73 65 73 20 69 6e 20 74 68 65  ose cases in the
13520 69 72 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ir return values
13530 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20 76 6f  ..*/..ZEXTERN vo
13540 69 64 20 5a 45 58 50 4f 52 54 20 67 7a 63 6c 65  id ZEXPORT gzcle
13550 61 72 65 72 72 20 4f 46 28 28 67 7a 46 69 6c 65  arerr OF((gzFile
13560 20 66 69 6c 65 29 29 3b 0a 2f 2a 0a 20 20 20 20   file));./*.    
13570 20 43 6c 65 61 72 73 20 74 68 65 20 65 72 72 6f   Clears the erro
13580 72 20 61 6e 64 20 65 6e 64 2d 6f 66 2d 66 69 6c  r and end-of-fil
13590 65 20 66 6c 61 67 73 20 66 6f 72 20 66 69 6c 65  e flags for file
135a0 2e 20 20 54 68 69 73 20 69 73 20 61 6e 61 6c 6f  .  This is analo
135b0 67 6f 75 73 20 74 6f 20 74 68 65 0a 20 20 20 63  gous to the.   c
135c0 6c 65 61 72 65 72 72 28 29 20 66 75 6e 63 74 69  learerr() functi
135d0 6f 6e 20 69 6e 20 73 74 64 69 6f 2e 20 20 54 68  on in stdio.  Th
135e0 69 73 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72  is is useful for
135f0 20 63 6f 6e 74 69 6e 75 69 6e 67 20 74 6f 20 72   continuing to r
13600 65 61 64 20 61 20 67 7a 69 70 0a 20 20 20 66 69  ead a gzip.   fi
13610 6c 65 20 74 68 61 74 20 69 73 20 62 65 69 6e 67  le that is being
13620 20 77 72 69 74 74 65 6e 20 63 6f 6e 63 75 72 72   written concurr
13630 65 6e 74 6c 79 2e 0a 2a 2f 0a 0a 23 65 6e 64 69  ently..*/..#endi
13640 66 20 2f 2a 20 21 5a 5f 53 4f 4c 4f 20 2a 2f 0a  f /* !Z_SOLO */.
13650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13660 20 20 20 20 20 20 20 20 20 2f 2a 20 63 68 65 63           /* chec
13670 6b 73 75 6d 20 66 75 6e 63 74 69 6f 6e 73 20 2a  ksum functions *
13680 2f 0a 0a 2f 2a 0a 20 20 20 20 20 54 68 65 73 65  /../*.     These
13690 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
136a0 6f 74 20 72 65 6c 61 74 65 64 20 74 6f 20 63 6f  ot related to co
136b0 6d 70 72 65 73 73 69 6f 6e 20 62 75 74 20 61 72  mpression but ar
136c0 65 20 65 78 70 6f 72 74 65 64 0a 20 20 20 61 6e  e exported.   an
136d0 79 77 61 79 20 62 65 63 61 75 73 65 20 74 68 65  yway because the
136e0 79 20 6d 69 67 68 74 20 62 65 20 75 73 65 66 75  y might be usefu
136f0 6c 20 69 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  l in application
13700 73 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6d 70  s using the comp
13710 72 65 73 73 69 6f 6e 0a 20 20 20 6c 69 62 72 61  ression.   libra
13720 72 79 2e 0a 2a 2f 0a 0a 5a 45 58 54 45 52 4e 20  ry..*/..ZEXTERN 
13730 75 4c 6f 6e 67 20 5a 45 58 50 4f 52 54 20 61 64  uLong ZEXPORT ad
13740 6c 65 72 33 32 20 4f 46 28 28 75 4c 6f 6e 67 20  ler32 OF((uLong 
13750 61 64 6c 65 72 2c 20 63 6f 6e 73 74 20 42 79 74  adler, const Byt
13760 65 66 20 2a 62 75 66 2c 20 75 49 6e 74 20 6c 65  ef *buf, uInt le
13770 6e 29 29 3b 0a 2f 2a 0a 20 20 20 20 20 55 70 64  n));./*.     Upd
13780 61 74 65 20 61 20 72 75 6e 6e 69 6e 67 20 41 64  ate a running Ad
13790 6c 65 72 2d 33 32 20 63 68 65 63 6b 73 75 6d 20  ler-32 checksum 
137a0 77 69 74 68 20 74 68 65 20 62 79 74 65 73 20 62  with the bytes b
137b0 75 66 5b 30 2e 2e 6c 65 6e 2d 31 5d 20 61 6e 64  uf[0..len-1] and
137c0 0a 20 20 20 72 65 74 75 72 6e 20 74 68 65 20 75  .   return the u
137d0 70 64 61 74 65 64 20 63 68 65 63 6b 73 75 6d 2e  pdated checksum.
137e0 20 20 49 66 20 62 75 66 20 69 73 20 5a 5f 4e 55    If buf is Z_NU
137f0 4c 4c 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f  LL, this functio
13800 6e 20 72 65 74 75 72 6e 73 20 74 68 65 0a 20 20  n returns the.  
13810 20 72 65 71 75 69 72 65 64 20 69 6e 69 74 69 61   required initia
13820 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  l value for the 
13830 63 68 65 63 6b 73 75 6d 2e 0a 0a 20 20 20 20 20  checksum...     
13840 41 6e 20 41 64 6c 65 72 2d 33 32 20 63 68 65 63  An Adler-32 chec
13850 6b 73 75 6d 20 69 73 20 61 6c 6d 6f 73 74 20 61  ksum is almost a
13860 73 20 72 65 6c 69 61 62 6c 65 20 61 73 20 61 20  s reliable as a 
13870 43 52 43 33 32 20 62 75 74 20 63 61 6e 20 62 65  CRC32 but can be
13880 20 63 6f 6d 70 75 74 65 64 0a 20 20 20 6d 75 63   computed.   muc
13890 68 20 66 61 73 74 65 72 2e 0a 0a 20 20 20 55 73  h faster...   Us
138a0 61 67 65 20 65 78 61 6d 70 6c 65 3a 0a 0a 20 20  age example:..  
138b0 20 20 20 75 4c 6f 6e 67 20 61 64 6c 65 72 20 3d     uLong adler =
138c0 20 61 64 6c 65 72 33 32 28 30 4c 2c 20 5a 5f 4e   adler32(0L, Z_N
138d0 55 4c 4c 2c 20 30 29 3b 0a 0a 20 20 20 20 20 77  ULL, 0);..     w
138e0 68 69 6c 65 20 28 72 65 61 64 5f 62 75 66 66 65  hile (read_buffe
138f0 72 28 62 75 66 66 65 72 2c 20 6c 65 6e 67 74 68  r(buffer, length
13900 29 20 21 3d 20 45 4f 46 29 20 7b 0a 20 20 20 20  ) != EOF) {.    
13910 20 20 20 61 64 6c 65 72 20 3d 20 61 64 6c 65 72     adler = adler
13920 33 32 28 61 64 6c 65 72 2c 20 62 75 66 66 65 72  32(adler, buffer
13930 2c 20 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 20  , length);.     
13940 7d 0a 20 20 20 20 20 69 66 20 28 61 64 6c 65 72  }.     if (adler
13950 20 21 3d 20 6f 72 69 67 69 6e 61 6c 5f 61 64 6c   != original_adl
13960 65 72 29 20 65 72 72 6f 72 28 29 3b 0a 2a 2f 0a  er) error();.*/.
13970 0a 2f 2a 0a 5a 45 58 54 45 52 4e 20 75 4c 6f 6e  ./*.ZEXTERN uLon
13980 67 20 5a 45 58 50 4f 52 54 20 61 64 6c 65 72 33  g ZEXPORT adler3
13990 32 5f 63 6f 6d 62 69 6e 65 20 4f 46 28 28 75 4c  2_combine OF((uL
139a0 6f 6e 67 20 61 64 6c 65 72 31 2c 20 75 4c 6f 6e  ong adler1, uLon
139b0 67 20 61 64 6c 65 72 32 2c 0a 20 20 20 20 20 20  g adler2,.      
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 7a 5f 6f 66 66 5f 74 20 6c 65 6e 32      z_off_t len2
139f0 29 29 3b 0a 0a 20 20 20 20 20 43 6f 6d 62 69 6e  ));..     Combin
13a00 65 20 74 77 6f 20 41 64 6c 65 72 2d 33 32 20 63  e two Adler-32 c
13a10 68 65 63 6b 73 75 6d 73 20 69 6e 74 6f 20 6f 6e  hecksums into on
13a20 65 2e 20 20 46 6f 72 20 74 77 6f 20 73 65 71 75  e.  For two sequ
13a30 65 6e 63 65 73 20 6f 66 20 62 79 74 65 73 2c 20  ences of bytes, 
13a40 73 65 71 31 0a 20 20 20 61 6e 64 20 73 65 71 32  seq1.   and seq2
13a50 20 77 69 74 68 20 6c 65 6e 67 74 68 73 20 6c 65   with lengths le
13a60 6e 31 20 61 6e 64 20 6c 65 6e 32 2c 20 41 64 6c  n1 and len2, Adl
13a70 65 72 2d 33 32 20 63 68 65 63 6b 73 75 6d 73 20  er-32 checksums 
13a80 77 65 72 65 20 63 61 6c 63 75 6c 61 74 65 64 20  were calculated 
13a90 66 6f 72 0a 20 20 20 65 61 63 68 2c 20 61 64 6c  for.   each, adl
13aa0 65 72 31 20 61 6e 64 20 61 64 6c 65 72 32 2e 20  er1 and adler2. 
13ab0 20 61 64 6c 65 72 33 32 5f 63 6f 6d 62 69 6e 65   adler32_combine
13ac0 28 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 41  () returns the A
13ad0 64 6c 65 72 2d 33 32 20 63 68 65 63 6b 73 75 6d  dler-32 checksum
13ae0 20 6f 66 0a 20 20 20 73 65 71 31 20 61 6e 64 20   of.   seq1 and 
13af0 73 65 71 32 20 63 6f 6e 63 61 74 65 6e 61 74 65  seq2 concatenate
13b00 64 2c 20 72 65 71 75 69 72 69 6e 67 20 6f 6e 6c  d, requiring onl
13b10 79 20 61 64 6c 65 72 31 2c 20 61 64 6c 65 72 32  y adler1, adler2
13b20 2c 20 61 6e 64 20 6c 65 6e 32 2e 20 20 4e 6f 74  , and len2.  Not
13b30 65 0a 20 20 20 74 68 61 74 20 74 68 65 20 7a 5f  e.   that the z_
13b40 6f 66 66 5f 74 20 74 79 70 65 20 28 6c 69 6b 65  off_t type (like
13b50 20 6f 66 66 5f 74 29 20 69 73 20 61 20 73 69 67   off_t) is a sig
13b60 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 49 66  ned integer.  If
13b70 20 6c 65 6e 32 20 69 73 0a 20 20 20 6e 65 67 61   len2 is.   nega
13b80 74 69 76 65 2c 20 74 68 65 20 72 65 73 75 6c 74  tive, the result
13b90 20 68 61 73 20 6e 6f 20 6d 65 61 6e 69 6e 67 20   has no meaning 
13ba0 6f 72 20 75 74 69 6c 69 74 79 2e 0a 2a 2f 0a 0a  or utility..*/..
13bb0 5a 45 58 54 45 52 4e 20 75 4c 6f 6e 67 20 5a 45  ZEXTERN uLong ZE
13bc0 58 50 4f 52 54 20 63 72 63 33 32 20 20 20 4f 46  XPORT crc32   OF
13bd0 28 28 75 4c 6f 6e 67 20 63 72 63 2c 20 63 6f 6e  ((uLong crc, con
13be0 73 74 20 42 79 74 65 66 20 2a 62 75 66 2c 20 75  st Bytef *buf, u
13bf0 49 6e 74 20 6c 65 6e 29 29 3b 0a 2f 2a 0a 20 20  Int len));./*.  
13c00 20 20 20 55 70 64 61 74 65 20 61 20 72 75 6e 6e     Update a runn
13c10 69 6e 67 20 43 52 43 2d 33 32 20 77 69 74 68 20  ing CRC-32 with 
13c20 74 68 65 20 62 79 74 65 73 20 62 75 66 5b 30 2e  the bytes buf[0.
13c30 2e 6c 65 6e 2d 31 5d 20 61 6e 64 20 72 65 74 75  .len-1] and retu
13c40 72 6e 20 74 68 65 0a 20 20 20 75 70 64 61 74 65  rn the.   update
13c50 64 20 43 52 43 2d 33 32 2e 20 20 49 66 20 62 75  d CRC-32.  If bu
13c60 66 20 69 73 20 5a 5f 4e 55 4c 4c 2c 20 74 68 69  f is Z_NULL, thi
13c70 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  s function retur
13c80 6e 73 20 74 68 65 20 72 65 71 75 69 72 65 64 0a  ns the required.
13c90 20 20 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65     initial value
13ca0 20 66 6f 72 20 74 68 65 20 63 72 63 2e 20 20 50   for the crc.  P
13cb0 72 65 2d 20 61 6e 64 20 70 6f 73 74 2d 63 6f 6e  re- and post-con
13cc0 64 69 74 69 6f 6e 69 6e 67 20 28 6f 6e 65 27 73  ditioning (one's
13cd0 20 63 6f 6d 70 6c 65 6d 65 6e 74 29 20 69 73 0a   complement) is.
13ce0 20 20 20 70 65 72 66 6f 72 6d 65 64 20 77 69 74     performed wit
13cf0 68 69 6e 20 74 68 69 73 20 66 75 6e 63 74 69 6f  hin this functio
13d00 6e 20 73 6f 20 69 74 20 73 68 6f 75 6c 64 6e 27  n so it shouldn'
13d10 74 20 62 65 20 64 6f 6e 65 20 62 79 20 74 68 65  t be done by the
13d20 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 0a 20   application... 
13d30 20 20 55 73 61 67 65 20 65 78 61 6d 70 6c 65 3a    Usage example:
13d40 0a 0a 20 20 20 20 20 75 4c 6f 6e 67 20 63 72 63  ..     uLong crc
13d50 20 3d 20 63 72 63 33 32 28 30 4c 2c 20 5a 5f 4e   = crc32(0L, Z_N
13d60 55 4c 4c 2c 20 30 29 3b 0a 0a 20 20 20 20 20 77  ULL, 0);..     w
13d70 68 69 6c 65 20 28 72 65 61 64 5f 62 75 66 66 65  hile (read_buffe
13d80 72 28 62 75 66 66 65 72 2c 20 6c 65 6e 67 74 68  r(buffer, length
13d90 29 20 21 3d 20 45 4f 46 29 20 7b 0a 20 20 20 20  ) != EOF) {.    
13da0 20 20 20 63 72 63 20 3d 20 63 72 63 33 32 28 63     crc = crc32(c
13db0 72 63 2c 20 62 75 66 66 65 72 2c 20 6c 65 6e 67  rc, buffer, leng
13dc0 74 68 29 3b 0a 20 20 20 20 20 7d 0a 20 20 20 20  th);.     }.    
13dd0 20 69 66 20 28 63 72 63 20 21 3d 20 6f 72 69 67   if (crc != orig
13de0 69 6e 61 6c 5f 63 72 63 29 20 65 72 72 6f 72 28  inal_crc) error(
13df0 29 3b 0a 2a 2f 0a 0a 2f 2a 0a 5a 45 58 54 45 52  );.*/../*.ZEXTER
13e00 4e 20 75 4c 6f 6e 67 20 5a 45 58 50 4f 52 54 20  N uLong ZEXPORT 
13e10 63 72 63 33 32 5f 63 6f 6d 62 69 6e 65 20 4f 46  crc32_combine OF
13e20 28 28 75 4c 6f 6e 67 20 63 72 63 31 2c 20 75 4c  ((uLong crc1, uL
13e30 6f 6e 67 20 63 72 63 32 2c 20 7a 5f 6f 66 66 5f  ong crc2, z_off_
13e40 74 20 6c 65 6e 32 29 29 3b 0a 0a 20 20 20 20 20  t len2));..     
13e50 43 6f 6d 62 69 6e 65 20 74 77 6f 20 43 52 43 2d  Combine two CRC-
13e60 33 32 20 63 68 65 63 6b 20 76 61 6c 75 65 73 20  32 check values 
13e70 69 6e 74 6f 20 6f 6e 65 2e 20 20 46 6f 72 20 74  into one.  For t
13e80 77 6f 20 73 65 71 75 65 6e 63 65 73 20 6f 66 20  wo sequences of 
13e90 62 79 74 65 73 2c 0a 20 20 20 73 65 71 31 20 61  bytes,.   seq1 a
13ea0 6e 64 20 73 65 71 32 20 77 69 74 68 20 6c 65 6e  nd seq2 with len
13eb0 67 74 68 73 20 6c 65 6e 31 20 61 6e 64 20 6c 65  gths len1 and le
13ec0 6e 32 2c 20 43 52 43 2d 33 32 20 63 68 65 63 6b  n2, CRC-32 check
13ed0 20 76 61 6c 75 65 73 20 77 65 72 65 0a 20 20 20   values were.   
13ee0 63 61 6c 63 75 6c 61 74 65 64 20 66 6f 72 20 65  calculated for e
13ef0 61 63 68 2c 20 63 72 63 31 20 61 6e 64 20 63 72  ach, crc1 and cr
13f00 63 32 2e 20 20 63 72 63 33 32 5f 63 6f 6d 62 69  c2.  crc32_combi
13f10 6e 65 28 29 20 72 65 74 75 72 6e 73 20 74 68 65  ne() returns the
13f20 20 43 52 43 2d 33 32 0a 20 20 20 63 68 65 63 6b   CRC-32.   check
13f30 20 76 61 6c 75 65 20 6f 66 20 73 65 71 31 20 61   value of seq1 a
13f40 6e 64 20 73 65 71 32 20 63 6f 6e 63 61 74 65 6e  nd seq2 concaten
13f50 61 74 65 64 2c 20 72 65 71 75 69 72 69 6e 67 20  ated, requiring 
13f60 6f 6e 6c 79 20 63 72 63 31 2c 20 63 72 63 32 2c  only crc1, crc2,
13f70 20 61 6e 64 0a 20 20 20 6c 65 6e 32 2e 0a 2a 2f   and.   len2..*/
13f80 0a 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13f90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 76 61             /* va
13fa0 72 69 6f 75 73 20 68 61 63 6b 73 2c 20 64 6f 6e  rious hacks, don
13fb0 27 74 20 6c 6f 6f 6b 20 3a 29 20 2a 2f 0a 0a 2f  't look :) */../
13fc0 2a 20 64 65 66 6c 61 74 65 49 6e 69 74 20 61 6e  * deflateInit an
13fd0 64 20 69 6e 66 6c 61 74 65 49 6e 69 74 20 61 72  d inflateInit ar
13fe0 65 20 6d 61 63 72 6f 73 20 74 6f 20 61 6c 6c 6f  e macros to allo
13ff0 77 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 7a  w checking the z
14000 6c 69 62 20 76 65 72 73 69 6f 6e 0a 20 2a 20 61  lib version. * a
14010 6e 64 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 27  nd the compiler'
14020 73 20 76 69 65 77 20 6f 66 20 7a 5f 73 74 72 65  s view of z_stre
14030 61 6d 3a 0a 20 2a 2f 0a 5a 45 58 54 45 52 4e 20  am:. */.ZEXTERN 
14040 69 6e 74 20 5a 45 58 50 4f 52 54 20 64 65 66 6c  int ZEXPORT defl
14050 61 74 65 49 6e 69 74 5f 20 4f 46 28 28 7a 5f 73  ateInit_ OF((z_s
14060 74 72 65 61 6d 70 20 73 74 72 6d 2c 20 69 6e 74  treamp strm, int
14070 20 6c 65 76 65 6c 2c 0a 20 20 20 20 20 20 20 20   level,.        
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
140a0 73 74 20 63 68 61 72 20 2a 76 65 72 73 69 6f 6e  st char *version
140b0 2c 20 69 6e 74 20 73 74 72 65 61 6d 5f 73 69 7a  , int stream_siz
140c0 65 29 29 3b 0a 5a 45 58 54 45 52 4e 20 69 6e 74  e));.ZEXTERN int
140d0 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c 61 74 65   ZEXPORT inflate
140e0 49 6e 69 74 5f 20 4f 46 28 28 7a 5f 73 74 72 65  Init_ OF((z_stre
140f0 61 6d 70 20 73 74 72 6d 2c 0a 20 20 20 20 20 20  amp strm,.      
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14120 6f 6e 73 74 20 63 68 61 72 20 2a 76 65 72 73 69  onst char *versi
14130 6f 6e 2c 20 69 6e 74 20 73 74 72 65 61 6d 5f 73  on, int stream_s
14140 69 7a 65 29 29 3b 0a 5a 45 58 54 45 52 4e 20 69  ize));.ZEXTERN i
14150 6e 74 20 5a 45 58 50 4f 52 54 20 64 65 66 6c 61  nt ZEXPORT defla
14160 74 65 49 6e 69 74 32 5f 20 4f 46 28 28 7a 5f 73  teInit2_ OF((z_s
14170 74 72 65 61 6d 70 20 73 74 72 6d 2c 20 69 6e 74  treamp strm, int
14180 20 20 6c 65 76 65 6c 2c 20 69 6e 74 20 20 6d 65    level, int  me
14190 74 68 6f 64 2c 0a 20 20 20 20 20 20 20 20 20 20  thod,.          
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
141c0 77 69 6e 64 6f 77 42 69 74 73 2c 20 69 6e 74 20  windowBits, int 
141d0 6d 65 6d 4c 65 76 65 6c 2c 0a 20 20 20 20 20 20  memLevel,.      
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 69 6e 74 20 73 74 72 61 74 65 67 79 2c 20 63 6f  int strategy, co
14210 6e 73 74 20 63 68 61 72 20 2a 76 65 72 73 69 6f  nst char *versio
14220 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 74 72           int str
14250 65 61 6d 5f 73 69 7a 65 29 29 3b 0a 5a 45 58 54  eam_size));.ZEXT
14260 45 52 4e 20 69 6e 74 20 5a 45 58 50 4f 52 54 20  ERN int ZEXPORT 
14270 69 6e 66 6c 61 74 65 49 6e 69 74 32 5f 20 4f 46  inflateInit2_ OF
14280 28 28 7a 5f 73 74 72 65 61 6d 70 20 73 74 72 6d  ((z_streamp strm
14290 2c 20 69 6e 74 20 20 77 69 6e 64 6f 77 42 69 74  , int  windowBit
142a0 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s,.             
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
142d0 68 61 72 20 2a 76 65 72 73 69 6f 6e 2c 20 69 6e  har *version, in
142e0 74 20 73 74 72 65 61 6d 5f 73 69 7a 65 29 29 3b  t stream_size));
142f0 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a 45 58  .ZEXTERN int ZEX
14300 50 4f 52 54 20 69 6e 66 6c 61 74 65 42 61 63 6b  PORT inflateBack
14310 49 6e 69 74 5f 20 4f 46 28 28 7a 5f 73 74 72 65  Init_ OF((z_stre
14320 61 6d 70 20 73 74 72 6d 2c 20 69 6e 74 20 77 69  amp strm, int wi
14330 6e 64 6f 77 42 69 74 73 2c 0a 20 20 20 20 20 20  ndowBits,.      
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72     unsigned char
14370 20 46 41 52 20 2a 77 69 6e 64 6f 77 2c 0a 20 20   FAR *window,.  
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143a0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
143b0 72 20 2a 76 65 72 73 69 6f 6e 2c 0a 20 20 20 20  r *version,.    
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 20 20 69 6e 74 20 73 74 72 65 61 6d 5f       int stream_
143f0 73 69 7a 65 29 29 3b 0a 23 64 65 66 69 6e 65 20  size));.#define 
14400 64 65 66 6c 61 74 65 49 6e 69 74 28 73 74 72 6d  deflateInit(strm
14410 2c 20 6c 65 76 65 6c 29 20 5c 0a 20 20 20 20 20  , level) \.     
14420 20 20 20 64 65 66 6c 61 74 65 49 6e 69 74 5f 28     deflateInit_(
14430 28 73 74 72 6d 29 2c 20 28 6c 65 76 65 6c 29 2c  (strm), (level),
14440 20 5a 4c 49 42 5f 56 45 52 53 49 4f 4e 2c 20 28   ZLIB_VERSION, (
14450 69 6e 74 29 73 69 7a 65 6f 66 28 7a 5f 73 74 72  int)sizeof(z_str
14460 65 61 6d 29 29 0a 23 64 65 66 69 6e 65 20 69 6e  eam)).#define in
14470 66 6c 61 74 65 49 6e 69 74 28 73 74 72 6d 29 20  flateInit(strm) 
14480 5c 0a 20 20 20 20 20 20 20 20 69 6e 66 6c 61 74  \.        inflat
14490 65 49 6e 69 74 5f 28 28 73 74 72 6d 29 2c 20 5a  eInit_((strm), Z
144a0 4c 49 42 5f 56 45 52 53 49 4f 4e 2c 20 28 69 6e  LIB_VERSION, (in
144b0 74 29 73 69 7a 65 6f 66 28 7a 5f 73 74 72 65 61  t)sizeof(z_strea
144c0 6d 29 29 0a 23 64 65 66 69 6e 65 20 64 65 66 6c  m)).#define defl
144d0 61 74 65 49 6e 69 74 32 28 73 74 72 6d 2c 20 6c  ateInit2(strm, l
144e0 65 76 65 6c 2c 20 6d 65 74 68 6f 64 2c 20 77 69  evel, method, wi
144f0 6e 64 6f 77 42 69 74 73 2c 20 6d 65 6d 4c 65 76  ndowBits, memLev
14500 65 6c 2c 20 73 74 72 61 74 65 67 79 29 20 5c 0a  el, strategy) \.
14510 20 20 20 20 20 20 20 20 64 65 66 6c 61 74 65 49          deflateI
14520 6e 69 74 32 5f 28 28 73 74 72 6d 29 2c 28 6c 65  nit2_((strm),(le
14530 76 65 6c 29 2c 28 6d 65 74 68 6f 64 29 2c 28 77  vel),(method),(w
14540 69 6e 64 6f 77 42 69 74 73 29 2c 28 6d 65 6d 4c  indowBits),(memL
14550 65 76 65 6c 29 2c 5c 0a 20 20 20 20 20 20 20 20  evel),\.        
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
14570 74 72 61 74 65 67 79 29 2c 20 5a 4c 49 42 5f 56  trategy), ZLIB_V
14580 45 52 53 49 4f 4e 2c 20 28 69 6e 74 29 73 69 7a  ERSION, (int)siz
14590 65 6f 66 28 7a 5f 73 74 72 65 61 6d 29 29 0a 23  eof(z_stream)).#
145a0 64 65 66 69 6e 65 20 69 6e 66 6c 61 74 65 49 6e  define inflateIn
145b0 69 74 32 28 73 74 72 6d 2c 20 77 69 6e 64 6f 77  it2(strm, window
145c0 42 69 74 73 29 20 5c 0a 20 20 20 20 20 20 20 20  Bits) \.        
145d0 69 6e 66 6c 61 74 65 49 6e 69 74 32 5f 28 28 73  inflateInit2_((s
145e0 74 72 6d 29 2c 20 28 77 69 6e 64 6f 77 42 69 74  trm), (windowBit
145f0 73 29 2c 20 5a 4c 49 42 5f 56 45 52 53 49 4f 4e  s), ZLIB_VERSION
14600 2c 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  , \.            
14610 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
14620 69 7a 65 6f 66 28 7a 5f 73 74 72 65 61 6d 29 29  izeof(z_stream))
14630 0a 23 64 65 66 69 6e 65 20 69 6e 66 6c 61 74 65  .#define inflate
14640 42 61 63 6b 49 6e 69 74 28 73 74 72 6d 2c 20 77  BackInit(strm, w
14650 69 6e 64 6f 77 42 69 74 73 2c 20 77 69 6e 64 6f  indowBits, windo
14660 77 29 20 5c 0a 20 20 20 20 20 20 20 20 69 6e 66  w) \.        inf
14670 6c 61 74 65 42 61 63 6b 49 6e 69 74 5f 28 28 73  lateBackInit_((s
14680 74 72 6d 29 2c 20 28 77 69 6e 64 6f 77 42 69 74  trm), (windowBit
14690 73 29 2c 20 28 77 69 6e 64 6f 77 29 2c 20 5c 0a  s), (window), \.
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 20 20 5a 4c 49 42 5f 56 45 52 53 49        ZLIB_VERSI
146c0 4f 4e 2c 20 28 69 6e 74 29 73 69 7a 65 6f 66 28  ON, (int)sizeof(
146d0 7a 5f 73 74 72 65 61 6d 29 29 0a 0a 23 69 66 6e  z_stream))..#ifn
146e0 64 65 66 20 5a 5f 53 4f 4c 4f 0a 0a 2f 2a 20 67  def Z_SOLO../* g
146f0 7a 67 65 74 63 28 29 20 6d 61 63 72 6f 20 61 6e  zgetc() macro an
14700 64 20 69 74 73 20 73 75 70 70 6f 72 74 69 6e 67  d its supporting
14710 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 65 78   function and ex
14720 70 6f 73 65 64 20 64 61 74 61 20 73 74 72 75 63  posed data struc
14730 74 75 72 65 2e 20 20 4e 6f 74 65 0a 20 2a 20 74  ture.  Note. * t
14740 68 61 74 20 74 68 65 20 72 65 61 6c 20 69 6e 74  hat the real int
14750 65 72 6e 61 6c 20 73 74 61 74 65 20 69 73 20 6d  ernal state is m
14760 75 63 68 20 6c 61 72 67 65 72 20 74 68 61 6e 20  uch larger than 
14770 74 68 65 20 65 78 70 6f 73 65 64 20 73 74 72 75  the exposed stru
14780 63 74 75 72 65 2e 0a 20 2a 20 54 68 69 73 20 61  cture.. * This a
14790 62 62 72 65 76 69 61 74 65 64 20 73 74 72 75 63  bbreviated struc
147a0 74 75 72 65 20 65 78 70 6f 73 65 73 20 6a 75 73  ture exposes jus
147b0 74 20 65 6e 6f 75 67 68 20 66 6f 72 20 74 68 65  t enough for the
147c0 20 67 7a 67 65 74 63 28 29 20 6d 61 63 72 6f 2e   gzgetc() macro.
147d0 20 20 54 68 65 0a 20 2a 20 75 73 65 72 20 73 68    The. * user sh
147e0 6f 75 6c 64 20 6e 6f 74 20 6d 65 73 73 20 77 69  ould not mess wi
147f0 74 68 20 74 68 65 73 65 20 65 78 70 6f 73 65 64  th these exposed
14800 20 65 6c 65 6d 65 6e 74 73 2c 20 73 69 6e 63 65   elements, since
14810 20 74 68 65 69 72 20 6e 61 6d 65 73 20 6f 72 0a   their names or.
14820 20 2a 20 62 65 68 61 76 69 6f 72 20 63 6f 75 6c   * behavior coul
14830 64 20 63 68 61 6e 67 65 20 69 6e 20 74 68 65 20  d change in the 
14840 66 75 74 75 72 65 2c 20 70 65 72 68 61 70 73 20  future, perhaps 
14850 65 76 65 6e 20 63 61 70 72 69 63 69 6f 75 73 6c  even capriciousl
14860 79 2e 20 20 54 68 65 79 20 63 61 6e 0a 20 2a 20  y.  They can. * 
14870 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 62 79 20  only be used by 
14880 74 68 65 20 67 7a 67 65 74 63 28 29 20 6d 61 63  the gzgetc() mac
14890 72 6f 2e 20 20 59 6f 75 20 68 61 76 65 20 62 65  ro.  You have be
148a0 65 6e 20 77 61 72 6e 65 64 2e 0a 20 2a 2f 0a 73  en warned.. */.s
148b0 74 72 75 63 74 20 67 7a 46 69 6c 65 5f 73 20 7b  truct gzFile_s {
148c0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 68 61  .    unsigned ha
148d0 76 65 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64  ve;.    unsigned
148e0 20 63 68 61 72 20 2a 6e 65 78 74 3b 0a 20 20 20   char *next;.   
148f0 20 7a 5f 6f 66 66 36 34 5f 74 20 70 6f 73 3b 0a   z_off64_t pos;.
14900 7d 3b 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 5a  };.ZEXTERN int Z
14910 45 58 50 4f 52 54 20 67 7a 67 65 74 63 5f 20 4f  EXPORT gzgetc_ O
14920 46 28 28 67 7a 46 69 6c 65 20 66 69 6c 65 29 29  F((gzFile file))
14930 3b 20 20 2f 2a 20 62 61 63 6b 77 61 72 64 20 63  ;  /* backward c
14940 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 2a 2f 0a  ompatibility */.
14950 23 69 66 64 65 66 20 5a 5f 50 52 45 46 49 58 5f  #ifdef Z_PREFIX_
14960 53 45 54 0a 23 20 20 75 6e 64 65 66 20 7a 5f 67  SET.#  undef z_g
14970 7a 67 65 74 63 0a 23 20 20 64 65 66 69 6e 65 20  zgetc.#  define 
14980 7a 5f 67 7a 67 65 74 63 28 67 29 20 5c 0a 20 20  z_gzgetc(g) \.  
14990 20 20 20 20 20 20 20 20 28 28 67 29 2d 3e 68 61          ((g)->ha
149a0 76 65 20 3f 20 28 28 67 29 2d 3e 68 61 76 65 2d  ve ? ((g)->have-
149b0 2d 2c 20 28 67 29 2d 3e 70 6f 73 2b 2b 2c 20 2a  -, (g)->pos++, *
149c0 28 28 67 29 2d 3e 6e 65 78 74 29 2b 2b 29 20 3a  ((g)->next)++) :
149d0 20 67 7a 67 65 74 63 28 67 29 29 0a 23 65 6c 73   gzgetc(g)).#els
149e0 65 0a 23 20 20 64 65 66 69 6e 65 20 67 7a 67 65  e.#  define gzge
149f0 74 63 28 67 29 20 5c 0a 20 20 20 20 20 20 20 20  tc(g) \.        
14a00 20 20 28 28 67 29 2d 3e 68 61 76 65 20 3f 20 28    ((g)->have ? (
14a10 28 67 29 2d 3e 68 61 76 65 2d 2d 2c 20 28 67 29  (g)->have--, (g)
14a20 2d 3e 70 6f 73 2b 2b 2c 20 2a 28 28 67 29 2d 3e  ->pos++, *((g)->
14a30 6e 65 78 74 29 2b 2b 29 20 3a 20 67 7a 67 65 74  next)++) : gzget
14a40 63 28 67 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  c(g)).#endif../*
14a50 20 70 72 6f 76 69 64 65 20 36 34 2d 62 69 74 20   provide 64-bit 
14a60 6f 66 66 73 65 74 20 66 75 6e 63 74 69 6f 6e 73  offset functions
14a70 20 69 66 20 5f 4c 41 52 47 45 46 49 4c 45 36 34   if _LARGEFILE64
14a80 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 64 2c  _SOURCE defined,
14a90 20 61 6e 64 2f 6f 72 0a 20 2a 20 63 68 61 6e 67   and/or. * chang
14aa0 65 20 74 68 65 20 72 65 67 75 6c 61 72 20 66 75  e the regular fu
14ab0 6e 63 74 69 6f 6e 73 20 74 6f 20 36 34 20 62 69  nctions to 64 bi
14ac0 74 73 20 69 66 20 5f 46 49 4c 45 5f 4f 46 46 53  ts if _FILE_OFFS
14ad0 45 54 5f 42 49 54 53 20 69 73 20 36 34 20 28 69  ET_BITS is 64 (i
14ae0 66 0a 20 2a 20 62 6f 74 68 20 61 72 65 20 74 72  f. * both are tr
14af0 75 65 2c 20 74 68 65 20 61 70 70 6c 69 63 61 74  ue, the applicat
14b00 69 6f 6e 20 67 65 74 73 20 74 68 65 20 2a 36 34  ion gets the *64
14b10 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 6e 64 20   functions, and 
14b20 74 68 65 20 72 65 67 75 6c 61 72 0a 20 2a 20 66  the regular. * f
14b30 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 63 68 61  unctions are cha
14b40 6e 67 65 64 20 74 6f 20 36 34 20 62 69 74 73 29  nged to 64 bits)
14b50 20 2d 2d 20 69 6e 20 63 61 73 65 20 74 68 65 73   -- in case thes
14b60 65 20 61 72 65 20 73 65 74 20 6f 6e 20 73 79 73  e are set on sys
14b70 74 65 6d 73 0a 20 2a 20 77 69 74 68 6f 75 74 20  tems. * without 
14b80 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f  large file suppo
14b90 72 74 2c 20 5f 4c 46 53 36 34 5f 4c 41 52 47 45  rt, _LFS64_LARGE
14ba0 46 49 4c 45 20 6d 75 73 74 20 61 6c 73 6f 20 62  FILE must also b
14bb0 65 20 74 72 75 65 0a 20 2a 2f 0a 23 69 66 64 65  e true. */.#ifde
14bc0 66 20 5a 5f 4c 41 52 47 45 36 34 0a 20 20 20 5a  f Z_LARGE64.   Z
14bd0 45 58 54 45 52 4e 20 67 7a 46 69 6c 65 20 5a 45  EXTERN gzFile ZE
14be0 58 50 4f 52 54 20 67 7a 6f 70 65 6e 36 34 20 4f  XPORT gzopen64 O
14bf0 46 28 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  F((const char *,
14c00 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 29 3b   const char *));
14c10 0a 20 20 20 5a 45 58 54 45 52 4e 20 7a 5f 6f 66  .   ZEXTERN z_of
14c20 66 36 34 5f 74 20 5a 45 58 50 4f 52 54 20 67 7a  f64_t ZEXPORT gz
14c30 73 65 65 6b 36 34 20 4f 46 28 28 67 7a 46 69 6c  seek64 OF((gzFil
14c40 65 2c 20 7a 5f 6f 66 66 36 34 5f 74 2c 20 69 6e  e, z_off64_t, in
14c50 74 29 29 3b 0a 20 20 20 5a 45 58 54 45 52 4e 20  t));.   ZEXTERN 
14c60 7a 5f 6f 66 66 36 34 5f 74 20 5a 45 58 50 4f 52  z_off64_t ZEXPOR
14c70 54 20 67 7a 74 65 6c 6c 36 34 20 4f 46 28 28 67  T gztell64 OF((g
14c80 7a 46 69 6c 65 29 29 3b 0a 20 20 20 5a 45 58 54  zFile));.   ZEXT
14c90 45 52 4e 20 7a 5f 6f 66 66 36 34 5f 74 20 5a 45  ERN z_off64_t ZE
14ca0 58 50 4f 52 54 20 67 7a 6f 66 66 73 65 74 36 34  XPORT gzoffset64
14cb0 20 4f 46 28 28 67 7a 46 69 6c 65 29 29 3b 0a 20   OF((gzFile));. 
14cc0 20 20 5a 45 58 54 45 52 4e 20 75 4c 6f 6e 67 20    ZEXTERN uLong 
14cd0 5a 45 58 50 4f 52 54 20 61 64 6c 65 72 33 32 5f  ZEXPORT adler32_
14ce0 63 6f 6d 62 69 6e 65 36 34 20 4f 46 28 28 75 4c  combine64 OF((uL
14cf0 6f 6e 67 2c 20 75 4c 6f 6e 67 2c 20 7a 5f 6f 66  ong, uLong, z_of
14d00 66 36 34 5f 74 29 29 3b 0a 20 20 20 5a 45 58 54  f64_t));.   ZEXT
14d10 45 52 4e 20 75 4c 6f 6e 67 20 5a 45 58 50 4f 52  ERN uLong ZEXPOR
14d20 54 20 63 72 63 33 32 5f 63 6f 6d 62 69 6e 65 36  T crc32_combine6
14d30 34 20 4f 46 28 28 75 4c 6f 6e 67 2c 20 75 4c 6f  4 OF((uLong, uLo
14d40 6e 67 2c 20 7a 5f 6f 66 66 36 34 5f 74 29 29 3b  ng, z_off64_t));
14d50 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
14d60 66 69 6e 65 64 28 5a 4c 49 42 5f 49 4e 54 45 52  fined(ZLIB_INTER
14d70 4e 41 4c 29 20 26 26 20 64 65 66 69 6e 65 64 28  NAL) && defined(
14d80 5a 5f 57 41 4e 54 36 34 29 0a 23 20 20 69 66 64  Z_WANT64).#  ifd
14d90 65 66 20 5a 5f 50 52 45 46 49 58 5f 53 45 54 0a  ef Z_PREFIX_SET.
14da0 23 20 20 20 20 64 65 66 69 6e 65 20 7a 5f 67 7a  #    define z_gz
14db0 6f 70 65 6e 20 7a 5f 67 7a 6f 70 65 6e 36 34 0a  open z_gzopen64.
14dc0 23 20 20 20 20 64 65 66 69 6e 65 20 7a 5f 67 7a  #    define z_gz
14dd0 73 65 65 6b 20 7a 5f 67 7a 73 65 65 6b 36 34 0a  seek z_gzseek64.
14de0 23 20 20 20 20 64 65 66 69 6e 65 20 7a 5f 67 7a  #    define z_gz
14df0 74 65 6c 6c 20 7a 5f 67 7a 74 65 6c 6c 36 34 0a  tell z_gztell64.
14e00 23 20 20 20 20 64 65 66 69 6e 65 20 7a 5f 67 7a  #    define z_gz
14e10 6f 66 66 73 65 74 20 7a 5f 67 7a 6f 66 66 73 65  offset z_gzoffse
14e20 74 36 34 0a 23 20 20 20 20 64 65 66 69 6e 65 20  t64.#    define 
14e30 7a 5f 61 64 6c 65 72 33 32 5f 63 6f 6d 62 69 6e  z_adler32_combin
14e40 65 20 7a 5f 61 64 6c 65 72 33 32 5f 63 6f 6d 62  e z_adler32_comb
14e50 69 6e 65 36 34 0a 23 20 20 20 20 64 65 66 69 6e  ine64.#    defin
14e60 65 20 7a 5f 63 72 63 33 32 5f 63 6f 6d 62 69 6e  e z_crc32_combin
14e70 65 20 7a 5f 63 72 63 33 32 5f 63 6f 6d 62 69 6e  e z_crc32_combin
14e80 65 36 34 0a 23 20 20 65 6c 73 65 0a 23 20 20 20  e64.#  else.#   
14e90 20 64 65 66 69 6e 65 20 67 7a 6f 70 65 6e 20 67   define gzopen g
14ea0 7a 6f 70 65 6e 36 34 0a 23 20 20 20 20 64 65 66  zopen64.#    def
14eb0 69 6e 65 20 67 7a 73 65 65 6b 20 67 7a 73 65 65  ine gzseek gzsee
14ec0 6b 36 34 0a 23 20 20 20 20 64 65 66 69 6e 65 20  k64.#    define 
14ed0 67 7a 74 65 6c 6c 20 67 7a 74 65 6c 6c 36 34 0a  gztell gztell64.
14ee0 23 20 20 20 20 64 65 66 69 6e 65 20 67 7a 6f 66  #    define gzof
14ef0 66 73 65 74 20 67 7a 6f 66 66 73 65 74 36 34 0a  fset gzoffset64.
14f00 23 20 20 20 20 64 65 66 69 6e 65 20 61 64 6c 65  #    define adle
14f10 72 33 32 5f 63 6f 6d 62 69 6e 65 20 61 64 6c 65  r32_combine adle
14f20 72 33 32 5f 63 6f 6d 62 69 6e 65 36 34 0a 23 20  r32_combine64.# 
14f30 20 20 20 64 65 66 69 6e 65 20 63 72 63 33 32 5f     define crc32_
14f40 63 6f 6d 62 69 6e 65 20 63 72 63 33 32 5f 63 6f  combine crc32_co
14f50 6d 62 69 6e 65 36 34 0a 23 20 20 65 6e 64 69 66  mbine64.#  endif
14f60 0a 23 20 20 69 66 6e 64 65 66 20 5a 5f 4c 41 52  .#  ifndef Z_LAR
14f70 47 45 36 34 0a 20 20 20 20 20 5a 45 58 54 45 52  GE64.     ZEXTER
14f80 4e 20 67 7a 46 69 6c 65 20 5a 45 58 50 4f 52 54  N gzFile ZEXPORT
14f90 20 67 7a 6f 70 65 6e 36 34 20 4f 46 28 28 63 6f   gzopen64 OF((co
14fa0 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
14fb0 74 20 63 68 61 72 20 2a 29 29 3b 0a 20 20 20 20  t char *));.    
14fc0 20 5a 45 58 54 45 52 4e 20 7a 5f 6f 66 66 5f 74   ZEXTERN z_off_t
14fd0 20 5a 45 58 50 4f 52 54 20 67 7a 73 65 65 6b 36   ZEXPORT gzseek6
14fe0 34 20 4f 46 28 28 67 7a 46 69 6c 65 2c 20 7a 5f  4 OF((gzFile, z_
14ff0 6f 66 66 5f 74 2c 20 69 6e 74 29 29 3b 0a 20 20  off_t, int));.  
15000 20 20 20 5a 45 58 54 45 52 4e 20 7a 5f 6f 66 66     ZEXTERN z_off
15010 5f 74 20 5a 45 58 50 4f 52 54 20 67 7a 74 65 6c  _t ZEXPORT gztel
15020 6c 36 34 20 4f 46 28 28 67 7a 46 69 6c 65 29 29  l64 OF((gzFile))
15030 3b 0a 20 20 20 20 20 5a 45 58 54 45 52 4e 20 7a  ;.     ZEXTERN z
15040 5f 6f 66 66 5f 74 20 5a 45 58 50 4f 52 54 20 67  _off_t ZEXPORT g
15050 7a 6f 66 66 73 65 74 36 34 20 4f 46 28 28 67 7a  zoffset64 OF((gz
15060 46 69 6c 65 29 29 3b 0a 20 20 20 20 20 5a 45 58  File));.     ZEX
15070 54 45 52 4e 20 75 4c 6f 6e 67 20 5a 45 58 50 4f  TERN uLong ZEXPO
15080 52 54 20 61 64 6c 65 72 33 32 5f 63 6f 6d 62 69  RT adler32_combi
15090 6e 65 36 34 20 4f 46 28 28 75 4c 6f 6e 67 2c 20  ne64 OF((uLong, 
150a0 75 4c 6f 6e 67 2c 20 7a 5f 6f 66 66 5f 74 29 29  uLong, z_off_t))
150b0 3b 0a 20 20 20 20 20 5a 45 58 54 45 52 4e 20 75  ;.     ZEXTERN u
150c0 4c 6f 6e 67 20 5a 45 58 50 4f 52 54 20 63 72 63  Long ZEXPORT crc
150d0 33 32 5f 63 6f 6d 62 69 6e 65 36 34 20 4f 46 28  32_combine64 OF(
150e0 28 75 4c 6f 6e 67 2c 20 75 4c 6f 6e 67 2c 20 7a  (uLong, uLong, z
150f0 5f 6f 66 66 5f 74 29 29 3b 0a 23 20 20 65 6e 64  _off_t));.#  end
15100 69 66 0a 23 65 6c 73 65 0a 20 20 20 5a 45 58 54  if.#else.   ZEXT
15110 45 52 4e 20 67 7a 46 69 6c 65 20 5a 45 58 50 4f  ERN gzFile ZEXPO
15120 52 54 20 67 7a 6f 70 65 6e 20 4f 46 28 28 63 6f  RT gzopen OF((co
15130 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
15140 74 20 63 68 61 72 20 2a 29 29 3b 0a 20 20 20 5a  t char *));.   Z
15150 45 58 54 45 52 4e 20 7a 5f 6f 66 66 5f 74 20 5a  EXTERN z_off_t Z
15160 45 58 50 4f 52 54 20 67 7a 73 65 65 6b 20 4f 46  EXPORT gzseek OF
15170 28 28 67 7a 46 69 6c 65 2c 20 7a 5f 6f 66 66 5f  ((gzFile, z_off_
15180 74 2c 20 69 6e 74 29 29 3b 0a 20 20 20 5a 45 58  t, int));.   ZEX
15190 54 45 52 4e 20 7a 5f 6f 66 66 5f 74 20 5a 45 58  TERN z_off_t ZEX
151a0 50 4f 52 54 20 67 7a 74 65 6c 6c 20 4f 46 28 28  PORT gztell OF((
151b0 67 7a 46 69 6c 65 29 29 3b 0a 20 20 20 5a 45 58  gzFile));.   ZEX
151c0 54 45 52 4e 20 7a 5f 6f 66 66 5f 74 20 5a 45 58  TERN z_off_t ZEX
151d0 50 4f 52 54 20 67 7a 6f 66 66 73 65 74 20 4f 46  PORT gzoffset OF
151e0 28 28 67 7a 46 69 6c 65 29 29 3b 0a 20 20 20 5a  ((gzFile));.   Z
151f0 45 58 54 45 52 4e 20 75 4c 6f 6e 67 20 5a 45 58  EXTERN uLong ZEX
15200 50 4f 52 54 20 61 64 6c 65 72 33 32 5f 63 6f 6d  PORT adler32_com
15210 62 69 6e 65 20 4f 46 28 28 75 4c 6f 6e 67 2c 20  bine OF((uLong, 
15220 75 4c 6f 6e 67 2c 20 7a 5f 6f 66 66 5f 74 29 29  uLong, z_off_t))
15230 3b 0a 20 20 20 5a 45 58 54 45 52 4e 20 75 4c 6f  ;.   ZEXTERN uLo
15240 6e 67 20 5a 45 58 50 4f 52 54 20 63 72 63 33 32  ng ZEXPORT crc32
15250 5f 63 6f 6d 62 69 6e 65 20 4f 46 28 28 75 4c 6f  _combine OF((uLo
15260 6e 67 2c 20 75 4c 6f 6e 67 2c 20 7a 5f 6f 66 66  ng, uLong, z_off
15270 5f 74 29 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65  _t));.#endif..#e
15280 6c 73 65 20 2f 2a 20 5a 5f 53 4f 4c 4f 20 2a 2f  lse /* Z_SOLO */
15290 0a 0a 20 20 20 5a 45 58 54 45 52 4e 20 75 4c 6f  ..   ZEXTERN uLo
152a0 6e 67 20 5a 45 58 50 4f 52 54 20 61 64 6c 65 72  ng ZEXPORT adler
152b0 33 32 5f 63 6f 6d 62 69 6e 65 20 4f 46 28 28 75  32_combine OF((u
152c0 4c 6f 6e 67 2c 20 75 4c 6f 6e 67 2c 20 7a 5f 6f  Long, uLong, z_o
152d0 66 66 5f 74 29 29 3b 0a 20 20 20 5a 45 58 54 45  ff_t));.   ZEXTE
152e0 52 4e 20 75 4c 6f 6e 67 20 5a 45 58 50 4f 52 54  RN uLong ZEXPORT
152f0 20 63 72 63 33 32 5f 63 6f 6d 62 69 6e 65 20 4f   crc32_combine O
15300 46 28 28 75 4c 6f 6e 67 2c 20 75 4c 6f 6e 67 2c  F((uLong, uLong,
15310 20 7a 5f 6f 66 66 5f 74 29 29 3b 0a 0a 23 65 6e   z_off_t));..#en
15320 64 69 66 20 2f 2a 20 21 5a 5f 53 4f 4c 4f 20 2a  dif /* !Z_SOLO *
15330 2f 0a 0a 2f 2a 20 68 61 63 6b 20 66 6f 72 20 62  /../* hack for b
15340 75 67 67 79 20 63 6f 6d 70 69 6c 65 72 73 20 2a  uggy compilers *
15350 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5a  /.#if !defined(Z
15360 55 54 49 4c 5f 48 29 20 26 26 20 21 64 65 66 69  UTIL_H) && !defi
15370 6e 65 64 28 4e 4f 5f 44 55 4d 4d 59 5f 44 45 43  ned(NO_DUMMY_DEC
15380 4c 29 0a 20 20 20 20 73 74 72 75 63 74 20 69 6e  L).    struct in
15390 74 65 72 6e 61 6c 5f 73 74 61 74 65 20 7b 69 6e  ternal_state {in
153a0 74 20 64 75 6d 6d 79 3b 7d 3b 0a 23 65 6e 64 69  t dummy;};.#endi
153b0 66 0a 0a 2f 2a 20 75 6e 64 6f 63 75 6d 65 6e 74  f../* undocument
153c0 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ed functions */.
153d0 5a 45 58 54 45 52 4e 20 63 6f 6e 73 74 20 63 68  ZEXTERN const ch
153e0 61 72 20 20 20 2a 20 5a 45 58 50 4f 52 54 20 7a  ar   * ZEXPORT z
153f0 45 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20  Error           
15400 4f 46 28 28 69 6e 74 29 29 3b 0a 5a 45 58 54 45  OF((int));.ZEXTE
15410 52 4e 20 69 6e 74 20 20 20 20 20 20 20 20 20 20  RN int          
15420 20 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c 61 74    ZEXPORT inflat
15430 65 53 79 6e 63 50 6f 69 6e 74 20 4f 46 28 28 7a  eSyncPoint OF((z
15440 5f 73 74 72 65 61 6d 70 29 29 3b 0a 5a 45 58 54  _streamp));.ZEXT
15450 45 52 4e 20 63 6f 6e 73 74 20 7a 5f 63 72 63 5f  ERN const z_crc_
15460 74 20 46 41 52 20 2a 20 5a 45 58 50 4f 52 54 20  t FAR * ZEXPORT 
15470 67 65 74 5f 63 72 63 5f 74 61 62 6c 65 20 20 20  get_crc_table   
15480 20 4f 46 28 28 76 6f 69 64 29 29 3b 0a 5a 45 58   OF((void));.ZEX
15490 54 45 52 4e 20 69 6e 74 20 20 20 20 20 20 20 20  TERN int        
154a0 20 20 20 20 5a 45 58 50 4f 52 54 20 69 6e 66 6c      ZEXPORT infl
154b0 61 74 65 55 6e 64 65 72 6d 69 6e 65 20 4f 46 28  ateUndermine OF(
154c0 28 7a 5f 73 74 72 65 61 6d 70 2c 20 69 6e 74 29  (z_streamp, int)
154d0 29 3b 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20 20  );.ZEXTERN int  
154e0 20 20 20 20 20 20 20 20 20 20 5a 45 58 50 4f 52            ZEXPOR
154f0 54 20 69 6e 66 6c 61 74 65 52 65 73 65 74 4b 65  T inflateResetKe
15500 65 70 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d 70  ep OF((z_streamp
15510 29 29 3b 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20  ));.ZEXTERN int 
15520 20 20 20 20 20 20 20 20 20 20 20 5a 45 58 50 4f             ZEXPO
15530 52 54 20 64 65 66 6c 61 74 65 52 65 73 65 74 4b  RT deflateResetK
15540 65 65 70 20 4f 46 28 28 7a 5f 73 74 72 65 61 6d  eep OF((z_stream
15550 70 29 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  p));.#if defined
15560 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  (_WIN32) && !def
15570 69 6e 65 64 28 5a 5f 53 4f 4c 4f 29 0a 5a 45 58  ined(Z_SOLO).ZEX
15580 54 45 52 4e 20 67 7a 46 69 6c 65 20 20 20 20 20  TERN gzFile     
15590 20 20 20 20 5a 45 58 50 4f 52 54 20 67 7a 6f 70      ZEXPORT gzop
155a0 65 6e 5f 77 20 4f 46 28 28 63 6f 6e 73 74 20 77  en_w OF((const w
155b0 63 68 61 72 5f 74 20 2a 70 61 74 68 2c 0a 20 20  char_t *path,.  
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
155f0 63 68 61 72 20 2a 6d 6f 64 65 29 29 3b 0a 23 65  char *mode));.#e
15600 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
15610 28 53 54 44 43 29 20 7c 7c 20 64 65 66 69 6e 65  (STDC) || define
15620 64 28 5a 5f 48 41 56 45 5f 53 54 44 41 52 47 5f  d(Z_HAVE_STDARG_
15630 48 29 0a 23 20 20 69 66 6e 64 65 66 20 5a 5f 53  H).#  ifndef Z_S
15640 4f 4c 4f 0a 5a 45 58 54 45 52 4e 20 69 6e 74 20  OLO.ZEXTERN int 
15650 20 20 20 20 20 20 20 20 20 20 20 5a 45 58 50 4f             ZEXPO
15660 52 54 56 41 20 67 7a 76 70 72 69 6e 74 66 20 5a  RTVA gzvprintf Z
15670 5f 41 52 47 28 28 67 7a 46 69 6c 65 20 66 69 6c  _ARG((gzFile fil
15680 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
156c0 2a 66 6f 72 6d 61 74 2c 0a 20 20 20 20 20 20 20  *format,.       
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 20 20 20 20 20 20 20 20 20 76 61 5f 6c 69             va_li
15700 73 74 20 76 61 29 29 3b 0a 23 20 20 65 6e 64 69  st va));.#  endi
15710 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  f.#endif..#ifdef
15720 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 7d 0a 23   __cplusplus.}.#
15730 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
15740 20 5a 4c 49 42 5f 48 20 2a 2f 0a                  ZLIB_H */.