2 * zipio.h - stdio emulation library for reading zip files
8 * Copyright (C) 1995, Edward B. Hamrick
10 * Permission to use, copy, modify, and distribute this software and
11 * its documentation for any purpose and without fee is hereby granted,
12 * provided that the above copyright notice appear in all copies and
13 * that both that copyright notice and this permission notice appear in
14 * supporting documentation, and that the name of the copyright holders
15 * not be used in advertising or publicity pertaining to distribution of
16 * the software without specific, written prior permission. The copyright
17 * holders makes no representations about the suitability of this software
18 * for any purpose. It is provided "as is" without express or implied warranty.
20 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
21 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
22 * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
23 * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
24 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
25 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
30 * Changes from 1.1 to 1.1.1:
31 * Changed "z*" functions to "Z*" to avoid namespace pollution.
32 * Added "zungetc" macro.
33 * John Cowan <cowan@ccil.org>
35 * Changes from 1.1.1 to 1.1.2:
36 * Relicensed under the MIT license, with consent of the copyright holders.
37 * Claudio Matsuoka (Jan 11 2011)
41 * This library of routines has the same calling sequence as
42 * the stdio.h routines for reading files. If these routines
43 * detect that they are reading from a zip file, they transparently
44 * unzip the file and make the application think they're reading
45 * from the uncompressed file.
47 * Note that this library is designed to work for zip files that
48 * use the deflate compression method, and to read the first file
49 * within the zip archive.
51 * There are a number of tunable parameters in the reference
52 * implementation relating to in-memory decompression and the
53 * use of temporary files.
55 * Particular care was taken to make the Zgetc() macro work
56 * as efficiently as possible. When reading an uncompressed
57 * file with Zgetc(), it has exactly the same performance as
58 * when using getc(). WHen reading a compressed file with
59 * Zgetc(), it has the same performance as fread(). The total
60 * CPU overhead for decompression is about 50 cycles per byte.
62 * The Zungetc() macro is quite limited. It ignores the character
63 * specified for pushback, and essentially just forces the last
64 * character read to be re-read. This is essential when parsing
65 * numbers and such. (1.1.1)
67 * There are a few stdio routines that aren't represented here, but
68 * they can be layered on top of these routines if needed.
82 ((--((f)->len) >= 0) \
83 ? (unsigned char)(*(f)->ptr++) \
86 #define Zungetc(c,f) \
87 ((f)->ptr--, (f)->len++, (c))
93 ZFILE
*Zopen(const char *path
, const char *mode
);
94 int _Zgetc(ZFILE
*stream
);
95 size_t Zread(void *ptr
, size_t size
, size_t n
, ZFILE
*stream
);
96 int Zseek(ZFILE
*stream
, long offset
, int whence
);
97 long Ztell(ZFILE
*stream
);
98 int Zclose(ZFILE
*stream
);