Skip to content

Releases: Gottox/sqsh-tools

v1.0.0: First stable release!

25 Aug 17:04
ba191b4
Compare
Choose a tag to compare

We've made it! libsqsh is stable!

Lot's of changes happened. Most notably we harmonized some of the easy API (formally called chrome) and streamlined the iterator API. There were large internal refactorings on the reader implementation, so that that subtle differences of the underlying iterators could be harmonized.

OpenBSD compatibility builds are now mandatory on the main branch.

We moved some functionality and the test runner from libsqsh to cextras, a common functionality library.

There is a lot to do, but the API is in a state where I am happy with it. From now on, we will honor semantic versioning and will not break the public facing API/ABI during the v1.x series. If you choose to use the internal APIs, that are only available with static linking, the API is stable within v1.x series, the internal ABI is stable throughout the 1.0.x cycle.

What's Changed

  • [API BREAK] do not export private symbols to the shared library
  • [API BREAK] sqsh_export_table_resolve_inode gets an inode as uint64_t
    instead of uint32_t
  • [API BREAK] sqsh_file_file_block_is_compressed gets index as
    uint32_t instead of int
  • [API BREAK] sqsh_archive_open gets an extra parameter int *err to
    return an error code.
  • [API BREAK] unexport sqsh_xattr_table_start and sqsh_xattr_table_get,
    should not be used by library consumers.
  • [API BREAK] sqsh_file_content returns uint8_t * instead of char *
    should not be used by library consumers.
  • Install missing headers
  • chrome: Add sqsh_directory_list() to list the contents of a directory.
  • mapper: add support for files that have an archive embedded in them.
  • examples: add example to list the contents of a directory.
  • examples: add example to read a file from an archive.
  • tree_walker: Improved symlink handling.
  • tree_walker: Do not duplicate symlink target when resolving paths.
  • Fix compilation on FreeBSD by @probonopd in #31
  • tools/unpack: fix extraction of directories without read/list permissions by @Gottox in #38
  • directory_iterator: fix wrong free, add tests by @Gottox in #40
  • Feature/openbsd pipeline by @Gottox in #41
  • reader: reimplementation the reader without _skip by @Gottox in #39
  • reader: fix handling of when growing a reader by @Gottox in #43
  • chores: clang-format by @Gottox in #42
  • reader: refactor reader_fill_buffer() by @Gottox in #44
  • OpenBSD: Work around endless loop when opening certain files in sqshfs2. by @Gottox in #47
  • tools/fs-common: add TODO by @Gottox in #48
  • .github: auto cancel previous action runs when new commits are pushed by @Gottox in #51
  • README.md: add explanation to examples. by @Gottox in #49
  • remove skip functions from iterators. by @Gottox in #50
  • include/meson.build: install reader header by @Gottox in #52
  • easy/file: fix file exists function by @Gottox in #53
  • resolve issues found by clang-tidy by @Gottox in #54
  • README.md: rewrite, add comprehensive feature list by @Gottox in #55
  • Change signature of the _next method of iterators by @Gottox in #56
  • refactor: remove primitive, replace by cextras by @Gottox in #57
  • subprojects: bundle cextras with this repo by @Gottox in #58
  • subproject: update meson wrapfile by @Gottox in #59
  • Implement _skip for data iterators. by @Gottox in #61
  • file_iterator: fix sparse handling by @Gottox in #62
  • .gitignore: Add subprojects/packagecache by @Gottox in #60
  • Create FUNDING.yml by @Gottox in #64
  • curl_mapper: fix memory leak when initialisation fails by @Gottox in #66
  • subprojects/cextras: update by @Gottox in #65
  • map_iterator: fix unused initialisation by @Gottox in #67
  • curl_mapper: fix build with disabled curl by @Gottox in #68
  • .github: only run docker workflow on main by @Gottox in #69
  • extractor: rename extract to write by @Gottox in #70
  • Release/v1.0.0 by @Gottox in #71

