BBS: TELESC.NET.BR Assunto: src/sbbs3/scfglib1.c De: Rob Swindell (on Windows 11) Data: Sat, 2 May 2026 16:42:49 -0700 ----------------------------------------------------------- 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 todirs (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) n --- mSynchronetn hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net ----------------------------------------------------------- [Voltar]