Commit e061445fc2

Andrew Kelley <andrew@ziglang.org>
2025-08-01 09:22:03
std.Io: delete BufferedReader
1 parent 366884a
Changed files (6)
lib
src
Package
lib/compiler/resinator/errors.zig
@@ -1078,11 +1078,9 @@ const CorrespondingLines = struct {
     at_eof: bool = false,
     span: SourceMappings.CorrespondingSpan,
     file: std.fs.File,
-    buffered_reader: BufferedReaderType,
+    buffered_reader: *std.Io.Reader,
     code_page: SupportedCodePage,
 
-    const BufferedReaderType = std.io.BufferedReader(512, std.fs.File.DeprecatedReader);
-
     pub fn init(cwd: std.fs.Dir, err_details: ErrorDetails, line_for_comparison: []const u8, corresponding_span: SourceMappings.CorrespondingSpan, corresponding_file: []const u8) !CorrespondingLines {
         // We don't do line comparison for this error, so don't print the note if the line
         // number is different
@@ -1101,9 +1099,7 @@ const CorrespondingLines = struct {
             .buffered_reader = undefined,
             .code_page = err_details.code_page,
         };
-        corresponding_lines.buffered_reader = BufferedReaderType{
-            .unbuffered_reader = corresponding_lines.file.deprecatedReader(),
-        };
+        corresponding_lines.buffered_reader = corresponding_lines.file.reader();
         errdefer corresponding_lines.deinit();
 
         var fbs = std.io.fixedBufferStream(&corresponding_lines.line_buf);
lib/docs/wasm/markdown.zig
@@ -145,13 +145,12 @@ fn mainImpl() !void {
     var parser = try Parser.init(gpa);
     defer parser.deinit();
 
-    var stdin_buf = std.io.bufferedReader(std.fs.File.stdin().deprecatedReader());
-    var line_buf = std.ArrayList(u8).init(gpa);
-    defer line_buf.deinit();
-    while (stdin_buf.reader().streamUntilDelimiter(line_buf.writer(), '\n', null)) {
-        if (line_buf.getLastOrNull() == '\r') _ = line_buf.pop();
-        try parser.feedLine(line_buf.items);
-        line_buf.clearRetainingCapacity();
+    var stdin_buffer: [1024]u8 = undefined;
+    var stdin_reader = std.fs.File.stdin().reader(&stdin_buffer);
+
+    while (stdin_reader.takeDelimiterExclusive('\n')) |line| {
+        const trimmed = std.mem.trimRight(u8, line, '\r');
+        try parser.feedLine(trimmed);
     } else |err| switch (err) {
         error.EndOfStream => {},
         else => |e| return e,
lib/std/Io/buffered_reader.zig
@@ -1,201 +0,0 @@
-const std = @import("../std.zig");
-const io = std.io;
-const mem = std.mem;
-const assert = std.debug.assert;
-const testing = std.testing;
-
-pub fn BufferedReader(comptime buffer_size: usize, comptime ReaderType: type) type {
-    return struct {
-        unbuffered_reader: ReaderType,
-        buf: [buffer_size]u8 = undefined,
-        start: usize = 0,
-        end: usize = 0,
-
-        pub const Error = ReaderType.Error;
-        pub const Reader = io.GenericReader(*Self, Error, read);
-
-        const Self = @This();
-
-        pub fn read(self: *Self, dest: []u8) Error!usize {
-            // First try reading from the already buffered data onto the destination.
-            const current = self.buf[self.start..self.end];
-            if (current.len != 0) {
-                const to_transfer = @min(current.len, dest.len);
-                @memcpy(dest[0..to_transfer], current[0..to_transfer]);
-                self.start += to_transfer;
-                return to_transfer;
-            }
-
-            // If dest is large, read from the unbuffered reader directly into the destination.
-            if (dest.len >= buffer_size) {
-                return self.unbuffered_reader.read(dest);
-            }
-
-            // If dest is small, read from the unbuffered reader into our own internal buffer,
-            // and then transfer to destination.
-            self.end = try self.unbuffered_reader.read(&self.buf);
-            const to_transfer = @min(self.end, dest.len);
-            @memcpy(dest[0..to_transfer], self.buf[0..to_transfer]);
-            self.start = to_transfer;
-            return to_transfer;
-        }
-
-        pub fn reader(self: *Self) Reader {
-            return .{ .context = self };
-        }
-    };
-}
-
-pub fn bufferedReader(reader: anytype) BufferedReader(4096, @TypeOf(reader)) {
-    return .{ .unbuffered_reader = reader };
-}
-
-pub fn bufferedReaderSize(comptime size: usize, reader: anytype) BufferedReader(size, @TypeOf(reader)) {
-    return .{ .unbuffered_reader = reader };
-}
-
-test "OneByte" {
-    const OneByteReadReader = struct {
-        str: []const u8,
-        curr: usize,
-
-        const Error = error{NoError};
-        const Self = @This();
-        const Reader = io.GenericReader(*Self, Error, read);
-
-        fn init(str: []const u8) Self {
-            return Self{
-                .str = str,
-                .curr = 0,
-            };
-        }
-
-        fn read(self: *Self, dest: []u8) Error!usize {
-            if (self.str.len <= self.curr or dest.len == 0)
-                return 0;
-
-            dest[0] = self.str[self.curr];
-            self.curr += 1;
-            return 1;
-        }
-
-        fn reader(self: *Self) Reader {
-            return .{ .context = self };
-        }
-    };
-
-    const str = "This is a test";
-    var one_byte_stream = OneByteReadReader.init(str);
-    var buf_reader = bufferedReader(one_byte_stream.reader());
-    const stream = buf_reader.reader();
-
-    const res = try stream.readAllAlloc(testing.allocator, str.len + 1);
-    defer testing.allocator.free(res);
-    try testing.expectEqualSlices(u8, str, res);
-}
-
-fn smallBufferedReader(underlying_stream: anytype) BufferedReader(8, @TypeOf(underlying_stream)) {
-    return .{ .unbuffered_reader = underlying_stream };
-}
-test "Block" {
-    const BlockReader = struct {
-        block: []const u8,
-        reads_allowed: usize,
-        curr_read: usize,
-
-        const Error = error{NoError};
-        const Self = @This();
-        const Reader = io.GenericReader(*Self, Error, read);
-
-        fn init(block: []const u8, reads_allowed: usize) Self {
-            return Self{
-                .block = block,
-                .reads_allowed = reads_allowed,
-                .curr_read = 0,
-            };
-        }
-
-        fn read(self: *Self, dest: []u8) Error!usize {
-            if (self.curr_read >= self.reads_allowed) return 0;
-            @memcpy(dest[0..self.block.len], self.block);
-
-            self.curr_read += 1;
-            return self.block.len;
-        }
-
-        fn reader(self: *Self) Reader {
-            return .{ .context = self };
-        }
-    };
-
-    const block = "0123";
-
-    // len out == block
-    {
-        var test_buf_reader: BufferedReader(4, BlockReader) = .{
-            .unbuffered_reader = BlockReader.init(block, 2),
-        };
-        const reader = test_buf_reader.reader();
-        var out_buf: [4]u8 = undefined;
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, block);
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, block);
-        try testing.expectEqual(try reader.readAll(&out_buf), 0);
-    }
-
-    // len out < block
-    {
-        var test_buf_reader: BufferedReader(4, BlockReader) = .{
-            .unbuffered_reader = BlockReader.init(block, 2),
-        };
-        const reader = test_buf_reader.reader();
-        var out_buf: [3]u8 = undefined;
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, "012");
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, "301");
-        const n = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, out_buf[0..n], "23");
-        try testing.expectEqual(try reader.readAll(&out_buf), 0);
-    }
-
-    // len out > block
-    {
-        var test_buf_reader: BufferedReader(4, BlockReader) = .{
-            .unbuffered_reader = BlockReader.init(block, 2),
-        };
-        const reader = test_buf_reader.reader();
-        var out_buf: [5]u8 = undefined;
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, "01230");
-        const n = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, out_buf[0..n], "123");
-        try testing.expectEqual(try reader.readAll(&out_buf), 0);
-    }
-
-    // len out == 0
-    {
-        var test_buf_reader: BufferedReader(4, BlockReader) = .{
-            .unbuffered_reader = BlockReader.init(block, 2),
-        };
-        const reader = test_buf_reader.reader();
-        var out_buf: [0]u8 = undefined;
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, "");
-    }
-
-    // len bufreader buf > block
-    {
-        var test_buf_reader: BufferedReader(5, BlockReader) = .{
-            .unbuffered_reader = BlockReader.init(block, 2),
-        };
-        const reader = test_buf_reader.reader();
-        var out_buf: [4]u8 = undefined;
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, block);
-        _ = try reader.readAll(&out_buf);
-        try testing.expectEqualSlices(u8, &out_buf, block);
-        try testing.expectEqual(try reader.readAll(&out_buf), 0);
-    }
-}
lib/std/Io/test.zig
@@ -45,9 +45,9 @@ test "write a file, read it, then delete it" {
         const expected_file_size: u64 = "begin".len + data.len + "end".len;
         try expectEqual(expected_file_size, file_size);
 
-        var buf_stream = io.bufferedReader(file.deprecatedReader());
-        const st = buf_stream.reader();
-        const contents = try st.readAllAlloc(std.testing.allocator, 2 * 1024);
+        var file_buffer: [1024]u8 = undefined;
+        var file_reader = file.reader(&file_buffer);
+        const contents = try file_reader.interface.allocRemaining(std.testing.allocator, .limited(2 * 1024));
         defer std.testing.allocator.free(contents);
 
         try expect(mem.eql(u8, contents[0.."begin".len], "begin"));
lib/std/Io.zig
@@ -428,12 +428,6 @@ pub const BufferedWriter = @import("Io/buffered_writer.zig").BufferedWriter;
 /// Deprecated in favor of `Writer`.
 pub const bufferedWriter = @import("Io/buffered_writer.zig").bufferedWriter;
 /// Deprecated in favor of `Reader`.
-pub const BufferedReader = @import("Io/buffered_reader.zig").BufferedReader;
-/// Deprecated in favor of `Reader`.
-pub const bufferedReader = @import("Io/buffered_reader.zig").bufferedReader;
-/// Deprecated in favor of `Reader`.
-pub const bufferedReaderSize = @import("Io/buffered_reader.zig").bufferedReaderSize;
-/// Deprecated in favor of `Reader`.
 pub const FixedBufferStream = @import("Io/fixed_buffer_stream.zig").FixedBufferStream;
 /// Deprecated in favor of `Reader`.
 pub const fixedBufferStream = @import("Io/fixed_buffer_stream.zig").fixedBufferStream;
@@ -926,7 +920,6 @@ pub fn PollFiles(comptime StreamEnum: type) type {
 test {
     _ = Reader;
     _ = Writer;
-    _ = BufferedReader;
     _ = BufferedWriter;
     _ = CountingWriter;
     _ = CountingReader;
src/Package/Fetch.zig
@@ -1194,14 +1194,8 @@ fn unpackResource(
         },
         .@"tar.xz" => {
             const gpa = f.arena.child_allocator;
-            const reader = resource.reader();
-            var br = std.io.bufferedReaderSize(std.crypto.tls.max_ciphertext_record_len, reader);
-            var dcp = std.compress.xz.decompress(gpa, br.reader()) catch |err| {
-                return f.fail(f.location_tok, try eb.printString(
-                    "unable to decompress tarball: {s}",
-                    .{@errorName(err)},
-                ));
-            };
+            var dcp = std.compress.xz.decompress(gpa, resource.reader().adaptToOldInterface()) catch |err|
+                return f.fail(f.location_tok, try eb.printString("unable to decompress tarball: {t}", .{err}));
             defer dcp.deinit();
             var adapter_buffer: [1024]u8 = undefined;
             var adapter = dcp.reader().adaptToNewApi(&adapter_buffer);