New Contributors

Full Changelog: v0.5.0...v1.0.0

v0.5.0

18 Jun 16:23
Compare
Choose a tag to compare

This is the fifth and final development milestone of the libsqsh project. This release improves the portability of the library. CI now runs on OpenBSD and Linux. Also, invalid unaligned data accesses on ARM platforms have been fixed. This release renames some internal structs and struct members to make their usage clearer. LZO support has been removed from the project and moved to a dedicated repository. There are now two fuse implementations: sqshfs uses the low-level API of fuse3, sqshfs2 uses the high-level API of fuse2 to support the OpenBSD target.

The next release will be the first stable release of libsqsh. Starting with this release, libsqsh will support a stable ABI and API for the entire 1.x series. It's also likely that 1.0 will improve multi-threaded operations.

Please note that libsqsh is now feature complete, so the pace of development is likely to slow down.

Full Changelog: v0.4.0...v0.5.0

v0.4.0

17 May 20:07
Compare
Choose a tag to compare

This is the fourth development milestone of the libsqsh project. This release further improves caching characteristics and introduces the first draft of the chrome API. v0.4 introduces a generic reader implementation, that is used for loading file contents, metablocks and the archives contents. Furthermore this release adds support for libfuzz back in. libsqsh withstanded 30 minutes of fuzzing on x86_64.

The API changes to the plumbing API have been settled down. We still don't guarantee stable APIs, but from now own expect only small changes to it. The frontend/chrome API was introduced in its first iteration. Expect it to be unstable and subject to change.

The next release will introduce support for OpenBSD and support platforms that don't support unaligned data access. The next release will be the final development release of libsqsh.

Full Changelog: v0.3.0...v0.4.0

v0.3.0

10 Apr 20:03
Compare
Choose a tag to compare

This is the third development milestone of the libsqsh project. This release greatly improves caching and reiterates on the API design. It also introduces a forking worker to workaround the lzo licencing issues. As a side project sqsh.js has emerged that aims to provide an easy to use Javascript API. This was mostly a learning exercise for me to learn about wasm and emscripten.

Future

The next development milestone will be v0.4, which will focus on further reducing memcpy()s and improve and finalize a first draft of the chrome (as in "simplified, user facing") API.

Notes

Please note, that neither ABI nor API are considered stable yet and are subject to change with v0.4. It will stay stable for any v0.3.x release though.

Full Changelog: v0.2.0...v0.3.0

v0.2.0

13 Feb 11:09
Compare
Choose a tag to compare

This is the second development milestone in the libsqsh project. This release focuses on API design and implements the foundation for future API compatiblility between versions. Users of libsqsh are advised to switch to the heap based allocation style (using *_new constructuors, instead of the *_init ones, that are now a private API). It also improves the coverage of the doxygen documentation.

Full Changelog: v0.1.0...v0.2.0

Here we go!

28 Sep 11:56
Compare
Choose a tag to compare

This is the first release of libsqsh, a C library for reading squashfs images.

At this state, libsqsh is feature complete, but has a unrefined (and largely undocmented) API. In order to improve this situation I want to encourage people to try out the library and give feedback, especially about performance and developer experience.

Features

The full set of sqashfs features is supported. This includes, but is not limited to extended attributes, export tables, **

This library can be build with only libc as a dependency. Optionally the following compression algorithms are supported:

  • zlib
  • lz4
  • lzma
  • lzo2 (default off, due to licensing incompatibilities, only enable if you know what you're doing!)
  • zstd

Furthermore libsqsh supports remote mounting through curl. This is largely done in order to improve the debugging experience, but there might be interesting scenarios to mount remote squashfs images through http for example.

There's optional support for fuse integrated too. If enabled, libsqsh will build a command line tool that allows to mount squashfs images with fuse. The library will not be affected by this build flag.

Outlook

The next releases will focus on improving performance by adding a caching system and reducing system calls Also - depending on feedback - a refined API will be introduced.