authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-09 16:28:19-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-08-09 16:28:19-07:00
log0a1a738320219961c0809a92ac7607a5525aa33e
tree9d3e2bf0948d131628f12a1fa6a5f2242ef2f334
parent14f11377cbcc4ff2da75e3dee9bb1d9e06013de1
parent045bb1489767961857085d89645de6bd1d17847d
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #24743 from ziglang/BufferedWriter

std.Io: delete BufferedWriter

24 files changed, 128 insertions(+), 179 deletions(-)

lib/compiler/aro/aro/Driver.zig+12-12
...@@ -585,6 +585,8 @@ pub fn errorDescription(e: anyerror) []const u8 {...@@ -585,6 +585,8 @@ pub fn errorDescription(e: anyerror) []const u8 {
585 };585 };
586}586}
587587
588var stdout_buffer: [4096]u8 = undefined;
589
588/// The entry point of the Aro compiler.590/// The entry point of the Aro compiler.
589/// **MAY call `exit` if `fast_exit` is set.**591/// **MAY call `exit` if `fast_exit` is set.**
590pub fn main(d: *Driver, tc: *Toolchain, args: []const []const u8, comptime fast_exit: bool) !void {592pub fn main(d: *Driver, tc: *Toolchain, args: []const []const u8, comptime fast_exit: bool) !void {
...@@ -688,13 +690,13 @@ fn processSource(...@@ -688,13 +690,13 @@ fn processSource(
688 else690 else
689 std.fs.File.stdout();691 std.fs.File.stdout();
690 defer if (d.output_name != null) file.close();692 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());696 pp.prettyPrintTokens(&file_writer.interface, dump_mode) catch |er|
693
694 pp.prettyPrintTokens(buf_w.writer(), dump_mode) catch |er|
695 return d.fatal("unable to write result: {s}", .{errorDescription(er)});697 return d.fatal("unable to write result: {s}", .{errorDescription(er)});
696698
697 buf_w.flush() catch |er|699 file_writer.interface.flush() catch |er|
698 return d.fatal("unable to write result: {s}", .{errorDescription(er)});700 return d.fatal("unable to write result: {s}", .{errorDescription(er)});
699 if (fast_exit) std.process.exit(0); // Not linking, no need for cleanup.701 if (fast_exit) std.process.exit(0); // Not linking, no need for cleanup.
700 return;702 return;
...@@ -704,10 +706,9 @@ fn processSource(...@@ -704,10 +706,9 @@ fn processSource(
704 defer tree.deinit();706 defer tree.deinit();
705707
706 if (d.verbose_ast) {708 if (d.verbose_ast) {
707 const stdout = std.fs.File.stdout();709 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
708 var buf_writer = std.io.bufferedWriter(stdout.deprecatedWriter());710 tree.dump(d.detectConfig(.stdout()), &stdout_writer.interface) catch {};
709 tree.dump(d.detectConfig(stdout), buf_writer.writer()) catch {};711 stdout_writer.interface.flush() catch {};
710 buf_writer.flush() catch {};
711 }712 }
712713
713 const prev_errors = d.comp.diagnostics.errors;714 const prev_errors = d.comp.diagnostics.errors;
...@@ -734,10 +735,9 @@ fn processSource(...@@ -734,10 +735,9 @@ fn processSource(
734 defer ir.deinit(d.comp.gpa);735 defer ir.deinit(d.comp.gpa);
735736
736 if (d.verbose_ir) {737 if (d.verbose_ir) {
737 const stdout = std.fs.File.stdout();738 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
738 var buf_writer = std.io.bufferedWriter(stdout.deprecatedWriter());739 ir.dump(d.comp.gpa, d.detectConfig(.stdout()), &stdout_writer.interface) catch {};
739 ir.dump(d.comp.gpa, d.detectConfig(stdout), buf_writer.writer()) catch {};740 stdout_writer.interface.flush() catch {};
740 buf_writer.flush() catch {};
741 }741 }
742742
743 var render_errors: Ir.Renderer.ErrorList = .{};743 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:...@@ -811,10 +811,9 @@ fn verboseLog(pp: *Preprocessor, raw: RawToken, comptime fmt: []const u8, args:
811 const source = pp.comp.getSource(raw.source);811 const source = pp.comp.getSource(raw.source);
812 const line_col = source.lineCol(.{ .id = raw.source, .line = raw.line, .byte_offset = raw.start });812 const line_col = source.lineCol(.{ .id = raw.source, .line = raw.line, .byte_offset = raw.start });
813813
814 const stderr = std.fs.File.stderr().deprecatedWriter();814 var stderr_buffer: [64]u8 = undefined;
815 var buf_writer = std.io.bufferedWriter(stderr);815 var writer = std.debug.lockStderrWriter(&stderr_buffer);
816 const writer = buf_writer.writer();816 defer std.debug.unlockStderrWriter();
817 defer buf_writer.flush() catch {};
818 writer.print("{s}:{d}:{d}: ", .{ source.path, line_col.line_no, line_col.col }) catch return;817 writer.print("{s}:{d}:{d}: ", .{ source.path, line_col.line_no, line_col.col }) catch return;
819 writer.print(fmt, args) catch return;818 writer.print(fmt, args) catch return;
820 writer.writeByte('\n') catch return;819 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,...@@ -171,8 +171,9 @@ pub fn addRelocation(elf: *Elf, name: []const u8, section_kind: Object.Section,
171/// strtab171/// strtab
172/// section headers172/// section headers
173pub fn finish(elf: *Elf, file: std.fs.File) !void {173pub fn finish(elf: *Elf, file: std.fs.File) !void {
174 var buf_writer = std.io.bufferedWriter(file.deprecatedWriter());174 var file_buffer: [1024]u8 = undefined;
175 const w = buf_writer.writer();175 var file_writer = file.writer(&file_buffer);
176 const w = &file_writer.interface;
176177
177 var num_sections: std.elf.Elf64_Half = additional_sections;178 var num_sections: std.elf.Elf64_Half = additional_sections;
178 var relocations_len: std.elf.Elf64_Off = 0;179 var relocations_len: std.elf.Elf64_Off = 0;
...@@ -374,5 +375,5 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {...@@ -374,5 +375,5 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
374 name_offset += @as(u32, @intCast(entry.key_ptr.len + ".\x00".len)) + rela_name_offset;375 name_offset += @as(u32, @intCast(entry.key_ptr.len + ".\x00".len)) + rela_name_offset;
375 }376 }
376 }377 }
377 try buf_writer.flush();378 try w.flush();
378}379}
lib/compiler/libc.zig+10-9
...@@ -22,6 +22,8 @@ const usage_libc =...@@ -22,6 +22,8 @@ const usage_libc =
22 \\22 \\
23;23;
2424
25var stdout_buffer: [4096]u8 = undefined;
26
25pub fn main() !void {27pub fn main() !void {
26 var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);28 var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);
27 defer arena_instance.deinit();29 defer arena_instance.deinit();
...@@ -34,14 +36,16 @@ pub fn main() !void {...@@ -34,14 +36,16 @@ pub fn main() !void {
34 var input_file: ?[]const u8 = null;36 var input_file: ?[]const u8 = null;
35 var target_arch_os_abi: []const u8 = "native";37 var target_arch_os_abi: []const u8 = "native";
36 var print_includes: bool = false;38 var print_includes: bool = false;
39 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
40 const stdout = &stdout_writer.interface;
37 {41 {
38 var i: usize = 2;42 var i: usize = 2;
39 while (i < args.len) : (i += 1) {43 while (i < args.len) : (i += 1) {
40 const arg = args[i];44 const arg = args[i];
41 if (mem.startsWith(u8, arg, "-")) {45 if (mem.startsWith(u8, arg, "-")) {
42 if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) {46 if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) {
43 const stdout = std.fs.File.stdout().deprecatedWriter();
44 try stdout.writeAll(usage_libc);47 try stdout.writeAll(usage_libc);
48 try stdout.flush();
45 return std.process.cleanExit();49 return std.process.cleanExit();
46 } else if (mem.eql(u8, arg, "-target")) {50 } else if (mem.eql(u8, arg, "-target")) {
47 if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg});51 if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg});
...@@ -97,13 +101,11 @@ pub fn main() !void {...@@ -97,13 +101,11 @@ pub fn main() !void {
97 fatal("no include dirs detected for target {s}", .{zig_target});101 fatal("no include dirs detected for target {s}", .{zig_target});
98 }102 }
99103
100 var bw = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());
101 var writer = bw.writer();
102 for (libc_dirs.libc_include_dir_list) |include_dir| {104 for (libc_dirs.libc_include_dir_list) |include_dir| {
103 try writer.writeAll(include_dir);105 try stdout.writeAll(include_dir);
104 try writer.writeByte('\n');106 try stdout.writeByte('\n');
105 }107 }
106 try bw.flush();108 try stdout.flush();
107 return std.process.cleanExit();109 return std.process.cleanExit();
108 }110 }
109111
...@@ -125,9 +127,8 @@ pub fn main() !void {...@@ -125,9 +127,8 @@ pub fn main() !void {
125 };127 };
126 defer libc.deinit(gpa);128 defer libc.deinit(gpa);
127129
128 var bw = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());130 try libc.render(stdout);
129 try libc.render(bw.writer());131 try stdout.flush();
130 try bw.flush();
131 }132 }
132}133}
133134
lib/compiler/resinator/compile.zig+17-18
...@@ -1268,12 +1268,8 @@ pub const Compiler = struct {...@@ -1268,12 +1268,8 @@ pub const Compiler = struct {
1268 try header.write(writer, self.errContext(id_token));1268 try header.write(writer, self.errContext(id_token));
1269 }1269 }
12701270
1271 pub fn writeResourceDataNoPadding(writer: anytype, data_reader: *std.Io.Reader, data_size: u32) !void {1271 pub fn writeResourceDataNoPadding(writer: *std.Io.Writer, data_reader: *std.Io.Reader, data_size: u32) !void {
1272 var adapted = writer.adaptToNewApi();1272 try data_reader.streamExact(writer, data_size);
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();
1277 }1273 }
12781274
1279 pub fn writeResourceData(writer: anytype, data_reader: *std.Io.Reader, data_size: u32) !void {1275 pub fn writeResourceData(writer: anytype, data_reader: *std.Io.Reader, data_size: u32) !void {
...@@ -1281,8 +1277,8 @@ pub const Compiler = struct {...@@ -1281,8 +1277,8 @@ pub const Compiler = struct {
1281 try writeDataPadding(writer, data_size);1277 try writeDataPadding(writer, data_size);
1282 }1278 }
12831279
1284 pub fn writeDataPadding(writer: anytype, data_size: u32) !void {1280 pub fn writeDataPadding(writer: *std.Io.Writer, data_size: u32) !void {
1285 try writer.writeByteNTimes(0, numPaddingBytesNeeded(data_size));1281 try writer.splatByteAll(0, numPaddingBytesNeeded(data_size));
1286 }1282 }
12871283
1288 pub fn numPaddingBytesNeeded(data_size: u32) u2 {1284 pub fn numPaddingBytesNeeded(data_size: u32) u2 {
...@@ -2100,8 +2096,10 @@ pub const Compiler = struct {...@@ -2100,8 +2096,10 @@ pub const Compiler = struct {
2100 const resource = ResourceType.fromString(type_bytes);2096 const resource = ResourceType.fromString(type_bytes);
2101 std.debug.assert(resource == .menu or resource == .menuex);2097 std.debug.assert(resource == .menu or resource == .menuex);
21022098
2103 self.writeMenuData(node, data_writer, resource) catch |err| switch (err) {2099 var adapted = data_writer.adaptToNewApi(&.{});
2104 error.NoSpaceLeft => {2100
2101 self.writeMenuData(node, &adapted.new_interface, resource) catch |err| switch (err) {
2102 error.WriteFailed => {
2105 return self.addErrorDetailsAndFail(.{2103 return self.addErrorDetailsAndFail(.{
2106 .err = .resource_data_size_exceeds_max,2104 .err = .resource_data_size_exceeds_max,
2107 .token = node.id,2105 .token = node.id,
...@@ -2129,7 +2127,7 @@ pub const Compiler = struct {...@@ -2129,7 +2127,7 @@ pub const Compiler = struct {
21292127
2130 /// Expects `data_writer` to be a LimitedWriter limited to u32, meaning all writes to2128 /// Expects `data_writer` to be a LimitedWriter limited to u32, meaning all writes to
2131 /// the writer within this function could return error.NoSpaceLeft2129 /// 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 {
2133 // menu header2131 // menu header
2134 const version: u16 = if (resource == .menu) 0 else 1;2132 const version: u16 = if (resource == .menu) 0 else 1;
2135 try data_writer.writeInt(u16, version, .little);2133 try data_writer.writeInt(u16, version, .little);
...@@ -2156,7 +2154,7 @@ pub const Compiler = struct {...@@ -2156,7 +2154,7 @@ pub const Compiler = struct {
2156 }2154 }
2157 }2155 }
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 {
2160 switch (node.id) {2158 switch (node.id) {
2161 .menu_item_separator => {2159 .menu_item_separator => {
2162 // This is the 'alternate compability form' of the separator, see2160 // This is the 'alternate compability form' of the separator, see
...@@ -2356,8 +2354,9 @@ pub const Compiler = struct {...@@ -2356,8 +2354,9 @@ pub const Compiler = struct {
2356 try fixed_file_info.write(data_writer);2354 try fixed_file_info.write(data_writer);
23572355
2358 for (node.block_statements) |statement| {2356 for (node.block_statements) |statement| {
2359 self.writeVersionNode(statement, data_writer, &data_buffer) catch |err| switch (err) {2357 var adapted = data_writer.adaptToNewApi(&.{});
2360 error.NoSpaceLeft => {2358 self.writeVersionNode(statement, &adapted.new_interface, &data_buffer) catch |err| switch (err) {
2359 error.WriteFailed => {
2361 try self.addErrorDetails(.{2360 try self.addErrorDetails(.{
2362 .err = .version_node_size_exceeds_max,2361 .err = .version_node_size_exceeds_max,
2363 .token = node.id,2362 .token = node.id,
...@@ -2395,7 +2394,7 @@ pub const Compiler = struct {...@@ -2395,7 +2394,7 @@ pub const Compiler = struct {
2395 /// Expects writer to be a LimitedWriter limited to u16, meaning all writes to2394 /// Expects writer to be a LimitedWriter limited to u16, meaning all writes to
2396 /// the writer within this function could return error.NoSpaceLeft, and that buf.items.len2395 /// the writer within this function could return error.NoSpaceLeft, and that buf.items.len
2397 /// will never be able to exceed maxInt(u16).2396 /// 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 {
2399 // We can assume that buf.items.len will never be able to exceed the limits of a u162398 // We can assume that buf.items.len will never be able to exceed the limits of a u16
2400 try writeDataPadding(writer, @as(u16, @intCast(buf.items.len)));2399 try writeDataPadding(writer, @as(u16, @intCast(buf.items.len)));
24012400
...@@ -2700,12 +2699,12 @@ pub const Compiler = struct {...@@ -2700,12 +2699,12 @@ pub const Compiler = struct {
2700 return self.writeSizeInfo(writer, size_info);2699 return self.writeSizeInfo(writer, size_info);
2701 }2700 }
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 {
2704 try writer.writeInt(DWORD, self.data_size, .little); // DataSize2703 try writer.writeInt(DWORD, self.data_size, .little); // DataSize
2705 try writer.writeInt(DWORD, size_info.bytes, .little); // HeaderSize2704 try writer.writeInt(DWORD, size_info.bytes, .little); // HeaderSize
2706 try self.type_value.write(writer); // TYPE2705 try self.type_value.write(writer); // TYPE
2707 try self.name_value.write(writer); // NAME2706 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
2710 try writer.writeInt(DWORD, self.data_version, .little); // DataVersion2709 try writer.writeInt(DWORD, self.data_version, .little); // DataVersion
2711 try writer.writeInt(WORD, self.memory_flags.value, .little); // MemoryFlags2710 try writer.writeInt(WORD, self.memory_flags.value, .little); // MemoryFlags
...@@ -3120,7 +3119,7 @@ pub const FontDir = struct {...@@ -3120,7 +3119,7 @@ pub const FontDir = struct {
3120 // First, the ID is written, though3119 // First, the ID is written, though
3121 try writer.writeInt(u16, font.id, .little);3120 try writer.writeInt(u16, font.id, .little);
3122 try writer.writeAll(&font.header_bytes);3121 try writer.writeAll(&font.header_bytes);
3123 try writer.writeByteNTimes(0, 2);3122 try writer.splatByteAll(0, 2);
3124 }3123 }
3125 try Compiler.writeDataPadding(writer, data_size);3124 try Compiler.writeDataPadding(writer, data_size);
3126 }3125 }
lib/compiler/resinator/cvtres.zig+13-13
...@@ -188,7 +188,7 @@ pub const Diagnostics = union {...@@ -188,7 +188,7 @@ pub const Diagnostics = union {
188 overflow_resource: usize,188 overflow_resource: usize,
189};189};
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 {
192 var resource_tree = ResourceTree.init(allocator, options);192 var resource_tree = ResourceTree.init(allocator, options);
193 defer resource_tree.deinit();193 defer resource_tree.deinit();
194194
...@@ -232,7 +232,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou...@@ -232,7 +232,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
232 .flags = flags,232 .flags = flags,
233 };233 };
234234
235 try writer.writeStructEndian(coff_header, .little);235 try writer.writeStruct(coff_header, .little);
236236
237 const rsrc01_header = std.coff.SectionHeader{237 const rsrc01_header = std.coff.SectionHeader{
238 .name = ".rsrc$01".*,238 .name = ".rsrc$01".*,
...@@ -250,7 +250,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou...@@ -250,7 +250,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
250 .MEM_READ = 1,250 .MEM_READ = 1,
251 },251 },
252 };252 };
253 try writer.writeStructEndian(rsrc01_header, .little);253 try writer.writeStruct(rsrc01_header, .little);
254254
255 const rsrc02_header = std.coff.SectionHeader{255 const rsrc02_header = std.coff.SectionHeader{
256 .name = ".rsrc$02".*,256 .name = ".rsrc$02".*,
...@@ -268,7 +268,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou...@@ -268,7 +268,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
268 .MEM_READ = 1,268 .MEM_READ = 1,
269 },269 },
270 };270 };
271 try writer.writeStructEndian(rsrc02_header, .little);271 try writer.writeStruct(rsrc02_header, .little);
272272
273 // TODO: test surrogate pairs273 // TODO: test surrogate pairs
274 try resource_tree.sort();274 try resource_tree.sort();
...@@ -665,13 +665,13 @@ const ResourceTree = struct {...@@ -665,13 +665,13 @@ const ResourceTree = struct {
665 pub fn writeCoff(665 pub fn writeCoff(
666 self: *const ResourceTree,666 self: *const ResourceTree,
667 allocator: Allocator,667 allocator: Allocator,
668 w: anytype,668 w: *std.Io.Writer,
669 resources_in_data_order: []const Resource,669 resources_in_data_order: []const Resource,
670 lengths: Lengths,670 lengths: Lengths,
671 coff_string_table: *StringTable,671 coff_string_table: *StringTable,
672 ) ![]const std.coff.Symbol {672 ) ![]const std.coff.Symbol {
673 if (self.type_to_name_map.count() == 0) {673 if (self.type_to_name_map.count() == 0) {
674 try w.writeByteNTimes(0, 16);674 try w.splatByteAll(0, 16);
675 return &.{};675 return &.{};
676 }676 }
677677
...@@ -710,7 +710,7 @@ const ResourceTree = struct {...@@ -710,7 +710,7 @@ const ResourceTree = struct {
710 .number_of_id_entries = counts.ids,710 .number_of_id_entries = counts.ids,
711 .number_of_name_entries = counts.names,711 .number_of_name_entries = counts.names,
712 };712 };
713 try w.writeStructEndian(table, .little);713 try w.writeStruct(table, .little);
714714
715 var it = self.type_to_name_map.iterator();715 var it = self.type_to_name_map.iterator();
716 while (it.next()) |entry| {716 while (it.next()) |entry| {
...@@ -745,7 +745,7 @@ const ResourceTree = struct {...@@ -745,7 +745,7 @@ const ResourceTree = struct {
745 .number_of_id_entries = counts.ids,745 .number_of_id_entries = counts.ids,
746 .number_of_name_entries = counts.names,746 .number_of_name_entries = counts.names,
747 };747 };
748 try w.writeStructEndian(table, .little);748 try w.writeStruct(table, .little);
749749
750 var it = name_to_lang_map.iterator();750 var it = name_to_lang_map.iterator();
751 while (it.next()) |entry| {751 while (it.next()) |entry| {
...@@ -786,7 +786,7 @@ const ResourceTree = struct {...@@ -786,7 +786,7 @@ const ResourceTree = struct {
786 .number_of_id_entries = counts.ids,786 .number_of_id_entries = counts.ids,
787 .number_of_name_entries = counts.names,787 .number_of_name_entries = counts.names,
788 };788 };
789 try w.writeStructEndian(table, .little);789 try w.writeStruct(table, .little);
790790
791 var it = lang_to_resources_map.iterator();791 var it = lang_to_resources_map.iterator();
792 while (it.next()) |entry| {792 while (it.next()) |entry| {
...@@ -819,7 +819,7 @@ const ResourceTree = struct {...@@ -819,7 +819,7 @@ const ResourceTree = struct {
819 .size = @intCast(orig_resource.data.len),819 .size = @intCast(orig_resource.data.len),
820 .codepage = 0,820 .codepage = 0,
821 };821 };
822 try w.writeStructEndian(data_entry, .little);822 try w.writeStruct(data_entry, .little);
823 }823 }
824824
825 for (self.rsrc_string_table.keys()) |v| {825 for (self.rsrc_string_table.keys()) |v| {
...@@ -828,7 +828,7 @@ const ResourceTree = struct {...@@ -828,7 +828,7 @@ const ResourceTree = struct {
828 try w.writeAll(std.mem.sliceAsBytes(str));828 try w.writeAll(std.mem.sliceAsBytes(str));
829 }829 }
830830
831 try w.writeByteNTimes(0, lengths.padding);831 try w.splatByteAll(0, lengths.padding);
832832
833 for (relocations.list.items) |relocation| {833 for (relocations.list.items) |relocation| {
834 try writeRelocation(w, std.coff.Relocation{834 try writeRelocation(w, std.coff.Relocation{
...@@ -842,13 +842,13 @@ const ResourceTree = struct {...@@ -842,13 +842,13 @@ const ResourceTree = struct {
842 for (self.deduplicated_data.keys()) |data| {842 for (self.deduplicated_data.keys()) |data| {
843 const padding_bytes: u4 = @intCast((8 -% data.len) % 8);843 const padding_bytes: u4 = @intCast((8 -% data.len) % 8);
844 try w.writeAll(data);844 try w.writeAll(data);
845 try w.writeByteNTimes(0, padding_bytes);845 try w.splatByteAll(0, padding_bytes);
846 }846 }
847 } else {847 } else {
848 for (resources_in_data_order) |resource| {848 for (resources_in_data_order) |resource| {
849 const padding_bytes: u4 = @intCast((8 -% resource.data.len) % 8);849 const padding_bytes: u4 = @intCast((8 -% resource.data.len) % 8);
850 try w.writeAll(resource.data);850 try w.writeAll(resource.data);
851 try w.writeByteNTimes(0, padding_bytes);851 try w.splatByteAll(0, padding_bytes);
852 }852 }
853 }853 }
854854
lib/compiler/resinator/main.zig+8-6
...@@ -248,10 +248,11 @@ pub fn main() !void {...@@ -248,10 +248,11 @@ pub fn main() !void {
248 var diagnostics = Diagnostics.init(allocator);248 var diagnostics = Diagnostics.init(allocator);
249 defer diagnostics.deinit();249 defer diagnostics.deinit();
250250
251 const res_stream_writer = res_stream.source.writer(allocator);251 var output_buffer: [4096]u8 = undefined;
252 var output_buffered_stream = std.io.bufferedWriter(res_stream_writer);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, .{
255 .cwd = std.fs.cwd(),256 .cwd = std.fs.cwd(),
256 .diagnostics = &diagnostics,257 .diagnostics = &diagnostics,
257 .source_mappings = &mapping_results.mappings,258 .source_mappings = &mapping_results.mappings,
...@@ -340,10 +341,11 @@ pub fn main() !void {...@@ -340,10 +341,11 @@ pub fn main() !void {
340 };341 };
341 defer coff_stream.deinit(allocator);342 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
345 var cvtres_diagnostics: cvtres.Diagnostics = .{ .none = {} };347 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| {
347 switch (err) {349 switch (err) {
348 error.DuplicateResource => {350 error.DuplicateResource => {
349 const duplicate_resource = resources.list.items[cvtres_diagnostics.duplicate_resource];351 const duplicate_resource = resources.list.items[cvtres_diagnostics.duplicate_resource];
...@@ -380,7 +382,7 @@ pub fn main() !void {...@@ -380,7 +382,7 @@ pub fn main() !void {
380 std.process.exit(1);382 std.process.exit(1);
381 };383 };
382384
383 try coff_output_buffered_stream.flush();385 try coff_output_buffered_stream.new_interface.flush();
384}386}
385387
386const IoStream = struct {388const IoStream = struct {
lib/compiler/std-docs.zig+8-11
...@@ -93,9 +93,12 @@ pub fn main() !void {...@@ -93,9 +93,12 @@ pub fn main() !void {
93fn accept(context: *Context, connection: std.net.Server.Connection) void {93fn accept(context: *Context, connection: std.net.Server.Connection) void {
94 defer connection.stream.close();94 defer connection.stream.close();
9595
96 var read_buffer: [8000]u8 = undefined;96 var recv_buffer: [4000]u8 = undefined;
97 var server = std.http.Server.init(connection, &read_buffer);97 var send_buffer: [4000]u8 = undefined;
98 while (server.state == .ready) {98 var conn_reader = connection.stream.reader(&recv_buffer);
99 var conn_writer = connection.stream.writer(&send_buffer);
100 var server = std.http.Server.init(conn_reader.interface(), &conn_writer.interface);
101 while (server.reader.state == .ready) {
99 var request = server.receiveHead() catch |err| switch (err) {102 var request = server.receiveHead() catch |err| switch (err) {
100 error.HttpConnectionClosing => return,103 error.HttpConnectionClosing => return,
101 else => {104 else => {
...@@ -175,8 +178,7 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {...@@ -175,8 +178,7 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
175 const gpa = context.gpa;178 const gpa = context.gpa;
176179
177 var send_buffer: [0x4000]u8 = undefined;180 var send_buffer: [0x4000]u8 = undefined;
178 var response = request.respondStreaming(.{181 var response = try request.respondStreaming(&send_buffer, .{
179 .send_buffer = &send_buffer,
180 .respond_options = .{182 .respond_options = .{
181 .extra_headers = &.{183 .extra_headers = &.{
182 .{ .name = "content-type", .value = "application/x-tar" },184 .{ .name = "content-type", .value = "application/x-tar" },
...@@ -191,11 +193,7 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {...@@ -191,11 +193,7 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
191 var walker = try std_dir.walk(gpa);193 var walker = try std_dir.walk(gpa);
192 defer walker.deinit();194 defer walker.deinit();
193195
194 var adapter_buffer: [500]u8 = undefined;196 var archiver: std.tar.Writer = .{ .underlying_writer = &response.writer };
195 var response_writer = response.writer().adaptToNewApi();
196 response_writer.new_interface.buffer = &adapter_buffer;
197
198 var archiver: std.tar.Writer = .{ .underlying_writer = &response_writer.new_interface };
199 archiver.prefix = "std";197 archiver.prefix = "std";
200198
201 while (try walker.next()) |entry| {199 while (try walker.next()) |entry| {
...@@ -229,7 +227,6 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {...@@ -229,7 +227,6 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
229227
230 // intentionally omitting the pointless trailer228 // intentionally omitting the pointless trailer
231 //try archiver.finish();229 //try archiver.finish();
232 try response_writer.new_interface.flush();
233 try response.end();230 try response.end();
234}231}
235232
lib/docs/wasm/markdown.zig+4-3
...@@ -159,9 +159,10 @@ fn mainImpl() !void {...@@ -159,9 +159,10 @@ fn mainImpl() !void {
159 var doc = try parser.endInput();159 var doc = try parser.endInput();
160 defer doc.deinit(gpa);160 defer doc.deinit(gpa);
161161
162 var stdout_buf = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());162 var stdout_buffer: [1024]u8 = undefined;
163 try doc.render(stdout_buf.writer());163 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
164 try stdout_buf.flush();164 try doc.render(&stdout_writer.interface);
165 try stdout_writer.interface.flush();
165}166}
166167
167test "empty document" {168test "empty document" {
lib/init/src/root.zig+4-5
...@@ -5,14 +5,13 @@ pub fn bufferedPrint() !void {...@@ -5,14 +5,13 @@ pub fn bufferedPrint() !void {
5 // Stdout is for the actual output of your application, for example if you5 // Stdout is for the actual output of your application, for example if you
6 // are implementing gzip, then only the compressed bytes should be sent to6 // are implementing gzip, then only the compressed bytes should be sent to
7 // stdout, not any debugging messages.7 // stdout, not any debugging messages.
8 const stdout_file = std.fs.File.stdout().deprecatedWriter();8 var stdout_buffer: [1024]u8 = undefined;
9 // Buffering can improve performance significantly in print-heavy programs.9 var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
10 var bw = std.io.bufferedWriter(stdout_file);10 const stdout = &stdout_writer.interface;
11 const stdout = bw.writer();
1211
13 try stdout.print("Run `zig build test` to run the tests.\n", .{});12 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!
16}15}
1716
18pub fn add(a: i32, b: i32) i32 {17pub fn add(a: i32, b: i32) i32 {
lib/std/Io.zig+2-7
...@@ -387,11 +387,11 @@ pub fn GenericWriter(...@@ -387,11 +387,11 @@ pub fn GenericWriter(
387 }387 }
388388
389 /// Helper for bridging to the new `Writer` API while upgrading.389 /// Helper for bridging to the new `Writer` API while upgrading.
390 pub fn adaptToNewApi(self: *const Self) Adapter {390 pub fn adaptToNewApi(self: *const Self, buffer: []u8) Adapter {
391 return .{391 return .{
392 .derp_writer = self.*,392 .derp_writer = self.*,
393 .new_interface = .{393 .new_interface = .{
394 .buffer = &.{},394 .buffer = buffer,
395 .vtable = &.{ .drain = Adapter.drain },395 .vtable = &.{ .drain = Adapter.drain },
396 },396 },
397 };397 };
...@@ -423,10 +423,6 @@ pub fn GenericWriter(...@@ -423,10 +423,6 @@ pub fn GenericWriter(
423pub const AnyReader = @import("Io/DeprecatedReader.zig");423pub const AnyReader = @import("Io/DeprecatedReader.zig");
424/// Deprecated in favor of `Writer`.424/// Deprecated in favor of `Writer`.
425pub const AnyWriter = @import("Io/DeprecatedWriter.zig");425pub 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;
430/// Deprecated in favor of `Reader`.426/// Deprecated in favor of `Reader`.
431pub const FixedBufferStream = @import("Io/fixed_buffer_stream.zig").FixedBufferStream;427pub const FixedBufferStream = @import("Io/fixed_buffer_stream.zig").FixedBufferStream;
432/// Deprecated in favor of `Reader`.428/// Deprecated in favor of `Reader`.
...@@ -912,7 +908,6 @@ pub fn PollFiles(comptime StreamEnum: type) type {...@@ -912,7 +908,6 @@ pub fn PollFiles(comptime StreamEnum: type) type {
912test {908test {
913 _ = Reader;909 _ = Reader;
914 _ = Writer;910 _ = Writer;
915 _ = BufferedWriter;
916 _ = CountingReader;911 _ = CountingReader;
917 _ = FixedBufferStream;912 _ = FixedBufferStream;
918 _ = tty;913 _ = tty;
lib/std/Io/DeprecatedWriter.zig+2-2
...@@ -83,11 +83,11 @@ pub fn writeFile(self: Self, file: std.fs.File) anyerror!void {...@@ -83,11 +83,11 @@ pub fn writeFile(self: Self, file: std.fs.File) anyerror!void {
83}83}
8484
85/// Helper for bridging to the new `Writer` API while upgrading.85/// Helper for bridging to the new `Writer` API while upgrading.
86pub fn adaptToNewApi(self: *const Self) Adapter {86pub fn adaptToNewApi(self: *const Self, buffer: []u8) Adapter {
87 return .{87 return .{
88 .derp_writer = self.*,88 .derp_writer = self.*,
89 .new_interface = .{89 .new_interface = .{
90 .buffer = &.{},90 .buffer = buffer,
91 .vtable = &.{ .drain = Adapter.drain },91 .vtable = &.{ .drain = Adapter.drain },
92 },92 },
93 };93 };
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" {...@@ -24,12 +24,12 @@ test "write a file, read it, then delete it" {
24 var file = try tmp.dir.createFile(tmp_file_name, .{});24 var file = try tmp.dir.createFile(tmp_file_name, .{});
25 defer file.close();25 defer file.close();
2626
27 var buf_stream = io.bufferedWriter(file.deprecatedWriter());27 var file_writer = file.writer(&.{});
28 const st = buf_stream.writer();28 const st = &file_writer.interface;
29 try st.print("begin", .{});29 try st.print("begin", .{});
30 try st.writeAll(data[0..]);30 try st.writeAll(&data);
31 try st.print("end", .{});31 try st.print("end", .{});
32 try buf_stream.flush();32 try st.flush();
33 }33 }
3434
35 {35 {
lib/std/fmt.zig+1-1
...@@ -80,7 +80,7 @@ pub const Number = struct {...@@ -80,7 +80,7 @@ pub const Number = struct {
8080
81/// Deprecated in favor of `Writer.print`.81/// Deprecated in favor of `Writer.print`.
82pub fn format(writer: anytype, comptime fmt: []const u8, args: anytype) !void {82pub fn format(writer: anytype, comptime fmt: []const u8, args: anytype) !void {
83 var adapter = writer.adaptToNewApi();83 var adapter = writer.adaptToNewApi(&.{});
84 return adapter.new_interface.print(fmt, args) catch |err| switch (err) {84 return adapter.new_interface.print(fmt, args) catch |err| switch (err) {
85 error.WriteFailed => return adapter.err.?,85 error.WriteFailed => return adapter.err.?,
86 };86 };
lib/std/zig/LibCInstallation.zig+1-1
...@@ -109,7 +109,7 @@ pub fn parse(...@@ -109,7 +109,7 @@ pub fn parse(
109 return self;109 return self;
110}110}
111111
112pub fn render(self: LibCInstallation, out: anytype) !void {112pub fn render(self: LibCInstallation, out: *std.Io.Writer) !void {
113 @setEvalBranchQuota(4000);113 @setEvalBranchQuota(4000);
114 const include_dir = self.include_dir orelse "";114 const include_dir = self.include_dir orelse "";
115 const sys_include_dir = self.sys_include_dir orelse "";115 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...@@ -1631,19 +1631,13 @@ fn computeHash(f: *Fetch, pkg_path: Cache.Path, filter: Filter) RunError!Compute
1631}1631}
16321632
1633fn dumpHashInfo(all_files: []const *const HashedFile) !void {1633fn dumpHashInfo(all_files: []const *const HashedFile) !void {
1634 const stdout: std.fs.File = .stdout();1634 var stdout_buffer: [1024]u8 = undefined;
1635 var bw = std.io.bufferedWriter(stdout.deprecatedWriter());1635 var stdout_writer: fs.File.Writer = .initMode(.stdout(), &stdout_buffer, .streaming);
1636 const w = bw.writer();1636 const w = &stdout_writer.interface;
1637
1638 for (all_files) |hashed_file| {1637 for (all_files) |hashed_file| {
1639 try w.print("{s}: {x}: {s}\n", .{1638 try w.print("{t}: {x}: {s}\n", .{ hashed_file.kind, &hashed_file.hash, hashed_file.normalized_path });
1640 @tagName(hashed_file.kind),
1641 &hashed_file.hash,
1642 hashed_file.normalized_path,
1643 });
1644 }1639 }
16451640 try w.flush();
1646 try bw.flush();
1647}1641}
16481642
1649fn workerHashFile(dir: fs.Dir, hashed_file: *HashedFile) void {1643fn workerHashFile(dir: fs.Dir, hashed_file: *HashedFile) void {
src/link/Lld.zig+4-3
...@@ -1662,8 +1662,9 @@ fn spawnLld(...@@ -1662,8 +1662,9 @@ fn spawnLld(
1662 log.warn("failed to delete response file {s}: {s}", .{ rsp_path, @errorName(err) });1662 log.warn("failed to delete response file {s}: {s}", .{ rsp_path, @errorName(err) });
1663 {1663 {
1664 defer rsp_file.close();1664 defer rsp_file.close();
1665 var rsp_buf = std.io.bufferedWriter(rsp_file.deprecatedWriter());1665 var rsp_file_buffer: [1024]u8 = undefined;
1666 const rsp_writer = rsp_buf.writer();1666 var rsp_file_writer = rsp_file.writer(&rsp_file_buffer);
1667 const rsp_writer = &rsp_file_writer.interface;
1667 for (argv[2..]) |arg| {1668 for (argv[2..]) |arg| {
1668 try rsp_writer.writeByte('"');1669 try rsp_writer.writeByte('"');
1669 for (arg) |c| {1670 for (arg) |c| {
...@@ -1676,7 +1677,7 @@ fn spawnLld(...@@ -1676,7 +1677,7 @@ fn spawnLld(
1676 try rsp_writer.writeByte('"');1677 try rsp_writer.writeByte('"');
1677 try rsp_writer.writeByte('\n');1678 try rsp_writer.writeByte('\n');
1678 }1679 }
1679 try rsp_buf.flush();1680 try rsp_writer.flush();
1680 }1681 }
16811682
1682 var rsp_child = std.process.Child.init(&.{ argv[0], argv[1], try std.fmt.allocPrint(1683 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 {...@@ -70,19 +70,19 @@ pub fn main() !void {
7070
71 var out_file = try fs.cwd().createFile(output_path, .{});71 var out_file = try fs.cwd().createFile(output_path, .{});
72 defer out_file.close();72 defer out_file.close();
73 var out_file_buffer: [4096]u8 = undefined;
74 var out_file_writer = out_file.writer(&out_file_buffer);
7375
74 var code_dir = try fs.cwd().openDir(code_dir_path, .{});76 var code_dir = try fs.cwd().openDir(code_dir_path, .{});
75 defer code_dir.close();77 defer code_dir.close();
7678
77 const input_file_bytes = try in_file.deprecatedReader().readAllAlloc(arena, max_doc_file_size);79 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
81 var tokenizer = Tokenizer.init(input_path, input_file_bytes);81 var tokenizer = Tokenizer.init(input_path, input_file_bytes);
82 var toc = try genToc(arena, &tokenizer);82 var toc = try genToc(arena, &tokenizer);
8383
84 try genHtml(arena, &tokenizer, &toc, code_dir, buffered_writer.writer());84 try genHtml(arena, &tokenizer, &toc, code_dir, &out_file_writer.interface);
85 try buffered_writer.flush();85 try out_file_writer.end();
86}86}
8787
88const Token = struct {88const Token = struct {
tools/doctest.zig+4-3
...@@ -84,9 +84,10 @@ pub fn main() !void {...@@ -84,9 +84,10 @@ pub fn main() !void {
8484
85 var out_file = try fs.cwd().createFile(output_path, .{});85 var out_file = try fs.cwd().createFile(output_path, .{});
86 defer out_file.close();86 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());90 const out = &out_file_writer.interface;
89 const out = bw.writer();
9091
91 try printSourceBlock(arena, out, source, fs.path.basename(input_path));92 try printSourceBlock(arena, out, source, fs.path.basename(input_path));
92 try printOutput(93 try printOutput(
...@@ -102,7 +103,7 @@ pub fn main() !void {...@@ -102,7 +103,7 @@ pub fn main() !void {
102 null,103 null,
103 );104 );
104105
105 try bw.flush();106 try out_file_writer.end();
106}107}
107108
108fn printOutput(109fn printOutput(
tools/gen_spirv_spec.zig+1-1
...@@ -84,7 +84,7 @@ pub fn main() !void {...@@ -84,7 +84,7 @@ pub fn main() !void {
8484
85 const output_buf = try allocator.alloc(u8, 1024 * 1024);85 const output_buf = try allocator.alloc(u8, 1024 * 1024);
86 var fbs = std.io.fixedBufferStream(output_buf);86 var fbs = std.io.fixedBufferStream(output_buf);
87 var adapter = fbs.writer().adaptToNewApi();87 var adapter = fbs.writer().adaptToNewApi(&.{});
88 const w = &adapter.new_interface;88 const w = &adapter.new_interface;
89 try render(w, core_spec, exts.items);89 try render(w, core_spec, exts.items);
90 var output: [:0]u8 = @ptrCast(fbs.getWritten());90 var output: [:0]u8 = @ptrCast(fbs.getWritten());
tools/migrate_langref.zig+4-4
...@@ -23,19 +23,19 @@ pub fn main() !void {...@@ -23,19 +23,19 @@ pub fn main() !void {
2323
24 var out_file = try fs.cwd().createFile(output_file, .{});24 var out_file = try fs.cwd().createFile(output_file, .{});
25 defer out_file.close();25 defer out_file.close();
26 var out_file_buffer: [4096]u8 = undefined;
27 var out_file_writer = out_file.writer(&out_file_buffer);
2628
27 var out_dir = try fs.cwd().openDir(fs.path.dirname(output_file).?, .{});29 var out_dir = try fs.cwd().openDir(fs.path.dirname(output_file).?, .{});
28 defer out_dir.close();30 defer out_dir.close();
2931
30 const input_file_bytes = try in_file.deprecatedReader().readAllAlloc(arena, std.math.maxInt(u32));32 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
34 var tokenizer = Tokenizer.init(input_file, input_file_bytes);34 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();
39}39}
4040
41const Token = struct {41const Token = struct {
tools/update_cpu_features.zig+4-3
...@@ -1906,8 +1906,9 @@ fn processOneTarget(job: Job) void {...@@ -1906,8 +1906,9 @@ fn processOneTarget(job: Job) void {
1906 var zig_code_file = try target_dir.createFile(zig_code_basename, .{});1906 var zig_code_file = try target_dir.createFile(zig_code_basename, .{});
1907 defer zig_code_file.close();1907 defer zig_code_file.close();
19081908
1909 var bw = std.io.bufferedWriter(zig_code_file.deprecatedWriter());1909 var zig_code_file_buffer: [4096]u8 = undefined;
1910 const w = bw.writer();1910 var zig_code_file_writer = zig_code_file.writer(&zig_code_file_buffer);
1911 const w = &zig_code_file_writer.interface;
19111912
1912 try w.writeAll(1913 try w.writeAll(
1913 \\//! This file is auto-generated by tools/update_cpu_features.zig.1914 \\//! This file is auto-generated by tools/update_cpu_features.zig.
...@@ -2076,7 +2077,7 @@ fn processOneTarget(job: Job) void {...@@ -2076,7 +2077,7 @@ fn processOneTarget(job: Job) void {
2076 \\};2077 \\};
2077 \\2078 \\
2078 );2079 );
2079 try bw.flush();2080 try w.flush();
20802081
2081 render_progress.end();2082 render_progress.end();
2082}2083}
tools/update_crc_catalog.zig+9-8
...@@ -29,10 +29,9 @@ pub fn main() anyerror!void {...@@ -29,10 +29,9 @@ pub fn main() anyerror!void {
2929
30 var zig_code_file = try hash_target_dir.createFile("crc.zig", .{});30 var zig_code_file = try hash_target_dir.createFile("crc.zig", .{});
31 defer zig_code_file.close();31 defer zig_code_file.close();
3232 var zig_code_file_buffer: [4096]u8 = undefined;
33 var cbw = std.io.bufferedWriter(zig_code_file.deprecatedWriter());33 var zig_code_file_writer = zig_code_file.writer(&zig_code_file_buffer);
34 defer cbw.flush() catch unreachable;34 const code_writer = &zig_code_file_writer.interface;
35 const code_writer = cbw.writer();
3635
37 try code_writer.writeAll(36 try code_writer.writeAll(
38 \\//! This file is auto-generated by tools/update_crc_catalog.zig.37 \\//! This file is auto-generated by tools/update_crc_catalog.zig.
...@@ -54,10 +53,9 @@ pub fn main() anyerror!void {...@@ -54,10 +53,9 @@ pub fn main() anyerror!void {
5453
55 var zig_test_file = try crc_target_dir.createFile("test.zig", .{});54 var zig_test_file = try crc_target_dir.createFile("test.zig", .{});
56 defer zig_test_file.close();55 defer zig_test_file.close();
5756 var zig_test_file_buffer: [4096]u8 = undefined;
58 var tbw = std.io.bufferedWriter(zig_test_file.deprecatedWriter());57 var zig_test_file_writer = zig_test_file.writer(&zig_test_file_buffer);
59 defer tbw.flush() catch unreachable;58 const test_writer = &zig_test_file_writer.interface;
60 const test_writer = tbw.writer();
6159
62 try test_writer.writeAll(60 try test_writer.writeAll(
63 \\//! This file is auto-generated by tools/update_crc_catalog.zig.61 \\//! This file is auto-generated by tools/update_crc_catalog.zig.
...@@ -187,6 +185,9 @@ pub fn main() anyerror!void {...@@ -187,6 +185,9 @@ pub fn main() anyerror!void {
187 \\185 \\
188 , .{ name, camelcase, width, check }));186 , .{ name, camelcase, width, check }));
189 }187 }
188
189 try code_writer.flush();
190 try test_writer.flush();
190}191}
191192
192fn printUsageAndExit(arg0: []const u8) noreturn {193fn printUsageAndExit(arg0: []const u8) noreturn {