aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/Io.zig7
-rw-r--r--lib/std/Io/DeprecatedWriter.zig7
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/std/Io.zig b/lib/std/Io.zig
index b27217ece0..3f98ec3043 100644
--- a/lib/std/Io.zig
+++ b/lib/std/Io.zig
@@ -419,9 +419,14 @@ pub fn GenericWriter(
new_interface: Writer,
err: ?Error = null,
- fn drain(w: *Writer, data: []const []const u8, splat: usize) Writer.Error!usize {
+ fn drain(w: *std.io.Writer, data: []const []const u8, splat: usize) std.io.Writer.Error!usize {
_ = splat;
const a: *@This() = @alignCast(@fieldParentPtr("new_interface", w));
+ const buffered = w.buffered();
+ if (buffered.len != 0) return w.consume(a.derp_writer.write(buffered) catch |err| {
+ a.err = err;
+ return error.WriteFailed;
+ });
return a.derp_writer.write(data[0]) catch |err| {
a.err = err;
return error.WriteFailed;
diff --git a/lib/std/Io/DeprecatedWriter.zig b/lib/std/Io/DeprecatedWriter.zig
index 391b985357..81774b357c 100644
--- a/lib/std/Io/DeprecatedWriter.zig
+++ b/lib/std/Io/DeprecatedWriter.zig
@@ -100,7 +100,12 @@ pub const Adapter = struct {
fn drain(w: *std.io.Writer, data: []const []const u8, splat: usize) std.io.Writer.Error!usize {
_ = splat;
- const a: *@This() = @fieldParentPtr("new_interface", w);
+ const a: *@This() = @alignCast(@fieldParentPtr("new_interface", w));
+ const buffered = w.buffered();
+ if (buffered.len != 0) return w.consume(a.derp_writer.write(buffered) catch |err| {
+ a.err = err;
+ return error.WriteFailed;
+ });
return a.derp_writer.write(data[0]) catch |err| {
a.err = err;
return error.WriteFailed;