From 8827818b1d5aa88fee6058a8c93a3df9c363fa1d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 14 Apr 2021 21:25:46 +0100 Subject: [PATCH] Clean-up fallback `io.read_at` and `io.write_at` behaviour --- core/io/io.odin | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/core/io/io.odin b/core/io/io.odin index d36791450..3727e219e 100644 --- a/core/io/io.odin +++ b/core/io/io.odin @@ -218,17 +218,17 @@ read_at :: proc(r: Reader_At, p: []byte, offset: i64) -> (n: int, err: Error) { return 0, .Empty; } - current_offset: i64; - current_offset, err = r->impl_seek(offset, .Current); + curr_offset: i64; + curr_offset, err = r->impl_seek(offset, .Current); if err != nil { return 0, err; } n, err = r->impl_read(p); - if err != nil { - return; + _, err1 := r->impl_seek(curr_offset, .Start); + if err1 != nil && err == nil { + err = err1; } - _, err = r->impl_seek(current_offset, .Start); return; } @@ -244,14 +244,18 @@ write_at :: proc(w: Writer_At, p: []byte, offset: i64) -> (n: int, err: Error) { return 0, .Empty; } - current_offset: i64; - current_offset, err = w->impl_seek(offset, .Current); + curr_offset: i64; + curr_offset, err = w->impl_seek(offset, .Current); if err != nil { return 0, err; } - defer w->impl_seek(current_offset, .Start); - return w->impl_write(p); + n, err = w->impl_write(p); + _, err1 := w->impl_seek(curr_offset, .Start); + if err1 != nil && err == nil { + err = err1; + } + return; } write_to :: proc(r: Writer_To, w: Writer) -> (n: i64, err: Error) {