Subj : docs/v322_new.md src/sbbs3/smbutil.c To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Tue Sep 15 2026 20:47:46 https://gitlab.synchro.net/main/sbbs/-/commit/aee485f478d18bf1aa97cb59 Modified Files: docs/v322_new.md src/sbbs3/smbutil.c Log Message: smbutil: make pack error-safe packmsgs() renames the live .shd/.sdt/.sid aside before building their replacements, and three failure paths afterwards took a bare return with no message at all. A single unreadable message therefore left the base with no .shd, which a message server then treats as a base to create from scratch. Log those failures with the offending message number, skip a message whose data cannot be read rather than abandoning the pack, and restore the originals on any failure after the rename. The allocation tables are moved aside rather than truncated in place so that rollback is complete: against an emptied .sda, the next message written would land on top of live data. The replacements are flushed and checked before the swap, so a full disk no longer installs a truncated base, and the swap is now the last thing done rather than interleaved with the removals. Also stop discarding messages whose data exceeds 16MB. That limit was arbitrary and dropped the message from the base rather than leaving it uncompacted; the bound is now the format's own SMB_MAX_DAT_LEN. issue #1171 Co-Authored-By: Claude Opus 5 (1M context) --- SBBSecho 3.37-Linux * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705) .