Skip to content

Releases: rikyoz/bit7z

Bit7z v4.0.8

17 Aug 09:38
bec6a22
Compare
Choose a tag to compare

Changes from v4.0.7:

  • Fixed missing header (gcc14) (by @SGSSGene in #218).
  • Fixed build failing when cross-compiling using MinGW on Linux (closed issue #222).
  • Fixed conversion from FILETIME to file_time_type when using libstdc++.
  • Rewrote directory indexing algorithm to not use recursion (closed issue #223).
    • This fixes possible stack overflow errors that could happen while indexing deeply nested directory structures.
  • Optimized BitArchiveReader::items().
  • Optimized indexing of directories.
  • Disabled buffering of file streams to improve performance (issue #224).
    • Now bit7z is considerably faster while reading and writing files during extraction and compression operations.
    • For example, this graph shows the improvement in the runtime of a test program between v4.0.7 and v4.0.8:
      image
    • There is still some overhead compared to 7-zip which will require some more work. I plan to remove it for the next version v4.1.
  • Fixed support for BSD operating systems (closed issue #230).
  • Added BitOutputArchive::addDirectoryContents and BitFileCompressor::compressDirectoryContents methods (closed issue #226).

Full Changelog: v4.0.7...v4.0.8

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.7

17 May 16:12
69c0244
Compare
Choose a tag to compare

Changes from v4.0.6:

  • Fixed missing conversion from tstring to path in BitItemsVector::indexPaths (closes #199).
  • Updated project version in CMakeLists.txt.
  • Fixed GitHub actions.
  • Added nativePath() method to BitArchiveItem.
  • Added support for recursively deleting the content of folder items within archives.
    • Previously, BitArchiveEditor could only delete the metadata of the folder, not its content.
      // Deleting all the content of the "folder".
      // Note: if no policy is passed, the method will still use the old behavior.
      editor.deleteItem("folder", DeletePolicy::RecurseDirs);
  • Fixed BitOutputArchive::addFiles overloads.
    • Previously, the method overload prevented you from using the method's default arguments.
    • Now you can, for example, pass only one argument:
      // Adds all the files within the given path, recursively including the ones inside subfolders.
      // Previously, you had to explicitly do archive.addFiles("directory/path/", "*", true);
      archive.addFiles("directory/path/"); 
  • Optimized BitArchiveReader::items().
    • From my tests, now the method is on average ~25% faster than before.
  • Added missing headers in bit7z.hpp.
  • Updated minimum required version of CMake.
  • Improved and updated the README.

Full Changelog: v4.0.6...v4.0.7

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.6

17 Mar 15:02
d41afbc
Compare
Choose a tag to compare

Changes from v4.0.5:

  • Fixed creation and access time metadata of extracted files not being restored (partial fix for #184).
  • Fixed error messages when opening file streams on MinGW.
  • Fixed a linking issue with some versions of MinGW (issue #193).
  • Fixed project version in CMakeLists.txt.
  • Fixed BIT7Z_DISABLE_USE_STD_FILESYSTEM not working on old macOS toolchains (issue #194).
  • Allowed to use BitInputArchive's ConstIterator in const variables.

Full Changelog: v4.0.5...v4.0.6

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.5

22 Dec 21:29
b602b43
Compare
Choose a tag to compare

Changes from v4.0.4:

  • Fixed building using some versions of GCC.
  • Fixed building using GCC on macOS.
  • Fixed a missing nullptr check when extracting to a fixed-size buffer.
  • Fixed the empty name file alias not being used in some edge cases.
  • Added a check for invalid indices in BitInputArchive::extractTo.
  • Avoided the unnecessary creation of a FilesystemItem object in OpenCallback.
  • Added the option BIT7Z_DISABLE_USE_STD_FILESYSTEM, which makes bit7z always use ghc::filesystem instead of std::filesystem.
    • This option allows you to work around any possible bug in compilers' implementation of std::filesystem (e.g., #181).
    • By default, this option is disabled, and bit7z will always try to use std::filesystem when available (as in previous versions).
  • Fixed the std::copy_n warning in old versions of MSVC.
  • Defined /Zc:__cplusplus only when using MSVC 15.7 and later.
  • Updated examples in the README.

Full Changelog: v4.0.4...v4.0.5

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.4

23 Oct 19:31
3401ca9
Compare
Choose a tag to compare

Changes from v4.0.3:

  • Fixed manually linking bit7z when enabling BIT7Z_AUTO_FORMAT (close issue #173).
  • Improved error messages when opening file streams.
  • Cleaned up unused code and fixed comments.
  • Moved string utility functions to a separate source file.
  • Improved tests.
  • Fixed some static analysis warnings.
  • Fixed some implicit signed/unsigned conversions.
  • Added more compiler warning flags on GCC/Clang.
  • Updated CPM.cmake to 0.38.6.
  • Added a GitHub action for running tests using most bit7z build options combinations.

Full Changelog: v4.0.3...v4.0.4

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.3

12 Oct 16:14
5160f3e
Compare
Choose a tag to compare

Changes from v4.0.2:

  • Fixed bit7z::narrow on Windows (close issue #172).
  • Updated the project version in CMakeLists.txt.
  • Fixed build on GCC 5.
  • Improved the unit tests.
  • Reduced code duplication in unit tests.
  • Fixed some warnings from static analysis tools.
  • Fixed the code formatting.

Full Changelog: v4.0.2...v4.0.3

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.2

08 Oct 06:56
a90f5f7
Compare
Choose a tag to compare

Changes from v4.0.1:

  • Fixed build on Android API level 23 and earlier (issue #157).
  • Fixed some warnings from static analysis tools like PVS-Studio and clang-tidy.
  • Fixed missing proper conversions between tstring and fs::path throughout the code.
    • This should also fix some issues with correctly handling UTF-8 characters in strings.
  • Added more tests for when compiling using BIT7Z_USE_SYSTEM_CODEPAGE.
  • Fixed support to using both BIT7Z_USE_NATIVE_STRING and BIT7Z_AUTO_PREFIX_LONG_PATHS.
  • Always use FormatMessageA for error messages on Windows.
  • Fixed and improved bit7z::to_tstring.

Full Changelog: v4.0.1...v4.0.2

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4.0.x, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.1

02 Oct 18:18
3759449
Compare
Choose a tag to compare

Changes from v4.0.0:

  • Fix compression of filesystem items with names having non-ASCII characters
  • Improve the README

Full Changelog: v4.0.0...v4.0.1

This is a maintenance release. For a full changelog of bit7z v4.0.x, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.0

01 Oct 18:57
55e3c4e
Compare
Choose a tag to compare

Changes from v4.0.0-rc:

  • Use macro instead of function for HRESULT_FROM_WIN32 (by @michaelKle in #130).
  • Fixed missing #include <algorithm> in formatdetect.cpp (by @gr3yknigh1 in #132).
  • Fixed code formatting, code style consistency, and comments.
  • Fixed support to GCC 4.9.
  • Improved unit tests.
  • Added unit tests for BitItemsVector.
  • Added tests for BitArchiveReader.
  • Made the fs namespace internal to the bit7z namespace (fix #141).
  • Increased the number of open files when creating multi-volume archives (partial fix for issue #150).
  • Improved error messages.
  • Removed createArchiveObject in Bit7zLibrary.
  • Added a check if the password is ASCII-only when compressing to Zip archives (it can be disabled via the BIT7Z_DISABLE_ZIP_ASCII_PWD_CHECK CMake option).
  • Updated default version of 7-zip to v23.01.
  • Fixed build with MSVC ARM toolchain.
  • Removed third-party git submodules: now bit7z uses CPM.cmake for automatically handling third-party dependencies.
    • By default, bit7z will use 7-zip v23.01, unless you specify a different version via the BIT7Z_7ZIP_VERSION option (e.g., -DBIT7Z_7ZIP_VERSION=22.01).
    • Alternatively, you can specify a custom path containing the 7-zip source code via the option BIT7Z_CUSTOM_7ZIP_PATH.
  • Fixed and improved the handling of UTF-8 paths.
  • Improve format detection.
  • Added option BIT7Z_USE_SYSTEM_CODEPAGE to make bit7z use the system codepage for std::string instead of UTF-8 (highly not recommended).
  • Added functions to check whether an archive is encrypted/header-encrypted (issue #164).
  • Removed unnecessary conversions from fs::path to tstring and vice versa.
  • Added support for correctly storing symbolic links when creating archives (discussion #166).
  • Added support for applying BIT7Z_STRING to macro defines (issue #167).
  • Added optional sanitization of reserved Windows file names during file extraction (by @Luosiyuan in #168).
  • Improved the README.
  • Check for the file signature when detecting the format of files w/o an extension.
  • Improved error messages when extracting an encrypted archive w/o a password.
  • Introduced BitFailureSource error condition enum: it can be used for performing queries on bit7z's std::error_codes, for the purpose of grouping, classification, or error translation.

Full Changelog: v4.0.0-rc...v4.0.0

Changes from v3.2.x:

Expand for more details!
  • Added support to Linux and macOS (issue #19).
  • Added support to the MinGW compiler.
  • Dropped support to old MSVC 2012 and 2013.
  • The project requires at least a C++14 compiler to build; the public API is still C++11-compatible.
  • Removed QMake and MSBuild project files: now bit7z uses only CMake as its build system.
  • Removed format restriction to memory compression.
  • Renamed BitArchiveInfo to BitArchiveReader.
  • Added support to extracting/testing the input archive of BitArchiveReader.
  • Made BitArchiveReader/BitInputArchive behave like an std container (e.g., added iterators).
  • Added support for canceling ongoing operation in progress callback (issue #37).
  • Added support to set the number of threads used when compressing (issue #38).
  • Added support for extracting without retaining the directory structure (issue #34).
  • Added the possibility to choose the word size to use when compressing.
  • Added the BitArchiveWriter class that allows creating a single new archive or updating an old one with new items.
  • Added the BitArchiveEditor class that allows editing existing archives.
    • Added support for renaming/deleting items inside an archive (issue #43).
  • Added different archive update modes:
    • None: Trying to update and archive will throw a BitException.
    • Append: New items will be appended to the archive (i.e., the old update behavior).
    • Overwrite: New items whose path already exists in the archive will be overwritten, and others will be appended.
  • Changed file callback to make it report the full path of the file (issue #46).
  • Added the possibility to extract a specific file to buffer (issue #32).
  • Fixed and improve the public API.
  • Renamed the BitExtractor class to BitFileExtractor.
    • Now, BitExtractor is just a template class for all the extraction classes.
  • Renamed the BitCompressor class to BitFileCompressor.
    • Now, BitCompressor is just a template class for all the compression classes.
  • Changed the default string type to std::string instead of std::wstring.
    • std::strings are considered UTF-8 encoded: the project will follow the UTF-8 Everywhere Manifesto.
    • This allows using the library in cross-platform projects more quickly.
    • You can still achieve the old behavior by using bit7z with the -DBIT7Z_USE_NATIVE_STRING CMake option. In this case:
      • On Windows, the default string type will be std::wstring (as in bit7z v3);
      • On Linux and macOS, it will remain std::string.
  • Added an initial unit test subproject (can be enabled via the BIT7Z_BUILD_TESTS option).
  • Fixed some edge cases in the wildcard matching function.
  • Added a basic OverwriteMode enum that allows configuring how to deal with when an output file or buffer already exists (issue #116). It works for both compressors and extractors.
    • None: The archive handler will throw an exception.
    • Overwrite: The handler will overwrite the old file or buffer with the new one.
    • Skip: The handler will skip writing to the output file or buffer.
  • Added a getter for the CRC value of a BitArchiveItem.
  • Added option for generating Position Independent Code (issue #117).
  • Allow setting archive format properties as described in the 7-zip docs (close issues #91 and #103).
  • Moved public API headers to the include/bit7z/ folder.
  • Added an option to automatically prepend paths with the long path prefix (issue #45).
  • Added an option to build the Doxygen documentation.
  • Clean up code and fix code formatting.
  • Re-licensed the project under the MPLv2 (issue #86).

Full Changelog: v3.2.0...v4.0.0

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

Bit7z v4.0.0 RC

21 Jan 12:31
f2d7b91
Compare
Choose a tag to compare
Bit7z v4.0.0 RC Pre-release
Pre-release

Changes from v4.0.0-beta:

  • Fixed BitAbstractArchiveCreator not respecting the retaining directories option.
  • Incremented the minimum CMake version needed to v3.11.
  • Added an initial unit test subproject (can be enabled via the BIT7Z_BUILD_TESTS option).
    • I will make it more complete over time.
  • Fixed BitOutputArchive::addItems not respecting the file indexing options.
  • Fixed issue #112.
  • Fixed typo in guids.cpp and guids.hpp (issue #113).
  • Fixed linking when using some versions of MinGW.
  • Fixed public API support to C++11.
  • Fixed compilation on Windows with native strings enabled.
  • Fixed some edge cases in the wildcard matching function.
  • Added a basic OverwriteMode enum that allows configuring how to deal with when an output file or buffer already exists (issue #116). It works for both compressors and extractors.
    • None: The archive handler will throw an exception.
    • Overwrite: The handler will overwrite the old file or buffer with the new one.
    • Skip: The handler will skip writing to the output file or buffer.
  • Removed the beta's UpdateMode::OverwriteArchive enumerator: the same result can be achieved by setting OverwriteMode::Overwrite.
  • Added a getter for the CRC value of a BitArchiveItem.
  • Added UpdateMode::Update and deprecated UpdateMode::Overwrite.
  • Deprecated BitAbstractArchiveCreator::setUpdateMode(bool).
  • Allow extracting multi-volume archives without writing the full archive (issue #107).
  • Fixed CVolumeOutStream calling the wrong parent class SetSize method.
  • Added option for generating Position Independent Code (issue #117).
  • Allow setting archive format properties as described in the 7-zip docs (close issues #91 and #103).
  • Added posixCode() method to BitException.
  • Added option to link to libc++ on Clang.
  • Moved public API headers to the include/bit7z/ folder.
  • Fixed building on 32-bit architectures.
  • Added an option to automatically prepend paths with the long path prefix (issue #45)
  • Added an option to build the Doxygen documentation.
  • Clean up code and fix code formatting.

Full Changelog: a75e335...ac49527


Changes from v3.2.x:

  • Added support to Linux and macOS (issue #19).
  • Added support to the MinGW compiler.
  • Dropped support to old MSVC 2012 and 2013.
  • The project requires at least a C++14 compiler to build; the public API is still C++11-compatible.
  • Removed QMake and MSBuild project files: now bit7z uses only CMake as its build system.
  • Removed format restriction to memory compression.
  • Renamed BitArchiveInfo to BitArchiveReader.
  • Added support to extracting/testing the input archive of BitArchiveReader.
  • Made BitArchiveReader/BitInputArchive behave like an std container (e.g., added iterators).
  • Added support for canceling ongoing operation in progress callback (issue #37).
  • Added support to set the number of threads used when compressing (issue #38).
  • Added support for extracting without retaining the directory structure (issue #34).
  • Added the possibility to choose the word size to use when compressing.
  • Added the BitArchiveWriter class that allows creating a single new archive or updating an old one with new items.
  • Added the BitArchiveEditor class that allows editing existing archives.
    • Added support for renaming/deleting items inside an archive (issue #43).
  • Added different archive update modes:
    • None: Trying to update and archive will throw a BitException.
    • Append: New items will be appended to the archive (i.e., the old update behavior).
    • Overwrite: New items whose path already exists in the archive will be overwritten, and others will be appended.
  • Changed file callback to make it report the full path of the file (issue #46).
  • Added the possibility to extract a specific file to buffer (issue #32).
  • Fixed and improve the public API.
  • Renamed the BitExtractor class to BitFileExtractor.
    • Now, BitExtractor is just a template class for all the extraction classes.
  • Renamed the BitCompressor class to BitFileCompressor.
    • Now, BitCompressor is just a template class for all the compression classes.
  • Changed the default string type to std::string instead of std::wstring.
    • Input strings are considered UTF-8 encoded: the project will follow the UTF-8 Everywhere Manifesto.
    • This allows using the library in cross-platform projects more quickly.
    • You can still achieve the old behavior by using bit7z with the -DBIT7Z_USE_NATIVE_STRING CMake option. In this case:
      • On Windows, the default string type will be std::wstring (as in bit7z v3);
      • On Linux and macOS, it will remain std::string.
  • Re-licensed the project under the MPLv2 (issue #86).

Full Changelog: v3.2.0...v4.0.0-rc

Binaries built using Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