the session readers use getline(3), which a Windows CRT does not have

Building the Windows TUI by hand -- the first local build since the CI file
went away -- stopped in src/tools/session_tools.c: `getline` was an implicit
declaration there, which this GCC treats as an error. src/session.c had a
private fgetc() shim for exactly that; the session-list scan is newer and used
the POSIX call directly, and only the Windows build notices.

The shim moves to os_compat as os_getline(): getline(3) itself on Unix, the
fgetc() loop on Windows, one prototype in the header so a caller reads the same
everywhere. src/session.c drops its copy and calls it; the scan does too (its
`ssize_t` becomes `long long`, which Windows has).

make check is green on Linux, the Windows cross build now finishes and
packages (dist/cst-agent-0.9.7-windows-x86_64.zip plus the NSIS setup), and the
static Linux tarball was rebuilt with it.
This commit is contained in:
WHC
2026-10-11 21:54:32 +08:00
parent b7034baec4
commit 60047ca5ce
4 changed files with 49 additions and 36 deletions
+2 -2
View File
@@ -121,8 +121,8 @@ int cst_tool_session_search(const cst_tool_ctx_t *ctx, const ctl_tool_call_t *c,
char *line = NULL;
size_t cap = 0;
cst_buf_t one = {0};
ssize_t got;
while ((got = getline(&line, &cap, fp)) > 0) {
long long got;
while ((got = os_getline(&line, &cap, fp)) > 0) {
lineno++;
scanned_bytes += got;
/* A tool output line can be megabytes (a whole file read back): such a