Implement file_truncate for Windows and add missing Quakey mocks

file_truncate had a stub `return -1` on Windows, causing all
chunk_store_write calls to fail (every PUT returned TRANSFER_FAILED).
Implement it using SetFilePointer + SetEndOfFile.

Add mock_SetEndOfFile and mock_GetFileAttributesA to Quakey so the
simulation can exercise the Windows code paths against the mock
filesystem. Without these, SetEndOfFile was unmocked (link error) and
GetFileAttributesA called the real Win32 API on mock paths, making
chunk_store_exists always return false.

Verified: seeds 1-100 pass with 2000s simulation time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-25 13:33:18 +01:00
co-authored by Claude Opus 4.6
parent db2ef299bf
commit 6b4f773052
3 changed files with 68 additions and 1 deletions
+6 -1
View File
@@ -86,7 +86,12 @@ int file_truncate(Handle fd, size_t new_size)
#endif
#ifdef _WIN32
return -1; // TODO: Not implemented
DWORD result = SetFilePointer((HANDLE) fd.data, (LONG) new_size, NULL, FILE_BEGIN);
if (result == INVALID_SET_FILE_POINTER)
return -1;
if (!SetEndOfFile((HANDLE) fd.data))
return -1;
return 0;
#endif
}