@@ -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
5771Stream_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) {
192206size :: 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 {
0 commit comments