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