void rdbuf::init(std::istream &file, std::streampos start, std::streampos size, std::streampos decomp) { buf_base::init(file); ptr_ = 0; start_ = start; size_ = size; decomp_ = decomp; if (lzma_raw_decoder(&lzma_, default_filters) != LZMA_OK) throw compress_error{"Stream decoder setup failed"}; }
void memrdbuf::reset() { action_ = LZMA_RUN; lzma_ = LZMA_STREAM_INIT; if (lzma_raw_decoder(&lzma_, default_filters) != LZMA_OK) throw compress_error{"Stream decoder setup failed"}; pos_ = 0; char *begin = &buf_[0]; setg(begin, begin, begin); lzma_.next_in = reinterpret_cast<const uint8_t*>(source_); lzma_.avail_in = size_; ff_to(start_); }
static int Decompressor_init_raw(lzma_stream *lzs, PyObject *filterspecs) { lzma_filter filters[LZMA_FILTERS_MAX + 1]; lzma_ret lzret; if (parse_filter_chain_spec(filters, filterspecs) == -1) return -1; lzret = lzma_raw_decoder(lzs, filters); free_filter_chain(filters); if (catch_lzma_error(lzret)) return -1; else return 0; }
static lzma_stream * init_raw_lzma_stream(lzma_vli filter, lzma_options_lzma & options) { options.preset_dict = NULL; if(options.dict_size > (uint32_t(1) << 28)) { throw lzma_error("inno lzma dict size too large", LZMA_FORMAT_ERROR); } lzma_stream * strm = new lzma_stream; lzma_stream tmp = LZMA_STREAM_INIT; *strm = tmp; strm->allocator = NULL; const lzma_filter filters[2] = { { filter, &options }, { LZMA_VLI_UNKNOWN, NULL } }; lzma_ret ret = lzma_raw_decoder(strm, filters); if(ret != LZMA_OK) { delete strm; throw lzma_error("inno lzma init error", ret); } return strm; }
void decompress(std::istream &in, std::ostream &out) { lzma_stream stream = LZMA_STREAM_INIT; if (lzma_raw_decoder(&stream, default_filters) != LZMA_OK) throw compress_error{"Stream decoder setup failed"}; code(stream, in, out); }