https://gitlab.synchro.net/main/sbbs/-/commit/f193bd5695d05dcd9186ad10
Added Files:
src/sftp/sftp.c sftp_common.c
Modified Files:
src/sftp/objects.mk sftp.h sftp_attr.c sftp_client.c sftp_pkt.c sftp_server.c sftp_str.c
Removed Files:
src/sftp/sftp_static.h
Log Message:
sftp: single-TU build + request-id dispatch + extension negotiation
Rebuild the SFTP library as one translation unit (sftp.c #includes the
five source files) so the compiler sees every internal function. Drop
the cross-TU shim pattern that was in sftp_static.h — its wrappers
were only there to share state-oriented helpers between client.c and
server.c across TU boundaries, which is moot now. The file is
renamed to sftp_common.c and reduced to genuinely shared pieces
(extension table, appendheader). Non-public functions lose their
sftp_*_ prefix and become static. Public API in sftp.h is unchanged
from the consumer's POV; only 60 T-symbols remain in libsftp_mt.a,
all legitimately public.
Client gets a request-id demux (struct sftpc_pending per in-flight op
on the caller's stack; sftpc_recv dispatches completed packets to the
matching waiter's event) plus new ops: stat / lstat / fstat /
opendir / readdir / mkdir / rmdir / remove / rename / setstat /
fsetstat. Per-thread last-error via pthread_key_t so concurrent
callers don't clobber each other's status.
INIT/VERSION now negotiate extensions: both sides advertise (name,
version) pairs; an extension is enabled only when name AND version
match. Initial extensions:
[email protected] and
[email protected],
both at version "1".
sftps_state_t now splits into a public outer struct (callbacks,
version, extensions) and an opaque priv struct (rxp/txp/mtx/running/ id/terminating) living inside the TU so consumers can't tamper with
internal fields. Packet struct bodies (sftp_tx_pkt, sftp_rx_pkt, sftp_extended_file_attribute) move out of sftp.h for the same reason.
Client ops validate NULL/range args before taking the mutex so a
doomed call never acquires the lock.
Co-Authored-By: Claude Opus 4.7 (1M context) <
[email protected]>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)