mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
std: fix error.Unexpected on certain Windows file operations
Closes #23690.
This commit is contained in:
parent
10bf6964ed
commit
32bf1fbf46
1 changed files with 14 additions and 1 deletions
|
|
@ -605,6 +605,7 @@ pub const ReadFileError = error{
|
||||||
/// Known to be possible when:
|
/// Known to be possible when:
|
||||||
/// - Unable to read from disconnected virtual com port (Windows)
|
/// - Unable to read from disconnected virtual com port (Windows)
|
||||||
AccessDenied,
|
AccessDenied,
|
||||||
|
NotOpenForReading,
|
||||||
Unexpected,
|
Unexpected,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -638,6 +639,7 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64) ReadFileError!usiz
|
||||||
.NETNAME_DELETED => return error.ConnectionResetByPeer,
|
.NETNAME_DELETED => return error.ConnectionResetByPeer,
|
||||||
.LOCK_VIOLATION => return error.LockViolation,
|
.LOCK_VIOLATION => return error.LockViolation,
|
||||||
.ACCESS_DENIED => return error.AccessDenied,
|
.ACCESS_DENIED => return error.AccessDenied,
|
||||||
|
.INVALID_HANDLE => return error.NotOpenForReading,
|
||||||
else => |err| return unexpectedError(err),
|
else => |err| return unexpectedError(err),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1152,7 +1154,10 @@ pub fn GetStdHandle(handle_id: DWORD) GetStdHandleError!HANDLE {
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const SetFilePointerError = error{Unexpected};
|
pub const SetFilePointerError = error{
|
||||||
|
Unseekable,
|
||||||
|
Unexpected,
|
||||||
|
};
|
||||||
|
|
||||||
/// The SetFilePointerEx function with the `dwMoveMethod` parameter set to `FILE_BEGIN`.
|
/// The SetFilePointerEx function with the `dwMoveMethod` parameter set to `FILE_BEGIN`.
|
||||||
pub fn SetFilePointerEx_BEGIN(handle: HANDLE, offset: u64) SetFilePointerError!void {
|
pub fn SetFilePointerEx_BEGIN(handle: HANDLE, offset: u64) SetFilePointerError!void {
|
||||||
|
|
@ -1162,6 +1167,8 @@ pub fn SetFilePointerEx_BEGIN(handle: HANDLE, offset: u64) SetFilePointerError!v
|
||||||
const ipos = @as(LARGE_INTEGER, @bitCast(offset));
|
const ipos = @as(LARGE_INTEGER, @bitCast(offset));
|
||||||
if (kernel32.SetFilePointerEx(handle, ipos, null, FILE_BEGIN) == 0) {
|
if (kernel32.SetFilePointerEx(handle, ipos, null, FILE_BEGIN) == 0) {
|
||||||
switch (GetLastError()) {
|
switch (GetLastError()) {
|
||||||
|
.INVALID_FUNCTION => return error.Unseekable,
|
||||||
|
.NEGATIVE_SEEK => return error.Unseekable,
|
||||||
.INVALID_PARAMETER => unreachable,
|
.INVALID_PARAMETER => unreachable,
|
||||||
.INVALID_HANDLE => unreachable,
|
.INVALID_HANDLE => unreachable,
|
||||||
else => |err| return unexpectedError(err),
|
else => |err| return unexpectedError(err),
|
||||||
|
|
@ -1173,6 +1180,8 @@ pub fn SetFilePointerEx_BEGIN(handle: HANDLE, offset: u64) SetFilePointerError!v
|
||||||
pub fn SetFilePointerEx_CURRENT(handle: HANDLE, offset: i64) SetFilePointerError!void {
|
pub fn SetFilePointerEx_CURRENT(handle: HANDLE, offset: i64) SetFilePointerError!void {
|
||||||
if (kernel32.SetFilePointerEx(handle, offset, null, FILE_CURRENT) == 0) {
|
if (kernel32.SetFilePointerEx(handle, offset, null, FILE_CURRENT) == 0) {
|
||||||
switch (GetLastError()) {
|
switch (GetLastError()) {
|
||||||
|
.INVALID_FUNCTION => return error.Unseekable,
|
||||||
|
.NEGATIVE_SEEK => return error.Unseekable,
|
||||||
.INVALID_PARAMETER => unreachable,
|
.INVALID_PARAMETER => unreachable,
|
||||||
.INVALID_HANDLE => unreachable,
|
.INVALID_HANDLE => unreachable,
|
||||||
else => |err| return unexpectedError(err),
|
else => |err| return unexpectedError(err),
|
||||||
|
|
@ -1184,6 +1193,8 @@ pub fn SetFilePointerEx_CURRENT(handle: HANDLE, offset: i64) SetFilePointerError
|
||||||
pub fn SetFilePointerEx_END(handle: HANDLE, offset: i64) SetFilePointerError!void {
|
pub fn SetFilePointerEx_END(handle: HANDLE, offset: i64) SetFilePointerError!void {
|
||||||
if (kernel32.SetFilePointerEx(handle, offset, null, FILE_END) == 0) {
|
if (kernel32.SetFilePointerEx(handle, offset, null, FILE_END) == 0) {
|
||||||
switch (GetLastError()) {
|
switch (GetLastError()) {
|
||||||
|
.INVALID_FUNCTION => return error.Unseekable,
|
||||||
|
.NEGATIVE_SEEK => return error.Unseekable,
|
||||||
.INVALID_PARAMETER => unreachable,
|
.INVALID_PARAMETER => unreachable,
|
||||||
.INVALID_HANDLE => unreachable,
|
.INVALID_HANDLE => unreachable,
|
||||||
else => |err| return unexpectedError(err),
|
else => |err| return unexpectedError(err),
|
||||||
|
|
@ -1196,6 +1207,8 @@ pub fn SetFilePointerEx_CURRENT_get(handle: HANDLE) SetFilePointerError!u64 {
|
||||||
var result: LARGE_INTEGER = undefined;
|
var result: LARGE_INTEGER = undefined;
|
||||||
if (kernel32.SetFilePointerEx(handle, 0, &result, FILE_CURRENT) == 0) {
|
if (kernel32.SetFilePointerEx(handle, 0, &result, FILE_CURRENT) == 0) {
|
||||||
switch (GetLastError()) {
|
switch (GetLastError()) {
|
||||||
|
.INVALID_FUNCTION => return error.Unseekable,
|
||||||
|
.NEGATIVE_SEEK => return error.Unseekable,
|
||||||
.INVALID_PARAMETER => unreachable,
|
.INVALID_PARAMETER => unreachable,
|
||||||
.INVALID_HANDLE => unreachable,
|
.INVALID_HANDLE => unreachable,
|
||||||
else => |err| return unexpectedError(err),
|
else => |err| return unexpectedError(err),
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue