authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-31 16:00:58-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-31 22:10:11-07:00
log165cd87c122b9c0a78377bb9f87b2d5d2b3ae661
tree323e4acd7e4fa808ae7b0d39499508ff3c322410
parent111305678cc606fa71133fcb8bf517e59b35b772

std.Io.Reader: don't set end to zero

because it may be used as a ring buffer

1 files changed, 3 insertions(+), 6 deletions(-)

lib/std/Io/Reader.zig+3-6
...@@ -266,8 +266,7 @@ pub fn streamRemaining(r: *Reader, w: *Writer) StreamRemainingError!usize {...@@ -266,8 +266,7 @@ pub fn streamRemaining(r: *Reader, w: *Writer) StreamRemainingError!usize {
266/// number of bytes discarded.266/// number of bytes discarded.
267pub fn discardRemaining(r: *Reader) ShortError!usize {267pub fn discardRemaining(r: *Reader) ShortError!usize {
268 var offset: usize = r.end - r.seek;268 var offset: usize = r.end - r.seek;
269 r.seek = 0;269 r.seek = r.end;
270 r.end = 0;
271 while (true) {270 while (true) {
272 offset += r.vtable.discard(r, .unlimited) catch |err| switch (err) {271 offset += r.vtable.discard(r, .unlimited) catch |err| switch (err) {
273 error.EndOfStream => return offset,272 error.EndOfStream => return offset,
...@@ -526,8 +525,7 @@ pub fn toss(r: *Reader, n: usize) void {...@@ -526,8 +525,7 @@ pub fn toss(r: *Reader, n: usize) void {
526525
527/// Equivalent to `toss(r.bufferedLen())`.526/// Equivalent to `toss(r.bufferedLen())`.
528pub fn tossBuffered(r: *Reader) void {527pub fn tossBuffered(r: *Reader) void {
529 r.seek = 0;528 r.seek = r.end;
530 r.end = 0;
531}529}
532530
533/// Equivalent to `peek` followed by `toss`.531/// Equivalent to `peek` followed by `toss`.
...@@ -614,8 +612,7 @@ pub fn discardShort(r: *Reader, n: usize) ShortError!usize {...@@ -614,8 +612,7 @@ pub fn discardShort(r: *Reader, n: usize) ShortError!usize {
614 return n;612 return n;
615 }613 }
616 var remaining = n - (r.end - r.seek);614 var remaining = n - (r.end - r.seek);
617 r.end = 0;615 r.seek = r.end;
618 r.seek = 0;
619 while (true) {616 while (true) {
620 const discard_len = r.vtable.discard(r, .limited(remaining)) catch |err| switch (err) {617 const discard_len = r.vtable.discard(r, .limited(remaining)) catch |err| switch (err) {
621 error.EndOfStream => return n - remaining,618 error.EndOfStream => return n - remaining,