mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-18 20:40:28 +00:00
Move some of the os&os2 errors into io.Error; Rename Empty to Unsupported
This commit is contained in:
@@ -38,8 +38,11 @@ Error :: enum i32 {
|
||||
// This is usually a sign of a broken `io.Reader` implementation
|
||||
No_Progress,
|
||||
|
||||
// Invalid whence argument
|
||||
Invalid_Whence,
|
||||
// Invalid offset
|
||||
Invalid_Offset,
|
||||
// Invalid "unread" operation
|
||||
Invalid_Unread,
|
||||
|
||||
Negative_Read,
|
||||
@@ -50,8 +53,19 @@ Error :: enum i32 {
|
||||
// Unknown means that an error has occurred but cannot be categorized
|
||||
Unknown,
|
||||
|
||||
// Empty is returned when a procedure has not been implemented for an io.Stream
|
||||
Empty = -1,
|
||||
// Indicates that an attempt to retrieve a Stream's size was made, but the
|
||||
// stream doesn't have a size.
|
||||
No_Size,
|
||||
|
||||
Permission_Denied,
|
||||
|
||||
// Stream cannot be used since it has been Closed
|
||||
Closed,
|
||||
|
||||
// Unsupported is returned when a procedure has not been implemented for an io.Stream
|
||||
Unsupported = -1,
|
||||
|
||||
Empty = Unsupported,
|
||||
}
|
||||
|
||||
Stream_Mode :: enum {
|
||||
@@ -102,7 +116,7 @@ destroy :: proc(s: Stream) -> (err: Error) {
|
||||
if s.procedure != nil {
|
||||
_, err = s.procedure(s.data, .Destroy, nil, 0, nil)
|
||||
} else {
|
||||
err = .Empty
|
||||
err = .Unsupported
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -138,7 +152,7 @@ read :: proc(s: Reader, p: []byte, n_read: ^int = nil) -> (n: int, err: Error) {
|
||||
n = int(n64)
|
||||
if n_read != nil { n_read^ += n }
|
||||
} else {
|
||||
err = .Empty
|
||||
err = .Unsupported
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -151,7 +165,7 @@ write :: proc(s: Writer, p: []byte, n_written: ^int = nil) -> (n: int, err: Erro
|
||||
n = int(n64)
|
||||
if n_written != nil { n_written^ += n }
|
||||
} else {
|
||||
err = .Empty
|
||||
err = .Unsupported
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -167,7 +181,7 @@ seek :: proc(s: Seeker, offset: i64, whence: Seek_From) -> (n: i64, err: Error)
|
||||
if s.procedure != nil {
|
||||
n, err = s.procedure(s.data, .Seek, nil, offset, whence)
|
||||
} else {
|
||||
err = .Empty
|
||||
err = .Unsupported
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -192,7 +206,7 @@ flush :: proc(s: Flusher) -> (err: Error) {
|
||||
size :: proc(s: Stream) -> (n: i64, err: Error) {
|
||||
if s.procedure != nil {
|
||||
n, err = s.procedure(s.data, .Size, nil, 0, nil)
|
||||
if err == .Empty {
|
||||
if err == .Unsupported {
|
||||
n = 0
|
||||
curr := seek(s, 0, .Current) or_return
|
||||
end := seek(s, 0, .End) or_return
|
||||
@@ -200,7 +214,7 @@ size :: proc(s: Stream) -> (n: i64, err: Error) {
|
||||
n = end
|
||||
}
|
||||
} else {
|
||||
err = .Empty
|
||||
err = .Unsupported
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -217,7 +231,7 @@ read_at :: proc(r: Reader_At, p: []byte, offset: i64, n_read: ^int = nil) -> (n:
|
||||
if r.procedure != nil {
|
||||
n64: i64
|
||||
n64, err = r.procedure(r.data, .Read_At, p, offset, nil)
|
||||
if err != .Empty {
|
||||
if err != .Unsupported {
|
||||
n = int(n64)
|
||||
} else {
|
||||
curr := seek(r, offset, .Current) or_return
|
||||
@@ -229,7 +243,7 @@ read_at :: proc(r: Reader_At, p: []byte, offset: i64, n_read: ^int = nil) -> (n:
|
||||
}
|
||||
if n_read != nil { n_read^ += n }
|
||||
} else {
|
||||
err = .Empty
|
||||
err = .Unsupported
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -243,7 +257,7 @@ write_at :: proc(w: Writer_At, p: []byte, offset: i64, n_written: ^int = nil) ->
|
||||
if w.procedure != nil {
|
||||
n64: i64
|
||||
n64, err = w.procedure(w.data, .Write_At, p, offset, nil)
|
||||
if err != .Empty {
|
||||
if err != .Unsupported {
|
||||
n = int(n64)
|
||||
} else {
|
||||
curr := seek(w, offset, .Current) or_return
|
||||
@@ -255,7 +269,7 @@ write_at :: proc(w: Writer_At, p: []byte, offset: i64, n_written: ^int = nil) ->
|
||||
}
|
||||
if n_written != nil { n_written^ += n }
|
||||
} else {
|
||||
err = .Empty
|
||||
err = .Unsupported
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -440,7 +454,7 @@ copy_n :: proc(dst: Writer, src: Reader, n: i64) -> (written: i64, err: Error) {
|
||||
@(private)
|
||||
_copy_buffer :: proc(dst: Writer, src: Reader, buf: []byte) -> (written: i64, err: Error) {
|
||||
if dst.procedure == nil || src.procedure == nil {
|
||||
return 0, .Empty
|
||||
return 0, .Unsupported
|
||||
}
|
||||
buf := buf
|
||||
if buf == nil {
|
||||
|
||||
@@ -11,19 +11,13 @@ Platform_Error :: _Platform_Error
|
||||
General_Error :: enum u32 {
|
||||
None,
|
||||
|
||||
Permission_Denied,
|
||||
Exist,
|
||||
Not_Exist,
|
||||
Closed,
|
||||
|
||||
Timeout,
|
||||
|
||||
Broken_Pipe,
|
||||
|
||||
// Indicates that an attempt to retrieve a file's size was made, but the
|
||||
// file doesn't have a size.
|
||||
No_Size,
|
||||
|
||||
Invalid_File,
|
||||
Invalid_Dir,
|
||||
Invalid_Path,
|
||||
@@ -31,8 +25,6 @@ General_Error :: enum u32 {
|
||||
|
||||
Pattern_Has_Separator,
|
||||
|
||||
Unsupported,
|
||||
|
||||
File_Is_Pipe,
|
||||
Not_Dir,
|
||||
|
||||
@@ -70,18 +62,14 @@ error_string :: proc "contextless" (ferr: Error) -> string {
|
||||
case General_Error:
|
||||
switch e {
|
||||
case .None: return ""
|
||||
case .Permission_Denied: return "permission denied"
|
||||
case .Exist: return "file already exists"
|
||||
case .Not_Exist: return "file does not exist"
|
||||
case .Closed: return "file already closed"
|
||||
case .Timeout: return "i/o timeout"
|
||||
case .Broken_Pipe: return "Broken pipe"
|
||||
case .No_Size: return "file has no definite size"
|
||||
case .Invalid_File: return "invalid file"
|
||||
case .Invalid_Dir: return "invalid directory"
|
||||
case .Invalid_Path: return "invalid path"
|
||||
case .Invalid_Callback: return "invalid callback"
|
||||
case .Unsupported: return "unsupported"
|
||||
case .Pattern_Has_Separator: return "pattern has separator"
|
||||
case .File_Is_Pipe: return "file is pipe"
|
||||
case .Not_Dir: return "file is not directory"
|
||||
@@ -103,7 +91,11 @@ error_string :: proc "contextless" (ferr: Error) -> string {
|
||||
case .Negative_Write: return "negative write"
|
||||
case .Negative_Count: return "negative count"
|
||||
case .Buffer_Full: return "buffer full"
|
||||
case .Unknown, .Empty: //
|
||||
case .Permission_Denied: return "permission denied"
|
||||
case .Closed: return "file already closed"
|
||||
case .No_Size: return "file has no definite size"
|
||||
case .Unsupported: return "unsupported"
|
||||
case .Unknown: //
|
||||
}
|
||||
case runtime.Allocator_Error:
|
||||
switch e {
|
||||
|
||||
@@ -10,19 +10,13 @@ import "base:runtime"
|
||||
General_Error :: enum u32 {
|
||||
None,
|
||||
|
||||
Permission_Denied,
|
||||
Exist,
|
||||
Not_Exist,
|
||||
Closed,
|
||||
|
||||
Timeout,
|
||||
|
||||
Broken_Pipe,
|
||||
|
||||
// Indicates that an attempt to retrieve a file's size was made, but the
|
||||
// file doesn't have a size.
|
||||
No_Size,
|
||||
|
||||
Invalid_File,
|
||||
Invalid_Dir,
|
||||
Invalid_Path,
|
||||
@@ -33,8 +27,6 @@ General_Error :: enum u32 {
|
||||
|
||||
No_HOME_Variable,
|
||||
Env_Var_Not_Found,
|
||||
|
||||
Unsupported,
|
||||
}
|
||||
|
||||
// A platform specific error
|
||||
@@ -72,19 +64,15 @@ error_string :: proc(ferr: Error) -> string {
|
||||
case General_Error:
|
||||
switch e {
|
||||
case .None: return ""
|
||||
case .Permission_Denied: return "permission denied"
|
||||
case .Exist: return "file already exists"
|
||||
case .Not_Exist: return "file does not exist"
|
||||
case .Closed: return "file already closed"
|
||||
case .Timeout: return "i/o timeout"
|
||||
case .Broken_Pipe: return "Broken pipe"
|
||||
case .No_Size: return "file has no definite size"
|
||||
case .Invalid_File: return "invalid file"
|
||||
case .Invalid_Dir: return "invalid directory"
|
||||
case .Invalid_Path: return "invalid path"
|
||||
case .Invalid_Callback: return "invalid callback"
|
||||
case .Invalid_Command: return "invalid command"
|
||||
case .Unsupported: return "unsupported"
|
||||
case .Pattern_Has_Separator: return "pattern has separator"
|
||||
case .No_HOME_Variable: return "no $HOME variable"
|
||||
case .Env_Var_Not_Found: return "environment variable not found"
|
||||
@@ -105,7 +93,11 @@ error_string :: proc(ferr: Error) -> string {
|
||||
case .Negative_Write: return "negative write"
|
||||
case .Negative_Count: return "negative count"
|
||||
case .Buffer_Full: return "buffer full"
|
||||
case .Unknown, .Empty: //
|
||||
case .Permission_Denied: return "permission denied"
|
||||
case .Closed: return "file already closed"
|
||||
case .No_Size: return "file has no definite size"
|
||||
case .Unsupported: return "unsupported"
|
||||
case .Unknown: //
|
||||
}
|
||||
case runtime.Allocator_Error:
|
||||
switch e {
|
||||
|
||||
Reference in New Issue
Block a user