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) !...@@ -1203,23 +1203,21 @@ fn printLineFromFile(io: Io, writer: *Writer, source_location: SourceLocation) !
1203 const cwd: Io.Dir = .cwd();1203 const cwd: Io.Dir = .cwd();
1204 var file = try cwd.openFile(io, source_location.file_name, .{});1204 var file = try cwd.openFile(io, source_location.file_name, .{});
1205 defer file.close(io);1205 defer file.close(io);
1206 // TODO fstat and make sure that the file has the correct size
12071206
1208 var buffer: [4096]u8 = undefined;1207 var buffer: [4096]u8 = undefined;
1209 var file_reader: File.Reader = .init(file, io, &buffer);1208 var file_reader: File.Reader = .init(file, io, &buffer);
1210 var line_index: usize = 0;1209 var line_index: usize = 0;
1211 while (try file_reader.interface.takeDelimiter('\n')) |line| {1210 const r = &file_reader.interface;
1211 while (true) {
1212 line_index += 1;1212 line_index += 1;
1213 if (line_index == source_location.line) {1213 if (line_index == source_location.line) {
1214 // TODO delete hard tabs from the language1214 // TODO delete hard tabs from the language
1215 mem.replaceScalar(u8, line, '\t', ' ');1215 _ = try r.streamDelimiterEnding(writer, '\n');
1216 try writer.writeAll(line);
1217 // Make sure printing last line of file inserts extra newline.
1218 try writer.writeByte('\n');1216 try writer.writeByte('\n');
1219 return;1217 return;
1220 }1218 }
1219 _ = try r.discardDelimiterInclusive('\n');
1221 }1220 }
1222 return error.EndOfStream;
1223}1221}
12241222
1225test printLineFromFile {1223test printLineFromFile {