void BZ2Stream::write(void* ptr, size_t size) { BZ2_bzWrite(&bzerror_, bzfile_, ptr, size); switch (bzerror_) { case BZ_IO_ERROR: throw BagException("BZ_IO_ERROR: error writing the compressed file"); } setCompressedIn(getCompressedIn() + size); }
void BZ2Stream::startRead() { bzfile_ = BZ2_bzReadOpen(&bzerror_, getFilePointer(), verbosity_, 0, getUnused(), getUnusedLength()); switch (bzerror_) { case BZ_OK: break; default: { BZ2_bzReadClose(&bzerror_, bzfile_); throw BagException("Error opening file for reading compressed stream"); } } clearUnused(); }
void BZ2Stream::startWrite() { bzfile_ = BZ2_bzWriteOpen(&bzerror_, getFilePointer(), block_size_100k_, verbosity_, work_factor_); switch (bzerror_) { case BZ_OK: break; default: { BZ2_bzWriteClose(&bzerror_, bzfile_, 0, NULL, NULL); throw BagException("Error opening file for writing compressed stream"); } } setCompressedIn(0); }
void BZ2Stream::decompress(uint8_t* dest, unsigned int dest_len, uint8_t* source, unsigned int source_len) { int result = BZ2_bzBuffToBuffDecompress((char*) dest, &dest_len, (char*) source, source_len, 0, verbosity_); switch (result) { case BZ_OK: break; case BZ_CONFIG_ERROR: throw BagException("library has been mis-compiled"); break; case BZ_PARAM_ERROR: throw BagException("dest is NULL or destLen is NULL or small != 0 && small != 1 or verbosity < 0 or verbosity > 4"); break; case BZ_MEM_ERROR: throw BagException("insufficient memory is available"); break; case BZ_OUTBUFF_FULL: throw BagException("size of the compressed data exceeds *destLen"); break; case BZ_DATA_ERROR: throw BagException("data integrity error was detected in the compressed data"); break; case BZ_DATA_ERROR_MAGIC: throw BagException("compressed data doesn't begin with the right magic bytes"); break; case BZ_UNEXPECTED_EOF: throw BagException("compressed data ends unexpectedly"); break; } }
void UncompressedStream::decompress(uint8_t* dest, unsigned int dest_len, uint8_t* source, unsigned int source_len) { if (dest_len < source_len) throw BagException("dest_len not large enough"); memcpy(dest, source, source_len); }