Releases: rikyoz/bit7z
Bit7z v4.0.8
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
tofile_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:
- 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
andBitFileCompressor::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
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 toBitArchiveItem
. - 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);
- Previously,
- 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
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
'sConstIterator
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
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 inOpenCallback
. - Added the option
BIT7Z_DISABLE_USE_STD_FILESYSTEM
, which makes bit7z always useghc::filesystem
instead ofstd::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).
- This option allows you to work around any possible bug in compilers' implementation of
- 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
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
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
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
andfs::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
andBIT7Z_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
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
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 thebit7z
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
.
- By default, bit7z will use 7-zip v23.01, unless you specify a different version via the
- 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 forstd::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
totstring
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'sstd::error_code
s, 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
toBitArchiveReader
. - Added support to extracting/testing the input archive of
BitArchiveReader
. - Made
BitArchiveReader
/BitInputArchive
behave like anstd
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 aBitException
.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 toBitFileExtractor
.- Now,
BitExtractor
is just a template class for all the extraction classes.
- Now,
- Renamed the
BitCompressor
class toBitFileCompressor
.- Now,
BitCompressor
is just a template class for all the compression classes.
- Now,
- Changed the default string type to
std::string
instead ofstd::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
.
- On Windows, the default string type will be
- 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
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
andguids.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 settingOverwriteMode::Overwrite
. - Added a getter for the CRC value of a
BitArchiveItem
. - Added
UpdateMode::Update
and deprecatedUpdateMode::Overwrite
. - Deprecated
BitAbstractArchiveCreator::setUpdateMode(bool)
. - Allow extracting multi-volume archives without writing the full archive (issue #107).
- Fixed
CVolumeOutStream
calling the wrong parent classSetSize
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 toBitException
. - 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
toBitArchiveReader
. - Added support to extracting/testing the input archive of
BitArchiveReader
. - Made
BitArchiveReader
/BitInputArchive
behave like anstd
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 aBitException
.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 toBitFileExtractor
.- Now,
BitExtractor
is just a template class for all the extraction classes.
- Now,
- Renamed the
BitCompressor
class toBitFileCompressor
.- Now,
BitCompressor
is just a template class for all the compression classes.
- Now,
- Changed the default string type to
std::string
instead ofstd::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
.
- On Windows, the default string type will be
- 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 👇