authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-12-19 12:10:21-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-12-23 22:15:11-08:00
log1381f9f612a5e03895615ade253411d86bce31a4
tree0311ae93ffc3646f881d0ed1a93ec0f5f9b42270
parentac11b8273802a3371ff2b0727d4c76489ee2f8bc

std.debug: fix printLineFromFile

by using streamDelimiter and discardDelimiter functions that don't depend on the buffer size being large enough

1 files changed, 4 insertions(+), 6 deletions(-)

lib/std/debug.zig+4-6
......@@ -1203,23 +1203,21 @@ fn printLineFromFile(io: Io, writer: *Writer, source_location: SourceLocation) !
12031203 const cwd: Io.Dir = .cwd();
12041204 var file = try cwd.openFile(io, source_location.file_name, .{});
12051205 defer file.close(io);
1206 // TODO fstat and make sure that the file has the correct size
12071206
12081207 var buffer: [4096]u8 = undefined;
12091208 var file_reader: File.Reader = .init(file, io, &buffer);
12101209 var line_index: usize = 0;
1211 while (try file_reader.interface.takeDelimiter('\n')) |line| {
1210 const r = &file_reader.interface;
1211 while (true) {
12121212 line_index += 1;
12131213 if (line_index == source_location.line) {
12141214 // TODO delete hard tabs from the language
1215 mem.replaceScalar(u8, line, '\t', ' ');
1216 try writer.writeAll(line);
1217 // Make sure printing last line of file inserts extra newline.
1215 _ = try r.streamDelimiterEnding(writer, '\n');
12181216 try writer.writeByte('\n');
12191217 return;
12201218 }
1219 _ = try r.discardDelimiterInclusive('\n');
12211220 }
1222 return error.EndOfStream;
12231221}
12241222
12251223test printLineFromFile {