https://gitlab.synchro.net/main/sbbs/-/commit/7384ba6569de8ffbf0720f2d
Modified Files:
src/xpdev/filewrap.c
Log Message:
Close descriptors with closefrom() rather than close_range()
closefrom() exists on the BSDs, Solaris and glibc 2.34 and later, where close_range() is a Linux syscall this code was reaching for directly. On
glibc, closefrom() is implemented in terms of close_range() anyway, so
calling it gets the better mechanism where there is one and a working
fallback where there isn't, without this file having to know which.
Keeping one descriptor no longer needs a range API at all: close everything above it in a single call, and walk the few below it. That loop is bounded by the kept descriptor rather than by the process descriptor limit, which can be very large. Platforms with neither call (macOS) still consult sysconf(_SC_OPEN_MAX).
Also spell the first descriptor to close as STDERR_FILENO + 1 rather than 3.
Suggested by Deuce.
Co-Authored-By: Claude Opus 5 (1M context) <
noreply@anthropic.com>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)