Revision history for Archive-Lha 0.23 2026-10-19 (Nicolas Mendoza) - Fix POD coverage test failure on smokers that enable TEST_POD - Fix DOS timestamps being converted as UTC instead of local time when the XS functions are unavailable 0.22 2026-05-14 (Nicolas Mendoza) - Remove Archive::Lha::Debug and heavyweight deps (Log::Dispatch, Data::Dump) - Add Test::UseAllModules to TEST_REQUIRES - Fix provides version in META_MERGE to match distribution version 0.21 2026-05-13 (Nicolas Mendoza) - Exclude .github/ from CPAN distribution via MANIFEST.SKIP - Add CONTRIBUTING.md, SECURITY.md, and LICENSE file - Add provides map to META_MERGE in Makefile.PL - Update GitHub Actions to Node.js 24 compatible versions (checkout@v5, cache@v5, actions-setup-perl@v1.41.0) 0.20 2026-05-13 (Nicolas Mendoza) - Fix Windows path separators in pathname(): use File::Spec::Unix throughout so LHA archive paths always use forward slashes - Replace plhasa symlink with a real wrapper script (pl2bat cannot convert symlinks on Windows); detect plhasa mode via $ENV{PLHASA} - Fix timestamp display on Windows: avoid strftime %e (unsupported on older MSVC CRT); use sprintf "%2d" for space-padded day instead - Fix _ls_stamp_header to use _dostime2utime instead of POSIX::mktime - Add Windows CI jobs (Strawberry Perl 5.38 and 5.40) - Remove Data::Dump noise from t/20_decode.t test names 0.19 2026-05-11 (Nicolas Mendoza) - Fix ratio precision in plhasa output: use pack/unpack 'f' to match lhasa's C float rounding (e.g. 25340/40000 gives 63.3% not 63.4%) - Update MANIFEST: add t/charset.t, tools/plhasa, MANIFEST.SKIP, .github/workflows/ci.yml, synthetic test archives; remove bin/act and lib/Archive/Lha.c (generated, now git-ignored) 0.18 2026-05-11 (Nicolas Mendoza) - Fix DOS timestamp test to not assume positive epoch on 32-bit Perl: 0xFB9FF926 decodes to year 2105 which overflows 32-bit time_t on ivsize=4 builds (e.g. armv6l without -Duse64bitint); only assert no crash — proper fix is a Perl built with -Duse64bitint or -Duse64bitall 0.17 2026-05-11 (Nicolas Mendoza) - Fix pathname() dropping trailing slash on directory entries (File::Spec->canonpath strips it); switch to File::Spec::Unix->canonpath for portable forward-slash paths on all platforms - Add synthetic test archive dir_trailing_slash.lha with -lhd- and -lh0- directory entries to regression-test trailing slash preservation 0.16 2026-05-10 (Nicolas Mendoza) - Fix decode corruption on Perl built with -Duselongdouble -DDEBUGGING: replace POPp with POPs + SvPVbyte() in input() so the read callback's return value is safely stringified before copying (#1) - Fix UB in Lha.h and Lha.xs: use 1u instead of 1 in bit-shift expressions to avoid signed overflow (introduced in fe85a9c) - Add smoke CI job for Perl 5.36.3 long-double DEBUGGING (perlbrew) - Remove generated lib/Archive/Lha.c from version control 0.15 2026-05-09 (Nicolas Mendoza) - Remove _BSD_SOURCE/_DEFAULT_SOURCE defines from Lha.xs; these caused "Table is broken: total mismatch" decode failures on older glibc platforms (CPAN Testers regression on Perl 5.28/5.32 with 0.13) 0.14 2026-05-09 (Nicolas Mendoza) - Fix plhasa incorrectly lowercasing all-caps filenames in Amiga archives; _fix_msdos_allcaps now only applies when OS byte is 'M' (GitHub issue #2) - Replace real-world test archives with minimal synthetic fixtures (amiga_prefix.lha, amiga_allcaps_preserve.lha) 0.13 2026-05-09 (Nicolas Mendoza) - XS implementations of checksum and dostime2utime in Archive::Lha::Header::Utils; pure-Perl fallbacks retained - Store raw DOS integer in header{timestamp} for Level0/1; new timestamp_is_unix flag distinguishes DOS from Unix epoch at display time - Preload Level0/1/2 header parsers; dispatch via array instead of eval - Fix filename charset for UNIX-tagged archives: use Encode::Guess instead of assuming UTF-8 (fixes latin-1 filenames e.g. "Français") - plha l: show filename node only (no path), matching Amiga LhA guide - plha v/vv: fix timestamps for Level0/1 archives; display CRC uppercase - plha/plhasa: English month names by default (LC_TIME=C), matching lhasa and LhA for UNIX which both hardcode a static months[] array - Add --use-locale flag to opt in to system locale month names - Add --from-charset/--to-charset as long forms of -fc/-tc - CI: run on all branches, use cpanm --installdeps, cache deps, use prove -wlvmb t; hardcode expected plhasa output in tests 0.12 2026-05-08 (Nicolas Mendoza) - Install plhasa via EXE_FILES instead of postamble symlink so it is correctly installed by cpanm (postamble install targets are skipped by cpanm) - Add GitHub repository URL to CPAN metadata 0.11 2026-05-07 (Nicolas Mendoza) - OS-based filename charset auto-detection in pathname() (Amiga->iso-8859-15, MS-DOS/Win->cp1252, Unix->UTF-8, X68K->cp932) - plha l command: LhA terse listing format (filename only, + prefix for paths) - plha -fc/-tc options: explicit from/to charset for filenames - plhasa symlink: activates lhasa-compatible interface (l/v listing formats) - Truncation detection in check_magic(): warn if last byte is not 0x00 - Fix Perl 5.38+ incompatibility in Decode::Base (constant subs closing over lexicals): replaced with %_params hash keyed by subclass name - Fix Decode::Base accessor redefinition warnings (_accessors_installed guard) - Full POD rewrite for Archive::Lha and plha: encoding, charset table, limitations, Amiga LhA command docs, Wayback Machine links for dead URLs - Makefile.PL: added missing PREREQ_PM deps (Encode, File::Basename, File::Path, Getopt::Long, Log::Dispatch, Data::Dump, Time::Moment) - Test suite: Amiga and latin-1 test archives, truncation test, unknown command error test, charset option tests 0.10 2026-05-06 (Nicolas Mendoza) - Handle Level 0 file comments (null-byte separator in pathname) - Truncate pathnames and filenames at embedded null bytes - Parse Unix permissions (0x50), UID/GID (0x51), group name (0x52) from extended headers - Handle all LHA methods (lhd, lzs, lz4, lz5, pm0, pm1, pm2) - Fix Windows directory path handling (Amiga compatibility) - Use POSIX::mktime for DOS timestamps (normalizes out-of-range values) - Lower minimum Level 0/1 header size to match lhasa behavior - Add plha command-line tool with lhasa-compatible listing formats (l, lv, v, vv modes) - Add MS-DOS all-caps to lowercase filename conversion 0.06 2007 (Kenichi Ishigaki) - Original CPAN release