* stdlib: implement `std::compression::zip` and `std::compression::deflate`
- C3 implementation of DEFLATE (RFC 1951) and ZIP archive handling.
- Support for reading and writing archives using STORE and DEFLATE
methods.
- Decompression supports both fixed and dynamic Huffman blocks.
- Compression using greedy LZ77 matching.
- Zero dependencies on libc.
- Stream-based entry reading and writing.
- Full unit test coverage.
NOTE: This is an initial implementation. Future improvements could be:
- Optimization of the LZ77 matching (lazy matching).
- Support for dynamic Huffman blocks in compression.
- ZIP64 support for large files/archives.
- Support for encryption and additional compression methods.
* optimizations+refactoring
deflate:
- replace linear search with hash-based match finding.
- implement support for dynamic Huffman blocks using the Package-Merge
algorithm.
- add streaming decompression.
- add buffered StreamBitReader.
zip:
- add ZIP64 support.
- add CP437 and UTF-8 filename encoding detection.
- add DOS date/time conversion and timestamp preservation.
- add ZipEntryReader for streaming entry reads.
- implement ZipArchive.extract and ZipArchive.recover helpers.
other:
- Add `set_modified_time` to std::io;
- Add benchmarks and a few more unit tests.
* zip: add archive comment support
add tests
* forgot to rename the benchmark :(
* detect utf8 names on weird zips
fix method not passed to open_writer
* another edge case where directory doesn't end with /
* testing utilities
- detect encrypted zip
- `ZipArchive.open_writer` default to DEFLATE
* fix zip64 creation, add tests
* fix ZIP header endianness for big-endian compatibility
Update ZipLFH, ZipCDH, ZipEOCD, Zip64EOCD, and Zip64Locator structs to
use little-endian bitstruct types from std::core::bitorder
* fix ZipEntryReader position tracking and seek logic ZIP_METHOD_STORE
added a test to track this
* add package-merge algorithm attribution
Thanks @konimarti
* standalone deflate_benchmark.c3 against `miniz`
* fix integer overflows, leaks and improve safety
* a few safety for 32-bit systems and tests
* deflate compress optimization
* improve match finding, hash updates, and buffer usage
* use ulong for zip offsets
* style changes (#18)
* style changes
* update tests
* style changes in `deflate.c3`
* fix typo
* Allocator first. Some changes to deflate to use `copy_to`
* Fix missing conversion on 32 bits.
* Fix deflate stream. Formatting. Prefer switch over if-elseif
* - Stream functions now use long/ulong rather than isz/usz for seek/available.
- `instream.seek` is replaced by `set_cursor` and `cursor`.
- `instream.available`, `cursor` etc are long/ulong rather than isz/usz to be correct on 32-bit.
* Update to constdef
* Fix test
---------
Co-authored-by: Book-reader <thevoid@outlook.co.nz>
Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
* std/io/os/temp_directory.c3: fix INVALID_PATH in Windows native_temp_directory
- Use the actual length from GetTempPathW for Windows temp path slice
- We can remove the workaround in the test_suite_runner for WIN32 and
create all directories in %temp% now
* Updated releasenotes.
---------
Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
* Change generic symbol resolution.
* Infer generic parameters lhs -> rhs: `List{int} x = list::NOHEAP`.
* Regression: Compiler segfault when assigning struct literal with too few members #2483
* fix typos in comments and strings
* fix typos in symbols (and some comments/strings)
* fix typos in releasenotes.md
---------
Co-authored-by: Christoffer Lerno <christoffer@aegik.com>