diff --git a/packages/session-persistence/session-persistence-jsonl/src/win32.ts b/packages/session-persistence/session-persistence-jsonl/src/win32.ts index 143f230ea3..a8c1b6fb8d 100644 --- a/packages/session-persistence/session-persistence-jsonl/src/win32.ts +++ b/packages/session-persistence/session-persistence-jsonl/src/win32.ts @@ -14,7 +14,7 @@ import { mkdtemp, rm, stat } from 'node:fs/promises' import { basename, join, parse, resolve, toNamespacedPath } from 'node:path' -type MoveFileExW = (existing: string, replacement: string, flags: number) => boolean +type MoveFileExW = (existing: string, replacement: string, flags: number) => number type GetLastError = () => number interface Win32Bindings { @@ -44,7 +44,7 @@ async function win32(): Promise { const koffi = (await import('koffi')).default const kernel32 = koffi.load('kernel32.dll') bindings = { - moveFileExW: kernel32.func('__stdcall', 'MoveFileExW', 'bool', ['str16', 'str16', 'uint']) as MoveFileExW, + moveFileExW: kernel32.func('__stdcall', 'MoveFileExW', 'int', ['str16', 'str16', 'uint']) as MoveFileExW, getLastError: kernel32.func('__stdcall', 'GetLastError', 'uint', []) as GetLastError, } return bindings @@ -113,7 +113,7 @@ async function assertDirectory(path: string): Promise { export async function publishNewFileWin32(existing: string, replacement: string): Promise { const api = await win32() const ok = api.moveFileExW(toNamespacedPath(existing), toNamespacedPath(replacement), MOVEFILE_WRITE_THROUGH) - if (!ok) throw win32Error('MoveFileExW', api.getLastError(), existing, replacement) + if (ok === 0) throw win32Error('MoveFileExW', api.getLastError(), existing, replacement) } /** diff --git a/packages/session-persistence/session-persistence-jsonl/tests/win32.spec.ts b/packages/session-persistence/session-persistence-jsonl/tests/win32.spec.ts index 760eb3d455..b4a2d11f28 100644 --- a/packages/session-persistence/session-persistence-jsonl/tests/win32.spec.ts +++ b/packages/session-persistence/session-persistence-jsonl/tests/win32.spec.ts @@ -19,7 +19,7 @@ const ERROR_FILE_EXISTS = 80 const ERROR_INVALID_NAME = 123 const ERROR_ALREADY_EXISTS = 183 -type MoveFileExW = (existing: string, replacement: string, flags: number, setLastError: (code: number) => void) => boolean +type MoveFileExW = (existing: string, replacement: string, flags: number, setLastError: (code: number) => void) => number const roots: string[] = [] @@ -42,14 +42,15 @@ async function importWithMove(moveFileExW: MoveFileExW): Promise { lastError = code } const move: MoveFileExW = (existing, replacement, flags, setError) => { const ok = moveFileExW(existing, replacement, flags, setError) - lastError = ok ? 0 : lastError + lastError = ok === 0 ? lastError : 0 return ok } return { default: { load: () => ({ - func: (_convention: string, name: string) => { + func: (_convention: string, name: string, result: string) => { if (name === 'MoveFileExW') return (existing: string, replacement: string, flags: number) => { + expect(result).toBe('int') const ok = move(existing, replacement, flags, setLastError) return ok } @@ -68,7 +69,7 @@ async function importWithError(code: number): Promise ({ func: (_convention: string, name: string) => { - if (name === 'MoveFileExW') return () => false + if (name === 'MoveFileExW') return () => 0 return () => code }, }), @@ -82,10 +83,10 @@ async function importWithFilesystemMove(): Promise { if (to === raced) { mkdirSync(to) setLastError(ERROR_ALREADY_EXISTS) - return false + return 0 } - if (!existsSync(from)) { setLastError(ERROR_FILE_NOT_FOUND); return false } - if (existsSync(to)) { setLastError(ERROR_ALREADY_EXISTS); return false } + if (!existsSync(from)) { setLastError(ERROR_FILE_NOT_FOUND); return 0 } + if (existsSync(to)) { setLastError(ERROR_ALREADY_EXISTS); return 0 } renameSync(from, to) - return true + return 1 }) await ensureDurableDirectoryWin32(join(root, 'a', 'b'))