Skip to content

Releases: wcampbell0x2a/backhand

v0.19.0

01 Dec 22:57
465614d
Compare
Choose a tag to compare

backhand

  • Use feature zlib-ng for flate2, which is enabled when compression option Gzip is used. This enables the backend to use zlib-ng, which is faster by default! (#562)
  • Remove duplicated data when addding new files to a FilesystemWriter. This also applies this behavior to the add and replace binaries. This is controllable with FilesystemWriter::set_no_duplicate_files. (#603), (#594)
  • Increase speed of internal HashMaps, by switching to xxhash and just using the inode as the key in other places.
  • Changed SuperBlock::Flags to be public.
  • Add non-standard CompressionOptions support (#584)
    • Add CompressionAction::compression_options to override the default compression options emitted during writing.
    • Add FilesystemWriter::set_emit_compression_options
  • Support sparse file extraction (#624)
  • Add x86_64-pc-windows-gnu support (@Wolfyxon) (#634)
  • Add zlib-rs support through --feature gzip-zlib-rs.

Security

  • Prevent self referential dirs, which could cause a stack overflow (#624)
  • Avoid high allocations for high inode count (#624)

backhand-cli

  • Add --no-compression-options to add and replace to remove compression options from image after modification.
  • Add --pad-len to replace and add to control the length of end-of-image padding (#604)
  • Bump MSRV to 1.77

Dependencies

  • Bump thiserror from 1.0.59 to 2.0.1 (#564, #578, #615, #633)
  • Bump libc from 0.2.154 to 0.2.162 (#557, #592, #616, #630)
  • Bump clap from 4.5.4 to 4.5.13 (#569, #574, #582)
  • Bump rustc-hash from 1.1.0 to 2.0.0 (#570)
  • Bump clap_complete from 4.5.2 to 4.5.13 (#575, #595)
  • Bump document-features from 0.2.8 to 0.2.10 (#576)
  • Bump zstd-safe from 7.1.0 to 7.2.1 (#585)
  • Bump flate2 from 1.0.30 to 1.0.35 (#593, #596, #617, #641)
  • Bump zstd from 0.13.1 to 0.13.2 (#601)
  • Bump env_logger from 0.11.3 to 0.11.5 (#602)
  • Bump libdeflater from 1.21.0 to 1.22.0 (#619)
  • Bump tempfile from 3.12.0 to 3.13.0 (#618)
  • Bump nix from 0.28.0 to 0.29.0 (#566)

Complete API Updates

Click to expand
Removed items from the public API
=================================
-pub fn backhand::SuperBlock::data_has_been_duplicated(&self) -> bool

Changed items in the public API
===============================
-pub fn backhand::compression::CompressionOptions::from_reader_with_ctx<R: std::io::Read>(__deku_reader: &mut deku::reader::Reader<'_, R>, (endian, compressor): (deku::ctx::Endian, backhand::compression::Compressor)) -> core::result::Result<Self, deku::error::DekuError>
+pub fn backhand::compression::CompressionOptions::from_reader_with_ctx<R: std::io::Read + std::io::Seek>(__deku_reader: &mut deku::reader::Reader<'_, R>, (endian, compressor): (deku::ctx::Endian, backhand::compression::Compressor)) -> core::result::Result<Self, deku::error::DekuError>
-pub fn backhand::compression::CompressionOptions::to_writer<W: std::io::Write>(&self, __deku_writer: &mut deku::writer::Writer<W>, (endian, compressor): (deku::ctx::Endian, backhand::compression::Compressor)) -> core::result::Result<(), deku::error::DekuError>
+pub fn backhand::compression::CompressionOptions::to_writer<W: std::io::Write + std::io::Seek>(&self, __deku_writer: &mut deku::writer::Writer<W>, (endian, compressor): (deku::ctx::Endian, backhand::compression::Compressor)) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::compression::Compressor::from_reader_with_ctx<R: std::io::Read>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
+pub fn backhand::compression::Compressor::from_reader_with_ctx<R: std::io::Read + std::io::Seek>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
-pub fn backhand::compression::Compressor::to_writer<W: std::io::Write>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
+pub fn backhand::compression::Compressor::to_writer<W: std::io::Write + std::io::Seek>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::compression::Gzip::from_reader_with_ctx<R: std::io::Read>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
+pub fn backhand::compression::Gzip::from_reader_with_ctx<R: std::io::Read + std::io::Seek>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
-pub fn backhand::compression::Gzip::to_writer<W: std::io::Write>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
+pub fn backhand::compression::Gzip::to_writer<W: std::io::Write + std::io::Seek>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::compression::Lz4::from_reader_with_ctx<R: std::io::Read>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
+pub fn backhand::compression::Lz4::from_reader_with_ctx<R: std::io::Read + std::io::Seek>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
-pub fn backhand::compression::Lz4::to_writer<W: std::io::Write>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
+pub fn backhand::compression::Lz4::to_writer<W: std::io::Write + std::io::Seek>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::compression::Lzo::from_reader_with_ctx<R: std::io::Read>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
+pub fn backhand::compression::Lzo::from_reader_with_ctx<R: std::io::Read + std::io::Seek>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
-pub fn backhand::compression::Lzo::to_writer<W: std::io::Write>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
+pub fn backhand::compression::Lzo::to_writer<W: std::io::Write + std::io::Seek>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::compression::Xz::from_reader_with_ctx<R: std::io::Read>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
+pub fn backhand::compression::Xz::from_reader_with_ctx<R: std::io::Read + std::io::Seek>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
-pub fn backhand::compression::Xz::to_writer<W: std::io::Write>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
+pub fn backhand::compression::Xz::to_writer<W: std::io::Write + std::io::Seek>(&self, __deku_writer: &mut deku::writer::Writer<W>, endian: deku::ctx::Endian) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::compression::Zstd::from_reader_with_ctx<R: std::io::Read>(__deku_reader: &mut deku::reader::Reader<'_, R>, endian: deku::ctx::Endian) -> core::result::Result<Self, deku::error::DekuError>
+pub fn backhand::compression::Zstd::from_reader_with_ctx<R: std::io::Read + std::io::Seek>(__deku_reader: &mut deku::reader::Rea...
Read more

v0.18.0

25 May 04:15
c43e5a6
Compare
Choose a tag to compare

backhand

  • Update MSRV to 1.72.1 (#524)

Dependencies

  • Bump deku from 0.16.0 to 0.17.0 (#524)
  • Bump libc from 0.2.153 to 0.2.154 (#546)

v0.17.0

06 May 22:51
0bd0e2a
Compare
Choose a tag to compare

Updates

  • Remove unused BufSeekRewind and SeekRewind traits (#550)
  • Fix docs.rs build (#550)

Dependencies

  • Bump flate2 from 1.0.28 to 1.0.30 (#547)

v0.16.0

26 Apr 22:07
544a77c
Compare
Choose a tag to compare

[v0.16.0] - 2024-04-25

backhand

  • Simplify API by removing FilesystemReader::alloc_read_buffers(). This is now handled internally by FilesystemReader::reader() (#530)

backhand-cli

  • Add x86_64-apple-darwin support and release binary (#511)
  • Fix --help and correctly show gzip support when using gzip-zune-inflate (#538)
  • Fix --help and correctly show xz support when using xz-static (#541)

Dependencies

  • Bump zstd from 0.13.0 to 0.13.1 (#518)
  • Bump rayon from 1.9.0 to 1.10.0 (#512)
  • Bump codecov/codecov-action from 4.1.0 to 4.3.0 (#514, #526)
  • Bump obi1kenobi/cargo-semver-checks-action from 2.3 to 2.4 (#507)
  • Bump clap from 4.5.2 to 4.5.4 (#513)
  • Bump libdeflater from 1.19.3 to 1.20.0 (#523)
  • Bump dangoslen/dependabot-changelog-helper from 3.8.1 to 3.9.0 (#516)
  • Bump thiserror from 1.0.58 to 1.0.59 (#534)
  • Bump color-print from 0.3.5 to 0.3.6 (#537)
  • Bump clap_complete from 4.5.1 to 4.5.2 (#525)

Complete API Updates

Click to expand
Removed items from the public API
=================================
-pub fn backhand::FilesystemReader<'b>::alloc_read_buffers(&self) -> (alloc::vec::Vec<u8>, alloc::vec::Vec<u8>)

Changed items in the public API
===============================
-pub fn backhand::FilesystemReaderFile<'a, 'b>::reader(&self, buf_read: &'a mut alloc::vec::Vec<u8>, buf_decompress: &'a mut alloc::vec::Vec<u8>) -> backhand::SquashfsReadFile<'a, 'b>
+pub fn backhand::FilesystemReaderFile<'a, 'b>::reader(&self) -> backhand::SquashfsReadFile<'a, 'b>

Added items to the public API
=============================
(none)

Full Diff: v0.15.0...v0.16.0

v0.15.0

24 Mar 19:23
35c5905
Compare
Choose a tag to compare

[v0.15.0] - 2024-03-24

backhand

  • Add support for Socket and NamedFIFO Inodes in library and extraction binaries. Thanks (@tnias) (#472, #470)
    • Add FilesytemWriter::push_fifo and FilesystemWriter::push_socket
  • Fix panic found with fuzz testing in NodeHeader::from_inode (#494)
  • Add tests for zstd compression support. Fix bug with zstd writer and added zstd-safe dependency (#504)
  • Added inlines to small public functions (#504)
  • Changed FilesystemReader.cache to RwLock to reduce blocking time during fragment reading (#504)
  • Increase performance of reading uncompressed fragments (small files) heavy images by removing unnecessary clones of data (#504). Found by (@bryangarza) in (!503).
  • Increased performance of reading inodes (#453)
  • Reduce allocations within Squashfs.dir_blocks (#447)
  • Add pre-allocate before reading inodes (#437)
  • Prevent several bounds check failures found by fuzz testing (#499)

backhand-cli

  • Bump MSRV to 1.74 for clap-4.5.1 update (#483)

backhand-test

  • Reduced maximum allocation during testing by free'ing right after full usage (#504)

unsquashfs

  • Performance: Remove progress bar Mutex lock when --quiet (#430)

Dependencies

  • Bump actions/upload-artifact from 4.1.0 to 4.3.1 (#435, #446, #465)
  • Bump env_logger from 0.10.1 to 0.10.2 (#432)
  • Bump rayon from 1.8.0 to 1.9.0 (#431, #496)
  • Bump clap from 4.4.17 to 4.5.2 (#428, #500)
  • Bump clap_complete from 4.4.7 to 4.5.1 (#444, #445, #482)
  • Bump codecov/codecov-action from 3.1.4 to 4.1.0 (#448, #457, #458, #462, #488, #493)
  • Bump obi1kenobi/cargo-semver-checks-action from 2.2 to 2.3 (#449)
  • Bump libc from 0.2.152 to 0.2.153 (#459)
  • Bump dangoslen/dependabot-changelog-helper from 3.7.0 to 3.8.0 (#461)
  • Bump thiserror from 1.0.56 to 1.0.58 (#476, #502)
  • Bump indicatif from 0.17.7 to 0.17.8 (#477)
  • Bump libdeflater from 1.19.0 to 1.19.3 (#486, #498)
  • Bump assert_cmd from 2.0.13 to 2.0.14 (#484)
  • Bump nix from 0.27.1 to 0.28.0 (#489)
  • Bump test-log from 0.2.14 to 0.2.15 (#492)
  • Bump tempfile from 3.9.0 to 3.10.1 (#491)
  • Bump actions/checkout from 4.1.1 to 4.1.2 (#501)

v0.14.2

17 Jan 05:43
c1b3c22
Compare
Choose a tag to compare

backhand

  • Enable overflow-checks (#421)
  • Add feature gzip-zune-inflate to add a decompress only option with speed improvements (#419)
  • Remove allocation for impl From<BackhandError> for io::Error { (#425)

backhand-cli

  • Enable overflow-checks for dist builds (#421)

unsquashfs

  • Use feature gzip-zune-inflate for dist build and speed improvements (#419)
  • Updated benchmarks to show improvement (#419)

Dependencies

  • Bump clap from 4.4.12 to 4.4.17 (#417, #424)
  • Bump thiserror from 1.0.53 to 1.0.56 (#404)
  • Bump actions/upload-artifact from 4.0.0 to 4.1.0 (#423)
  • Bump libc from 0.2.151 to 0.2.152 (#408)
  • Bump clap_complete from 4.4.5 to 4.4.7 (#426)
  • Bump assert_cmd from 2.0.12 to 2.0.13 (#422)
  • Bump console from 0.15.7 to 0.15.8 (#413)

v0.14.1

14 Jan 15:57
fe8488b
Compare
Choose a tag to compare

backhand

Changes

  • Fix path to project README.md for crates.io

v0.14.0

13 Jan 20:03
d75f8ba
Compare
Choose a tag to compare

Major changes were made to the organization of this repo, with the library backhand now being separated from
the backhand-cli package, which is used to install unsquashfs, replace, and add.

backhand

Changes

  • Following changes were done to allow multi-threaded applications (#278)
    • Change RefCell<Box<T>> into Arc<Mutex<T>>
    • Change RefCell<T> into Mutex<T>
    • Change Rc<T> into Arc<T>
    • Change dyn CompressionAction to dyn CompressionAction + Send + Sync for Kind uses
    • Change BufReadSeek: BufRead + Seek {} to BufReadSeek: BufRead + Seek + Send {}
  • Allow user provided read/write files to not be static (@rbran) (#285)
  • Bump MSRV to 1.67.1
  • Allow creating and reading uncompressed files (@rbran) (#365)
  • Allow calling FilesystemWriter::write with Owned and RefMut writer (@rbran) (#361)
  • Push dir, file, etc, with lifetimes unrelated to reader from from_fs_reader (@rbran) (#361)
    For example, the following is now allowed:
-   let mut output = File::create(&args.out).unwrap();
-   if let Err(e) = filesystem.write(&mut output) {
+   let output = File::create(&args.out).unwrap();
+   if let Err(e) = filesystem.write(output) {

Bug Fix

  • When creating an empty image using FilesystemWriter::default(), correctly create the ID table for UID and GID entries. Reported: (@hwittenborn) (!250), Fixed: (#275)
  • Remove manual Clone impl for FilesystemReaderFile (#277)
  • Increase DirectoryIndex::name_size length from 100 to 255. (@eatradish) (!282), Fixed: (#283)
  • Prevent push_file "file within file", will now return InvalidFilePath (@rbran) (#364)
  • Fix gid and uid for push_dir_all(..) (#360)

Security

  • Only allow root and simple filenames into DirEntry (@rbran) (#271)

backhand-cli

Changes to All

  • strip and LTO are enabled for release binaries
  • Fix macOS builds (#260)
  • Bump MSRV to 1.73.0 to use now stabilized std::os::unix::fs::lchown
  • Add color styling to help output (#387)

unsquashfs

  • Changed name to unsquashfs-backhand (#356)
  • Add progress bar for a cleaner output when extracting files (#272)
  • Add --quiet for not displaying progress bar and RUST_LOG output (#272)
  • Add multiple threads for extracing files, giving us the same performance in most cases as squashfs-tools/unsquashfs! (#278)

add

  • Changed name to add-backhand (#356)

replace

  • Changed name to replace-backhand (#356)

ci

  • Add testing and release binaries for the following platforms:(#259)
    • aarch64-unknown-linux-musl
    • arm-unknown-linux-musleabi
    • x86_64-unknown-linux-musl (previously already release supported)
  • Testing and release binaries were not added for macOS, support was tested on that platform.

testing

  • Replace curl in test dependency test-assets with ureq (#264)
  • Replace zune-inflate with libdeflater for custom decompression testing for reliability (#325)

Dependencies

  • Bump flate2 from 1.0.26 to 1.0.28 (#307)
  • Bump jemallocator from 0.5.0 to 0.5.4 (#305)
  • Bump env_logger from 0.10.0 to 0.10.1 (#341)
  • Bump clap from 4.4.7 to 4.4.12 (#340, #371, #376, #399)
  • Bump dangoslen/dependabot-changelog-helper from 3.5.0 to 3.7.0 (#342, #369)
  • Bump tracing-subscriber from 0.3.17 to 0.3.18 (#347)
  • Bump byte-unit from 4.0.19 to 5.0.3 (#367)
  • Bump actions/labeler from 4 to 5 (#377)
  • Bump test-log from 0.2.13 to 0.2.14 (#378)
  • Bump clap_complete from 4.4.4 to 4.4.5 (#393)
  • Bump thiserror from 1.0.51 to 1.0.53 (#391, #401)
  • Bump actions/upload-artifact from 3.1.3 to 4.0.0 (#380)
  • Bump tempfile from 3.8.1 to 3.9.0 (#398)
  • Bump document-features from 0.2.7 to 0.2.8 (#400)

v0.13.0

19 Jun 02:49
96c8372
Compare
Choose a tag to compare

backhand

Changes

  • Decrease in memory usage for file reader and write (#255)
  • Remove unnecessary deconstruction/reconstruction of Vec when reading inodes (@rbran) (#251)
  • Only store file data compressed if it results in smaller size (@rbran) (#250)
  • Remove lzo being a default feature because of GPL license (#240)
  • Add support for OpenWRT compression options (#239)
  • Bump MSRV to 1.65.0 for latest clap requirements (#253)

Bug Fix

  • Fix bug in generating Uid and Gid's with FilesystemWriter. All internal representation of Gid and Uid are changed to u32 (#254)
  • Remove case where invalid filesystem root_inode_offset would cause invalid bounds read panic. Found by fuzzer (#245)

Complete API Updates

$ cargo public-api -ss diff v0.12.0..HEAD
Click to expand
Removed items from the public API
=================================
(none)

Changed items in the public API
===============================
-pub fn backhand::FilesystemWriter<'a>::set_root_gid(&mut self, gid: u16)
+pub fn backhand::FilesystemWriter<'a>::set_root_gid(&mut self, gid: u32)
-pub fn backhand::FilesystemWriter<'a>::set_root_uid(&mut self, uid: u16)
+pub fn backhand::FilesystemWriter<'a>::set_root_uid(&mut self, uid: u32)
-pub backhand::NodeHeader::gid: u16
+pub backhand::NodeHeader::gid: u32
-pub backhand::NodeHeader::uid: u16
+pub backhand::NodeHeader::uid: u32
-pub fn backhand::NodeHeader::new(permissions: u16, uid: u16, gid: u16, mtime: u32) -> Self
+pub fn backhand::NodeHeader::new(permissions: u16, uid: u32, gid: u32, mtime: u32) -> Self

Added items to the public API
=============================
+pub backhand::compression::Xz::bit_opts: core::option::Option<u16>
+pub backhand::compression::Xz::fb: core::option::Option<u16>
+pub fn backhand::kind::Kind::magic(&self) -> [u8; 4]
+impl backhand::NodeHeader
+pub fn backhand::NodeHeader::from_inode(inode_header: InodeHeader, id_table: &[backhand::Id]) -> Self

All binaries

Changes

  • jemalloc is now used for -musl release targets for performance reasons (#254)
  • HAVE_DECODER_ARM, HAVE_DECODER_ARM64, and HAVE_DECODER_ARMTHUMB filter flags are now defined for xz2. This only effects static build created in our CI. (#254)
  • Add RUST_LOG and available Decompressors to --help of all binaries (#242)

add

Changes

  • Add --dir to create a empty directory (#242)

Bug Fix

  • Add correctly reading new file metadata from --file, force other arguments for --dir (#254)

unsquashfs

Changes

  • Add --auto-offset for automatic finding of initial SquashFS offset in image (#241)
  • Add possible kind values to --help output (#236)
  • Add --path-filter to limit file extraction to a path (#237)

v0.12.0

07 May 21:02
5641041
Compare
Choose a tag to compare

Thanks @rbran for the contributions!

backhand

  • Kind has been extended to take an CompressionAction to have a custom compression and decompression
    algorithm. This defaults to the DefaultCompressor in most situations to be like the Linux kernel
    squashfs code. This should allow an ever greater array of custom vendor Squashfs image support.
    Many API changes were done to support this, Most of the following changes focus on the Public API that
    we expect the normal developer to be using.
  • Added method to allow creating image without padding: FilesystemWriter::set_no_padding()
  • Added method to allow modification to Compression options: FilesystemCompressor::options(&mut self, options: CompressionOptions)
  • Added FilesytemWriter::push_dir_all, following behavior of std::fs::create_dir_all and create required parent directories
  • Added FilesystemReader::files() and file() as the new method of reading files from an image.
    This change also reduced allocations in use when reading.
- for node in &filesystem.nodes {
+ for node in filesystem.files() {
  • Compression Options are now written to the image during FilesystemWriter.write(..)
  • Removed non-used allocation in SquashFsReader. No change in public API.
  • Changed SquashfsReadFile::reader(..) to reduce the amount of allocation when extracting a file.
    This required adding alloc_read_buffers to initialize the re-used buffers.
+// alloc required space for file data readers
+let (mut buf_read, mut buf_decompress) = filesystem.alloc_read_buffers();

-let mut reader = filesystem.file(&file.basic).reader();
+let mut reader = filesystem
+    .file(&file.basic)
+    .reader(&mut buf_read, &mut buf_decompress);
  • Removed FilesystemReader::read_file
  • Changed FilesytemWriter::push_file<P: Into<PathBuf>>( into push_file<P: AsRef<Path>>(.
    NOTE: The function will no longer create parent directories! Instead use new FilesytemWriter::push_dir_all
  • Removed SquashfsFileSource
  • Changed FilesystemWriter::push_*() functions to now return BackhandError to avoid duplicate files and invalid file paths.
    The following BackhandErrors were added to support this: DuplicatedFileName, UndefineFileName, and InvalidFilePath.
  • Changed FilesystemWriter::push_block_device<P: Into<PathBuf>>() into P: AsRef<Path>
  • Changed FilesystemWriter::push_block_device<P: Into<PathBuf>>() into P: AsRef<Path>
  • Changed FilesystemWriter::write_with_offset() to now take &mut self
  • Changed FilesystemWriter::write() to now take &mut self
  • Removed trait bound from FilesystemReader, FilesystemReaderFile, and FilesystemWriter:
-pub struct backhand::FilesystemReader<R: backhand::ReadSeek>
+pub struct backhand::FilesystemReader
-pub struct backhand::FilesystemReaderFile<'a, R: backhand::ReadSeek>
+pub struct backhand::FilesystemReaderFile<'a>
-pub struct backhand::FilesystemWriter<'a, R: backhand::ReadSeek>
+pub struct backhand::FilesystemWriter<'a>
  • Changed public fields in FilesystemReader:
-pub root_inode: SquashfsDir,
-pub nodes: Vec<Node<SquashfsFileReader>>,
+pub root: Nodes<SquashfsFileReader>,
  • FilesystemReader::from_reader_*() functions now take BufReadSeek for an increase in performance during reading for some images.

Detailed Changed/Added/Removed

$ cargo public-api -ss diff v0.11.0..HEAD
Click to expand
Removed items from the public API
=================================
-pub fn backhand::kind::Kind::new() -> Self
-impl core::default::Default for backhand::kind::Kind
-pub fn backhand::kind::Kind::default() -> Self
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::Export
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::Export
-pub fn backhand::kind::Kind::read(__deku_input_bits: &bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(&bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, Self), deku::error::DekuError>
-pub fn backhand::kind::Kind::read(__deku_input_bits: &bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(&bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, Self), deku::error::DekuError>
-pub fn backhand::kind::Kind::read(__deku_input_bits: &bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(&bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, Self), deku::error::DekuError>
-pub fn backhand::kind::Kind::read(__deku_input_bits: &bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(&bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, Self), deku::error::DekuError>
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::Fragment
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::Fragment
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::Id
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::Id
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::SuperBlock
-impl deku::DekuRead<'_, backhand::kind::Kind> for backhand::SuperBlock
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::Export
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::Export
-pub fn backhand::kind::Kind::write(&self, __deku_output: &mut bitvec::vec::BitVec<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::kind::Kind::write(&self, __deku_output: &mut bitvec::vec::BitVec<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::kind::Kind::write(&self, __deku_output: &mut bitvec::vec::BitVec<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(), deku::error::DekuError>
-pub fn backhand::kind::Kind::write(&self, __deku_output: &mut bitvec::vec::BitVec<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(), deku::error::DekuError>
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::Fragment
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::Fragment
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::Id
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::Id
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::SuperBlock
-impl deku::DekuWrite<backhand::kind::Kind> for backhand::SuperBlock
-impl core::clone::Clone for backhand::kind::Kind
-pub fn backhand::kind::Kind::clone(&self) -> backhand::kind::Kind
-impl core::cmp::Eq for backhand::kind::Kind
-impl core::cmp::PartialEq<backhand::kind::Kind> for backhand::kind::Kind
-pub fn backhand::kind::Kind::eq(&self, other: &backhand::kind::Kind) -> bool
-impl core::marker::Copy for backhand::kind::Kind
-impl core::marker::StructuralEq for backhand::kind::Kind
-impl core::marker::StructuralPartialEq for backhand::kind::Kind
-pub enum backhand::SquashfsFileSource<'a, R: backhand::ReadSeek>
-pub backhand::SquashfsFileSource::SquashfsFile(backhand::FilesystemReaderFile<'a, R>)
-pub backhand::SquashfsFileSource::UserDefined(core::cell::RefCell<alloc::boxed::Box<(dyn std::io::Read + 'a)>>)
-pub fn backhand::Export::read(__deku_input_bits: &bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(&bitvec::slice::BitSlice<u8, bitvec::order::Msb0>, Self), deku::error::DekuError>
-pub fn backhand::Export::write(&self, __deku_output: &mut bitvec::vec::BitVec<u8, bitvec::order::Msb0>, kind: backhand::kind::Kind) -> core::result::Result<(), deku::error::DekuError>
-pub backhand::FilesystemReader::nodes: alloc::vec::Vec<backhand::Node<backhand::SquashfsFileReader>>
-pub backhand::FilesystemReader::root_inode: backhand::SquashfsDir
-impl<R: backhand::ReadSeek> backhand::FilesystemReader<R>
-impl<R: backhand::ReadSeek> backhand::FilesystemReader<R>
-pub fn backhand::FilesystemReader::file<'a>(&'a self, basic_file: &'a backhand::BasicFile) -> backhand::FilesystemReaderFile<'a, R>
-pub fn backhand::FilesystemReader::read_file(&self, basic_file: &backhand::BasicFile) -> core::result::Result<alloc::vec::Vec<u8>, backhand::BackhandError>
-pub fn backhand::FilesystemReader::from_reader(reader: R) -> core::result::Result<Self, backhand::BackhandError>
-impl<R: backhand::ReadSeek> backhand::FilesystemReader<SquashfsReaderWithOffset<R>>
-pub fn backhand::FilesystemReader::from_reader_with_offset(reader: R, offset: u64) -> core::result::Result<Self, backhand::BackhandError>
-pub fn backhand::FilesystemReader::from_reader_with_offset_and_kind(reader: R, offset: u64, kind: backhand::kind::Kind) -> core::result::Result<Self, backhand::BackhandError>
-impl<R: core::fmt::Debug + backhand::ReadSeek> core::fmt::Debug for backhand::FilesystemReader<R>
-pub fn backhand::FilesystemReader::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-impl<'a, R: backhand::ReadSeek> backhand::FilesystemReaderFile<'a, R>
-pub fn backhand::FilesystemReaderFile::new(system: &'a backhand::FilesystemReader<R>, basic: &'a backhand::BasicFile) -> Self
-pub fn backhand::FilesystemReaderFile::reader(&self) -> SquashfsReadFile<'a, R>
-impl<'a, R: backhand::ReadSeek> core::clone::Clone for backhand::FilesystemReaderFile<'a, R>
-impl<'a, R: backhand::ReadSeek> core::iter::traits::collect::IntoIterator for backhand::FilesystemReaderFile<'a, R>
-impl<'a, R: core::marker::Copy + backhand::ReadSeek> core::marker::Copy for backhand::FilesystemReaderFile<'a, R>
-impl<'a, R: backhand::ReadSeek> backhand::FilesystemWriter<'a, R>
-pub fn backhand::FilesystemWriter::from_fs_reader(reader: &'a backhand::FilesystemReader<R>) -> core::result::Result<Self, backhand::BackhandError>
-pub fn backhand::FilesystemWriter::mut_file<S: core::convert::Into<std::path::PathBuf>>(&...
Read more