commit 6e636064e6d993ebb0eb6ef386f5f19cb8727fe3 (tree)
parent ae3fd86dcc6f39601aa26ce1a6dc51a0db5cbf30
Author: Andrew Kelley <andrew@ziglang.org>
Date: Wed, 9 Dec 2020 15:03:17 -0700
MoveFileEx can return ACCESS_DENIED
I observed this on Windows 10, trying to use MoveFileEx with
MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH
to overwrite a running executable.
Diffstat:
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig
@@ -865,7 +865,7 @@ pub fn DeleteFile(sub_path_w: []const u16, options: DeleteFileOptions) DeleteFil
}
}
-pub const MoveFileError = error{ FileNotFound, Unexpected };
+pub const MoveFileError = error{ FileNotFound, AccessDenied, Unexpected };
pub fn MoveFileEx(old_path: []const u8, new_path: []const u8, flags: DWORD) MoveFileError!void {
const old_path_w = try sliceToPrefixedFileW(old_path);
@@ -877,6 +877,7 @@ pub fn MoveFileExW(old_path: [*:0]const u16, new_path: [*:0]const u16, flags: DW
if (kernel32.MoveFileExW(old_path, new_path, flags) == 0) {
switch (kernel32.GetLastError()) {
.FILE_NOT_FOUND => return error.FileNotFound,
+ .ACCESS_DENIED => return error.AccessDenied,
else => |err| return unexpectedError(err),
}
}