diff --git a/lib/std/Io/File/Reader.zig b/lib/std/Io/File/Reader.zig index ca442bf54a1d0653e20e7afff3a682880eae90a5..35cf676f4ae97dfa1391b9d90649348665500f73 100644 --- a/lib/std/Io/File/Reader.zig +++ b/lib/std/Io/File/Reader.zig @@ -154,7 +154,6 @@ pub fn seekBy(r: *Reader, offset: i64) SeekError!void { return err; }; } - r.interface.tossBuffered(); }, .failure => return r.seek_err.?, } diff --git a/lib/std/fs/test.zig b/lib/std/fs/test.zig index 981bc75d442a3688f43224d4dfe278c03ea3f5a8..9104a229b85c0839324deb34e536282e34a7baf9 100644 --- a/lib/std/fs/test.zig +++ b/lib/std/fs/test.zig @@ -2409,13 +2409,19 @@ test "seekBy" { try tmp_dir.dir.writeFile(io, .{ .sub_path = "blah.txt", .data = "let's test seekBy" }); const f = try tmp_dir.dir.openFile(io, "blah.txt", .{ .mode = .read_only }); defer f.close(io); - var reader = f.readerStreaming(io, &.{}); + var buf: [10]u8 = undefined; + var reader = f.readerStreaming(io, &buf); + // Seek without any buffered data + try reader.seekBy(2); + + // Seek when the buffered data is sufficient to satisfy the seek amount + try reader.interface.fill(2); try reader.seekBy(2); var buffer: [20]u8 = undefined; const n = try reader.interface.readSliceShort(&buffer); - try expectEqual(15, n); - try expectEqualStrings("t's test seekBy", buffer[0..15]); + try expectEqual(13, n); + try expectEqualStrings("s test seekBy", buffer[0..n]); } test "seekTo flushes buffered data" {