Fossil

Hex Artifact Content
Login

Artifact ce8b988a404446fc8558b198d3cfeabcad6d16c5:


0000: 2f 2a 20 70 75 66 66 2e 68 0a 20 20 43 6f 70 79  /* puff.h.  Copy
0010: 72 69 67 68 74 20 28 43 29 20 32 30 30 32 2d 32  right (C) 2002-2
0020: 30 31 33 20 4d 61 72 6b 20 41 64 6c 65 72 2c 20  013 Mark Adler, 
0030: 61 6c 6c 20 72 69 67 68 74 73 20 72 65 73 65 72  all rights reser
0040: 76 65 64 0a 20 20 76 65 72 73 69 6f 6e 20 32 2e  ved.  version 2.
0050: 33 2c 20 32 31 20 4a 61 6e 20 32 30 31 33 0a 0a  3, 21 Jan 2013..
0060: 20 20 54 68 69 73 20 73 6f 66 74 77 61 72 65 20    This software 
0070: 69 73 20 70 72 6f 76 69 64 65 64 20 27 61 73 2d  is provided 'as-
0080: 69 73 27 2c 20 77 69 74 68 6f 75 74 20 61 6e 79  is', without any
0090: 20 65 78 70 72 65 73 73 20 6f 72 20 69 6d 70 6c   express or impl
00a0: 69 65 64 0a 20 20 77 61 72 72 61 6e 74 79 2e 20  ied.  warranty. 
00b0: 20 49 6e 20 6e 6f 20 65 76 65 6e 74 20 77 69 6c   In no event wil
00c0: 6c 20 74 68 65 20 61 75 74 68 6f 72 20 62 65 20  l the author be 
00d0: 68 65 6c 64 20 6c 69 61 62 6c 65 20 66 6f 72 20  held liable for 
00e0: 61 6e 79 20 64 61 6d 61 67 65 73 0a 20 20 61 72  any damages.  ar
00f0: 69 73 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 75  ising from the u
0100: 73 65 20 6f 66 20 74 68 69 73 20 73 6f 66 74 77  se of this softw
0110: 61 72 65 2e 0a 0a 20 20 50 65 72 6d 69 73 73 69  are...  Permissi
0120: 6f 6e 20 69 73 20 67 72 61 6e 74 65 64 20 74 6f  on is granted to
0130: 20 61 6e 79 6f 6e 65 20 74 6f 20 75 73 65 20 74   anyone to use t
0140: 68 69 73 20 73 6f 66 74 77 61 72 65 20 66 6f 72  his software for
0150: 20 61 6e 79 20 70 75 72 70 6f 73 65 2c 0a 20 20   any purpose,.  
0160: 69 6e 63 6c 75 64 69 6e 67 20 63 6f 6d 6d 65 72  including commer
0170: 63 69 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e  cial application
0180: 73 2c 20 61 6e 64 20 74 6f 20 61 6c 74 65 72 20  s, and to alter 
0190: 69 74 20 61 6e 64 20 72 65 64 69 73 74 72 69 62  it and redistrib
01a0: 75 74 65 20 69 74 0a 20 20 66 72 65 65 6c 79 2c  ute it.  freely,
01b0: 20 73 75 62 6a 65 63 74 20 74 6f 20 74 68 65 20   subject to the 
01c0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
01d0: 63 74 69 6f 6e 73 3a 0a 0a 20 20 31 2e 20 54 68  ctions:..  1. Th
01e0: 65 20 6f 72 69 67 69 6e 20 6f 66 20 74 68 69 73  e origin of this
01f0: 20 73 6f 66 74 77 61 72 65 20 6d 75 73 74 20 6e   software must n
0200: 6f 74 20 62 65 20 6d 69 73 72 65 70 72 65 73 65  ot be misreprese
0210: 6e 74 65 64 3b 20 79 6f 75 20 6d 75 73 74 20 6e  nted; you must n
0220: 6f 74 0a 20 20 20 20 20 63 6c 61 69 6d 20 74 68  ot.     claim th
0230: 61 74 20 79 6f 75 20 77 72 6f 74 65 20 74 68 65  at you wrote the
0240: 20 6f 72 69 67 69 6e 61 6c 20 73 6f 66 74 77 61   original softwa
0250: 72 65 2e 20 49 66 20 79 6f 75 20 75 73 65 20 74  re. If you use t
0260: 68 69 73 20 73 6f 66 74 77 61 72 65 0a 20 20 20  his software.   
0270: 20 20 69 6e 20 61 20 70 72 6f 64 75 63 74 2c 20    in a product, 
0280: 61 6e 20 61 63 6b 6e 6f 77 6c 65 64 67 6d 65 6e  an acknowledgmen
0290: 74 20 69 6e 20 74 68 65 20 70 72 6f 64 75 63 74  t in the product
02a0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 77   documentation w
02b0: 6f 75 6c 64 20 62 65 0a 20 20 20 20 20 61 70 70  ould be.     app
02c0: 72 65 63 69 61 74 65 64 20 62 75 74 20 69 73 20  reciated but is 
02d0: 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 0a 20 20  not required..  
02e0: 32 2e 20 41 6c 74 65 72 65 64 20 73 6f 75 72 63  2. Altered sourc
02f0: 65 20 76 65 72 73 69 6f 6e 73 20 6d 75 73 74 20  e versions must 
0300: 62 65 20 70 6c 61 69 6e 6c 79 20 6d 61 72 6b 65  be plainly marke
0310: 64 20 61 73 20 73 75 63 68 2c 20 61 6e 64 20 6d  d as such, and m
0320: 75 73 74 20 6e 6f 74 20 62 65 0a 20 20 20 20 20  ust not be.     
0330: 6d 69 73 72 65 70 72 65 73 65 6e 74 65 64 20 61  misrepresented a
0340: 73 20 62 65 69 6e 67 20 74 68 65 20 6f 72 69 67  s being the orig
0350: 69 6e 61 6c 20 73 6f 66 74 77 61 72 65 2e 0a 20  inal software.. 
0360: 20 33 2e 20 54 68 69 73 20 6e 6f 74 69 63 65 20   3. This notice 
0370: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 6d 6f 76  may not be remov
0380: 65 64 20 6f 72 20 61 6c 74 65 72 65 64 20 66 72  ed or altered fr
0390: 6f 6d 20 61 6e 79 20 73 6f 75 72 63 65 20 64 69  om any source di
03a0: 73 74 72 69 62 75 74 69 6f 6e 2e 0a 0a 20 20 4d  stribution...  M
03b0: 61 72 6b 20 41 64 6c 65 72 20 20 20 20 6d 61 64  ark Adler    mad
03c0: 6c 65 72 40 61 6c 75 6d 6e 69 2e 63 61 6c 74 65  ler@alumni.calte
03d0: 63 68 2e 65 64 75 0a 20 2a 2f 0a 0a 0a 2f 2a 0a  ch.edu. */.../*.
03e0: 20 2a 20 53 65 65 20 70 75 66 66 2e 63 20 66 6f   * See puff.c fo
03f0: 72 20 70 75 72 70 6f 73 65 20 61 6e 64 20 75 73  r purpose and us
0400: 61 67 65 2e 0a 20 2a 2f 0a 23 69 66 6e 64 65 66  age.. */.#ifndef
0410: 20 4e 49 4c 0a 23 20 20 64 65 66 69 6e 65 20 4e   NIL.#  define N
0420: 49 4c 20 28 28 75 6e 73 69 67 6e 65 64 20 63 68  IL ((unsigned ch
0430: 61 72 20 2a 29 30 29 20 20 20 20 20 20 2f 2a 20  ar *)0)      /* 
0440: 66 6f 72 20 6e 6f 20 6f 75 74 70 75 74 20 6f 70  for no output op
0450: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  tion */.#endif..
0460: 69 6e 74 20 70 75 66 66 28 75 6e 73 69 67 6e 65  int puff(unsigne
0470: 64 20 63 68 61 72 20 2a 64 65 73 74 2c 20 20 20  d char *dest,   
0480: 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 69 6e 74          /* point
0490: 65 72 20 74 6f 20 64 65 73 74 69 6e 61 74 69 6f  er to destinatio
04a0: 6e 20 70 6f 69 6e 74 65 72 20 2a 2f 0a 20 20 20  n pointer */.   
04b0: 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6c        unsigned l
04c0: 6f 6e 67 20 2a 64 65 73 74 6c 65 6e 2c 20 20 20  ong *destlen,   
04d0: 20 20 20 20 20 2f 2a 20 61 6d 6f 75 6e 74 20 6f       /* amount o
04e0: 66 20 6f 75 74 70 75 74 20 73 70 61 63 65 20 2a  f output space *
04f0: 2f 0a 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74  /.         const
0500: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
0510: 73 6f 75 72 63 65 2c 20 20 20 2f 2a 20 70 6f 69  source,   /* poi
0520: 6e 74 65 72 20 74 6f 20 73 6f 75 72 63 65 20 64  nter to source d
0530: 61 74 61 20 70 6f 69 6e 74 65 72 20 2a 2f 0a 20  ata pointer */. 
0540: 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64          unsigned
0550: 20 6c 6f 6e 67 20 2a 73 6f 75 72 63 65 6c 65 6e   long *sourcelen
0560: 29 3b 20 20 20 20 20 2f 2a 20 61 6d 6f 75 6e 74  );     /* amount
0570: 20 6f 66 20 69 6e 70 75 74 20 61 76 61 69 6c 61   of input availa
0580: 62 6c 65 20 2a 2f 0a                             ble */.