178556Sobrien
278556Sobrien/*-------------------------------------------------------------*/
378556Sobrien/*--- Public header file for the library.                   ---*/
478556Sobrien/*---                                               bzlib.h ---*/
578556Sobrien/*-------------------------------------------------------------*/
678556Sobrien
7167974Sdelphij/* ------------------------------------------------------------------
8167974Sdelphij   This file is part of bzip2/libbzip2, a program and library for
9167974Sdelphij   lossless, block-sorting data compression.
1078556Sobrien
11215041Sobrien   bzip2/libbzip2 version 1.0.6 of 6 September 2010
12215041Sobrien   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>
1378556Sobrien
14167974Sdelphij   Please read the WARNING, DISCLAIMER and PATENTS sections in the
15167974Sdelphij   README file.
1678556Sobrien
17167974Sdelphij   This program is released under the terms of the license contained
18167974Sdelphij   in the file LICENSE.
19167974Sdelphij   ------------------------------------------------------------------ */
2078556Sobrien
2178556Sobrien
2278556Sobrien#ifndef _BZLIB_H
2378556Sobrien#define _BZLIB_H
2478556Sobrien
2578556Sobrien#ifdef __cplusplus
2678556Sobrienextern "C" {
2778556Sobrien#endif
2878556Sobrien
2978556Sobrien#define BZ_RUN               0
3078556Sobrien#define BZ_FLUSH             1
3178556Sobrien#define BZ_FINISH            2
3278556Sobrien
3378556Sobrien#define BZ_OK                0
3478556Sobrien#define BZ_RUN_OK            1
3578556Sobrien#define BZ_FLUSH_OK          2
3678556Sobrien#define BZ_FINISH_OK         3
3778556Sobrien#define BZ_STREAM_END        4
3878556Sobrien#define BZ_SEQUENCE_ERROR    (-1)
3978556Sobrien#define BZ_PARAM_ERROR       (-2)
4078556Sobrien#define BZ_MEM_ERROR         (-3)
4178556Sobrien#define BZ_DATA_ERROR        (-4)
4278556Sobrien#define BZ_DATA_ERROR_MAGIC  (-5)
4378556Sobrien#define BZ_IO_ERROR          (-6)
4478556Sobrien#define BZ_UNEXPECTED_EOF    (-7)
4578556Sobrien#define BZ_OUTBUFF_FULL      (-8)
4678556Sobrien#define BZ_CONFIG_ERROR      (-9)
4778556Sobrien
4878556Sobrientypedef
4978556Sobrien   struct {
5078556Sobrien      char *next_in;
5178556Sobrien      unsigned int avail_in;
5278556Sobrien      unsigned int total_in_lo32;
5378556Sobrien      unsigned int total_in_hi32;
5478556Sobrien
5578556Sobrien      char *next_out;
5678556Sobrien      unsigned int avail_out;
5778556Sobrien      unsigned int total_out_lo32;
5878556Sobrien      unsigned int total_out_hi32;
5978556Sobrien
6078556Sobrien      void *state;
6178556Sobrien
6278556Sobrien      void *(*bzalloc)(void *,int,int);
6378556Sobrien      void (*bzfree)(void *,void *);
6478556Sobrien      void *opaque;
6578556Sobrien   }
6678556Sobrien   bz_stream;
6778556Sobrien
6878556Sobrien
6978556Sobrien#ifndef BZ_IMPORT
7078556Sobrien#define BZ_EXPORT
7178556Sobrien#endif
7278556Sobrien
73146293Sobrien#ifndef BZ_NO_STDIO
7490067Ssobomax/* Need a definitition for FILE */
7590067Ssobomax#include <stdio.h>
76146293Sobrien#endif
7790067Ssobomax
7878556Sobrien#ifdef _WIN32
7978556Sobrien#   include <windows.h>
8078556Sobrien#   ifdef small
8178556Sobrien      /* windows.h define small to char */
8278556Sobrien#      undef small
8378556Sobrien#   endif
8478556Sobrien#   ifdef BZ_EXPORT
8578556Sobrien#   define BZ_API(func) WINAPI func
8678556Sobrien#   define BZ_EXTERN extern
8778556Sobrien#   else
8878556Sobrien   /* import windows dll dynamically */
8978556Sobrien#   define BZ_API(func) (WINAPI * func)
9078556Sobrien#   define BZ_EXTERN
9178556Sobrien#   endif
9278556Sobrien#else
9378556Sobrien#   define BZ_API(func) func
9478556Sobrien#   define BZ_EXTERN extern
9578556Sobrien#endif
9678556Sobrien
9778556Sobrien
9878556Sobrien/*-- Core (low-level) library functions --*/
9978556Sobrien
10078556SobrienBZ_EXTERN int BZ_API(BZ2_bzCompressInit) (
10178556Sobrien      bz_stream* strm,
10278556Sobrien      int        blockSize100k,
10378556Sobrien      int        verbosity,
10478556Sobrien      int        workFactor
10578556Sobrien   );
10678556Sobrien
10778556SobrienBZ_EXTERN int BZ_API(BZ2_bzCompress) (
10878556Sobrien      bz_stream* strm,
10978556Sobrien      int action
11078556Sobrien   );
11178556Sobrien
11278556SobrienBZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (
11378556Sobrien      bz_stream* strm
11478556Sobrien   );
11578556Sobrien
11678556SobrienBZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (
11778556Sobrien      bz_stream *strm,
11878556Sobrien      int       verbosity,
11978556Sobrien      int       small
12078556Sobrien   );
12178556Sobrien
12278556SobrienBZ_EXTERN int BZ_API(BZ2_bzDecompress) (
12378556Sobrien      bz_stream* strm
12478556Sobrien   );
12578556Sobrien
12678556SobrienBZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (
12778556Sobrien      bz_stream *strm
12878556Sobrien   );
12978556Sobrien
13078556Sobrien
13178556Sobrien
13278556Sobrien/*-- High(er) level library functions --*/
13378556Sobrien
13478556Sobrien#ifndef BZ_NO_STDIO
13578556Sobrien#define BZ_MAX_UNUSED 5000
13678556Sobrien
13778556Sobrientypedef void BZFILE;
13878556Sobrien
13978556SobrienBZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (
14078556Sobrien      int*  bzerror,
14178556Sobrien      FILE* f,
14278556Sobrien      int   verbosity,
14378556Sobrien      int   small,
14478556Sobrien      void* unused,
14578556Sobrien      int   nUnused
14678556Sobrien   );
14778556Sobrien
14878556SobrienBZ_EXTERN void BZ_API(BZ2_bzReadClose) (
14978556Sobrien      int*    bzerror,
15078556Sobrien      BZFILE* b
15178556Sobrien   );
15278556Sobrien
15378556SobrienBZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (
15478556Sobrien      int*    bzerror,
15578556Sobrien      BZFILE* b,
15678556Sobrien      void**  unused,
15778556Sobrien      int*    nUnused
15878556Sobrien   );
15978556Sobrien
16078556SobrienBZ_EXTERN int BZ_API(BZ2_bzRead) (
16178556Sobrien      int*    bzerror,
16278556Sobrien      BZFILE* b,
16378556Sobrien      void*   buf,
16478556Sobrien      int     len
16578556Sobrien   );
16678556Sobrien
16778556SobrienBZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (
16878556Sobrien      int*  bzerror,
16978556Sobrien      FILE* f,
17078556Sobrien      int   blockSize100k,
17178556Sobrien      int   verbosity,
17278556Sobrien      int   workFactor
17378556Sobrien   );
17478556Sobrien
17578556SobrienBZ_EXTERN void BZ_API(BZ2_bzWrite) (
17678556Sobrien      int*    bzerror,
17778556Sobrien      BZFILE* b,
17878556Sobrien      void*   buf,
17978556Sobrien      int     len
18078556Sobrien   );
18178556Sobrien
18278556SobrienBZ_EXTERN void BZ_API(BZ2_bzWriteClose) (
18378556Sobrien      int*          bzerror,
18478556Sobrien      BZFILE*       b,
18578556Sobrien      int           abandon,
18678556Sobrien      unsigned int* nbytes_in,
18778556Sobrien      unsigned int* nbytes_out
18878556Sobrien   );
18978556Sobrien
19078556SobrienBZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (
19178556Sobrien      int*          bzerror,
19278556Sobrien      BZFILE*       b,
19378556Sobrien      int           abandon,
19478556Sobrien      unsigned int* nbytes_in_lo32,
19578556Sobrien      unsigned int* nbytes_in_hi32,
19678556Sobrien      unsigned int* nbytes_out_lo32,
19778556Sobrien      unsigned int* nbytes_out_hi32
19878556Sobrien   );
19978556Sobrien#endif
20078556Sobrien
20178556Sobrien
20278556Sobrien/*-- Utility functions --*/
20378556Sobrien
20478556SobrienBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
20578556Sobrien      char*         dest,
20678556Sobrien      unsigned int* destLen,
20778556Sobrien      char*         source,
20878556Sobrien      unsigned int  sourceLen,
20978556Sobrien      int           blockSize100k,
21078556Sobrien      int           verbosity,
21178556Sobrien      int           workFactor
21278556Sobrien   );
21378556Sobrien
21478556SobrienBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (
21578556Sobrien      char*         dest,
21678556Sobrien      unsigned int* destLen,
21778556Sobrien      char*         source,
21878556Sobrien      unsigned int  sourceLen,
21978556Sobrien      int           small,
22078556Sobrien      int           verbosity
22178556Sobrien   );
22278556Sobrien
22378556Sobrien
22478556Sobrien/*--
225167974Sdelphij   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
22678556Sobrien   to support better zlib compatibility.
22778556Sobrien   This code is not _officially_ part of libbzip2 (yet);
22878556Sobrien   I haven't tested it, documented it, or considered the
22978556Sobrien   threading-safeness of it.
23078556Sobrien   If this code breaks, please contact both Yoshioka and me.
23178556Sobrien--*/
23278556Sobrien
23378556SobrienBZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
23478556Sobrien      void
23578556Sobrien   );
23678556Sobrien
23778556Sobrien#ifndef BZ_NO_STDIO
23878556SobrienBZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
23978556Sobrien      const char *path,
24078556Sobrien      const char *mode
24178556Sobrien   );
24278556Sobrien
24378556SobrienBZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
24478556Sobrien      int        fd,
24578556Sobrien      const char *mode
24678556Sobrien   );
24778556Sobrien
24878556SobrienBZ_EXTERN int BZ_API(BZ2_bzread) (
24978556Sobrien      BZFILE* b,
25078556Sobrien      void* buf,
25178556Sobrien      int len
25278556Sobrien   );
25378556Sobrien
25478556SobrienBZ_EXTERN int BZ_API(BZ2_bzwrite) (
25578556Sobrien      BZFILE* b,
25678556Sobrien      void*   buf,
25778556Sobrien      int     len
25878556Sobrien   );
25978556Sobrien
26078556SobrienBZ_EXTERN int BZ_API(BZ2_bzflush) (
26178556Sobrien      BZFILE* b
26278556Sobrien   );
26378556Sobrien
26478556SobrienBZ_EXTERN void BZ_API(BZ2_bzclose) (
26578556Sobrien      BZFILE* b
26678556Sobrien   );
26778556Sobrien
26878556SobrienBZ_EXTERN const char * BZ_API(BZ2_bzerror) (
26978556Sobrien      BZFILE *b,
27078556Sobrien      int    *errnum
27178556Sobrien   );
27278556Sobrien#endif
27378556Sobrien
27478556Sobrien#ifdef __cplusplus
27578556Sobrien}
27678556Sobrien#endif
27778556Sobrien
27878556Sobrien#endif
27978556Sobrien
28078556Sobrien/*-------------------------------------------------------------*/
28178556Sobrien/*--- end                                           bzlib.h ---*/
28278556Sobrien/*-------------------------------------------------------------*/
283