• src/sbbs3/pack_qwk.cpp

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Saturday, March 16, 2024 20:11:36
    https://gitlab.synchro.net/main/sbbs/-/commit/478d85d20f6b70d1bb054362
    Modified Files:
    src/sbbs3/pack_qwk.cpp
    Log Message:
    Add "MSGID" to QWK DOOR.ID file

    This is a "newer" QWK control message supported by Synchronet (for like 20 years now), so it's been missing from the DOOR.ID file all this time and no
    one noticed. <shrug>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Friday, January 10, 2025 18:20:48
    https://gitlab.synchro.net/main/sbbs/-/commit/70441b12b92fb464935f0f55
    Modified Files:
    src/sbbs3/pack_qwk.cpp
    Log Message:
    Fix CID 530001

    temp_cmd() should've been called first on any sane platform. <shrug>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Friday, September 18, 2026 23:15:27
    https://gitlab.synchro.net/main/sbbs/-/commit/e9e4654c9e69e8778f4aa80d
    Modified Files:
    src/sbbs3/pack_qwk.cpp
    Log Message:
    Don't deliver a QWK packet built from files that failed to write

    pack_qwk() never checked whether its writes to MESSAGES.DAT, HEADERS.DAT, VOTING.DAT or the .NDX files succeeded, and ignored every fclose() result.
    When the temp directory's volume stopped accepting writes, the buffered data (even MESSAGES.DAT's 128-byte header) was lost at close, the empty files were archived, and the packet was reported as a success. QWK hubs received 292-byte packets containing 0-byte MESSAGES.DAT/HEADERS.DAT, failed to unpack them and renamed them *.bad. Because the pack "succeeded", the hubs' message pointers were also advanced, so the messages meant for those packets were never sent.

    Now each of those files is closed through a check of ferror() and fclose(),
    and MESSAGES.DAT must be at least one QWK block long before it is archived.
    Any failure is logged via errormsg() and no packet is created, which also leaves the message pointers alone so the messages go out in the next packet.

    Fixes #1244

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

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