* 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>
* Add NetBSD Support
Includes:
- Hints to find non-compatibility libc functions
- Struct and constant definitions for sockets, polling, etc.
- Changes to the linker code to work around some quirks in the NetBSD dynamic linker
- A target triple for netbsd aarch64 so llvm builds/links the compiler properly on this platform
* Updated releasenotes and some compacting
---------
Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
This feature adds an option from project.json and build options to disable libc unreachable statements in order to be able to implement one for yourself. Useful feature for bare metal developing.
---------
Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
Small fixes to stdlib. Match the signature of `NativeConditionVariable.wait_timeout` and `NativeMutex.lock_timeout` of thread_win32.c3 to `ConditionVariable.wait_timeout` and `TimedMutex.lock_timeout` to avoid casting errors. Add `time::us`.
Upgrade of mingw in CI. Fix problems using reflection on interface types #1203. Improved debug information on defer. $foreach doesn't create an implicit syntactic scope.
Error if `@if` depends on `@if`. Updated Linux stacktrace. Fix of default argument stacktrace. Allow linking libraries directly by file path. Improve inlining warning messages. Added `index_of_char_from`. Compiler crash using enum nameof from different module #1205. Removed unused fields in find_msvc. Use vswhere to find msvc. Update tests for LLVM 19
* Error message on bus error or segmentation fault. Some additional SIG info. Full debug info by default. Trapping is now debugtrap rather than trap for LLVM. Row now initialized when entering function for stacktrace.