From b3da216f1b36b76d8591e64ad1f51079b81bfa8e Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 1 May 2025 19:20:42 -0700 Subject: [PATCH] std.io.BufferedReader: add readRemaining --- lib/std/io/BufferedReader.zig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/std/io/BufferedReader.zig b/lib/std/io/BufferedReader.zig index 2b8624351b..23f45e93b3 100644 --- a/lib/std/io/BufferedReader.zig +++ b/lib/std/io/BufferedReader.zig @@ -90,6 +90,20 @@ pub fn readAll(br: *BufferedReader, bw: *BufferedWriter, limit: Reader.Limit) Re } } +/// "Pump" data from the reader to the writer, handling `error.EndOfStream` as +/// a success case. +/// +/// Returns total number of bytes written to `bw`. +pub fn readRemaining(br: *BufferedReader, bw: *BufferedWriter) Reader.RwRemainingError!usize { + var offset: usize = 0; + while (true) { + offset += br.read(bw, .unlimited) catch |err| switch (err) { + error.EndOfStream => return offset, + else => |e| return e, + }; + } +} + /// Equivalent to `readVec` but reads at most `limit` bytes. pub fn readVecLimit(br: *BufferedReader, data: []const []u8, limit: Reader.Limit) Reader.Error!usize { _ = br;