From 1fcaf90dd3c99d452fcab13698a63faf17e8f3c1 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 29 Jul 2025 18:18:49 -0700 Subject: [PATCH] std.Io.Reader: make fillUnbuffered respect prexisting buffer addresses only one usage pattern in #24608 --- lib/std/Io/Reader.zig | 9 --------- lib/std/compress/zstd/Decompress.zig | 5 ++--- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/lib/std/Io/Reader.zig b/lib/std/Io/Reader.zig index da9e01dd2c..db188c87bc 100644 --- a/lib/std/Io/Reader.zig +++ b/lib/std/Io/Reader.zig @@ -1055,15 +1055,6 @@ pub fn fill(r: *Reader, n: usize) Error!void { /// Missing this optimization can result in wall-clock time for the most affected benchmarks /// increasing by a factor of 5 or more. fn fillUnbuffered(r: *Reader, n: usize) Error!void { - if (r.seek + n <= r.buffer.len) while (true) { - const end_cap = r.buffer[r.end..]; - var writer: Writer = .fixed(end_cap); - r.end += r.vtable.stream(r, &writer, .limited(end_cap.len)) catch |err| switch (err) { - error.WriteFailed => unreachable, - else => |e| return e, - }; - if (r.seek + n <= r.end) return; - }; try rebase(r, n); var writer: Writer = .{ .buffer = r.buffer, diff --git a/lib/std/compress/zstd/Decompress.zig b/lib/std/compress/zstd/Decompress.zig index b13a2dcf7a..eb431e644c 100644 --- a/lib/std/compress/zstd/Decompress.zig +++ b/lib/std/compress/zstd/Decompress.zig @@ -100,9 +100,8 @@ fn rebase(r: *Reader, capacity: usize) Reader.RebaseError!void { const d: *Decompress = @alignCast(@fieldParentPtr("reader", r)); assert(capacity <= r.buffer.len - d.window_len); assert(r.end + capacity > r.buffer.len); - const buffered = r.buffer[0..r.end]; - const discard = buffered.len - d.window_len; - const keep = buffered[discard..]; + const discard = r.end - d.window_len; + const keep = r.buffer[discard..r.end]; @memmove(r.buffer[0..keep.len], keep); r.end = keep.len; r.seek -= discard;