Skip to content

Bit7z v4.0.0

Compare
Choose a tag to compare
@rikyoz rikyoz released this 01 Oct 18:57
55e3c4e

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 👇