Skip to content

Commit 360d93b

Browse files
authored
Merge pull request #5928 from odin-lang/bill/io-error-changes
Move some OS General_Error values to io.Error
2 parents bd21b2c + e4fcebe commit 360d93b

File tree

20 files changed

+60
-62
lines changed

20 files changed

+60
-62
lines changed

core/bufio/read_writer.odin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ _read_writer_procedure := proc(stream_data: rawptr, mode: io.Stream_Mode, p: []b
3838
case .Query:
3939
return io.query_utility({.Flush, .Read, .Write, .Query})
4040
}
41-
return 0, .Empty
41+
return 0, .Unsupported
4242
}

core/bufio/reader.odin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ _reader_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offse
347347
case .Query:
348348
return io.query_utility({.Read, .Destroy, .Query})
349349
}
350-
return 0, .Empty
350+
return 0, .Unsupported
351351
}
352352

353353
//

core/bufio/writer.odin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,5 +249,5 @@ _writer_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offse
249249
case .Query:
250250
return io.query_utility({.Flush, .Write, .Destroy, .Query})
251251
}
252-
return 0, .Empty
252+
return 0, .Unsupported
253253
}

core/bytes/buffer.odin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,5 +434,5 @@ _buffer_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offse
434434
case .Query:
435435
return io.query_utility({.Read, .Read_At, .Write, .Write_At, .Seek, .Size, .Destroy, .Query})
436436
}
437-
return 0, .Empty
437+
return 0, .Unsupported
438438
}

core/bytes/reader.odin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,6 @@ _reader_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offse
160160
case .Query:
161161
return io.query_utility({.Read, .Read_At, .Seek, .Size, .Query})
162162
}
163-
return 0, .Empty
163+
return 0, .Unsupported
164164
}
165165

core/c/libc/stdio.odin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ to_stream :: proc(file: ^FILE) -> io.Stream {
390390
}
391391

392392
case .Destroy:
393-
return 0, .Empty
393+
return 0, .Unsupported
394394

395395
case .Query:
396396
return io.query_utility({ .Close, .Flush, .Read, .Read_At, .Write, .Write_At, .Seek, .Size, .Query })

core/compress/common.odin

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ peek_data_from_stream :: #force_inline proc(z: ^Context_Stream_Input, $T: typeid
297297
curr := z.input->impl_seek(0, .Current) or_return
298298
r, e1 := io.to_reader_at(z.input)
299299
if !e1 {
300-
return T{}, .Empty
300+
return T{}, .Unsupported
301301
}
302302
when size <= 128 {
303303
b: [size]u8
@@ -306,7 +306,7 @@ peek_data_from_stream :: #force_inline proc(z: ^Context_Stream_Input, $T: typeid
306306
}
307307
_, e2 := io.read_at(r, b[:], curr)
308308
if e2 != .None {
309-
return T{}, .Empty
309+
return T{}, .Unsupported
310310
}
311311

312312
res = (^T)(&b[0])^
@@ -324,7 +324,7 @@ peek_data_at_offset_from_stream :: #force_inline proc(z: ^Context_Stream_Input,
324324

325325
r, e3 := io.to_reader_at(z.input)
326326
if !e3 {
327-
return T{}, .Empty
327+
return T{}, .Unsupported
328328
}
329329
when size <= 128 {
330330
b: [size]u8
@@ -333,7 +333,7 @@ peek_data_at_offset_from_stream :: #force_inline proc(z: ^Context_Stream_Input,
333333
}
334334
_, e4 := io.read_at(r, b[:], pos)
335335
if e4 != .None {
336-
return T{}, .Empty
336+
return T{}, .Unsupported
337337
}
338338

339339
// Return read head to original position.

core/fmt/fmt_js.odin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ write_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
1919
write(fd, p)
2020
return i64(len(p)), nil
2121
}
22-
return 0, .Empty
22+
return 0, .Unsupported
2323
}
2424

2525
@(private="file")

