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 "os.h"
88*59cc4ca5SDavid du Colombier #include "bzlib.h"
89*59cc4ca5SDavid du Colombier #include "bzlib_private.h"
90*59cc4ca5SDavid du Colombier
91*59cc4ca5SDavid du Colombier /*---------------------------------------------------*/
bz_config_ok(void)92*59cc4ca5SDavid du Colombier int bz_config_ok ( void )
93*59cc4ca5SDavid du Colombier {
94*59cc4ca5SDavid du Colombier if (sizeof(int) != 4) return 0;
95*59cc4ca5SDavid du Colombier if (sizeof(short) != 2) return 0;
96*59cc4ca5SDavid du Colombier if (sizeof(char) != 1) return 0;
97*59cc4ca5SDavid du Colombier return 1;
98*59cc4ca5SDavid du Colombier }
99*59cc4ca5SDavid du Colombier
100*59cc4ca5SDavid du Colombier /*---------------------------------------------------*/
default_bzalloc(void * opaque,Int32 items,Int32 size)101*59cc4ca5SDavid du Colombier void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
102*59cc4ca5SDavid du Colombier {
103*59cc4ca5SDavid du Colombier void* v = malloc ( items * size );
104*59cc4ca5SDavid du Colombier return v;
105*59cc4ca5SDavid du Colombier }
106*59cc4ca5SDavid du Colombier
default_bzfree(void * opaque,void * addr)107*59cc4ca5SDavid du Colombier void default_bzfree ( void* opaque, void* addr )
108*59cc4ca5SDavid du Colombier {
109*59cc4ca5SDavid du Colombier if (addr != NULL) free ( addr );
110*59cc4ca5SDavid du Colombier }
111*59cc4ca5SDavid du Colombier
112*59cc4ca5SDavid du Colombier /* rsc added this: where did the original go? */
bz_internal_error(int errcode)113*59cc4ca5SDavid du Colombier void bz_internal_error( int errcode )
114*59cc4ca5SDavid du Colombier {
115*59cc4ca5SDavid du Colombier exit(1);
116*59cc4ca5SDavid du Colombier }
117