BBS:      TELESC.NET.BR
Assunto:  src/doors/clans-src/src/video.c win_wrappers.c
De:       Deuc¨
Data:     Sat, 18 Apr 2026 01:02:09 -0700
-----------------------------------------------------------
https://gitlab.synchro.net/main/sbbs/-/commit/2f3f9d4d3693602292fa92f5
Modified Files:
	src/doors/clans-src/src/video.c win_wrappers.c
Log Message:
More Win32 cleanups

video.c:
- ClearScrollRegion: anchor to srWindow.Top and use window height;
  dwSize.Y was the whole buffer, so the old formula overcleared into
  scrollback whenever the console buffer exceeded the visible window
  (default conhost has ~300-row buffer, 25-row window).
- ScrollUp: same srWindow.Top anchoring; check
  GetConsoleScreenBufferInfo return; guard 1-row scroll regions that
  would otherwise build an inverted SMALL_RECT.
- Video_Init: treat both INVALID_HANDLE_VALUE and NULL as handle
  failure; check GetConsoleScreenBufferInfo return; pin output CP to
  437 so CP437 box-drawing renders correctly on non-US locales and
  systems with "Use UTF-8 worldwide" enabled.
- exit(0) -> exit(1) on error paths.

win_wrappers.c:
- display_win32_error: initialize message pointer, check
  FormatMessage return, use _sntprintf, explicit NUL terminator,
  skip LocalFree on NULL.
- DirExists: switch to GetFileAttributesA; handles "C:\\" and other
  drive roots that the old stat + trailing-slash-strip mishandled.
- FilesOrderedByDate: replace _findfirst/_findnext with
  FindFirstFileA/FindNextFileA.  _findnext's errno behavior on
  end-of-iteration is CRT-dependent; Win32 GetLastError() ==
  ERROR_NO_MORE_FILES is deterministic.  struct Sortable.wt widened
  to uint64_t (FILETIME 100-ns ticks).
- plat_getftime: floor seconds instead of rounding up (tm_sec=59
  produced an out-of-range 30 that read back as invalid 60s).
- plat_fsopen: add bounded retry on EACCES to approximate Unix
  F_SETLKW behavior -- _fsopen fails fast on sharing violation
  while fcntl(F_SETLKW) blocks, so transient contention (packet
  writes, log rotation) no longer surfaces as spurious open
  failures.  Capped at 20 * 50ms = 1s before giving up.

Co-Authored-By: Claude Opus 4.7 (1M context) 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]