core: check that file reader has capacity before priming (#9515)
commit
9894722051
|
|
@ -1427,7 +1427,12 @@ pub const LineIterator = struct {
|
|||
//
|
||||
// This will also optimize reads down the line as we're
|
||||
// more likely to beworking with buffered data.
|
||||
self.r.fillMore() catch {};
|
||||
//
|
||||
// fillMore asserts that the buffer has available capacity,
|
||||
// so skip this if it's full.
|
||||
if (self.r.bufferedLen() < self.r.buffer.len) {
|
||||
self.r.fillMore() catch {};
|
||||
}
|
||||
|
||||
var writer: std.Io.Writer = .fixed(self.entry[2..]);
|
||||
|
||||
|
|
@ -1590,3 +1595,33 @@ test "LineIterator with CRLF line endings" {
|
|||
try testing.expectEqual(@as(?[]const u8, null), iter.next());
|
||||
try testing.expectEqual(@as(?[]const u8, null), iter.next());
|
||||
}
|
||||
|
||||
test "LineIterator with buffered reader" {
|
||||
const testing = std.testing;
|
||||
var f: std.Io.Reader = .fixed("A\nB = C\n");
|
||||
var buf: [2]u8 = undefined;
|
||||
var r = f.limited(.unlimited, &buf);
|
||||
const reader = &r.interface;
|
||||
|
||||
var iter: LineIterator = .init(reader);
|
||||
try testing.expectEqualStrings("--A", iter.next().?);
|
||||
try testing.expectEqualStrings("--B=C", iter.next().?);
|
||||
try testing.expectEqual(@as(?[]const u8, null), iter.next());
|
||||
try testing.expectEqual(@as(?[]const u8, null), iter.next());
|
||||
}
|
||||
|
||||
test "LineIterator with buffered and primed reader" {
|
||||
const testing = std.testing;
|
||||
var f: std.Io.Reader = .fixed("A\nB = C\n");
|
||||
var buf: [2]u8 = undefined;
|
||||
var r = f.limited(.unlimited, &buf);
|
||||
const reader = &r.interface;
|
||||
|
||||
try reader.fill(buf.len);
|
||||
|
||||
var iter: LineIterator = .init(reader);
|
||||
try testing.expectEqualStrings("--A", iter.next().?);
|
||||
try testing.expectEqualStrings("--B=C", iter.next().?);
|
||||
try testing.expectEqual(@as(?[]const u8, null), iter.next());
|
||||
try testing.expectEqual(@as(?[]const u8, null), iter.next());
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue