fix: align windows safe-open file identity checks

This commit is contained in:
Peter Steinberger
2026-02-25 00:32:30 +00:00
parent 7455ceecf8
commit 943b8f171a
5 changed files with 64 additions and 25 deletions

View File

@@ -0,0 +1,25 @@
export type FileIdentityStat = {
dev: number | bigint;
ino: number | bigint;
};
function isZero(value: number | bigint): boolean {
return value === 0 || value === 0n;
}
export function sameFileIdentity(
left: FileIdentityStat,
right: FileIdentityStat,
platform: NodeJS.Platform = process.platform,
): boolean {
if (left.ino !== right.ino) {
return false;
}
// On Windows, path-based stat calls can report dev=0 while fd-based stat
// reports a real volume serial; treat either-side dev=0 as "unknown device".
if (left.dev === right.dev) {
return true;
}
return platform === "win32" && (isZero(left.dev) || isZero(right.dev));
}