authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-06-25 10:41:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-01 16:35:30-07:00
log7d6b5ed5103e6a06d1bd8be884f6c2a7ecb0e09a
tree35c27ebb376df4fe6c04965cb4aa733b4901d2e6
parentc27ab8b45d767388eba5c3e69fc4b4764ae5e1c4

std.io: Reader and Writer check vtable ptr rather than context


2 files changed, 4 insertions(+), 6 deletions(-)

lib/std/io/Reader.zig+2-4
......@@ -313,9 +313,8 @@ pub fn readVecLimit(r: *Reader, data: []const []u8, limit: Limit) Error!usize {
313313 .last = r.buffer,
314314 },
315315 .writer = .{
316 .context = &Writer.VectorWrapper.unique_address,
317316 .buffer = if (first.len >= r.buffer.len) first else r.buffer,
318 .vtable = &.{ .drain = Writer.fixedDrain },
317 .vtable = &Writer.VectorWrapper.vtable,
319318 },
320319 };
321320 var n = r.vtable.stream(r, &wrapper.writer, .limited(remaining)) catch |err| switch (err) {
......@@ -591,9 +590,8 @@ pub fn readSliceShort(r: *Reader, buffer: []u8) ShortError!usize {
591590 .last = r.buffer,
592591 },
593592 .writer = .{
594 .context = &Writer.VectorWrapper.unique_address,
595593 .buffer = if (remaining.len >= r.buffer.len) remaining else r.buffer,
596 .vtable = &.{ .drain = Writer.fixedDrain },
594 .vtable = &Writer.VectorWrapper.vtable,
597595 },
598596 };
599597 const n = r.vtable.stream(r, &wrapper.writer, .unlimited) catch |err| switch (err) {
lib/std/io/Writer.zig+2-2
......@@ -333,11 +333,11 @@ pub const WritableVectorIterator = struct {
333333pub const VectorWrapper = struct {
334334 writer: Writer,
335335 it: WritableVectorIterator,
336 pub var unique_address: u8 = undefined;
336 pub const vtable: VTable = .{ .drain = fixedDrain };
337337};
338338
339339pub fn writableVectorIterator(w: *Writer) Error!WritableVectorIterator {
340 if (@as(*u8, @ptrCast(w.context)) == &VectorWrapper.unique_address) {
340 if (w.vtable == &VectorWrapper.vtable) {
341341 const wrapper: *VectorWrapper = @fieldParentPtr("writer", w);
342342 return wrapper.it;
343343 }