diff --git a/lib/std/io/Reader.zig b/lib/std/io/Reader.zig index b9071be378..9a518cdc33 100644 --- a/lib/std/io/Reader.zig +++ b/lib/std/io/Reader.zig @@ -313,9 +313,8 @@ pub fn readVecLimit(r: *Reader, data: []const []u8, limit: Limit) Error!usize { .last = r.buffer, }, .writer = .{ - .context = &Writer.VectorWrapper.unique_address, .buffer = if (first.len >= r.buffer.len) first else r.buffer, - .vtable = &.{ .drain = Writer.fixedDrain }, + .vtable = &Writer.VectorWrapper.vtable, }, }; 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 { .last = r.buffer, }, .writer = .{ - .context = &Writer.VectorWrapper.unique_address, .buffer = if (remaining.len >= r.buffer.len) remaining else r.buffer, - .vtable = &.{ .drain = Writer.fixedDrain }, + .vtable = &Writer.VectorWrapper.vtable, }, }; const n = r.vtable.stream(r, &wrapper.writer, .unlimited) catch |err| switch (err) { diff --git a/lib/std/io/Writer.zig b/lib/std/io/Writer.zig index 309829ae7b..fd3670707c 100644 --- a/lib/std/io/Writer.zig +++ b/lib/std/io/Writer.zig @@ -333,11 +333,11 @@ pub const WritableVectorIterator = struct { pub const VectorWrapper = struct { writer: Writer, it: WritableVectorIterator, - pub var unique_address: u8 = undefined; + pub const vtable: VTable = .{ .drain = fixedDrain }; }; pub fn writableVectorIterator(w: *Writer) Error!WritableVectorIterator { - if (@as(*u8, @ptrCast(w.context)) == &VectorWrapper.unique_address) { + if (w.vtable == &VectorWrapper.vtable) { const wrapper: *VectorWrapper = @fieldParentPtr("writer", w); return wrapper.it; }