https://gitlab.synchro.net/main/sbbs/-/commit/cbcb74574ca2a92b1e99def4
Modified Files:
src/sbbs3/scfglib1.c
Log Message:
sbbs3 make_data_dirs(): faster startup directory verification
On systems with many file directories (Vertrauen has thousands), the "Verifying/creating data directories" startup phase took ~8 seconds
because each entry triggered serial stat()/mkdir() syscalls.
Three changes drop that to ~2 seconds (4x speedup):
1. Dedup. Most cfg->dir[i]->data_dir values default to <data_dir>dirs
(load_cfg.c:308), which make_data_dirs() already creates near the
top of the function. Seed a str_list with that path and skip
md_fast() in the per-dir loop when the value matches. The seed is
only pushed on successful creation Ä failure causes the loop to
retry per entry rather than skip silently.
2. mkdir-first via a new file-static md_fast(). md() does
isdir()+stat() before mkpath, which on Windows fetches file
attributes and trips Defender's "file opened" introspection.
md_fast() issues a single MKDIR() and trusts EEXIST without
re-stat'ing, falling back to md() only when the parent component
is missing or an unexpected errno surfaces. The tradeoff is that
a non-directory file at one of these paths won't be diagnosed at
startup; the BBS reports it later when something tries to open
files inside it. Public md() is unchanged so other callers keep
their stricter contract.
3. trim_trailing_slash() helper shared between md_fast() and the
loop's cache-key computation, so the canonicalization lives in
one place.
Co-Authored-By: Claude Opus 4.7 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net