Check that file reader has capacity before priming
parent
12c8b6c1aa
commit
cf126baeb5
|
|
@ -1427,7 +1427,12 @@ pub const LineIterator = struct {
|
||||||
//
|
//
|
||||||
// This will also optimize reads down the line as we're
|
// This will also optimize reads down the line as we're
|
||||||
// more likely to beworking with buffered data.
|
// 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..]);
|
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());
|
||||||
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