Revision history for Archive-Lha

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
