@@ -605,6 +605,7 @@ pub const ReadFileError = error{
605605 /// Known to be possible when:
606606 /// - Unable to read from disconnected virtual com port (Windows)
607607 AccessDenied ,
608+ NotOpenForReading ,
608609 Unexpected ,
609610};
610611
@@ -638,6 +639,7 @@ pub fn ReadFile(in_hFile: HANDLE, buffer: []u8, offset: ?u64) ReadFileError!usiz
638639 .NETNAME_DELETED = > return error .ConnectionResetByPeer ,
639640 .LOCK_VIOLATION = > return error .LockViolation ,
640641 .ACCESS_DENIED = > return error .AccessDenied ,
642+ .INVALID_HANDLE = > return error .NotOpenForReading ,
641643 else = > | err | return unexpectedError (err ),
642644 }
643645 }
@@ -1152,7 +1154,10 @@ pub fn GetStdHandle(handle_id: DWORD) GetStdHandleError!HANDLE {
11521154 return handle ;
11531155}
11541156
1155- pub const SetFilePointerError = error {Unexpected };
1157+ pub const SetFilePointerError = error {
1158+ Unseekable ,
1159+ Unexpected ,
1160+ };
11561161
11571162/// The SetFilePointerEx function with the `dwMoveMethod` parameter set to `FILE_BEGIN`.
11581163pub fn SetFilePointerEx_BEGIN (handle : HANDLE , offset : u64 ) SetFilePointerError ! void {
@@ -1162,6 +1167,8 @@ pub fn SetFilePointerEx_BEGIN(handle: HANDLE, offset: u64) SetFilePointerError!v
11621167 const ipos = @as (LARGE_INTEGER , @bitCast (offset ));
11631168 if (kernel32 .SetFilePointerEx (handle , ipos , null , FILE_BEGIN ) == 0 ) {
11641169 switch (GetLastError ()) {
1170+ .INVALID_FUNCTION = > return error .Unseekable ,
1171+ .NEGATIVE_SEEK = > return error .Unseekable ,
11651172 .INVALID_PARAMETER = > unreachable ,
11661173 .INVALID_HANDLE = > unreachable ,
11671174 else = > | err | return unexpectedError (err ),
@@ -1173,6 +1180,8 @@ pub fn SetFilePointerEx_BEGIN(handle: HANDLE, offset: u64) SetFilePointerError!v
11731180pub fn SetFilePointerEx_CURRENT (handle : HANDLE , offset : i64 ) SetFilePointerError ! void {
11741181 if (kernel32 .SetFilePointerEx (handle , offset , null , FILE_CURRENT ) == 0 ) {
11751182 switch (GetLastError ()) {
1183+ .INVALID_FUNCTION = > return error .Unseekable ,
1184+ .NEGATIVE_SEEK = > return error .Unseekable ,
11761185 .INVALID_PARAMETER = > unreachable ,
11771186 .INVALID_HANDLE = > unreachable ,
11781187 else = > | err | return unexpectedError (err ),
@@ -1184,6 +1193,8 @@ pub fn SetFilePointerEx_CURRENT(handle: HANDLE, offset: i64) SetFilePointerError
11841193pub fn SetFilePointerEx_END (handle : HANDLE , offset : i64 ) SetFilePointerError ! void {
11851194 if (kernel32 .SetFilePointerEx (handle , offset , null , FILE_END ) == 0 ) {
11861195 switch (GetLastError ()) {
1196+ .INVALID_FUNCTION = > return error .Unseekable ,
1197+ .NEGATIVE_SEEK = > return error .Unseekable ,
11871198 .INVALID_PARAMETER = > unreachable ,
11881199 .INVALID_HANDLE = > unreachable ,
11891200 else = > | err | return unexpectedError (err ),
@@ -1196,6 +1207,8 @@ pub fn SetFilePointerEx_CURRENT_get(handle: HANDLE) SetFilePointerError!u64 {
11961207 var result : LARGE_INTEGER = undefined ;
11971208 if (kernel32 .SetFilePointerEx (handle , 0 , & result , FILE_CURRENT ) == 0 ) {
11981209 switch (GetLastError ()) {
1210+ .INVALID_FUNCTION = > return error .Unseekable ,
1211+ .NEGATIVE_SEEK = > return error .Unseekable ,
11991212 .INVALID_PARAMETER = > unreachable ,
12001213 .INVALID_HANDLE = > unreachable ,
12011214 else = > | err | return unexpectedError (err ),
0 commit comments