std: refactor posixOpen to be friendlier to error return traces

This commit is contained in:
Andrew Kelley 2018-02-11 05:26:51 -05:00
parent 46aa416c48
commit e743b30bbf

View File

@ -285,27 +285,27 @@ pub fn posixOpenC(file_path: &const u8, flags: u32, perm: usize) !i32 {
const result = posix.open(file_path, flags, perm); const result = posix.open(file_path, flags, perm);
const err = posix.getErrno(result); const err = posix.getErrno(result);
if (err > 0) { if (err > 0) {
return switch (err) { switch (err) {
posix.EINTR => continue, posix.EINTR => continue,
posix.EFAULT => unreachable, posix.EFAULT => unreachable,
posix.EINVAL => unreachable, posix.EINVAL => unreachable,
posix.EACCES => PosixOpenError.AccessDenied, posix.EACCES => return PosixOpenError.AccessDenied,
posix.EFBIG, posix.EOVERFLOW => PosixOpenError.FileTooBig, posix.EFBIG, posix.EOVERFLOW => return PosixOpenError.FileTooBig,
posix.EISDIR => PosixOpenError.IsDir, posix.EISDIR => return PosixOpenError.IsDir,
posix.ELOOP => PosixOpenError.SymLinkLoop, posix.ELOOP => return PosixOpenError.SymLinkLoop,
posix.EMFILE => PosixOpenError.ProcessFdQuotaExceeded, posix.EMFILE => return PosixOpenError.ProcessFdQuotaExceeded,
posix.ENAMETOOLONG => PosixOpenError.NameTooLong, posix.ENAMETOOLONG => return PosixOpenError.NameTooLong,
posix.ENFILE => PosixOpenError.SystemFdQuotaExceeded, posix.ENFILE => return PosixOpenError.SystemFdQuotaExceeded,
posix.ENODEV => PosixOpenError.NoDevice, posix.ENODEV => return PosixOpenError.NoDevice,
posix.ENOENT => PosixOpenError.PathNotFound, posix.ENOENT => return PosixOpenError.PathNotFound,
posix.ENOMEM => PosixOpenError.SystemResources, posix.ENOMEM => return PosixOpenError.SystemResources,
posix.ENOSPC => PosixOpenError.NoSpaceLeft, posix.ENOSPC => return PosixOpenError.NoSpaceLeft,
posix.ENOTDIR => PosixOpenError.NotDir, posix.ENOTDIR => return PosixOpenError.NotDir,
posix.EPERM => PosixOpenError.AccessDenied, posix.EPERM => return PosixOpenError.AccessDenied,
posix.EEXIST => PosixOpenError.PathAlreadyExists, posix.EEXIST => return PosixOpenError.PathAlreadyExists,
else => unexpectedErrorPosix(err), else => return unexpectedErrorPosix(err),
}; }
} }
return i32(result); return i32(result);
} }