- Fixed an issue where in some cases LZMA2 decompression would fail with an incorrectly thrown error.
- Fixed an issue where in some cases BZip2 compression would produce incorrect output.
TarReader
methods now always returnnil
after reaching the end of a TAR container.
- There are now minimum deployment targets specified in Swift Package Manager manifest.
- The properties of
GzipHeader
are nowvar
-properties (instead oflet
). - GZip extra fields are now supported.
- Added
GzipHeader.ExtraField
struct. - Added
GzipHeader.extraFields
property. - Added a new
extraFields
argument toGzipArchive.archive
function (with a default array empty value).
- Added
- Fixed potential crashes that could occur when processing GZip archives truncated in a header or a "footer".
- Some non-well-formed values of PAX extended header records no longer cause
TarError.wrongPaxHeaderEntry
to be thrown.- The record values with newline characters are now fully processed.
- The record values that do not contain UTF-8 strings are now ignored.
- swcomp changes:
- The symbolic links are now extracted with the values recorded in the containers.
- The hard links are now extracted from TAR containers instead of being ignored.
- Fixed build issues on Linux and Windows.
benchmark
is now a command group with two commands,run
andshow
.- Added
-a
,--append
option to thebenchmark run
command. - Added
-d
,--description
option to thebenchmark run
command. - Added
-t
,--preserve-timestamp
option to thebenchmark run
command. - The file format of saved results is now more flexible and allows multi-way comparisons.
- Improved precision of time measurements in benchmarks.
- Swift 5.1 is no longer supported.
- Increased minimum deployment versions (when installed via CocoaPods or Carthage) for Darwin platforms: macOS from 10.10 to 10.13, iOS from 9.0 to 11.0, tvOS from 9.0 to 11.0, and watchOS from 2.0 to 4.0.
- Fixed issues when building for iOS either directly or via Carthage on systems with Xcode 14.
- Fixed potential crashes that could occur when decompressing truncated Deflate inputs.
- swcomp changes:
- swcomp is now enabled by default in Swift Package Manager manifest.
- Added
-l
,--list
option to container commands (7z
,tar
, andzip
). - Systematized error exit codes and messages.
- Added
-s
,--save
option to thebenchmark
command. - Added
-c
,--compare
option to thebenchmark
command. - Added
-i
,--iteration-count
option to thebenchmark
command. - Added
-W
,--no-warmup
option to thebenchmark
command. - Benchmarks now output standard deviation instead of speed uncertainty.
- Fix incorrect detection of truncated GZip archives.
- Added
TarReader
andTarWriter
structs which allow more iterative work with TAR containers while helping with reducing memory usage. - Fixed a crash that could happen when decompressing Deflate and BZip2 inputs truncated in a certain way.
- In API reference documentation the Container category has been split into separate categories for each container type.
- swcomp changes:
- Certain error messages were made a bit clearer.
- Added
reader-tar
andwriter-tar
subcommands to thebenchmark
command. - Changed the printing format of the benchmark speed.
- Added full-featured support for LZ4 compression and decompression by introducing 5 new functions inside
LZ4
enum.- This enum conforms to the
DecompressionAlgorithm
andCompressionAlgorithm
protocols. - Added SWCompression/LZ4 subspec for CocoaPods users.
- Added support for LZ4 algorithm used in 7-Zip containers.
- This enum conforms to the
- Added
DataError
enum which conforms toError
andEquatable
protocols. - Swift 5.0 is no longer supported.
- Fixed an issue where in some cases Deflate compression would produce incorrect output.
- Optimized performance of Deflate compression.
- swcomp changes:
- Increased the lowest required version of SwiftCLI dependency to 6.0.0.
- Added
lz4
command with many options to support all LZ4 features (both compression and decompression). - Added
--use-format
option to thetar
command which when used with the-c
option allows to force usage of a selected TAR format when creating a TAR container. - The
-j
and-z
options of thetar
command can now be used together with the-c
option to create compressed TAR containers. - Added
un-lz4
,comp-lz4
, andcomp-lz4-bd
subcommands to thebenchmark
command. - Benchmark commands for compression now report compression ratio.
- Fixed a crash in LZMA2 when trying to process an empty
Data
. - swcomp changes:
- Added
benchmark create-tar
benchmarking command. - Benchmarking results are now printed in the units of speed instead of time elapsed.
- Added
- Swift 4.2 is no longer supported.
- Minimum iOS deployment version (when installed via CocoaPods or Carthage) is now 9.0.
- Increased the lowest required version of BitByteData dependency to 2.0.
- Added the
TarContainer.create(from:force:)
function which allows to specify TAR format.- It is now possible to create TAR containers of GNU, ustar (POSIX), and pre-POSIX formats.
- The
TarContainer.create(from:)
function (alongside with the newly added function) no longer throws.- The
TarCreateError.utf8NonEncodable
error is now never thrown.
- The
- Handling of truncated TAR containers should now be more consistent.
- Previously introduced check for truncated containers now throws the
TarError.tooSmallFileIsPassed
error instead ofTarError.wrongField
.
- Previously introduced check for truncated containers now throws the
- Documentation has been updated:
- Adjusted documentation of the
TarEntryInfo
properties to account for other formats used in creation of a container. - Adjusted documentation of the
TarError.tooSmallFileIsPassed
error to mention its use in all situations when truncated data is encountered.
- Adjusted documentation of the
- swcomp changes:
zip -i
command now prints entry comments only if they are not empty.- Slight grammatical improvements to the help messages of swcomp.
- Fixed a crash when processing a truncated TAR file.
- Added missing documentation for
LZMAProperties.init()
. - Windows is now supported.
- Fixed compilation issues on Windows (PR #22 by @trametheka).
- Performed minor optimizations to BZip2 and Deflate compression functionality.
- Increased the lowest required version of BitByteData dependency to 1.4.4.
- Improved performance of LZMA/LZMA2 and, consequently, of XZ.
- Fixed a rare crash when processing a BZip2 archive which uses non-standard (but allowed) run length values.
- Fixed incompatibility with Carthage
--use-xcframeworks
method of installation.
- Fixed a crash when trying to open a very small file as a 7-Zip container, a BZip2 "archive", a GZip archive (both when
using
unarchive
andmultiUnarchive
), a LZMA "archive", a XZ archive (both when usingunarchive
andsplitUnarchive
), a ZIP container, or a Zlib archive. - Fixed a crash when trying to open an unexpectedly truncated file as a GZip or XZ archive.
- Fixed a crash when trying to open an invalid file as a ZIP container. The
ZipError.notFoundCentralDirectoryEnd
error is now thrown instead as was originally intended. - Fixed a crash when trying to read a GZip or Zlib header from a very small file.
- Fixed a compilation warning in BZip2.
- Fixed a compiling issue on Linux with Swift 5.3.
- Fixed a crash which was sometimes happening when encountering non well-formed Extended Timestamp in ZIP files.
- Fixed issues when installing using SPM or Xcode in certain situations.
- Fixed incompatibility with Swift Package Manager from Swift 4.2.
- Improved compatibility with the latest versions of Swift (5.x) and Xcode.
- Increased the lowest required version of BitByteData dependency to 1.4.1.
- Minimum required version of BitByteData is now 1.4.0.
- Updated to support Swift 4.2.
- Added default values to the properties of
LZMAProperties
struct. - Added
init()
toLZMAProperties
struct. - Improved the detection of Swift versions less than 4.2 in the workaround for the crash in
Data.prefix(upTo:)
. - Documentation updates:
- Fixed an outdated example in README (PR #4 by @brianantonelli).
- Fixed grammar issues related to the usage of articles, during/while, and others.
- swcomp changes:
- Minimum required version of SwiftCLI is now 5.2.0.
- Improved the layout of output of benchmark commands.
- Added APIs which allow to specify LZMA properties for decompression:
- Added
LZMAProperties
struct with simple memberwise initializer. - Added
LZMA.decompress(data:properties:uncompressedSize:)
function withuncompressedSize
argument being optional.
- Added
- Added support Delta "filter" in both XZ archives and 7-Zip containers.
- Added support for SHA-256 check type in XZ archives.
- Added
ZipEntryInfo.crc
property. - Fixed incorrect result of
XZArchive.unarchive
andXZArchive.splitUnarchive
functions when more than one "filter" was used. - Reduced in-memory size of
ZipEntryInfo
instances. - Clarified documentation for
LZMA.decompress(data:)
to explain expectation aboutdata
argument. - swcomp changes:
zip -i
command now also prints CRC32 for all entries.-v
is now accepted as an alias for--verbose
option.
- Added APIs which allow creation of new TAR containers:
- Added
TarContainer.create(from:)
function. - Added
TarCreateError
error type with a single caseutf8NonEncodable
.
- Added
TarEntry.info
andTarEntry.data
are nowvar
-properties (instead oflet
).- Accessing setter of
TarEntry.data
now automatically updates correspondingTarEntry.info.size
withdata.count
value (or 0 ifdata
isnil
). - Added
TarEntry.init(info:data:)
initializer. - Most public properties of
TarEntry
are nowvar
-properties (instead oflet
). Exceptions:size
andtype
. - Added
TarEntryInfo.init(name:type:)
initializer. - Improved compatibility with other TAR implementations:
- All string fields of TAR headers are now treated as UTF-8 strings.
- Non-well-formed integer fields of TAR headers no longer cause
TarError.wrongField
to be thrown and instead result innil
values of corresponding properties ofTarEntryInfo
(exception:size
field). - Base-256 encoding of numeric fields is now supported.
- Leading NULLs and whitespaces in numeric fields are now correctly skipped.
- Sun Extended Headers are now processed as local PAX extended headers instead of being considered entries with
.unknown
type. - GNU TAR format features for incremental backups are now partially supported (access and creation time).
TarContainer.formatOf
now correctly returnsTarFormat.gnu
when GNU format "magic" field is encountered.- A new (copy)
Data
object is now created forTarEntry.data
property instead of using a slice of input data. - Fixed incorrect file name of TAR entries from containers with GNU TAR format-specific features being used.
- Fixed
TarError.wrongPaxHeaderEntry
error being thrown when header with multi-byte UTF-8 characters is encountered. - Fixed incorrect values of
TarEntryInfo.ownerID
,groupID
,deviceMajorNumber
anddeviceMinorNumber
properties. - Slightly improved performance of LZMA/LZMA2 operations by making internal classes declared as
final
. - swcomp changes:
- Added
-c
,--create
option totar
command which creates a new TAR container. - Output of bencmark commands is now properly flushed on non-Linux platforms.
- Results for omitted iterations of benchmark commands are now also printed.
- Iteration number in benchmark commands is now printed with leading zeros.
- Fixed compilation error on Linux platforms due to
ObjCBool
no longer being an alias forBool
.
- Added
- Updated to support Swift 4.1.
- Minuimum required version of BitByteData is now 1.2.0.
- Added APIs which allow to use custom ZIP Extra Fields.
- Added
ZipExtraField
protocol. - Added
ZipExtraFieldLocation
enum. - Added
ZipContainer.customExtraFields
property. - Added
ZipEntryInfo.customExtraFields
property.
- Added
- Added APIs which allow to get information about TAR's format:
- Added
TarContainer.Format
enum which represents various formats of TAR containers. - Added
TarContainer.formatOf(container:)
function which returns format of the container. - Added
-f
,--format
option to swcomp'star
command which prints format of TAR container.
- Added
- Added
TarEntryInfo.compressionMethod
property which is always equal to.copy
. - Added documenation for
Container.Entry
andContainerEntry.Info
associated types. - Reverted "disable symbol stripping" change from 4.2.0 update, since underlying problem was fixed in Carthage.
- Benchmarks changes:
- Iterations number increased from 6 to 10.
- There is now a zeroth iteration which is excluded from averages.
- Fixed skipping entries in
SevenZipContainer.open(container:)
in some rare cases. - Fixed crash in
SevenZipContainer.info(container:)
when either entry's size or CRC32 is not present in the container. - Updated some Container-related documentation.
- Now accepts 7-Zip containers with minor format versions from 1 to 4 (previously, was only 4).
- Minuimum required version of BitByteData is now 1.1.0.
- Added
ownerID
andgroupID
properties toZipEntryInfo
, which stores uid and gid from Info-ZIP New Unix and Info-Zip Unix extra fields. - Added
unknownExtendedHeaderRecords
property toTarEntryInfo
which includes unrecognized entries from PAX extended headers. - Prevent double slashes in
TarEntryInfo.name
when prefix header's field was used, but it had trailing slash, which is, by the way, against TAR format. - Additionally improved speed of BZip2 compression: Now doesn't create more Huffman trees when they cannot be used, since maximum amount of Huffman tables was generated.
- Disable symbol stripping in archives generated by Carthage and published on GitHub Releases.
- swcomp changes:
- Replaced 9 block size options of
bz2
command with a single one:-b
(--block-size
). - Now prints entry type-specific properties in output of
tar
,zip
and7z
commands with-i
(--info
) option. - Renamed
perf-test
command group tobenchmark
.
- Replaced 9 block size options of
- Fixed incorrect value of
TarEntryInfo.name
when ustar format's "prefix" field was used. - Updated documentation for
TarEntryInfo
.
- Some internal classes were published as a separate project, BitByteData. This project is now used by SWCompression.
- Several performance improvements have been made.
- "Fixed" a problem when some BZip2 archives created by SWCompression could not be opened by original BZip2 implementation.
- Modification time stored in ZIP's "native" field is now calculated relative to current system's calendar and time zone.
- swcomp additions:
- Added
-1
...-9
options tobz2 -c
command which specifies what block size to use for BZip2 compression. - Added
-i
,--info
option togz
command which prints GZip's header. - Added
comp-deflate
andcomp-bz2
subcommands toperf-test
command which can be used for performance testing of Deflate and BZip2 compression. - Corrected descriptions of
-e
options forzip
,tar
and7z
commands. - Now sets permissions for extracted files only if they are greater than 0.
- Added
- Git tag for updates no longer has "v" prefix.
- Fixed incorrectly thrown
XZError.wrongDataSize
without actually trying to decompress anything. - Fixed crash when opening 7-Zip containers with more than 255 entries with empty streams.
- No longer verify if ZIP string field needs UTF-8 encoding, if language encoding flag is set.
- Reduced memory usage by Deflate compression.
- Added "perf-test" command to swcomp, which is used for measuring performance.
- Internal changes to tests:
LONG_TESTS
andPERF_TESTS
compiler flags are no longer used for testing.- Reduced size of test6 and test7 from 5 megabytes to 1 megabyte.
- Removed test7 for BZip2 compression.
- Added results for 4.0.0 and 4.0.1 from new performance measuring scheme.
-
Reworked Container API:
- New protocol:
ContainerEntryInfo
. ContainerEntry
:- Now has an associated type
Info: ContainerEntryInfo
. - Now has only two members:
info
anddata
properties; all previous members were removed.
- Now has an associated type
Container
:- Now has an associated type
Entry: ContainerEntry
. open
function now returns an array of associated typeEntry
.- Added new function
info
, which returns an array ofEntry.Info
.
- Now has an associated type
- All existing ZIP, TAR and 7-Zip types now conform to these protocols.
- All
Entry
types now have only two members:info
anddata
(seeContainerEntry
protocol).
- All
- Added missing types for ZIP, TAR and 7-Zip with conformance to these protocols.
- Standardized behavior when
ContainerEntry.data
can benil
:- If entry is a directory.
- If data is unavailable, but error wasn't thrown for some reason.
- 7-Zip only: if entry is an anti-file.
- New protocol:
-
Added several new common types, which are used across the framework:
CompressionMethod
.- Used in
GzipHeader.compressionMethod
,ZlibHeader.compressionMethod
,ZipEntryInfo.compressionMethod
.
- Used in
ContainerEntryType
.- Used in
ContainerEntryInfo.type
and types that conform toContainerEntryInfo
protocol.
- Used in
DosAttributes
.- It is the same as previous
SevenZipEntryInfo.DosAttributes
type. - Used in
SevenZipEntryInfo.dosAttributes
andZipEntryInfo.dosAttributes
.
- It is the same as previous
Permissions
.- It is the same as previous
SevenZipEntryInfo.Permissions
type. - Used in
ContainerEntryInfo.permissions
and types that conform toContainerEntryInfo
protocol.
- It is the same as previous
FileSystemType
.- Used in
GzipHeader.osType
andZipEntryInfo.fileSystemType
.
- Used in
-
Removed
GzipHeader.FileSystemType
. -
Removed
GzipHeader.CompressionMethod
. -
Removed
TarEntry.EntryType
. -
Removed following errors:
SevenZipError.dataIsUnavailable
LZMAError.decoderIsNotInitialised
LZMA2Error.wrongProperties
(LZMA2Error.wrongDictionarySize
is thrown instead).TarError.wrongUstarVersion
.TarError.notAsciiString
(TarError.wrongField
is thrown instead).XZError.wrongFieldValue
(XZError.wrongField
is thrown instead).
-
Renamed following errors:
BZip2Error.wrongHuffmanLengthCode
toBZip2Error.wrongHuffmanCodeLength
.BZip2Error.wrongCompressionMethod
toBZip2Error.wrongVersion
.TarError.fieldIsNotNumber
toTarError.wrongField
.XZError.reservedFieldValue
toXZError.wrongField
.
-
Standardized behavior for errors named similar to
wrongCRC
:- These errors mean that everything went well, except for comparing the checksum.
- Their associated values now contain all "successfully" unpacked data, including the one, which caused such an error.
- This change affects
BZip2.decompress
,GzipArchive.multiUnarchive
,XZArchive.unarchive
,XZArchive.splitUnarchive
,ZipContainer.open
.
- This change affects
- Some of these errors now have arrays as associated values to account for the situations with unpacked data split.
- This change affects
GzipArchive.multiUnarchive
,XZArchive.unarchive
,XZArchive.splitUnarchive
,ZipContainer.open
.
- This change affects
-
Removed
SevenZipEntryInfo.isDirectory
. Usetype
property instead. -
SevenZipEntryInfo.name
is no longerOptional
.- Now throws
SevenZipError.internalStructureError
when file names cannot be properly processed. - Entries now have empty strings as names when no names were found in container.
- Now throws
-
Renamed
XZArchive.multiUnarchive
toXZArchive.splitUnarchive
. -
XZArchive.unarchive
now processes all XZ streams similar tosplitUnarchive
, but combines them into one outputData
. -
Fixed "bitReader is not aligned" precondition crash in Zlib.
-
Fixed potential incorrect behavior when opening ZIP containers with size bigger than 4 GB..
-
Updated to use Swift 4.
-
Various improvements to documentation.
-
"swcomp" is now included is as part of this repository.
- Added support for BZip2 compression.
- Added
CompressionAlgorithm
protocol. Deflate
now conforms toCompressionAlgorithm
protocol (as well asBZip2
).Deflate.compress(data:)
no longer throws.ZlibArchive.archive(data:)
no longer throws.- Fixed crash in some rare cases for corrupted BZip2 archives (but throws
BZip2Error
instead).
- Fixed out of range index crash in BitReader.
- Introduced support for 7-Zip containers.
- Added
TarEntry.isLink
. - Added
ZipEntry.isLink
andZipEntry.linkPath
. - Added
ZipEntry.isTextFile
. - Added
ContainerEntry.isLink
andContainerEntry.linkPath
. - Added support for NTFS extra fields in ZIP containers.
- Detection of UTF-8 in ZIP string fields now favors Code Page 437 more.
- Renamed build flags included in Cocoapods configurations.
- Fixed multithreading problems for
ZipEntry.data()
. - Fixed
posixPermissions
inTarEntry.entryAttributes
containing UNIX type byte in some cases.
- Split source files.
- Removed SWCompression/Common subpodspec.
- Moved test files into separate repository as a submodule.
- Fixed problem with Swift Package Manager requirement to disable smudge-filter of git-lfs.
- Support creation time for TarEntries.
- Add support for ZIP standardized CP437 encoding of string fields.
- Fallback to UTF-8 if this encoding is unavailable on the platform.
- Fallback to UTF-8 if it is detected that string fields is in UTF-8.
- Necessary, because Info-ZIP doesn't marks fields it creates with UTF-8 flag.
- Fixed problem with finding zip64 end of Central Directory locator.
- Fixed problem with accessing
ZipEntry
's data two or more times. - Fixed problem with accessing data of BZip2 compressed
ZipEntry
. - Fixed problem with reading zip64 data descriptor.
- Added support for GNU LongLinkName and LongName extensions of TAR format.
- Added support for modification timestamp from extended timestamps ZIP extra field.
wrongUstarVersion
error is no longer incorrectly thrown for GNU tar containers.
- Permissions attributes for TarEntry are now base-10.
- Now throws
fieldIsNotNumber
error when encounters non-number required field in TAR header. - Slightly improved documentation.
- Added support for multi-member GZip archives.
- Added support for multi-stream XZ archives.
- Added property which allows access various entry's attributes for both Tar and ZIP.
- Several Container/Zip/TarEntry's properties are now considered deprecated.
- ZipEntry now provides access to modification time, posix permission and entry type using the new
entryAttributes
property. - Added support for PAX link path.
- Fixed several problems with decompressing files compressed into ZIP container using LZMA.
- Fixed discarding ZIP containers with
wrongVersion
error when they contain LZMA or BZip2 compressed files. - Encrypted ZIP containers should now be detected properly.
ZipError.compressionNotSupported
is now only thrown when trying to get entry's data and not when just opening the archive.- Text fields from GZip header are now decoded with correct encoding.
- Improved Deflate comrpession rate for some corner cases.
- Improved BZip2 performance for cases of big data sizes.
- Significanty reduced memory usage and improved speed of Deflate compression.
- All errors have been renamed, so they conform to Swift Naming Conventions (lowerCamelCase).
- Added
Container
andContainerEntry
protocols. - Most methods have their arguments' labels renamed to make usage shorter.
- Most documentation have been edited to improve readability.
- Multiple files with results of performance tests replaced with consolidated one.
- Enabled support for LZMA and BZip2 compression algorithms.
ZipEntry
now conforms toContainerEntry
protocol.- This also means that entry's data is now provided through
ZipEntry.data()
instead ofZipContainer
's function. - Improved detection of directories if ZIP container was created on MS-DOS or UNIX-like systems.
ZipError.wrongCRC32
now contains entry's data as associated value.- Fixed a problem where Zip64 sized fields weren't used during processing of Data Descriptor.
- Added some measures to prevent crashes when it is impossible to read ZIP text fields (file name or comment) in UTF-8 encoding
- Added support for TAR containers in various format versions.
- Now
GzipArchive.unarchive
function unarchives only first 'member' of archive. - Added support for GZip archive's option in
archive
function. GzipHeader.modificationTime
is now Optional.GzipHeader.originalFileName
renamed toGzipHeader.fileName
.- Added
GzipHeader.isTextFile
property which corresponds to same named flag in archive's header. - Now
XZArchive.unarchive
function unarchives only first stream of archive. - Check for xz archive's footer's 'magic' bytes is now performed at the beginning of processing.
- XZ header's checksum is now checked before parsing reserved flags.
- BZip2 now performs CRC32 check for decompressed data.
- Removed internal
LZMAOutWindow
auxiliary class.
- Fixed incorrect calculation of header's checksum for GZip archives.
- Fixed a problem, where ZipEntry.fileName was returning fileComment instead.
- Lowered deployment targets versions for all (supported) Apple platforms.
- Reduced memory usage in some cases.
- Added Zlib archiving function.
- Improved Deflate compression performance.
- Added GZip archiving function.
- Fixed a problem when Deflate uncompressed blocks were created with one extra byte.
- Fixed problem with zero-length uncompressed blocks.
- Now creates uncompressed block instead of huffman if it will provide better results (in terms of "compression").
- Small internal changes.
- Somewhat limited support for Deflate compression.
- API for parsing ZIP entries.
- ZIP containers support.
- HuffmanTree is no longer part of SWCompression/Common.
- Updated documentation.
- Fixed incorrect reading adler32 checksum from zlib archives.
- Removed LZMA_INFO and LZMA_DIAG build options.
- (2.0.0) GZip archives with multiple 'members' are now parsed correctly.
- LZMA decompression.
- XZ unarchiving.
- Once again performance improvement (this time for real).
- Added public API functions for reading gzip/zlib headers.
- Added documentation.
- Added checksums support.
- Added new errors subtypes.
- Added two build options for diagnostical use.
- Rephrased comments to public API.
- Small performance improvement.
- Removed HuffmanLength.
- Rewritten DataWithPointer.
- Added performance tests.
- Reimplemented Huffman Coding using a tree-like structure.
- Now only DataWithPointer is used during the processing.
- Fixed memory problem in Deflate.
- Improved overall performance.
- Fixed problems when building with Swift Package Manager.
- Added missing files to watchOS scheme.
- Every release on github now will have an archive with pre-built framework.
- Added info about performance to README.
- Added BZip2 decompression.
- Introduced subspecs with parts of functionality.
- Additional performance improvements.
- Fixed potential memory problems.
- Added a lot of (educational) comments for Deflate
Great performance improvements (but there is still room for more improvements).
- Fixed a problem when decompressed amount of data was greater than expected.
- Performance improvement.
Fixed several crashes caused by mistyping and shift 'overflow' (when it becomes greater than 15).
Initial release, which features support for Deflate, Gzip and Zlib decompression.