authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-22 17:06:25-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-22 17:06:25-07:00
logec5cdb2fe394b6a8ca3d30b7652049f39c1aecdb
treeae21be4e1c84b14872e4b80666459dd4082a5c0a
parent91640f5f819de5bb6211d6bfa3c778737fa822aa

std: fix deprecated writer not handling the buffer


2 files changed, 12 insertions(+), 2 deletions(-)

lib/std/Io.zig+6-1
...@@ -419,9 +419,14 @@ pub fn GenericWriter(...@@ -419,9 +419,14 @@ pub fn GenericWriter(
419 new_interface: Writer,419 new_interface: Writer,
420 err: ?Error = null,420 err: ?Error = null,
421421
422 fn drain(w: *Writer, data: []const []const u8, splat: usize) Writer.Error!usize {422 fn drain(w: *std.io.Writer, data: []const []const u8, splat: usize) std.io.Writer.Error!usize {
423 _ = splat;423 _ = splat;
424 const a: *@This() = @alignCast(@fieldParentPtr("new_interface", w));424 const a: *@This() = @alignCast(@fieldParentPtr("new_interface", w));
425 const buffered = w.buffered();
426 if (buffered.len != 0) return w.consume(a.derp_writer.write(buffered) catch |err| {
427 a.err = err;
428 return error.WriteFailed;
429 });
425 return a.derp_writer.write(data[0]) catch |err| {430 return a.derp_writer.write(data[0]) catch |err| {
426 a.err = err;431 a.err = err;
427 return error.WriteFailed;432 return error.WriteFailed;
lib/std/Io/DeprecatedWriter.zig+6-1
...@@ -100,7 +100,12 @@ pub const Adapter = struct {...@@ -100,7 +100,12 @@ pub const Adapter = struct {
100100
101 fn drain(w: *std.io.Writer, data: []const []const u8, splat: usize) std.io.Writer.Error!usize {101 fn drain(w: *std.io.Writer, data: []const []const u8, splat: usize) std.io.Writer.Error!usize {
102 _ = splat;102 _ = splat;
103 const a: *@This() = @fieldParentPtr("new_interface", w);103 const a: *@This() = @alignCast(@fieldParentPtr("new_interface", w));
104 const buffered = w.buffered();
105 if (buffered.len != 0) return w.consume(a.derp_writer.write(buffered) catch |err| {
106 a.err = err;
107 return error.WriteFailed;
108 });
104 return a.derp_writer.write(data[0]) catch |err| {109 return a.derp_writer.write(data[0]) catch |err| {
105 a.err = err;110 a.err = err;
106 return error.WriteFailed;111 return error.WriteFailed;