• exec/load/filecontents_lib.js exec/tests/filecontents_test.js src/sbbs

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Oct 16 21:19:03 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/b958104a194d89c54072acc3
    Modified Files:
    exec/load/filecontents_lib.js exec/tests/filecontents_test.js src/sbbs3/filedat.c filedat.h js_archive.cpp
    Log Message:
    Read bare compressed files (.gz, .bz2, .xz, .zst) as single-file archives

    The Archive class and the file-base archive code could not open a bare compressed file, even with its extension listed as a supported archive
    type: they failed with "-30 Unrecognized archive format". libarchive only decompresses a non-archive when its "raw" format is enabled, and archive_read_support_format_all() deliberately leaves raw out.

    All four libarchive read sites now get their reader from
    new_archive_reader(), which adds the raw format, and pass each header
    through check_archive_entry(). Raw matches any input, so a raw result is accepted only when a decompression filter was applied; an uncompressed non-archive still fails as unrecognized. The entry is named after the file minus its compression extension (log.txt.gz -> log.txt) rather than from
    the gzip header, whose stored name is optional and may contain a path.

    A raw entry's size is unknown until decompressed, so Archive.list() reads
    the data to supply it.

    filecontents_lib.js caches "unreadable" verdicts that only a change in EXTRACTORS re-examines, so bump it to 2: .gz files previously recorded as unreadable get listed on their next view. Hosts sharing file areas should
    run this build before then, or an older build re-records the failure under
    the new version.

    Fixes #1278

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net