| ... | ... | @@ -406,7 +406,10 @@ pub fn readVec(r: *Reader, data: [][]u8) Error!usize { |
| 406 | 406 | r.seek = seek; |
| 407 | 407 | data[i] = buf[copy_len..]; |
| 408 | 408 | defer data[i] = buf; |
| 409 | | return n + try r.vtable.readVec(r, data[i..]); |
| 409 | return n + (r.vtable.readVec(r, data[i..]) catch |err| switch (err) { |
| 410 | error.EndOfStream => if (n == 0) return error.EndOfStream else 0, |
| 411 | error.ReadFailed => return error.ReadFailed, |
| 412 | }); |
| 410 | 413 | } |
| 411 | 414 | const n = seek - r.seek; |
| 412 | 415 | r.seek = seek; |
| ... | ... | @@ -1657,6 +1660,17 @@ test "expected error.EndOfStream" { |
| 1657 | 1660 | try std.testing.expectError(error.EndOfStream, r.take(3)); |
| 1658 | 1661 | } |
| 1659 | 1662 | |
| 1663 | test "readVec at end" { |
| 1664 | var reader_buffer: [8]u8 = "abcd1234".*; |
| 1665 | var reader: testing.Reader = .init(&reader_buffer, &.{}); |
| 1666 | reader.interface.end = reader_buffer.len; |
| 1667 | |
| 1668 | var out: [16]u8 = undefined; |
| 1669 | var vecs: [1][]u8 = .{&out}; |
| 1670 | try testing.expectEqual(8, try reader.interface.readVec(&vecs)); |
| 1671 | try testing.expectEqualStrings("abcd1234", vecs[0][0..8]); |
| 1672 | } |
| 1673 | |
| 1660 | 1674 | fn endingStream(r: *Reader, w: *Writer, limit: Limit) StreamError!usize { |
| 1661 | 1675 | _ = r; |
| 1662 | 1676 | _ = w; |