core/io/io.odin

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ Error :: enum i32 {
3838
// This is usually a sign of a broken `io.Reader` implementation
3939
No_Progress,
4040

41+
// Invalid whence argument
4142
Invalid_Whence,
43+
// Invalid offset
4244
Invalid_Offset,
45+
// Invalid "unread" operation
4346
Invalid_Unread,
4447

4548
Negative_Read,
@@ -50,8 +53,19 @@ Error :: enum i32 {
5053
// Unknown means that an error has occurred but cannot be categorized
5154
Unknown,
5255

53-
// Empty is returned when a procedure has not been implemented for an io.Stream
54-
Empty = -1,
56+
// Indicates that an attempt to retrieve a Stream's size was made, but the
57+
// stream doesn't have a size.
58+
No_Size,
59+
60+
Permission_Denied,
61+
62+
// Stream cannot be used since it has been Closed
63+
Closed,
64+
65+
// Unsupported is returned when a procedure has not been implemented for an io.Stream
66+
Unsupported = -1,
67+
68+
Empty = Unsupported,
5569
}
5670

5771
Stream_Mode :: enum {
@@ -102,7 +116,7 @@ destroy :: proc(s: Stream) -> (err: Error) {
102116
if s.procedure != nil {
103117
_, err = s.procedure(s.data, .Destroy, nil, 0, nil)
104118
} else {
105-
err = .Empty
119+
err = .Unsupported
106120
}
107121
return
108122
}
@@ -138,7 +152,7 @@ read :: proc(s: Reader, p: []byte, n_read: ^int = nil) -> (n: int, err: Error) {
138152
n = int(n64)
139153
if n_read != nil { n_read^ += n }
140154
} else {
141-
err = .Empty
155+
err = .Unsupported
142156
}
143157
return
144158
}
@@ -151,7 +165,7 @@ write :: proc(s: Writer, p: []byte, n_written: ^int = nil) -> (n: int, err: Erro
151165
n = int(n64)
152166
if n_written != nil { n_written^ += n }
153167
} else {
154-
err = .Empty
168+
err = .Unsupported
155169
}
156170
return
157171
}
@@ -167,7 +181,7 @@ seek :: proc(s: Seeker, offset: i64, whence: Seek_From) -> (n: i64, err: Error)
167181
if s.procedure != nil {
168182
n, err = s.procedure(s.data, .Seek, nil, offset, whence)
169183
} else {
170-
err = .Empty
184+
err = .Unsupported
171185
}
172186
return
173187
}
@@ -192,15 +206,15 @@ flush :: proc(s: Flusher) -> (err: Error) {
192206
size :: proc(s: Stream) -> (n: i64, err: Error) {
193207
if s.procedure != nil {
194208
n, err = s.procedure(s.data, .Size, nil, 0, nil)
195-
if err == .Empty {
209+
if err == .Unsupported {
196210
n = 0
197211
curr := seek(s, 0, .Current) or_return
198212
end := seek(s, 0, .End) or_return
199213
seek(s, curr, .Start) or_return
200214
n = end
201215
}
202216
} else {
203-
err = .Empty
217+
err = .Unsupported
204218
}
205219
return
206220
}
@@ -217,7 +231,7 @@ read_at :: proc(r: Reader_At, p: []byte, offset: i64, n_read: ^int = nil) -> (n:
217231
if r.procedure != nil {
218232
n64: i64
219233
n64, err = r.procedure(r.data, .Read_At, p, offset, nil)
220-
if err != .Empty {
234+
if err != .Unsupported {
221235
n = int(n64)
222236
} else {
223237
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:
229243
}
230244
if n_read != nil { n_read^ += n }
231245
} else {
232-
err = .Empty
246+
err = .Unsupported
233247
}
234248
return
235249
}
@@ -243,7 +257,7 @@ write_at :: proc(w: Writer_At, p: []byte, offset: i64, n_written: ^int = nil) ->
243257
if w.procedure != nil {
244258
n64: i64
245259
n64, err = w.procedure(w.data, .Write_At, p, offset, nil)
246-
if err != .Empty {
260+
if err != .Unsupported {
247261
n = int(n64)
248262
} else {
249263
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) ->
255269
}
256270
if n_written != nil { n_written^ += n }
257271
} else {
258-
err = .Empty
272+
err = .Unsupported
259273
}
260274
return
261275
}
@@ -440,7 +454,7 @@ copy_n :: proc(dst: Writer, src: Reader, n: i64) -> (written: i64, err: Error) {
440454
@(private)
441455
_copy_buffer :: proc(dst: Writer, src: Reader, buf: []byte) -> (written: i64, err: Error) {
442456
if dst.procedure == nil || src.procedure == nil {
443-
return 0, .Empty
457+
return 0, .Unsupported
444458
}
445459
buf := buf
446460
if buf == nil {

core/io/multi.odin

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ _multi_reader_proc :: proc(stream_data: rawptr, mode: Stream_Mode, p: []byte, of
88
if mode == .Query {
99
return query_utility({.Read, .Query})
1010
} else if mode != .Read {
11-
return 0, .Empty
11+
return 0, .Unsupported
1212
}
1313
mr := (^Multi_Reader)(stream_data)
1414
for len(mr.readers) > 0 {
@@ -61,7 +61,7 @@ _multi_writer_proc :: proc(stream_data: rawptr, mode: Stream_Mode, p: []byte, of
6161
if mode == .Query {
6262
return query_utility({.Write, .Query})
6363
} else if mode != .Write {
64-
return 0, .Empty
64+
return 0, .Unsupported
6565
}
6666
mw := (^Multi_Writer)(stream_data)
6767
for w in mw.writers {

0 commit comments

Comments
 (0)