10#include <botan/bzip2.h>
11#include <botan/exceptn.h>
12#include <botan/internal/compress_utils.h>
21class Bzip2_Stream :
public Zlib_Style_Stream<bz_stream, char>
26 streamp()->opaque = alloc();
27 streamp()->bzalloc = Compression_Alloc_Info::malloc<int>;
31 uint32_t run_flag()
const override {
return BZ_RUN; }
32 uint32_t flush_flag()
const override {
return BZ_FLUSH; }
33 uint32_t finish_flag()
const override {
return BZ_FINISH; }
36class Bzip2_Compression_Stream
final :
public Bzip2_Stream
39 explicit Bzip2_Compression_Stream(
size_t block_size)
46 if(block_size == 0 || block_size >= 9)
49 int rc = BZ2_bzCompressInit(streamp(), block_size, 0, 0);
55 ~Bzip2_Compression_Stream()
57 BZ2_bzCompressEnd(streamp());
60 bool run(uint32_t flags)
override
62 int rc = BZ2_bzCompress(streamp(), flags);
67 return (rc == BZ_STREAM_END);
71class Bzip2_Decompression_Stream
final :
public Bzip2_Stream
74 Bzip2_Decompression_Stream()
76 int rc = BZ2_bzDecompressInit(streamp(), 0, 0);
82 ~Bzip2_Decompression_Stream()
84 BZ2_bzDecompressEnd(streamp());
87 bool run(uint32_t)
override
89 int rc = BZ2_bzDecompress(streamp());
91 if(rc != BZ_OK && rc != BZ_STREAM_END)
94 return (rc == BZ_STREAM_END);
100Compression_Stream* Bzip2_Compression::make_stream(
size_t comp_level)
const
102 return new Bzip2_Compression_Stream(comp_level);
105Compression_Stream* Bzip2_Decompression::make_stream()
const
107 return new Bzip2_Decompression_Stream;
static void free(void *self, void *ptr)
int(* final)(unsigned char *, CTX *)