authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-07 22:57:45-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-08 17:17:53-07:00
log8c9dfcbd0f9c1be860becf0c35877fde803d9e29
treef50e7b4ecc663dbe80b150d0aae4d0d2ac3d5d18
parent5f7a0bbabfde4eeb0ff4f40f0942ef710b6104a1

std.Io: remove BufferedWriter


20 files changed, 114 insertions(+), 162 deletions(-)

lib/compiler/aro/aro/Driver.zig+12-12
......@@ -585,6 +585,8 @@ pub fn errorDescription(e: anyerror) []const u8 {
585585 };
586586}
587587
588var stdout_buffer: [4096]u8 = undefined;
589
588590/// The entry point of the Aro compiler.
589591/// **MAY call `exit` if `fast_exit` is set.**
590592pub fn main(d: *Driver, tc: *Toolchain, args: []const []const u8, comptime fast_exit: bool) !void {
......@@ -688,13 +690,13 @@ fn processSource(
688690 else
689691 std.fs.File.stdout();
690692 defer if (d.output_name != null) file.close();
693 var file_buffer: [1024]u8 = undefined;
694 var file_writer = file.writer(&file_buffer);
691695
692 var buf_w = std.io.bufferedWriter(file.deprecatedWriter());
693
694 pp.prettyPrintTokens(buf_w.writer(), dump_mode) catch |er|
696 pp.prettyPrintTokens(&file_writer.interface, dump_mode) catch |er|
695697 return d.fatal("unable to write result: {s}", .{errorDescription(er)});
696698
697 buf_w.flush() catch |er|
699 file_writer.interface.flush() catch |er|
698700 return d.fatal("unable to write result: {s}", .{errorDescription(er)});
699701 if (fast_exit) std.process.exit(0); // Not linking, no need for cleanup.
700702 return;
......@@ -704,10 +706,9 @@ fn processSource(
704706 defer tree.deinit();
705707
706708 if (d.verbose_ast) {
707 const stdout = std.fs.File.stdout();
708 var buf_writer = std.io.bufferedWriter(stdout.deprecatedWriter());
709 tree.dump(d.detectConfig(stdout), buf_writer.writer()) catch {};
710 buf_writer.flush() catch {};
709 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
710 tree.dump(d.detectConfig(.stdout()), &stdout_writer.interface) catch {};
711 stdout_writer.interface.flush() catch {};
711712 }
712713
713714 const prev_errors = d.comp.diagnostics.errors;
......@@ -734,10 +735,9 @@ fn processSource(
734735 defer ir.deinit(d.comp.gpa);
735736
736737 if (d.verbose_ir) {
737 const stdout = std.fs.File.stdout();
738 var buf_writer = std.io.bufferedWriter(stdout.deprecatedWriter());
739 ir.dump(d.comp.gpa, d.detectConfig(stdout), buf_writer.writer()) catch {};
740 buf_writer.flush() catch {};
738 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
739 ir.dump(d.comp.gpa, d.detectConfig(.stdout()), &stdout_writer.interface) catch {};
740 stdout_writer.interface.flush() catch {};
741741 }
742742
743743 var render_errors: Ir.Renderer.ErrorList = .{};
lib/compiler/aro/aro/Preprocessor.zig+3-4
......@@ -811,10 +811,9 @@ fn verboseLog(pp: *Preprocessor, raw: RawToken, comptime fmt: []const u8, args:
811811 const source = pp.comp.getSource(raw.source);
812812 const line_col = source.lineCol(.{ .id = raw.source, .line = raw.line, .byte_offset = raw.start });
813813
814 const stderr = std.fs.File.stderr().deprecatedWriter();
815 var buf_writer = std.io.bufferedWriter(stderr);
816 const writer = buf_writer.writer();
817 defer buf_writer.flush() catch {};
814 var stderr_buffer: [64]u8 = undefined;
815 var writer = std.debug.lockStderrWriter(&stderr_buffer);
816 defer std.debug.unlockStderrWriter();
818817 writer.print("{s}:{d}:{d}: ", .{ source.path, line_col.line_no, line_col.col }) catch return;
819818 writer.print(fmt, args) catch return;
820819 writer.writeByte('\n') catch return;
lib/compiler/aro/backend/Object/Elf.zig+4-3
......@@ -171,8 +171,9 @@ pub fn addRelocation(elf: *Elf, name: []const u8, section_kind: Object.Section,
171171/// strtab
172172/// section headers
173173pub fn finish(elf: *Elf, file: std.fs.File) !void {
174 var buf_writer = std.io.bufferedWriter(file.deprecatedWriter());
175 const w = buf_writer.writer();
174 var file_buffer: [1024]u8 = undefined;
175 var file_writer = file.writer(&file_buffer);
176 const w = &file_writer.interface;
176177
177178 var num_sections: std.elf.Elf64_Half = additional_sections;
178179 var relocations_len: std.elf.Elf64_Off = 0;
......@@ -374,5 +375,5 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
374375 name_offset += @as(u32, @intCast(entry.key_ptr.len + ".\x00".len)) + rela_name_offset;
375376 }
376377 }
377 try buf_writer.flush();
378 try w.flush();
378379}
lib/compiler/libc.zig+10-9
......@@ -22,6 +22,8 @@ const usage_libc =
2222 \\
2323;
2424
25var stdout_buffer: [4096]u8 = undefined;
26
2527pub fn main() !void {
2628 var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);
2729 defer arena_instance.deinit();
......@@ -34,14 +36,16 @@ pub fn main() !void {
3436 var input_file: ?[]const u8 = null;
3537 var target_arch_os_abi: []const u8 = "native";
3638 var print_includes: bool = false;
39 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
40 const stdout = &stdout_writer.interface;
3741 {
3842 var i: usize = 2;
3943 while (i < args.len) : (i += 1) {
4044 const arg = args[i];
4145 if (mem.startsWith(u8, arg, "-")) {
4246 if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) {
43 const stdout = std.fs.File.stdout().deprecatedWriter();
4447 try stdout.writeAll(usage_libc);
48 try stdout.flush();
4549 return std.process.cleanExit();
4650 } else if (mem.eql(u8, arg, "-target")) {
4751 if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg});
......@@ -97,13 +101,11 @@ pub fn main() !void {
97101 fatal("no include dirs detected for target {s}", .{zig_target});
98102 }
99103
100 var bw = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());
101 var writer = bw.writer();
102104 for (libc_dirs.libc_include_dir_list) |include_dir| {
103 try writer.writeAll(include_dir);
104 try writer.writeByte('\n');
105 try stdout.writeAll(include_dir);
106 try stdout.writeByte('\n');
105107 }
106 try bw.flush();
108 try stdout.flush();
107109 return std.process.cleanExit();
108110 }
109111
......@@ -125,9 +127,8 @@ pub fn main() !void {
125127 };
126128 defer libc.deinit(gpa);
127129
128 var bw = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());
129 try libc.render(bw.writer());
130 try bw.flush();
130 try libc.render(stdout);
131 try stdout.flush();
131132 }
132133}
133134
lib/compiler/resinator/compile.zig+17-18
......@@ -1268,12 +1268,8 @@ pub const Compiler = struct {
12681268 try header.write(writer, self.errContext(id_token));
12691269 }
12701270
1271 pub fn writeResourceDataNoPadding(writer: anytype, data_reader: *std.Io.Reader, data_size: u32) !void {
1272 var adapted = writer.adaptToNewApi();
1273 var buffer: [128]u8 = undefined;
1274 adapted.new_interface.buffer = &buffer;
1275 try data_reader.streamExact(&adapted.new_interface, data_size);
1276 try adapted.new_interface.flush();
1271 pub fn writeResourceDataNoPadding(writer: *std.Io.Writer, data_reader: *std.Io.Reader, data_size: u32) !void {
1272 try data_reader.streamExact(writer, data_size);
12771273 }
12781274
12791275 pub fn writeResourceData(writer: anytype, data_reader: *std.Io.Reader, data_size: u32) !void {
......@@ -1281,8 +1277,8 @@ pub const Compiler = struct {
12811277 try writeDataPadding(writer, data_size);
12821278 }
12831279
1284 pub fn writeDataPadding(writer: anytype, data_size: u32) !void {
1285 try writer.writeByteNTimes(0, numPaddingBytesNeeded(data_size));
1280 pub fn writeDataPadding(writer: *std.Io.Writer, data_size: u32) !void {
1281 try writer.splatByteAll(0, numPaddingBytesNeeded(data_size));
12861282 }
12871283
12881284 pub fn numPaddingBytesNeeded(data_size: u32) u2 {
......@@ -2100,8 +2096,10 @@ pub const Compiler = struct {
21002096 const resource = ResourceType.fromString(type_bytes);
21012097 std.debug.assert(resource == .menu or resource == .menuex);
21022098
2103 self.writeMenuData(node, data_writer, resource) catch |err| switch (err) {
2104 error.NoSpaceLeft => {
2099 var adapted = data_writer.adaptToNewApi(&.{});
2100
2101 self.writeMenuData(node, &adapted.new_interface, resource) catch |err| switch (err) {
2102 error.WriteFailed => {
21052103 return self.addErrorDetailsAndFail(.{
21062104 .err = .resource_data_size_exceeds_max,
21072105 .token = node.id,
......@@ -2129,7 +2127,7 @@ pub const Compiler = struct {
21292127
21302128 /// Expects `data_writer` to be a LimitedWriter limited to u32, meaning all writes to
21312129 /// the writer within this function could return error.NoSpaceLeft
2132 pub fn writeMenuData(self: *Compiler, node: *Node.Menu, data_writer: anytype, resource: ResourceType) !void {
2130 pub fn writeMenuData(self: *Compiler, node: *Node.Menu, data_writer: *std.Io.Writer, resource: ResourceType) !void {
21332131 // menu header
21342132 const version: u16 = if (resource == .menu) 0 else 1;
21352133 try data_writer.writeInt(u16, version, .little);
......@@ -2156,7 +2154,7 @@ pub const Compiler = struct {
21562154 }
21572155 }
21582156
2159 pub fn writeMenuItem(self: *Compiler, node: *Node, writer: anytype, is_last_of_parent: bool) !void {
2157 pub fn writeMenuItem(self: *Compiler, node: *Node, writer: *std.Io.Writer, is_last_of_parent: bool) !void {
21602158 switch (node.id) {
21612159 .menu_item_separator => {
21622160 // This is the 'alternate compability form' of the separator, see
......@@ -2356,8 +2354,9 @@ pub const Compiler = struct {
23562354 try fixed_file_info.write(data_writer);
23572355
23582356 for (node.block_statements) |statement| {
2359 self.writeVersionNode(statement, data_writer, &data_buffer) catch |err| switch (err) {
2360 error.NoSpaceLeft => {
2357 var adapted = data_writer.adaptToNewApi(&.{});
2358 self.writeVersionNode(statement, &adapted.new_interface, &data_buffer) catch |err| switch (err) {
2359 error.WriteFailed => {
23612360 try self.addErrorDetails(.{
23622361 .err = .version_node_size_exceeds_max,
23632362 .token = node.id,
......@@ -2395,7 +2394,7 @@ pub const Compiler = struct {
23952394 /// Expects writer to be a LimitedWriter limited to u16, meaning all writes to
23962395 /// the writer within this function could return error.NoSpaceLeft, and that buf.items.len
23972396 /// will never be able to exceed maxInt(u16).
2398 pub fn writeVersionNode(self: *Compiler, node: *Node, writer: anytype, buf: *std.ArrayList(u8)) !void {
2397 pub fn writeVersionNode(self: *Compiler, node: *Node, writer: *std.Io.Writer, buf: *std.ArrayList(u8)) !void {
23992398 // We can assume that buf.items.len will never be able to exceed the limits of a u16
24002399 try writeDataPadding(writer, @as(u16, @intCast(buf.items.len)));
24012400
......@@ -2700,12 +2699,12 @@ pub const Compiler = struct {
27002699 return self.writeSizeInfo(writer, size_info);
27012700 }
27022701
2703 pub fn writeSizeInfo(self: ResourceHeader, writer: anytype, size_info: SizeInfo) !void {
2702 pub fn writeSizeInfo(self: ResourceHeader, writer: *std.Io.Writer, size_info: SizeInfo) !void {
27042703 try writer.writeInt(DWORD, self.data_size, .little); // DataSize
27052704 try writer.writeInt(DWORD, size_info.bytes, .little); // HeaderSize
27062705 try self.type_value.write(writer); // TYPE
27072706 try self.name_value.write(writer); // NAME
2708 try writer.writeByteNTimes(0, size_info.padding_after_name);
2707 try writer.splatByteAll(0, size_info.padding_after_name);
27092708
27102709 try writer.writeInt(DWORD, self.data_version, .little); // DataVersion
27112710 try writer.writeInt(WORD, self.memory_flags.value, .little); // MemoryFlags
......@@ -3120,7 +3119,7 @@ pub const FontDir = struct {
31203119 // First, the ID is written, though
31213120 try writer.writeInt(u16, font.id, .little);
31223121 try writer.writeAll(&font.header_bytes);
3123 try writer.writeByteNTimes(0, 2);
3122 try writer.splatByteAll(0, 2);
31243123 }
31253124 try Compiler.writeDataPadding(writer, data_size);
31263125 }
lib/compiler/resinator/cvtres.zig+13-13
......@@ -188,7 +188,7 @@ pub const Diagnostics = union {
188188 overflow_resource: usize,
189189};
190190
191pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resource, options: CoffOptions, diagnostics: ?*Diagnostics) !void {
191pub fn writeCoff(allocator: Allocator, writer: *std.Io.Writer, resources: []const Resource, options: CoffOptions, diagnostics: ?*Diagnostics) !void {
192192 var resource_tree = ResourceTree.init(allocator, options);
193193 defer resource_tree.deinit();
194194
......@@ -232,7 +232,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
232232 .flags = flags,
233233 };
234234
235 try writer.writeStructEndian(coff_header, .little);
235 try writer.writeStruct(coff_header, .little);
236236
237237 const rsrc01_header = std.coff.SectionHeader{
238238 .name = ".rsrc$01".*,
......@@ -250,7 +250,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
250250 .MEM_READ = 1,
251251 },
252252 };
253 try writer.writeStructEndian(rsrc01_header, .little);
253 try writer.writeStruct(rsrc01_header, .little);
254254
255255 const rsrc02_header = std.coff.SectionHeader{
256256 .name = ".rsrc$02".*,
......@@ -268,7 +268,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
268268 .MEM_READ = 1,
269269 },
270270 };
271 try writer.writeStructEndian(rsrc02_header, .little);
271 try writer.writeStruct(rsrc02_header, .little);
272272
273273 // TODO: test surrogate pairs
274274 try resource_tree.sort();
......@@ -665,13 +665,13 @@ const ResourceTree = struct {
665665 pub fn writeCoff(
666666 self: *const ResourceTree,
667667 allocator: Allocator,
668 w: anytype,
668 w: *std.Io.Writer,
669669 resources_in_data_order: []const Resource,
670670 lengths: Lengths,
671671 coff_string_table: *StringTable,
672672 ) ![]const std.coff.Symbol {
673673 if (self.type_to_name_map.count() == 0) {
674 try w.writeByteNTimes(0, 16);
674 try w.splatByteAll(0, 16);
675675 return &.{};
676676 }
677677
......@@ -710,7 +710,7 @@ const ResourceTree = struct {
710710 .number_of_id_entries = counts.ids,
711711 .number_of_name_entries = counts.names,
712712 };
713 try w.writeStructEndian(table, .little);
713 try w.writeStruct(table, .little);
714714
715715 var it = self.type_to_name_map.iterator();
716716 while (it.next()) |entry| {
......@@ -745,7 +745,7 @@ const ResourceTree = struct {
745745 .number_of_id_entries = counts.ids,
746746 .number_of_name_entries = counts.names,
747747 };
748 try w.writeStructEndian(table, .little);
748 try w.writeStruct(table, .little);
749749
750750 var it = name_to_lang_map.iterator();
751751 while (it.next()) |entry| {
......@@ -786,7 +786,7 @@ const ResourceTree = struct {
786786 .number_of_id_entries = counts.ids,
787787 .number_of_name_entries = counts.names,
788788 };
789 try w.writeStructEndian(table, .little);
789 try w.writeStruct(table, .little);
790790
791791 var it = lang_to_resources_map.iterator();
792792 while (it.next()) |entry| {
......@@ -819,7 +819,7 @@ const ResourceTree = struct {
819819 .size = @intCast(orig_resource.data.len),
820820 .codepage = 0,
821821 };
822 try w.writeStructEndian(data_entry, .little);
822 try w.writeStruct(data_entry, .little);
823823 }
824824
825825 for (self.rsrc_string_table.keys()) |v| {
......@@ -828,7 +828,7 @@ const ResourceTree = struct {
828828 try w.writeAll(std.mem.sliceAsBytes(str));
829829 }
830830
831 try w.writeByteNTimes(0, lengths.padding);
831 try w.splatByteAll(0, lengths.padding);
832832
833833 for (relocations.list.items) |relocation| {
834834 try writeRelocation(w, std.coff.Relocation{
......@@ -842,13 +842,13 @@ const ResourceTree = struct {
842842 for (self.deduplicated_data.keys()) |data| {
843843 const padding_bytes: u4 = @intCast((8 -% data.len) % 8);
844844 try w.writeAll(data);
845 try w.writeByteNTimes(0, padding_bytes);
845 try w.splatByteAll(0, padding_bytes);
846846 }
847847 } else {
848848 for (resources_in_data_order) |resource| {
849849 const padding_bytes: u4 = @intCast((8 -% resource.data.len) % 8);
850850 try w.writeAll(resource.data);
851 try w.writeByteNTimes(0, padding_bytes);
851 try w.splatByteAll(0, padding_bytes);
852852 }
853853 }
854854
lib/compiler/resinator/main.zig+8-6
......@@ -248,10 +248,11 @@ pub fn main() !void {
248248 var diagnostics = Diagnostics.init(allocator);
249249 defer diagnostics.deinit();
250250
251 const res_stream_writer = res_stream.source.writer(allocator);
252 var output_buffered_stream = std.io.bufferedWriter(res_stream_writer);
251 var output_buffer: [4096]u8 = undefined;
252 var res_stream_writer = res_stream.source.writer(allocator).adaptToNewApi(&output_buffer);
253 const output_buffered_stream = &res_stream_writer.new_interface;
253254
254 compile(allocator, final_input, output_buffered_stream.writer(), .{
255 compile(allocator, final_input, output_buffered_stream, .{
255256 .cwd = std.fs.cwd(),
256257 .diagnostics = &diagnostics,
257258 .source_mappings = &mapping_results.mappings,
......@@ -340,10 +341,11 @@ pub fn main() !void {
340341 };
341342 defer coff_stream.deinit(allocator);
342343
343 var coff_output_buffered_stream = std.io.bufferedWriter(coff_stream.source.writer(allocator));
344 var coff_output_buffer: [4096]u8 = undefined;
345 var coff_output_buffered_stream = coff_stream.source.writer(allocator).adaptToNewApi(&coff_output_buffer);
344346
345347 var cvtres_diagnostics: cvtres.Diagnostics = .{ .none = {} };
346 cvtres.writeCoff(allocator, coff_output_buffered_stream.writer(), resources.list.items, options.coff_options, &cvtres_diagnostics) catch |err| {
348 cvtres.writeCoff(allocator, &coff_output_buffered_stream.new_interface, resources.list.items, options.coff_options, &cvtres_diagnostics) catch |err| {
347349 switch (err) {
348350 error.DuplicateResource => {
349351 const duplicate_resource = resources.list.items[cvtres_diagnostics.duplicate_resource];
......@@ -380,7 +382,7 @@ pub fn main() !void {
380382 std.process.exit(1);
381383 };
382384
383 try coff_output_buffered_stream.flush();
385 try coff_output_buffered_stream.new_interface.flush();
384386}
385387
386388const IoStream = struct {
lib/docs/wasm/markdown.zig+4-3
......@@ -159,9 +159,10 @@ fn mainImpl() !void {
159159 var doc = try parser.endInput();
160160 defer doc.deinit(gpa);
161161
162 var stdout_buf = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());
163 try doc.render(stdout_buf.writer());
164 try stdout_buf.flush();
162 var stdout_buffer: [1024]u8 = undefined;
163 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
164 try doc.render(&stdout_writer.interface);
165 try stdout_writer.interface.flush();
165166}
166167
167168test "empty document" {
lib/init/src/root.zig+4-5
......@@ -5,14 +5,13 @@ pub fn bufferedPrint() !void {
55 // Stdout is for the actual output of your application, for example if you
66 // are implementing gzip, then only the compressed bytes should be sent to
77 // stdout, not any debugging messages.
8 const stdout_file = std.fs.File.stdout().deprecatedWriter();
9 // Buffering can improve performance significantly in print-heavy programs.
10 var bw = std.io.bufferedWriter(stdout_file);
11 const stdout = bw.writer();
8 var stdout_buffer: [1024]u8 = undefined;
9 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
10 const stdout = &stdout_writer.interface;
1211
1312 try stdout.print("Run `zig build test` to run the tests.\n", .{});
1413
15 try bw.flush(); // Don't forget to flush!
14 try stdout.flush(); // Don't forget to flush!
1615}
1716
1817pub fn add(a: i32, b: i32) i32 {
lib/std/Io.zig-5
......@@ -423,10 +423,6 @@ pub fn GenericWriter(
423423pub const AnyReader = @import("Io/DeprecatedReader.zig");
424424/// Deprecated in favor of `Writer`.
425425pub const AnyWriter = @import("Io/DeprecatedWriter.zig");
426/// Deprecated in favor of `Writer`.
427pub const BufferedWriter = @import("Io/buffered_writer.zig").BufferedWriter;
428/// Deprecated in favor of `Writer`.
429pub const bufferedWriter = @import("Io/buffered_writer.zig").bufferedWriter;
430426/// Deprecated in favor of `Reader`.
431427pub const FixedBufferStream = @import("Io/fixed_buffer_stream.zig").FixedBufferStream;
432428/// Deprecated in favor of `Reader`.
......@@ -912,7 +908,6 @@ pub fn PollFiles(comptime StreamEnum: type) type {
912908test {
913909 _ = Reader;
914910 _ = Writer;
915 _ = BufferedWriter;
916911 _ = CountingReader;
917912 _ = FixedBufferStream;
918913 _ = tty;
lib/std/Io/buffered_writer.zig deleted-43
......@@ -1,43 +0,0 @@
1const std = @import("../std.zig");
2
3const io = std.io;
4const mem = std.mem;
5
6pub fn BufferedWriter(comptime buffer_size: usize, comptime WriterType: type) type {
7 return struct {
8 unbuffered_writer: WriterType,
9 buf: [buffer_size]u8 = undefined,
10 end: usize = 0,
11
12 pub const Error = WriterType.Error;
13 pub const Writer = io.GenericWriter(*Self, Error, write);
14
15 const Self = @This();
16
17 pub fn flush(self: *Self) !void {
18 try self.unbuffered_writer.writeAll(self.buf[0..self.end]);
19 self.end = 0;
20 }
21
22 pub fn writer(self: *Self) Writer {
23 return .{ .context = self };
24 }
25
26 pub fn write(self: *Self, bytes: []const u8) Error!usize {
27 if (self.end + bytes.len > self.buf.len) {
28 try self.flush();
29 if (bytes.len > self.buf.len)
30 return self.unbuffered_writer.write(bytes);
31 }
32
33 const new_end = self.end + bytes.len;
34 @memcpy(self.buf[self.end..new_end], bytes);
35 self.end = new_end;
36 return bytes.len;
37 }
38 };
39}
40
41pub fn bufferedWriter(underlying_stream: anytype) BufferedWriter(4096, @TypeOf(underlying_stream)) {
42 return .{ .unbuffered_writer = underlying_stream };
43}
lib/std/Io/test.zig+4-4
......@@ -24,12 +24,12 @@ test "write a file, read it, then delete it" {
2424 var file = try tmp.dir.createFile(tmp_file_name, .{});
2525 defer file.close();
2626
27 var buf_stream = io.bufferedWriter(file.deprecatedWriter());
28 const st = buf_stream.writer();
27 var file_writer = file.writer(&.{});
28 const st = &file_writer.interface;
2929 try st.print("begin", .{});
30 try st.writeAll(data[0..]);
30 try st.writeAll(&data);
3131 try st.print("end", .{});
32 try buf_stream.flush();
32 try st.flush();
3333 }
3434
3535 {
lib/std/zig/LibCInstallation.zig+1-1
......@@ -109,7 +109,7 @@ pub fn parse(
109109 return self;
110110}
111111
112pub fn render(self: LibCInstallation, out: anytype) !void {
112pub fn render(self: LibCInstallation, out: *std.Io.Writer) !void {
113113 @setEvalBranchQuota(4000);
114114 const include_dir = self.include_dir orelse "";
115115 const sys_include_dir = self.sys_include_dir orelse "";
src/Package/Fetch.zig+5-11
......@@ -1631,19 +1631,13 @@ fn computeHash(f: *Fetch, pkg_path: Cache.Path, filter: Filter) RunError!Compute
16311631}
16321632
16331633fn dumpHashInfo(all_files: []const *const HashedFile) !void {
1634 const stdout: std.fs.File = .stdout();
1635 var bw = std.io.bufferedWriter(stdout.deprecatedWriter());
1636 const w = bw.writer();
1637
1634 var stdout_buffer: [1024]u8 = undefined;
1635 var stdout_writer: fs.File.Writer = .initMode(.stdout(), &stdout_buffer, .streaming);
1636 const w = &stdout_writer.interface;
16381637 for (all_files) |hashed_file| {
1639 try w.print("{s}: {x}: {s}\n", .{
1640 @tagName(hashed_file.kind),
1641 &hashed_file.hash,
1642 hashed_file.normalized_path,
1643 });
1638 try w.print("{t}: {x}: {s}\n", .{ hashed_file.kind, &hashed_file.hash, hashed_file.normalized_path });
16441639 }
1645
1646 try bw.flush();
1640 try w.flush();
16471641}
16481642
16491643fn workerHashFile(dir: fs.Dir, hashed_file: *HashedFile) void {
src/link/Lld.zig+4-3
......@@ -1662,8 +1662,9 @@ fn spawnLld(
16621662 log.warn("failed to delete response file {s}: {s}", .{ rsp_path, @errorName(err) });
16631663 {
16641664 defer rsp_file.close();
1665 var rsp_buf = std.io.bufferedWriter(rsp_file.deprecatedWriter());
1666 const rsp_writer = rsp_buf.writer();
1665 var rsp_file_buffer: [1024]u8 = undefined;
1666 var rsp_file_writer = rsp_file.writer(&rsp_file_buffer);
1667 const rsp_writer = &rsp_file_writer.interface;
16671668 for (argv[2..]) |arg| {
16681669 try rsp_writer.writeByte('"');
16691670 for (arg) |c| {
......@@ -1676,7 +1677,7 @@ fn spawnLld(
16761677 try rsp_writer.writeByte('"');
16771678 try rsp_writer.writeByte('\n');
16781679 }
1679 try rsp_buf.flush();
1680 try rsp_writer.flush();
16801681 }
16811682
16821683 var rsp_child = std.process.Child.init(&.{ argv[0], argv[1], try std.fmt.allocPrint(
tools/docgen.zig+4-4
......@@ -70,19 +70,19 @@ pub fn main() !void {
7070
7171 var out_file = try fs.cwd().createFile(output_path, .{});
7272 defer out_file.close();
73 var out_file_buffer: [4096]u8 = undefined;
74 var out_file_writer = out_file.writer(&out_file_buffer);
7375
7476 var code_dir = try fs.cwd().openDir(code_dir_path, .{});
7577 defer code_dir.close();
7678
7779 const input_file_bytes = try in_file.deprecatedReader().readAllAlloc(arena, max_doc_file_size);
7880
79 var buffered_writer = io.bufferedWriter(out_file.deprecatedWriter());
80
8181 var tokenizer = Tokenizer.init(input_path, input_file_bytes);
8282 var toc = try genToc(arena, &tokenizer);
8383
84 try genHtml(arena, &tokenizer, &toc, code_dir, buffered_writer.writer());
85 try buffered_writer.flush();
84 try genHtml(arena, &tokenizer, &toc, code_dir, &out_file_writer.interface);
85 try out_file_writer.end();
8686}
8787
8888const Token = struct {
tools/doctest.zig+4-3
......@@ -84,9 +84,10 @@ pub fn main() !void {
8484
8585 var out_file = try fs.cwd().createFile(output_path, .{});
8686 defer out_file.close();
87 var out_file_buffer: [4096]u8 = undefined;
88 var out_file_writer = out_file.writer(&out_file_buffer);
8789
88 var bw = std.io.bufferedWriter(out_file.deprecatedWriter());
89 const out = bw.writer();
90 const out = &out_file_writer.interface;
9091
9192 try printSourceBlock(arena, out, source, fs.path.basename(input_path));
9293 try printOutput(
......@@ -102,7 +103,7 @@ pub fn main() !void {
102103 null,
103104 );
104105
105 try bw.flush();
106 try out_file_writer.end();
106107}
107108
108109fn printOutput(
tools/migrate_langref.zig+4-4
......@@ -23,19 +23,19 @@ pub fn main() !void {
2323
2424 var out_file = try fs.cwd().createFile(output_file, .{});
2525 defer out_file.close();
26 var out_file_buffer: [4096]u8 = undefined;
27 var out_file_writer = out_file.writer(&out_file_buffer);
2628
2729 var out_dir = try fs.cwd().openDir(fs.path.dirname(output_file).?, .{});
2830 defer out_dir.close();
2931
3032 const input_file_bytes = try in_file.deprecatedReader().readAllAlloc(arena, std.math.maxInt(u32));
3133
32 var buffered_writer = io.bufferedWriter(out_file.deprecatedWriter());
33
3434 var tokenizer = Tokenizer.init(input_file, input_file_bytes);
3535
36 try walk(arena, &tokenizer, out_dir, buffered_writer.writer());
36 try walk(arena, &tokenizer, out_dir, &out_file_writer.interface);
3737
38 try buffered_writer.flush();
38 try out_file_writer.end();
3939}
4040
4141const Token = struct {
tools/update_cpu_features.zig+4-3
......@@ -1906,8 +1906,9 @@ fn processOneTarget(job: Job) void {
19061906 var zig_code_file = try target_dir.createFile(zig_code_basename, .{});
19071907 defer zig_code_file.close();
19081908
1909 var bw = std.io.bufferedWriter(zig_code_file.deprecatedWriter());
1910 const w = bw.writer();
1909 var zig_code_file_buffer: [4096]u8 = undefined;
1910 var zig_code_file_writer = zig_code_file.writer(&zig_code_file_buffer);
1911 const w = &zig_code_file_writer.interface;
19111912
19121913 try w.writeAll(
19131914 \\//! This file is auto-generated by tools/update_cpu_features.zig.
......@@ -2076,7 +2077,7 @@ fn processOneTarget(job: Job) void {
20762077 \\};
20772078 \\
20782079 );
2079 try bw.flush();
2080 try w.flush();
20802081
20812082 render_progress.end();
20822083}
tools/update_crc_catalog.zig+9-8
......@@ -29,10 +29,9 @@ pub fn main() anyerror!void {
2929
3030 var zig_code_file = try hash_target_dir.createFile("crc.zig", .{});
3131 defer zig_code_file.close();
32
33 var cbw = std.io.bufferedWriter(zig_code_file.deprecatedWriter());
34 defer cbw.flush() catch unreachable;
35 const code_writer = cbw.writer();
32 var zig_code_file_buffer: [4096]u8 = undefined;
33 var zig_code_file_writer = zig_code_file.writer(&zig_code_file_buffer);
34 const code_writer = &zig_code_file_writer.interface;
3635
3736 try code_writer.writeAll(
3837 \\//! This file is auto-generated by tools/update_crc_catalog.zig.
......@@ -54,10 +53,9 @@ pub fn main() anyerror!void {
5453
5554 var zig_test_file = try crc_target_dir.createFile("test.zig", .{});
5655 defer zig_test_file.close();
57
58 var tbw = std.io.bufferedWriter(zig_test_file.deprecatedWriter());
59 defer tbw.flush() catch unreachable;
60 const test_writer = tbw.writer();
56 var zig_test_file_buffer: [4096]u8 = undefined;
57 var zig_test_file_writer = zig_test_file.writer(&zig_test_file_buffer);
58 const test_writer = &zig_test_file_writer.interface;
6159
6260 try test_writer.writeAll(
6361 \\//! This file is auto-generated by tools/update_crc_catalog.zig.
......@@ -187,6 +185,9 @@ pub fn main() anyerror!void {
187185 \\
188186 , .{ name, camelcase, width, check }));
189187 }
188
189 try code_writer.flush();
190 try test_writer.flush();
190191}
191192
192193fn printUsageAndExit(arg0: []const u8) noreturn {