bzlib.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder/*-------------------------------------------------------------*/
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder/*--- Library top-level functions. ---*/
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski/*-------------------------------------------------------------*/
3f69b6948966979163bdfe8331c38833d5d90ecdChristian Maeder This file is a part of bzip2 and/or libbzip2, a program and
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder library for lossless, block-sorting data compression.
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder Copyright (C) 1996-1998 Julian R Seward. All rights reserved.
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski Redistribution and use in source and binary forms, with or without
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder modification, are permitted provided that the following conditions
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder 1. Redistributions of source code must retain the above copyright
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder notice, this list of conditions and the following disclaimer.
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder 2. The origin of this software must not be misrepresented; you must
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder not claim that you wrote the original software. If you use this
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder software in a product, an acknowledgment in the product
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder documentation would be appreciated but is not required.
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder 3. Altered source versions must be plainly marked as such, and must
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder not be misrepresented as being the original software.
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder 4. The name of the author may not be used to endorse or promote
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder products derived from this software without specific prior written
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder Julian Seward, Guildford, Surrey, UK.
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder jseward@acm.org
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder bzip2/libbzip2 version 0.9.0c of 18 October 1998
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder This program is based on (at least) the work of:
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder David Wheeler
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder Peter Fenwick
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder Alistair Moffat
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder Ian H. Witten
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder Robert Sedgewick
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder Jon L. Bentley
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder For more information on these sources, see the manual.
351391e0e3226210e7ffb183b334da9f96de36eaChristian Maeder 0.9.0 -- original version.
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder 0.9.0a/b -- no changes in this file.
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder * made zero-length BZ_FLUSH work correctly in bzCompress().
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder * fixed bzWrite/bzRead to ignore zero-length requests.
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder * fixed bzread to correctly handle read requests after EOF.
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder * wrong parameter order in call to bzDecompressInit in
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski bzBuffToBuffDecompress. Fixed.
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang/*---------------------------------------------------*/
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder/*--- Compression stuff ---*/
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder/*---------------------------------------------------*/
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski/*---------------------------------------------------*/
2561b4bfc45d280ee2be8a7870314670e4e682e4Christian Maeder "\n\nbzip2/libbzip2, v0.9.0c: internal error number %d.\n"
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich "This is a bug in bzip2/libbzip2, v0.9.0c. Please report\n"
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder "it to me at: jseward@acm.org. If this happened when\n"
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich "you were using some program which uses libbzip2 as a\n"
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder "component, you should also report this bug to the author(s)\n"
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski "of that program. Please make an effort to report this bug;\n"
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder "timely and accurate bug reports eventually lead to higher\n"
c7e03d0708369f944b6f235057b39142a21599f2Mihai Codescu "quality software. Thx. Julian Seward, 18 October 1998.\n\n",
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder/*---------------------------------------------------*/
03136b84a0c70d877e227444f0875e209506b9e4Christian Maedervoid* default_bzalloc ( void* opaque, Int32 items, Int32 size )
b2026c46f0e4c6a05931f1bf0ab2e84ce884c814Christian Maedervoid default_bzfree ( void* opaque, void* addr )
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder/*---------------------------------------------------*/
d5833d2ee7bafcbf2fdd2bdfd9a728c769b100c7Christian Maeder for (i = 0; i < 256; i++) s->inUse[i] = False;
7830e8fa7442fb7452af7ecdba102bc297ae367eChristian Maeder/*---------------------------------------------------*/
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder if (s->state_in_ch < 256 && s->state_in_len > 0)
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder/*---------------------------------------------------*/
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder s->block = BZALLOC( (n + BZ_NUM_OVERSHOOT_BYTES) * sizeof(UChar) );
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder s->quadrant = BZALLOC( (n + BZ_NUM_OVERSHOOT_BYTES) * sizeof(Int16) );
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder s->ftab = BZALLOC( 65537 * sizeof(Int32) );
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder if (s->block == NULL || s->quadrant == NULL ||
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder if (s->quadrant != NULL) BZFREE(s->quadrant);
ef60398f3b9f24614b074f8f0f1349ab527e1c77Christian Maeder s->nblockMAX = 100000 * blockSize100k - 19;
ef60398f3b9f24614b074f8f0f1349ab527e1c77Christian Maeder/*---------------------------------------------------*/
4e3c46a1ca40d50a045342c5fab25b5db4fa9a87Christian Maeder for (i = 0; i < s->state_in_len; i++) {
bdf2e01977470bedcb4425e2dadabc9e9f6ba149Ewaryst Schulz s->block[s->nblock] = (UChar)ch; s->nblock++;
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
8cceb39f451593f3904acbf9d64bea6af9860b57Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
8cceb39f451593f3904acbf9d64bea6af9860b57Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
8cceb39f451593f3904acbf9d64bea6af9860b57Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder s->block[s->nblock] = (UChar)ch; s->nblock++;
8cceb39f451593f3904acbf9d64bea6af9860b57Christian Maeder s->block[s->nblock] = (UChar)(s->state_in_len-4);
8cceb39f451593f3904acbf9d64bea6af9860b57Christian Maeder/*---------------------------------------------------*/
568da6120906d5283c4322114eee10f24ea8dd6dChristian Maeder if (s->state_in_ch < 256) add_pair_to_block ( s );
568da6120906d5283c4322114eee10f24ea8dd6dChristian Maeder/*---------------------------------------------------*/
568da6120906d5283c4322114eee10f24ea8dd6dChristian Maeder /*-- fast track the common case --*/ \
8cceb39f451593f3904acbf9d64bea6af9860b57Christian Maeder /*-- general, uncommon cases --*/ \
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder/*---------------------------------------------------*/
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder /*-- fast track the common case --*/
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder /*-- block full? --*/
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder /*-- no input? --*/
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder /*-- general, uncommon case --*/
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder /*-- block full? --*/
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder /*-- no input? --*/
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder /*-- flush/finish end? --*/
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder if (s->avail_in_expect == 0) break;
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder/*---------------------------------------------------*/
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder /*-- no output space? --*/
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder /*-- block done? --*/
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder *(s->strm->next_out) = ((UChar*)(s->quadrant))[s->state_out_pos];
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder/*---------------------------------------------------*/
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder progress_out |= copy_output_until_stop ( s );
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder progress_in |= copy_input_until_stop ( s );
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder compressBlock ( s, s->mode == BZ_M_FINISHING );
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maeder/*---------------------------------------------------*/
d6c6b2543c509ec7f6213e4cba675d96304a7fd6Christian Maederint BZ_API(bzCompress) ( bz_stream *strm, int action )
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder if (s->strm != strm) return BZ_PARAM_ERROR;
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder switch (s->mode) {
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR;
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder if (s->avail_in_expect > 0 || !isempty_RL(s) ||
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR;
a23e572c8f957cc051a1b0831abd6fe9380d45c7Christian Maeder if (s->avail_in_expect > 0 || !isempty_RL(s) ||
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder s->state_out_pos < s->numZ) return BZ_FINISH_OK;
e0f1794e365dd347e97b37d7d22b2fce27296fa1Christian Maeder/*---------------------------------------------------*/
4072adb8c5d2c86123e8e1c1918263968f187829Christian Maederint BZ_API(bzCompressEnd) ( bz_stream *strm )
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder if (s->strm != strm) return BZ_PARAM_ERROR;
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder if (s->quadrant != NULL) BZFREE(s->quadrant);
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski/*---------------------------------------------------*/
74d9a385499bf903b24848dff450a153f525bda7Christian Maeder/*--- Decompression stuff ---*/
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder/*---------------------------------------------------*/
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder/*---------------------------------------------------*/
be98c516a8ff1d496fcdeb9b8be8c5f4b908ab95Christian Maeder if (small != 0 && small != 1) return BZ_PARAM_ERROR;
be98c516a8ff1d496fcdeb9b8be8c5f4b908ab95Christian Maeder if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;
0ccfc8f86bd6518556ef09e367a0ce2bd1a69c91Christian Maeder if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
be98c516a8ff1d496fcdeb9b8be8c5f4b908ab95Christian Maeder if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder/*---------------------------------------------------*/
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maedervoid unRLE_obuf_to_output_FAST ( DState* s )
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder /* try to finish existing run */
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder if (s->state_out_len == 0) break;
5a9a06d23910b9521e1d1cd39865ac7912ccee4bChristian Maeder *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
5a9a06d23910b9521e1d1cd39865ac7912ccee4bChristian Maeder BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder /* can a new run be started? */
a7be28e157e9ceeec73a8fd0e642c36ea29d4218Christian Maeder if (s->nblock_used == s->save_nblock+1) return;
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder if (s->nblock_used == s->save_nblock+1) continue;
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder if (k1 != s->k0) { s->k0 = k1; continue; };
a7be28e157e9ceeec73a8fd0e642c36ea29d4218Christian Maeder if (s->nblock_used == s->save_nblock+1) continue;
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski if (k1 != s->k0) { s->k0 = k1; continue; };
32562a567baac248a00782d2727716c13117dc4aChristian Maeder if (s->nblock_used == s->save_nblock+1) continue;
7857a35e3af533dfbd0f0e18638ebd211e6358a0Christian Maeder if (k1 != s->k0) { s->k0 = k1; continue; };
32562a567baac248a00782d2727716c13117dc4aChristian Maeder /* restore */
32562a567baac248a00782d2727716c13117dc4aChristian Maeder UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC;
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder unsigned int cs_avail_out = s->strm->avail_out;
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder /* end restore */
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder /* try to finish existing run */
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder *( (UChar*)(cs_next_out) ) = c_state_out_ch;
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder *( (UChar*)(cs_next_out) ) = c_state_out_ch;
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder /* can a new run be started? */
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder if (c_nblock_used == s_save_nblockPP) continue;
32562a567baac248a00782d2727716c13117dc4aChristian Maeder if (c_nblock_used == s_save_nblockPP) continue;
32562a567baac248a00782d2727716c13117dc4aChristian Maeder s->strm->total_out += (avail_out_INIT - cs_avail_out);
3c8d067accf18572352351ec42ff905c7297a8a5Christian Maeder s->calculatedBlockCRC = c_calculatedBlockCRC;
2766ec926fcf3faf72248b10c3305b715b8c3249Christian Maeder /* end save */
2766ec926fcf3faf72248b10c3305b715b8c3249Christian Maeder/*---------------------------------------------------*/
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till Mossakowski__inline__ Int32 indexIntoF ( Int32 indx, Int32 *cftab )
2766ec926fcf3faf72248b10c3305b715b8c3249Christian Maeder if (indx >= cftab[mid]) nb = mid; else na = mid;
7830e8fa7442fb7452af7ecdba102bc297ae367eChristian Maeder/*---------------------------------------------------*/
fc033b8680245bf692c9c09723fd3046ff38971eChristian Maedervoid unRLE_obuf_to_output_SMALL ( DState* s )
0ccfc8f86bd6518556ef09e367a0ce2bd1a69c91Christian Maeder /* try to finish existing run */
2b2f3b72e82e28b34db9c69af2d1ec38f228272eChristian Maeder if (s->state_out_len == 0) break;
fc033b8680245bf692c9c09723fd3046ff38971eChristian Maeder *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
fc033b8680245bf692c9c09723fd3046ff38971eChristian Maeder BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang /* can a new run be started? */
7830e8fa7442fb7452af7ecdba102bc297ae367eChristian Maeder if (s->nblock_used == s->save_nblock+1) return;
while (True) {
while (True) {
if (s->state_out_len == 0) break;
s->state_out_len--;
DState* s;
while (True) {
if (s->smallDecompress)
unRLE_obuf_to_output_SMALL ( s ); else
unRLE_obuf_to_output_FAST ( s );
s->calculatedBlockCRC );
return BZ_DATA_ERROR;
return BZ_OK;
if (r == BZ_STREAM_END) {
return BZ_DATA_ERROR;
DState* s;
return BZ_OK;
#ifndef BZ_NO_STDIO
ungetc ( c, f );
return False;
( int* bzerror,
FILE* f,
int blockSize100k,
int verbosity,
int workFactor )
if (f == NULL ||
if (ferror(f))
return bzf;
( int* bzerror,
BZFILE* b,
void* buf,
int len )
if (len == 0)
while (True) {
( int* bzerror,
BZFILE* b,
int abandon,
unsigned int* nbytes_in,
unsigned int* nbytes_out )
while (True) {
( int* bzerror,
FILE* f,
int verbosity,
int small,
void* unused,
int nUnused )
int ret;
if (f == NULL ||
if (ferror(f))
while (nUnused > 0) {
nUnused--;
return bzf;
( int* bzerror,
BZFILE* b,
void* buf,
int len )
if (len == 0)
while (True) {
( int* bzerror,
BZFILE* b,
void* vUnused,
int* nUnused )
( char* dest,
unsigned int* destLen,
char* source,
unsigned int sourceLen,
int blockSize100k,
int verbosity,
int workFactor )
int ret;
return BZ_PARAM_ERROR;
return BZ_OK;
return BZ_OUTBUFF_FULL;
return ret;
( char* dest,
unsigned int* destLen,
char* source,
unsigned int sourceLen,
int small,
int verbosity )
int ret;
return BZ_PARAM_ERROR;
return BZ_OK;
return BZ_UNEXPECTED_EOF;
return BZ_OUTBUFF_FULL;
return BZ_SEQUENCE_ERROR;
return BZ_VERSION;
#ifndef BZ_NO_STDIO
# include <fcntl.h>
# include <io.h>
# ifdef _MSC_VER
const char *mode,
const void* buf,
unsigned int len)
int bzerr;
int writing = 0;
int verbosity = 0;
int smallMode = 0;
int nUnused = 0;
int noClose = 0;
while(*mode){
switch(*mode){
writing = 0;break;
blockSize100k = 0;
mode++;
mode++;
if(path) {
if(path[0]==0){
}else if (fp==0) {
#ifdef BZ_STRICT_ANSI
if(writing){
return NULL;
return bzfp;
( const char *path,
const char *mode )
const char *mode )
( int fd,
const char *mode )
( int fd,
const char* mode,
const void* buf,
unsigned int len )
return nread;
int bzerr;
return len;
int bzerr;
static char *bzerrorstrings[] = {
/*--- end bzlib.c ---*/