Releases: Gottox/sqsh-tools
v1.0.0: First stable release!
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 asuint64_t
instead ofuint32_t
- [API BREAK]
sqsh_file_file_block_is_compressed
gets index as
uint32_t
instead ofint
- [API BREAK]
sqsh_archive_open
gets an extra parameterint *err
to
return an error code. - [API BREAK] unexport
sqsh_xattr_table_start
andsqsh_xattr_table_get
,
should not be used by library consumers. - [API BREAK]
sqsh_file_content
returnsuint8_t *
instead ofchar *
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
- @probonopd made their first contribution in #31
Full Changelog: v0.5.0...v1.0.0
v0.5.0
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
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
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
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!
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.