xref: /plan9/sys/src/cmd/bzip2/lib/bzlib_stdio.h (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
1*59cc4ca5SDavid du Colombier /*
2*59cc4ca5SDavid du Colombier  * THIS FILE IS NOT IDENTICAL TO THE ORIGINAL
3*59cc4ca5SDavid du Colombier  * FROM THE BZIP2 DISTRIBUTION.
4*59cc4ca5SDavid du Colombier  *
5*59cc4ca5SDavid du Colombier  * It has been modified, mainly to break the library
6*59cc4ca5SDavid du Colombier  * into smaller pieces.
7*59cc4ca5SDavid du Colombier  *
8*59cc4ca5SDavid du Colombier  * Russ Cox
9*59cc4ca5SDavid du Colombier  * rsc@plan9.bell-labs.com
10*59cc4ca5SDavid du Colombier  * July 2000
11*59cc4ca5SDavid du Colombier  */
12*59cc4ca5SDavid du Colombier 
13*59cc4ca5SDavid du Colombier /*-------------------------------------------------------------*/
14*59cc4ca5SDavid du Colombier /*--- Library top-level functions.                          ---*/
15*59cc4ca5SDavid du Colombier /*---                                               bzlib.c ---*/
16*59cc4ca5SDavid du Colombier /*-------------------------------------------------------------*/
17*59cc4ca5SDavid du Colombier 
18*59cc4ca5SDavid du Colombier /*--
19*59cc4ca5SDavid du Colombier   This file is a part of bzip2 and/or libbzip2, a program and
20*59cc4ca5SDavid du Colombier   library for lossless, block-sorting data compression.
21*59cc4ca5SDavid du Colombier 
22*59cc4ca5SDavid du Colombier   Copyright (C) 1996-2000 Julian R Seward.  All rights reserved.
23*59cc4ca5SDavid du Colombier 
24*59cc4ca5SDavid du Colombier   Redistribution and use in source and binary forms, with or without
25*59cc4ca5SDavid du Colombier   modification, are permitted provided that the following conditions
26*59cc4ca5SDavid du Colombier   are met:
27*59cc4ca5SDavid du Colombier 
28*59cc4ca5SDavid du Colombier   1. Redistributions of source code must retain the above copyright
29*59cc4ca5SDavid du Colombier      notice, this list of conditions and the following disclaimer.
30*59cc4ca5SDavid du Colombier 
31*59cc4ca5SDavid du Colombier   2. The origin of this software must not be misrepresented; you must
32*59cc4ca5SDavid du Colombier      not claim that you wrote the original software.  If you use this
33*59cc4ca5SDavid du Colombier      software in a product, an acknowledgment in the product
34*59cc4ca5SDavid du Colombier      documentation would be appreciated but is not required.
35*59cc4ca5SDavid du Colombier 
36*59cc4ca5SDavid du Colombier   3. Altered source versions must be plainly marked as such, and must
37*59cc4ca5SDavid du Colombier      not be misrepresented as being the original software.
38*59cc4ca5SDavid du Colombier 
39*59cc4ca5SDavid du Colombier   4. The name of the author may not be used to endorse or promote
40*59cc4ca5SDavid du Colombier      products derived from this software without specific prior written
41*59cc4ca5SDavid du Colombier      permission.
42*59cc4ca5SDavid du Colombier 
43*59cc4ca5SDavid du Colombier   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
44*59cc4ca5SDavid du Colombier   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
45*59cc4ca5SDavid du Colombier   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46*59cc4ca5SDavid du Colombier   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
47*59cc4ca5SDavid du Colombier   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48*59cc4ca5SDavid du Colombier   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
49*59cc4ca5SDavid du Colombier   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
50*59cc4ca5SDavid du Colombier   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
51*59cc4ca5SDavid du Colombier   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
52*59cc4ca5SDavid du Colombier   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
53*59cc4ca5SDavid du Colombier   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54*59cc4ca5SDavid du Colombier 
55*59cc4ca5SDavid du Colombier   Julian Seward, Cambridge, UK.
56*59cc4ca5SDavid du Colombier   jseward@acm.org
57*59cc4ca5SDavid du Colombier   bzip2/libbzip2 version 1.0 of 21 March 2000
58*59cc4ca5SDavid du Colombier 
59*59cc4ca5SDavid du Colombier   This program is based on (at least) the work of:
60*59cc4ca5SDavid du Colombier      Mike Burrows
61*59cc4ca5SDavid du Colombier      David Wheeler
62*59cc4ca5SDavid du Colombier      Peter Fenwick
63*59cc4ca5SDavid du Colombier      Alistair Moffat
64*59cc4ca5SDavid du Colombier      Radford Neal
65*59cc4ca5SDavid du Colombier      Ian H. Witten
66*59cc4ca5SDavid du Colombier      Robert Sedgewick
67*59cc4ca5SDavid du Colombier      Jon L. Bentley
68*59cc4ca5SDavid du Colombier 
69*59cc4ca5SDavid du Colombier   For more information on these sources, see the manual.
70*59cc4ca5SDavid du Colombier --*/
71*59cc4ca5SDavid du Colombier 
72*59cc4ca5SDavid du Colombier /*--
73*59cc4ca5SDavid du Colombier    CHANGES
74*59cc4ca5SDavid du Colombier    ~~~~~~~
75*59cc4ca5SDavid du Colombier    0.9.0 -- original version.
76*59cc4ca5SDavid du Colombier 
77*59cc4ca5SDavid du Colombier    0.9.0a/b -- no changes in this file.
78*59cc4ca5SDavid du Colombier 
79*59cc4ca5SDavid du Colombier    0.9.0c
80*59cc4ca5SDavid du Colombier       * made zero-length BZ_FLUSH work correctly in bzCompress().
81*59cc4ca5SDavid du Colombier       * fixed bzWrite/bzRead to ignore zero-length requests.
82*59cc4ca5SDavid du Colombier       * fixed bzread to correctly handle read requests after EOF.
83*59cc4ca5SDavid du Colombier       * wrong parameter order in call to bzDecompressInit in
84*59cc4ca5SDavid du Colombier         bzBuffToBuffDecompress.  Fixed.
85*59cc4ca5SDavid du Colombier --*/
86*59cc4ca5SDavid du Colombier 
87*59cc4ca5SDavid du Colombier #include <stdio.h>
88*59cc4ca5SDavid du Colombier 
89*59cc4ca5SDavid du Colombier #define BZ_MAX_UNUSED 5000
90*59cc4ca5SDavid du Colombier 
91*59cc4ca5SDavid du Colombier typedef void BZFILE;
92*59cc4ca5SDavid du Colombier 
93*59cc4ca5SDavid du Colombier BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
94*59cc4ca5SDavid du Colombier       const char *path,
95*59cc4ca5SDavid du Colombier       const char *mode
96*59cc4ca5SDavid du Colombier    );
97*59cc4ca5SDavid du Colombier 
98*59cc4ca5SDavid du Colombier BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
99*59cc4ca5SDavid du Colombier       int        fd,
100*59cc4ca5SDavid du Colombier       const char *mode
101*59cc4ca5SDavid du Colombier    );
102*59cc4ca5SDavid du Colombier 
103*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzread) (
104*59cc4ca5SDavid du Colombier       BZFILE* b,
105*59cc4ca5SDavid du Colombier       void* buf,
106*59cc4ca5SDavid du Colombier       int len
107*59cc4ca5SDavid du Colombier    );
108*59cc4ca5SDavid du Colombier 
109*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzwrite) (
110*59cc4ca5SDavid du Colombier       BZFILE* b,
111*59cc4ca5SDavid du Colombier       void*   buf,
112*59cc4ca5SDavid du Colombier       int     len
113*59cc4ca5SDavid du Colombier    );
114*59cc4ca5SDavid du Colombier 
115*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzflush) (
116*59cc4ca5SDavid du Colombier       BZFILE* b
117*59cc4ca5SDavid du Colombier    );
118*59cc4ca5SDavid du Colombier 
119*59cc4ca5SDavid du Colombier BZ_EXTERN void BZ_API(BZ2_bzclose) (
120*59cc4ca5SDavid du Colombier       BZFILE* b
121*59cc4ca5SDavid du Colombier    );
122*59cc4ca5SDavid du Colombier 
123*59cc4ca5SDavid du Colombier BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
124*59cc4ca5SDavid du Colombier       BZFILE *b,
125*59cc4ca5SDavid du Colombier       int    *errnum
126*59cc4ca5SDavid du Colombier    );
127*59cc4ca5SDavid du Colombier 
128*59cc4ca5SDavid du Colombier 
129*59cc4ca5SDavid du Colombier /*-- High(er) level library functions --*/
130*59cc4ca5SDavid du Colombier BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (
131*59cc4ca5SDavid du Colombier       int*  bzerror,
132*59cc4ca5SDavid du Colombier       FILE* f,
133*59cc4ca5SDavid du Colombier       int   verbosity,
134*59cc4ca5SDavid du Colombier       int   small,
135*59cc4ca5SDavid du Colombier       void* unused,
136*59cc4ca5SDavid du Colombier       int   nUnused
137*59cc4ca5SDavid du Colombier    );
138*59cc4ca5SDavid du Colombier 
139*59cc4ca5SDavid du Colombier BZ_EXTERN void BZ_API(BZ2_bzReadClose) (
140*59cc4ca5SDavid du Colombier       int*    bzerror,
141*59cc4ca5SDavid du Colombier       BZFILE* b
142*59cc4ca5SDavid du Colombier    );
143*59cc4ca5SDavid du Colombier 
144*59cc4ca5SDavid du Colombier BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (
145*59cc4ca5SDavid du Colombier       int*    bzerror,
146*59cc4ca5SDavid du Colombier       BZFILE* b,
147*59cc4ca5SDavid du Colombier       void**  unused,
148*59cc4ca5SDavid du Colombier       int*    nUnused
149*59cc4ca5SDavid du Colombier    );
150*59cc4ca5SDavid du Colombier 
151*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzRead) (
152*59cc4ca5SDavid du Colombier       int*    bzerror,
153*59cc4ca5SDavid du Colombier       BZFILE* b,
154*59cc4ca5SDavid du Colombier       void*   buf,
155*59cc4ca5SDavid du Colombier       int     len
156*59cc4ca5SDavid du Colombier    );
157*59cc4ca5SDavid du Colombier 
158*59cc4ca5SDavid du Colombier BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (
159*59cc4ca5SDavid du Colombier       int*  bzerror,
160*59cc4ca5SDavid du Colombier       FILE* f,
161*59cc4ca5SDavid du Colombier       int   blockSize100k,
162*59cc4ca5SDavid du Colombier       int   verbosity,
163*59cc4ca5SDavid du Colombier       int   workFactor
164*59cc4ca5SDavid du Colombier    );
165*59cc4ca5SDavid du Colombier 
166*59cc4ca5SDavid du Colombier BZ_EXTERN void BZ_API(BZ2_bzWrite) (
167*59cc4ca5SDavid du Colombier       int*    bzerror,
168*59cc4ca5SDavid du Colombier       BZFILE* b,
169*59cc4ca5SDavid du Colombier       void*   buf,
170*59cc4ca5SDavid du Colombier       int     len
171*59cc4ca5SDavid du Colombier    );
172*59cc4ca5SDavid du Colombier 
173*59cc4ca5SDavid du Colombier BZ_EXTERN void BZ_API(BZ2_bzWriteClose) (
174*59cc4ca5SDavid du Colombier       int*          bzerror,
175*59cc4ca5SDavid du Colombier       BZFILE*       b,
176*59cc4ca5SDavid du Colombier       int           abandon,
177*59cc4ca5SDavid du Colombier       unsigned int* nbytes_in,
178*59cc4ca5SDavid du Colombier       unsigned int* nbytes_out
179*59cc4ca5SDavid du Colombier    );
180*59cc4ca5SDavid du Colombier 
181*59cc4ca5SDavid du Colombier BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (
182*59cc4ca5SDavid du Colombier       int*          bzerror,
183*59cc4ca5SDavid du Colombier       BZFILE*       b,
184*59cc4ca5SDavid du Colombier       int           abandon,
185*59cc4ca5SDavid du Colombier       unsigned int* nbytes_in_lo32,
186*59cc4ca5SDavid du Colombier       unsigned int* nbytes_in_hi32,
187*59cc4ca5SDavid du Colombier       unsigned int* nbytes_out_lo32,
188*59cc4ca5SDavid du Colombier       unsigned int* nbytes_out_hi32
189*59cc4ca5SDavid du Colombier    );
190*59cc4ca5SDavid du Colombier 
191