Adding changes from original impl

darleybarreto
Jul 26, 2021, 5:53 PM
6XB4RDRQIINYARVQUO3U3ZG7652UIUXBUF33U7JEJ7ASRI47EKHAC

Dependencies

  • [2] L7S3YSSM Clippy + rustfmt
  • [3] SZHL3TSD Fixing tests
  • [4] HELRYMZK Manual bindings (Windows and Clang aren't very good friends), and getting rid of anyhow
  • [5] IB4L4N5M Fixing the lifetimes for `Seekable`
  • [6] TTRHEUTN Changing permissions
  • [7] GKNZUJV6 Removing unecessary unsafe blocks
  • [8] K6L5F26W Fixing sequential test.
  • [9] HA3ODU4G Fixing compilation
  • [10] IH334Q5A Reboot
  • [11] UPRY2FEL Remove bindgen dependency
  • [12] HEFGMMUM Start oxidizing 1/N

Change contents

  • edit in src/lib.rs at line 23
    [3.400]
    [3.0]
    const SEEKABLE_NO_OUTPUT_PROGRESS_MAX: u32 = 16;
  • edit in src/lib.rs at line 30
    [3.665]
    [3.241471]
    const ZSTD_reset_session_only: c_uint = 1;
  • replacement in src/lib.rs at line 69
    [3.1192][3.1192:1234]()
    c_offset: usize,
    d_offset: usize,
    [3.1192]
    [3.1234]
    c_offset: u64,
    d_offset: u64,
  • edit in src/lib.rs at line 84
    [3.91]
    [3.1413]
    inner_buf_size: Option<usize>,
  • edit in src/lib.rs at line 106
    [3.231]
    [3.231]
    SeekableIo,
  • replacement in src/lib.rs at line 111
    [3.345][3.345:378]()
    DSizeTooSmall(usize, usize),
    [3.345]
    [3.242248]
    DSizeTooSmall(u64, u64),
  • replacement in src/lib.rs at line 123
    [3.564][3.564:613]()
    Error::Null => write!(fmt, "Null."),
    [3.564]
    [3.613]
    Error::Null => write!(fmt, "Null pointer."),
  • replacement in src/lib.rs at line 129
    [3.794][3.794:865]()
    Error::Generic => write!(fmt, "Generic error from ZSTD."),
    [3.794]
    [3.865]
    Error::Generic => write!(fmt, "Error (generic)."),
    Error::SeekableIo => write!(fmt, "An I/O error occurred when reading/seeking."),
  • replacement in src/lib.rs at line 134
    [3.1040][3.1040:1121]()
    "Frame parameter not supported. Expected at most {}, found {}.",
    [3.1040]
    [3.1121]
    "Unsupported frame parameter. Expected at most {}, found {}.",
  • replacement in src/lib.rs at line 137
    [3.1157][3.1157:1316]()
    Error::PrefixUnknown(p) => write!(fmt, "Prefix unknown {}", p),
    Error::Corruption(ref s) => write!(fmt, "Corruption detected {}.", s),
    [3.1157]
    [3.1316]
    Error::PrefixUnknown(p) => write!(fmt, "Unknown frame descriptor {}", p),
    Error::Corruption(ref s) => write!(fmt, "Corrupted block detected {}.", s),
  • replacement in src/lib.rs at line 141
    [3.1387][3.1387:1466]()
    "Destination size too small. Expected at least {}, found {}.",
    [3.1387]
    [3.1466]
    "Destination buffer is too small. Expected at least {}, found {}.",
  • replacement in src/lib.rs at line 322
    [3.5878][3.5878:5935]()
    unsafe { ZSTD_resetCStream(self.cstream.p, 0) };
    [3.5878]
    [3.5935]
    unsafe {
    let r = ZSTD_CCtx_reset(self.cstream.p, ZSTD_reset_session_only);
    if ZSTD_isError(r) != 0 {
    return Err(Error::ZSTD(r));
    }
    };
  • replacement in src/lib.rs at line 523
    [3.3514][3.3514:3587]()
    let mut seekable = Self::make_seekable(source, ptr::null_mut());
    [3.3514]
    [3.3587]
    let mut seekable = Self::make_seekable(source, ptr::null_mut(), None);
  • replacement in src/lib.rs at line 528
    [3.3650][3.207:277](),[3.207][3.207:277]()
    fn make_seekable(source: R, dstream: *mut ZSTD_DStream) -> Self {
    [3.3650]
    [3.8948]
    fn make_seekable(source: R, dstream: *mut ZSTD_DStream, size: Option<usize>) -> Self {
  • edit in src/lib.rs at line 536
    [3.9135]
    [3.9135]
    inner_buf_size: size,
  • replacement in src/lib.rs at line 562
    [3.9915][3.9915:9976](),[3.9976][3.3850:3898]()
    let checksum_flag = (self.in_buff[4] >> 7) as usize;
    if ((checksum_flag >> 2) & 0x1f) != 0 {
    [3.9915]
    [3.3898]
    let sfd = self.in_buff[4];
    let checksum_flag = (sfd >> 7) as usize;
    if ((sfd >> 2) & 0x1f) != 0 {
  • replacement in src/lib.rs at line 617
    [2.151][3.4779:4852](),[3.4779][3.4779:4852]()
    let a = slice_to_num(&self.in_buff[pos..pos + 4])? as usize;
    [2.151]
    [3.4852]
    let a = slice_to_num(&self.in_buff[pos..pos + 4])? as u64;
  • replacement in src/lib.rs at line 620
    [3.12153][3.12153:12230]()
    d_offset += slice_to_num(&self.in_buff[pos..pos + 4])? as usize;
    [3.12153]
    [3.12230]
    d_offset += slice_to_num(&self.in_buff[pos..pos + 4])? as u64;
  • replacement in src/lib.rs at line 651
    [3.5125][2.152:200]()
    Err(Error::ZSTD(dstream_init));
    [3.5125]
    [3.5180]
    Err(Error::ZSTD(dstream_init))
  • replacement in src/lib.rs at line 662
    [3.13330][3.13330:13365](),[3.13365][3.5239:5299]()
    if dest.len() < dec_size {
    Err(Error::DSizeTooSmall(dest.len(), dec_size))
    [3.13330]
    [3.5299]
    if (dest.len() as u64) < dec_size {
    Err(Error::DSizeTooSmall(dest.len() as u64, dec_size))
  • replacement in src/lib.rs at line 665
    [3.5316][3.5316:5471]()
    self.decompress(
    dest,
    dec_size,
    self.seek_table.entries[index].d_offset as u64,
    )
    [3.5316]
    [3.13430]
    self.decompress(dest, dec_size, self.seek_table.entries[index].d_offset)
  • replacement in src/lib.rs at line 674
    [3.255102][3.488:588]()
    pub fn decompress(&mut self, out: &mut [u8], len: usize, offset: u64) -> Result<usize, Error> {
    [3.255102]
    [3.13716]
    pub fn decompress(&mut self, out: &mut [u8], len: u64, offset: u64) -> Result<usize, Error> {
    let eos = self.seek_table.entries[self.seek_table.entries.len() - 1].d_offset;
    let len = if offset + len > eos {
    eos - offset
    } else {
    len
    };
  • edit in src/lib.rs at line 684
    [3.13789]
    [3.13825]
    let mut no_output_progress_c = 0u32;
    let mut src_bytes_read = 0usize;
  • replacement in src/lib.rs at line 689
    [3.13942][3.13942:14037]()
    self.decompressed_offset = self.seek_table.entries[tgt_frame].d_offset as u64;
    [3.13942]
    [3.14037]
    self.decompressed_offset = self.seek_table.entries[tgt_frame].d_offset;
  • replacement in src/lib.rs at line 693
    [3.14140][3.14140:14212]()
    self.seek_table.entries[tgt_frame].c_offset as u64,
    [3.14140]
    [3.589]
    self.seek_table.entries[tgt_frame].c_offset,
  • edit in src/lib.rs at line 701
    [3.14429]
    [3.14429]
  • replacement in src/lib.rs at line 703
    [3.14486][3.14486:14546]()
    unsafe { ZSTD_resetDStream(self.dstream) };
    [3.14486]
    [3.255499]
    unsafe {
    let r = ZSTD_DCtx_reset(self.dstream, ZSTD_reset_session_only);
    if ZSTD_isError(r) != 0 {
    return Err(Error::ZSTD(r));
    }
    }
    if let Some(size) = &self.inner_buf_size {
    if src_bytes_read > *size {
    return Err(Error::SeekableIo);
    }
    }
  • replacement in src/lib.rs at line 736
    [2.812][2.812:851]()
    size: len,
    [2.812]
    [2.851]
    size: len as usize,
  • replacement in src/lib.rs at line 743
    [3.15305][3.15305:15353]()
    let prev_out_pos = out_tmp.pos;
    [3.15305]
    [3.5535]
    let (prev_out_pos, prev_in_pos) = (out_tmp.pos, self.inn.pos);
  • replacement in src/lib.rs at line 760
    [3.16094][3.16094:16175]()
    self.decompressed_offset += (out_tmp.pos - prev_out_pos) as u64;
    [3.16094]
    [3.16175]
    let forward_progress = (out_tmp.pos - prev_out_pos) as u64;
    if forward_progress == 0 {
    no_output_progress_c += 1;
    if no_output_progress_c > SEEKABLE_NO_OUTPUT_PROGRESS_MAX {
    return Err(Error::SeekableIo);
    }
    } else {
    no_output_progress_c = 0;
    }
    self.decompressed_offset += forward_progress;
    src_bytes_read += self.inn.pos - prev_in_pos;
  • edit in src/lib.rs at line 783
    [3.16699]
    [3.16699]
    // assert!(tgt_frame != self.seek_table.entries.len());
  • replacement in src/lib.rs at line 803
    [3.17340][3.17340:17356]()
    Ok(len)
    [3.17340]
    [3.17356]
    Ok(len as usize)
  • edit in src/lib.rs at line 815
    [3.17662]
    [3.600]
    let size = (&input).len();
  • replacement in src/lib.rs at line 817
    [3.645][3.645:714]()
    let mut seekable = Seekable::make_seekable(source, dstream);
    [3.645]
    [3.17785]
    let mut seekable = Seekable::make_seekable(source, dstream, Some(size));
  • replacement in src/lib.rs at line 827
    [3.1020][3.18558:18635](),[3.18558][3.18558:18635]()
    let mut seekable = Seekable::make_seekable(source, ptr::null_mut());
    [3.846]
    [3.18635]
    let mut seekable = Seekable::make_seekable(source, ptr::null_mut(), None);
  • replacement in src/lib.rs at line 839
    [3.255716][3.255716:255768](),[3.255768][3.18899:18991]()
    /// Offset of the frame in the compressed data.
    pub fn get_frame_compressed_offset(&self, frame_index: usize) -> Result<usize, Error> {
    [3.255716]
    [3.6086]
    #[inline(always)]
    fn get_frame(&'_ self, frame_index: usize) -> Result<&'_ SeekEntry, Error> {
  • replacement in src/lib.rs at line 846
    [3.19110][3.19110:19172]()
    Ok(self.seek_table.entries[frame_index].c_offset)
    [3.19110]
    [3.19172]
    Ok(&self.seek_table.entries[frame_index])
  • edit in src/lib.rs at line 848
    [3.19182]
    [3.255935]
    }
    /// Offset of the frame in the compressed data.
    pub fn get_frame_compressed_offset(&self, frame_index: usize) -> Result<u64, Error> {
    Ok(self.get_frame(frame_index)?.c_offset)
  • replacement in src/lib.rs at line 855
    [3.255991][3.19183:19273](),[3.19273][3.6238:6389](),[3.6389][3.19375:19532](),[3.19375][3.19375:19532]()
    pub fn get_frame_compressed_size(&self, frame_index: usize) -> Result<usize, Error> {
    let max_frames = self.get_num_frames();
    if frame_index >= max_frames {
    Err(Error::FIndexTooLarge(frame_index, max_frames))
    } else {
    Ok(self.seek_table.entries[frame_index + 1].c_offset
    - self.seek_table.entries[frame_index].c_offset)
    }
    [3.255991]
    [3.256162]
    pub fn get_frame_compressed_size(&self, frame_index: usize) -> Result<u64, Error> {
    let entry = self.get_frame(frame_index)?;
    Ok(self.seek_table.entries[frame_index + 1].c_offset - entry.c_offset)
  • replacement in src/lib.rs at line 860
    [3.256222][3.19533:19627](),[3.19627][3.6390:6541](),[3.6541][3.19729:19818](),[3.19729][3.19729:19818]()
    pub fn get_frame_decompressed_offset(&self, frame_index: usize) -> Result<usize, Error> {
    let max_frames = self.get_num_frames();
    if frame_index >= max_frames {
    Err(Error::FIndexTooLarge(frame_index, max_frames))
    } else {
    Ok(self.seek_table.entries[frame_index].d_offset)
    }
    [3.256222]
    [3.256390]
    pub fn get_frame_decompressed_offset(&self, frame_index: usize) -> Result<u64, Error> {
    Ok(self.get_frame(frame_index)?.d_offset)
  • replacement in src/lib.rs at line 864
    [3.256448][3.19819:19911](),[3.19911][3.6542:6693](),[3.6693][3.20012:20029](),[3.20012][3.20012:20029](),[3.20029][3.6694:6764](),[3.6764][2.1173:1238](),[2.1238][3.6825:6843](),[3.6825][3.6825:6843](),[3.6843][3.257079:257089](),[3.20159][3.257079:257089](),[3.257079][3.257079:257089]()
    pub fn get_frame_decompressed_size(&self, frame_index: usize) -> Result<usize, Error> {
    let max_frames = self.get_num_frames();
    if frame_index >= max_frames {
    Err(Error::FIndexTooLarge(frame_index, max_frames))
    } else {
    let r = self.seek_table.entries[frame_index + 1].d_offset
    - self.seek_table.entries[frame_index].d_offset;
    Ok(r)
    }
    [3.256448]
    [3.257089]
    pub fn get_frame_decompressed_size(&self, frame_index: usize) -> Result<u64, Error> {
    let entry = self.get_frame(frame_index)?;
    Ok(self.seek_table.entries[frame_index + 1].d_offset - entry.d_offset)
  • replacement in src/lib.rs at line 870
    [3.20233][3.20233:20319]()
    if offset >= self.seek_table.entries[self.get_num_frames()].d_offset as u64 {
    [3.20233]
    [3.20319]
    if offset >= self.seek_table.entries[self.get_num_frames()].d_offset {
  • replacement in src/lib.rs at line 878
    [3.20505][3.20505:20577]()
    if self.seek_table.entries[mid].d_offset as u64 <= offset {
    [3.20505]
    [3.20577]
    if self.seek_table.entries[mid].d_offset <= offset {
  • replacement in src/lib.rs at line 1158
    [3.263511][3.63:129]()
    let size = s.get_frame_decompressed_size(frame).unwrap();
    [3.263511]
    [3.263568]
    let size = s.get_frame_decompressed_size(frame).unwrap() as usize;
  • replacement in src/lib.rs at line 1161
    [3.263654][3.8594:8724]()
    if let Err(_) = s.decompress_frame(&mut decomp[n..], frame) {
    println!("Error in frame {}", frame);
    }
    [3.263654]
    [3.263707]
    s.decompress_frame(&mut decomp[n..], frame).unwrap();
  • replacement in src/lib.rs at line 1199
    [3.3453][3.3453:3519]()
    let size = s.get_frame_decompressed_size(frame).unwrap();
    [3.3453]
    [2.1494]
    let size = s.get_frame_decompressed_size(frame).unwrap() as usize;
  • replacement in src/bindings.rs at line 1
    [3.1612][3.26406:26469]()
    use libc::{c_char, c_int, c_longlong, c_uint, c_void, size_t};
    [3.1612]
    [3.1346]
    use libc::{c_char, c_int, c_uint, c_void, size_t};
  • replacement in src/bindings.rs at line 52
    [3.3576][3.26470:26552]()
    pub fn ZSTD_resetCStream(zcs: *mut ZSTD_CStream, pledgedSrcSize: c_longlong);
    [3.3576]
    [3.3576]
    pub fn ZSTD_CCtx_reset(cctx: *mut ZSTD_CStream, reset: c_uint) -> size_t;
  • replacement in src/bindings.rs at line 66
    [3.4179][3.26553:26617]()
    pub fn ZSTD_resetDStream(zds: *mut ZSTD_DStream) -> size_t;
    [3.4179]
    [3.4179]
    pub fn ZSTD_DCtx_reset(dctx: *mut ZSTD_DStream, reset: c_uint) -> size_t;