-
v1.21 Stable
released this
2026-03-28 17:38:22 +00:00 | 0 commits to main since this releaseVersion 1.20
New features
- Added xxHash32 integrity checksum: every compressed G3Z file now stores a 32-bit hash of the original uncompressed data, verified automatically on decompression
- Checksum is algorithm-agnostic: works identically for zlib and LZ4 compressed files
- Old G3Z files (versions 1.10--1.13) without a checksum are still decompressed normally (flag
0x00skips verification) - Named constants for algorithm byte codes (
ALGO_BYTE_ZLIB_MAX/FAST,ALGO_BYTE_LZ4_MAX/FAST) replacing bare character literals in the file format layer - Checksum value in the file information popup is now displayed in hexadecimal (e.g.
0xA3F2C1B0) consistent with how hash values are conventionally represented
Bug fixes
- Fixed use-after-free: partial
.g3zoutput is now correctly deleted before the path buffer is freed when compression is aborted - Fixed
jpopup_add_empty_line(): empty separator lines were allocated but never inserted into the list and never displayed - Fixed popup widget used before NULL guard:
jpopup_set_size()andjpopup_set_font()were called before the NULL check ininit_app() - Fixed missing
FileDataargument in the non-FXCG100 build path ofSquishIt_GetFileInformation()(crash / undefined behaviour on simulator) - Fixed buffer overflow in
getfileinformation():name_lenread from file was not clamped beforefread()into the 256-byteoriginalfilenamefield - Fixed
delete_file()returning the rawremove()value (-1 on failure) instead of a definedSQUISHIT_*error code - Fixed unchecked
fwrite()in LZ4 compression and decompression loops: write failures now propagate asSQUISHIT_WRITE_ERROR - Fixed unchecked
fwrite()when writing the filename into the G3Z header - Fixed LZ4 chunk size stored/read as platform-dependent
int; now explicitlyuint32_t(no format change on SH4 whereintis 32 bits, but correct by specification) - Fixed
strcpy()without bounds check onFileData->filename; replaced withstrncpy()
Code quality
- Refactored
event_handling()(~215 lines) into three focused static helpers:handle_compress(),handle_decompress(),handle_info_popup() - Removed stale TODO comment from
read_checksum()(error handling was already complete) - Removed dead commented-out
decompress_file_zlib()function - Added
statictoclamp()injprogressbar.cto avoid link-scope name pollution - Removed dead
l = NULLassignment afterfree(l)injpopup_poly_destroy() - Corrected misleading copy-paste header comment in
jpopup.h(was describing a progress bar) - Replaced unexplained commented-out
jwidget_emit()calls with an explanatory comment - Updated G3Z file format to version 1.20
Version 1.21
New features in 1.21
- Multi-language support (English / French): all user-facing strings are now fully translated; the active language is selectable from the Settings menu
- Persistent user settings: language, CPU overclock level and default compression algorithm are saved automatically to
SquishIt.inion the calculator storage and restored on the next launch - INI configuration file (
SquishIt.ini): plain-text format with[Key] valueentries and#comment lines; human-readable and hand-editable directly on a PC; a default file with full comments is provided and auto-created on first launch if absent - CPU overclock is now accessible from the Settings menu (SHIFT+MENU), allowing the user to select speeds F1 (default) through F5 without leaving the application
- Default compression algorithm is now remembered across sessions and pre-selected on startup
Code quality in 1.21
- Introduced
src/lang/subsystem:lang.h(string ID enum + API),lang_en.h,lang_fr.h(translation tables),lang.c(runtime dispatch); adding a new language requires only a newlang_XX.hfile - Introduced
src/core/ini_file.h/ini_file.c: self-contained INI parser and writer; all filesystem calls are wrapped ingint_world_switchfor safe OS-world access - Widget strings (
jpopuptitle,jjackintheboxmenuhint bar,jfileselectempty-folder and save-as labels) are now configurable at runtime via dedicated setters, enabling live language switching without rebuilding the widget tree
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
SquishIt.g3a
0 downloads ·
2026-03-28 17:38:19 +00:00 · 239 KiB