v1.4.1
π‘οΈ Data Integrity β Full Metadata Preservation
LRGEX Compress now preserves your files exactly across a compress β extract round-trip.
Whatever goes into the archive comes out identical β no more "every extracted file shows today's date."
- LastWriteTime (mtime) preserved on every file and folder β sort-by-date, build systems, sync tools, and incremental backups all keep working correctly.
- CreationTime (ctime) preserved β the original creation date is restored, not lost.
- Windows attributes preserved β Hidden, Read-only, System, and Archive flags survive the round-trip. A hidden file extracts hidden; a read-only file extracts read-only.
- Symbolic links / junctions preserved β links recreate as links. On Windows, creating a link needs Administrator or Developer Mode; LRGEX asks once ("allow admin?") and, if yes, re-launches the extraction elevated to recreate every link exactly. If you decline, links degrade gracefully (never aborts the whole extraction).
- Directory timestamps restored in a final pass β so writing children into a folder doesn't overwrite the folder's original mtime.
NTFS alternate data streams are not supported (rarely used; not planned).
β‘ Performance β Extract & Compress Wins
- Metadata sidecar (
.lrgex/meta.bin): one small packed blob at the front of the
archive replaces 11k+ per-entry metadata headers on big folders. Both compress and
extract handle roughly half as many tar entries now. Old v1.4.0 archives still read
correctly via the per-entry fallback. - One-syscall metadata restore (
SetFileInformationByHandle): mtime + ctime +
attributes set in a single call on the already-open file handle β no per-file re-open. - Direct 4 MB chunked writes on large-file extract (no redundant
BufWritercopy). - Cache-served metadata on compress walk (
DirEntry::metadata()instead of a fresh
CreateFileper file) β saves thousands of syscalls on big folders. - Removed the redundant 4 MB
BufWriteron compress output β zstd already emits
good-sized blocks; the buffer was a pure memcpy of every compressed byte. - Tuned zstd multithreading β
JobSize(16MB)+OverlapSizeLog(0)at level 1,
fewer thread handoffs. - Dedicated oversubscribed write pool (3Γ core count) for extraction writes β
correct sizing for workers that block inCreateFileand Defender scans.
π Fixes
- Multi-select coordinator hardened: handles
WAIT_ABANDONED(previous instance
crashed holding the mutex) and stale coordinator-PID lockfiles β a second rapid launch
can no longer silently no-op. - Round-trip verified lossless: mtime/ctime/Hidden/ReadOnly/System, Unicode names,
deeply nested paths, and a 3000-file stress batch (SHA256-checked).
π Security Hardening
- Signed manifest (detached
latest.json.sig): the auto-update manifest is now
cryptographically signed with Ed25519, preventing a compromised server from injecting
a fake version or download URL. - Download size cap (100 MB): the updater rejects files exceeding 100 MB, preventing
memory exhaustion from a poisoned manifest pointing at a huge file. - Update-channel logging: failed update checks now write to
update.login the
install folder, so silent update-channel failures are observable. - GitHub release asset verification:
deploy.ps1now size-verifies the GitHub
release asset via the API, not just the exit code. - Path-length guard: right-clicking a file with a path longer than 247 characters
shows a clear error instead of a confusing "not found". - Slint attribution: added "Made with Slint" badge (Slint Royalty-free License Β§2).