compression_codecs/xz2/
mod.rs1mod decoder;
2mod encoder;
3
4#[derive(Debug)]
5pub enum Xz2FileFormat {
6 Xz,
7 Lzma,
8}
9
10pub use self::{decoder::Xz2Decoder, encoder::Xz2Encoder};
11
12use compression_core::util::{PartialBuffer, WriteBuffer};
13use liblzma::stream::{Action, Status, Stream};
14use std::io;
15
16fn process_stream(
18 stream: &mut Stream,
19 input: &mut PartialBuffer<&[u8]>,
20 output: &mut WriteBuffer<'_>,
21 action: Action,
22) -> io::Result<bool> {
23 let previous_in = stream.total_in() as usize;
24 let previous_out = stream.total_out() as usize;
25
26 let res = stream.process_uninit(input.unwritten(), unsafe { output.unwritten_mut() }, action);
28
29 input.advance(stream.total_in() as usize - previous_in);
30 unsafe { output.assume_init_and_advance(stream.total_out() as usize - previous_out) };
32
33 match res? {
34 Status::Ok => Ok(false),
35 Status::StreamEnd => Ok(true),
36 Status::GetCheck => Err(io::Error::other("Unexpected lzma integrity check")),
37 Status::MemNeeded => Err(io::ErrorKind::OutOfMemory.into()),
38 }
39}