All notable changes to this project will be documented in this file.
1.3.1 - 2025-04-08
- Windows build - Fixed compilation issues on Windows
- 64-bit types on Windows - Fixed problem with 64-bit types on Windows
- Packaging - Updated packaging configuration
1.3.0 - 2025-01-31
- Verbose mode - New
-v/--verboseflag for bothecmandunecmecm -vshows mode selection and batch flush eventsunecm -vshows record type/count decoding
- Debug logging - Compile-time
ECM_DEBUGmacro for development buildsECM_DEBUG_LOG()macro outputs to stderr with[DEBUG]prefixECM_VERBOSE()macro for runtime-controlled verbose output
- Performance benchmarks - New benchmark suite (
just benchmark)- EDC computation throughput (~370 MB/s)
- ECC generation speed (~220K sectors/sec)
- Sector type detection (~104K sectors/sec)
- Full encode/decode throughput (~120 MB/s)
- Processing modes documentation - README section explaining batch vs streaming trade-offs
- README overhaul - Comprehensive documentation update
- Added "Processing Modes" section
- Added "Performance" section with benchmark results
- Added "Contributing" guidelines
- Added "See Also" section with related projects
- Improved usage examples and option tables
- Code comments - Added detailed comments explaining:
- Why
check_type_raw()parameter cannot beconst(callsecc_verifywith buffer modification) - Trade-offs between batch and streaming encoding modes
- Why
- New
tests/benchmark.cperformance measurement suite - New
just benchmarkcommand - Updated
tests/meson.buildto register benchmark executable
1.2.0 - 2025-12-12
- Mode 2 MSF reconstruction - Fixed incorrect MSF (Minute:Second:Frame) addresses when decoding Mode 2 sectors
- Sector addresses were wrong when literal bytes preceded Mode 2 sectors
- Now correctly tracks output position for MSF computation
- Pipe/stdout support - Fixed Mode 2 decoding to stdout/pipes
- Previously
ftello()returned -1 on non-seekable outputs, causing all sectors to get MSF 00:02:00 - Now uses explicit byte counting instead of file position queries
- Previously
- C23 modernization - Adopted C23
nullptrkeyword for null pointer constants - Code style - Applied consistent formatting with clang-format
- Source headers - Removed redundant license/copyright headers from individual source files (see LICENSE file)
- clang-format configuration - Added
.clang-formatfor consistent code style - stdin/stdout documentation - Documented
-parameter for stdin/stdout streaming
1.1.0 - 2025-12-10
- Meson build system - Modern build system replacing manual compilation
- Release and debug build configurations
- Automatic dependency detection
- Cross-platform support
- Test suite - Comprehensive testing infrastructure
- Unit tests for ECM encoder (
test_ecm.c) - Unit tests for UNECM decoder (
test_unecm.c) - Integration roundtrip tests (
roundtrip_test.sh)
- Unit tests for ECM encoder (
- Shared library - Extracted common ECC/EDC code into
libeccedceccedc.h- Public API with sector constants and functionseccedc.c- Shared implementation for both encoder and decoder
- Arch Linux packaging - PKGBUILD for easy installation on Arch-based systems
justcommand runner - Convenient build commands (just build,just rebuild,just clean)
- C23 standard - Updated to modern C23 language standard
- Large file support - Progress tracking now uses
int64_tfor files >4GB - Error handling - Improved error propagation and reporting
- All
fwrite()calls now check return values ecmify()properly returns error codes on failure- Added bounds checking in type/count decoder to prevent overflow
- All
- Code quality - Compiler warnings treated as errors (
werror=true) - Documentation - Migrated to Markdown format
- Modern GitHub-style README with badges and tables
- FORMAT.md specification document
- Integer overflow - Fixed potential overflow in progress tracking for large files
- Buffer overflow - Added bounds check in ECM type/count decoding to reject malformed files
- Write errors - Now properly detected and reported (disk full, I/O errors)
- Error propagation - Encoding errors now correctly return non-zero exit code
include/unecm.h- Merged intoinclude/eccedc.h- Win32 EXE files - Removed pre-built binaries (build from source instead)
1.0.0 - 2002-xx-xx
- Initial release by Neill Corlett
- ECM encoder for CD image compression
- UNECM decoder for CD image restoration
- Support for Mode 1 and Mode 2 (Form 1/Form 2) sectors
- CUE file generation option