From 034ccb4e4e64dda2626535d46a4bc0367bcc1ad2 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 30 Nov 2019 16:58:32 -0500 Subject: [PATCH] add missing error code handling on Windows --- lib/std/fs.zig | 1 + lib/std/fs/file.zig | 1 + lib/std/io/test.zig | 2 +- lib/std/os.zig | 7 ++++++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/std/fs.zig b/lib/std/fs.zig index 0f8da873a6..89a045a652 100644 --- a/lib/std/fs.zig +++ b/lib/std/fs.zig @@ -841,6 +841,7 @@ pub const Dir = struct { w.STATUS.ACCESS_DENIED => return error.AccessDenied, w.STATUS.PIPE_BUSY => return error.PipeBusy, w.STATUS.OBJECT_PATH_SYNTAX_BAD => unreachable, + w.STATUS.OBJECT_NAME_COLLISION => return error.PathAlreadyExists, else => return w.unexpectedStatus(rc), } } diff --git a/lib/std/fs/file.zig b/lib/std/fs/file.zig index 7a12c7b937..540f7d395e 100644 --- a/lib/std/fs/file.zig +++ b/lib/std/fs/file.zig @@ -228,6 +228,7 @@ pub const File = struct { windows.STATUS.SUCCESS => {}, windows.STATUS.BUFFER_OVERFLOW => {}, windows.STATUS.INVALID_PARAMETER => unreachable, + windows.STATUS.ACCESS_DENIED => return error.AccessDenied, else => return windows.unexpectedStatus(rc), } return Stat{ diff --git a/lib/std/io/test.zig b/lib/std/io/test.zig index 2857252bb5..912a871863 100644 --- a/lib/std/io/test.zig +++ b/lib/std/io/test.zig @@ -634,7 +634,7 @@ test "File seek ops" { test "updateTimes" { const tmp_file_name = "just_a_temporary_file.txt"; - var file = try fs.cwd().createFile(tmp_file_name, .{}); + var file = try fs.cwd().createFile(tmp_file_name, .{ .read = true }); defer { file.close(); std.fs.cwd().deleteFile(tmp_file_name) catch {}; diff --git a/lib/std/os.zig b/lib/std/os.zig index 6572d37305..622aaaf3bd 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -2028,7 +2028,10 @@ pub fn waitpid(pid: i32, flags: u32) u32 { } } -pub const FStatError = error{SystemResources} || UnexpectedError; +pub const FStatError = error{ + SystemResources, + AccessDenied, +} || UnexpectedError; pub fn fstat(fd: fd_t) FStatError!Stat { var stat: Stat = undefined; @@ -2038,6 +2041,7 @@ pub fn fstat(fd: fd_t) FStatError!Stat { EINVAL => unreachable, EBADF => unreachable, // Always a race condition. ENOMEM => return error.SystemResources, + EACCES => return error.AccessDenied, else => |err| return unexpectedErrno(err), } } @@ -2047,6 +2051,7 @@ pub fn fstat(fd: fd_t) FStatError!Stat { EINVAL => unreachable, EBADF => unreachable, // Always a race condition. ENOMEM => return error.SystemResources, + EACCES => return error.AccessDenied, else => |err| return unexpectedErrno(err), } }