authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-11-30 16:58:32-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-11-30 16:58:32-05:00
log034ccb4e4e64dda2626535d46a4bc0367bcc1ad2
tree494d551fc7864bbf9f750a24d1f22b593a2ec9db
parent413f9a5cfc9e867e3bc69b47b38c62b52a52d5e9

add missing error code handling on Windows


4 files changed, 9 insertions(+), 2 deletions(-)

lib/std/fs.zig+1
......@@ -841,6 +841,7 @@ pub const Dir = struct {
841841 w.STATUS.ACCESS_DENIED => return error.AccessDenied,
842842 w.STATUS.PIPE_BUSY => return error.PipeBusy,
843843 w.STATUS.OBJECT_PATH_SYNTAX_BAD => unreachable,
844 w.STATUS.OBJECT_NAME_COLLISION => return error.PathAlreadyExists,
844845 else => return w.unexpectedStatus(rc),
845846 }
846847 }
lib/std/fs/file.zig+1
......@@ -228,6 +228,7 @@ pub const File = struct {
228228 windows.STATUS.SUCCESS => {},
229229 windows.STATUS.BUFFER_OVERFLOW => {},
230230 windows.STATUS.INVALID_PARAMETER => unreachable,
231 windows.STATUS.ACCESS_DENIED => return error.AccessDenied,
231232 else => return windows.unexpectedStatus(rc),
232233 }
233234 return Stat{
lib/std/io/test.zig+1-1
......@@ -634,7 +634,7 @@ test "File seek ops" {
634634
635635test "updateTimes" {
636636 const tmp_file_name = "just_a_temporary_file.txt";
637 var file = try fs.cwd().createFile(tmp_file_name, .{});
637 var file = try fs.cwd().createFile(tmp_file_name, .{ .read = true });
638638 defer {
639639 file.close();
640640 std.fs.cwd().deleteFile(tmp_file_name) catch {};
lib/std/os.zig+6-1
......@@ -2028,7 +2028,10 @@ pub fn waitpid(pid: i32, flags: u32) u32 {
20282028 }
20292029}
20302030
2031pub const FStatError = error{SystemResources} || UnexpectedError;
2031pub const FStatError = error{
2032 SystemResources,
2033 AccessDenied,
2034} || UnexpectedError;
20322035
20332036pub fn fstat(fd: fd_t) FStatError!Stat {
20342037 var stat: Stat = undefined;
......@@ -2038,6 +2041,7 @@ pub fn fstat(fd: fd_t) FStatError!Stat {
20382041 EINVAL => unreachable,
20392042 EBADF => unreachable, // Always a race condition.
20402043 ENOMEM => return error.SystemResources,
2044 EACCES => return error.AccessDenied,
20412045 else => |err| return unexpectedErrno(err),
20422046 }
20432047 }
......@@ -2047,6 +2051,7 @@ pub fn fstat(fd: fd_t) FStatError!Stat {
20472051 EINVAL => unreachable,
20482052 EBADF => unreachable, // Always a race condition.
20492053 ENOMEM => return error.SystemResources,
2054 EACCES => return error.AccessDenied,
20502055 else => |err| return unexpectedErrno(err),
20512056 }
20522057}