mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-26 04:47:35 +00:00
fix(serial): контракт SerValid — платформенный, ноль значит разное
Ноль на Unix и на Windows означает не одно и то же, и одной проверкой тут не обойтись. На Unix это законный дескриптор (при закрытом стандартном вводе fpOpen отдаёт именно его), а ядро Windows нулевой хендл не выдаёт никогда — там ноль это либо отказ RTL, либо неинициализированное поле. Внутренний путь был безопасен и раньше (SerOpen переводит ноль RTL в SER_INVALID_HANDLE, свои поля инициализируются им же), но публичный контракт для значения, пришедшего извне, оказывался неверным. Теперь проверка разведена по платформам. ★Стенд научился ПРОГОНЯТЬ windows-ветку, а не только компилировать её. Заглушка модуля Serial — чистый Паскаль, поэтому ветку можно собрать и запустить прямо на Linux: test/platform/win_probe проверяет перевод нулевого хендла в SER_INVALID_HANDLE, ответ SerValid и правило имени COM10+. До сих пор у windows-пути обёртки не было никакого поведенческого покрытия вовсе. Негативный контроль: если убрать windows-ветку из SerValid, прогон падает на «★нулевой хендл под Windows негоден». Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bkwwyj7xVRrqnSVEseTRfV
This commit is contained in:
@@ -62,6 +62,22 @@ sim_build() { # $1 = win|mac
|
||||
sim_build win
|
||||
sim_build mac
|
||||
|
||||
# ── Прогон WINDOWS-ветки, а не только её компиляция ──────────────────────────
|
||||
# ★Заглушка модуля Serial — чистый Паскаль, поэтому ветку можно не только
|
||||
# собрать, но и ЗАПУСТИТЬ: проверяются перевод нулевого хендла RTL в
|
||||
# SER_INVALID_HANDLE, ответ SerValid (под Windows ноль негоден — в отличие от
|
||||
# Unix) и правило имени COM10+.
|
||||
cp win_probe/winprobe.pas "$WORK/win/"
|
||||
COUNT=$((COUNT + 1))
|
||||
if ( cd "$WORK/win" && fpc -B -Mobjfpc -dHEADLESS -dSIMWIN -Fu. -FU. \
|
||||
-o./winprobe winprobe.pas >"$WORK/win/probe.log" 2>&1 && ./winprobe ); then
|
||||
echo " ok SerialPort.pas: ветка win ведёт себя как надо (прогон на заглушке)"
|
||||
else
|
||||
echo " FAIL SerialPort.pas: прогон windows-ветки провалился"
|
||||
cat "$WORK/win/probe.log"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Итого: $COUNT проверок, провалено $FAILED"
|
||||
[ "$FAILED" -eq 0 ]
|
||||
|
||||
Reference in New Issue
Block a user