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

because it may be used as a ring buffer
This commit is contained in:
Andrew Kelley 2025-07-31 16:00:58 -07:00
parent 111305678c
commit 165cd87c12

View File

@ -266,8 +266,7 @@ pub fn streamRemaining(r: *Reader, w: *Writer) StreamRemainingError!usize {
/// number of bytes discarded. /// number of bytes discarded.
pub fn discardRemaining(r: *Reader) ShortError!usize { pub fn discardRemaining(r: *Reader) ShortError!usize {
var offset: usize = r.end - r.seek; var offset: usize = r.end - r.seek;
r.seek = 0; r.seek = r.end;
r.end = 0;
while (true) { while (true) {
offset += r.vtable.discard(r, .unlimited) catch |err| switch (err) { offset += r.vtable.discard(r, .unlimited) catch |err| switch (err) {
error.EndOfStream => return offset, error.EndOfStream => return offset,
@ -526,8 +525,7 @@ pub fn toss(r: *Reader, n: usize) void {
/// Equivalent to `toss(r.bufferedLen())`. /// Equivalent to `toss(r.bufferedLen())`.
pub fn tossBuffered(r: *Reader) void { pub fn tossBuffered(r: *Reader) void {
r.seek = 0; r.seek = r.end;
r.end = 0;
} }
/// Equivalent to `peek` followed by `toss`. /// Equivalent to `peek` followed by `toss`.
@ -614,8 +612,7 @@ pub fn discardShort(r: *Reader, n: usize) ShortError!usize {
return n; return n;
} }
var remaining = n - (r.end - r.seek); var remaining = n - (r.end - r.seek);
r.end = 0; r.seek = r.end;
r.seek = 0;
while (true) { while (true) {
const discard_len = r.vtable.discard(r, .limited(remaining)) catch |err| switch (err) { const discard_len = r.vtable.discard(r, .limited(remaining)) catch |err| switch (err) {
error.EndOfStream => return n - remaining, error.EndOfStream => return n - remaining,