Skip to content

v1.4.1

Choose a tag to compare

@LRG4YOU LRG4YOU released this 07 Aug 02:01
· 131 commits to main since this release

πŸ›‘οΈ 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 BufWriter copy).
  • Cache-served metadata on compress walk (DirEntry::metadata() instead of a fresh
    CreateFile per file) β€” saves thousands of syscalls on big folders.
  • Removed the redundant 4 MB BufWriter on 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 in CreateFile and 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.log in the
    install folder, so silent update-channel failures are observable.
  • GitHub release asset verification: deploy.ps1 now 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).