File tree Expand file tree Collapse file tree 3 files changed +34
-3
lines changed Expand file tree Collapse file tree 3 files changed +34
-3
lines changed Original file line number Diff line number Diff line change @@ -440,7 +440,8 @@ pub fn advance(w: *Writer, n: usize) void {
440
440
/// After calling `writableVector`, this function tracks how many bytes were
441
441
/// written to it.
442
442
pub fn advanceVector (w : * Writer , n : usize ) usize {
443
- return consume (w , n );
443
+ if (w .vtable != VectorWrapper .vtable ) advance (w , n );
444
+ return n ;
444
445
}
445
446
446
447
/// The `data` parameter is mutable because this function needs to mutate the
Original file line number Diff line number Diff line change @@ -1430,7 +1430,7 @@ pub const Reader = struct {
1430
1430
return error .EndOfStream ;
1431
1431
}
1432
1432
r .pos += n ;
1433
- return n ;
1433
+ return w . advanceVector ( n ) ;
1434
1434
},
1435
1435
.streaming_reading = > {
1436
1436
if (is_windows ) {
@@ -1453,7 +1453,7 @@ pub const Reader = struct {
1453
1453
return error .EndOfStream ;
1454
1454
}
1455
1455
r .pos += n ;
1456
- return n ;
1456
+ return w . advanceVector ( n ) ;
1457
1457
},
1458
1458
.failure = > return error .ReadFailed ,
1459
1459
}
Original file line number Diff line number Diff line change @@ -2071,3 +2071,33 @@ test "invalid UTF-8/WTF-8 paths" {
2071
2071
}
2072
2072
}.impl );
2073
2073
}
2074
+
2075
+ test "read file non vectored" {
2076
+ var tmp_dir = std .testing .tmpDir (.{});
2077
+ defer tmp_dir .cleanup ();
2078
+
2079
+ const contents = "hello, world!\n " ;
2080
+
2081
+ const file = try tmp_dir .dir .createFile ("input.txt" , .{ .read = true });
2082
+ defer file .close ();
2083
+ {
2084
+ var file_writer : std.fs.File.Writer = .init (file , &.{});
2085
+ try file_writer .interface .writeAll (contents );
2086
+ try file_writer .interface .flush ();
2087
+ }
2088
+
2089
+ var file_reader : std.fs.File.Reader = .init (file , &.{});
2090
+
2091
+ var write_buffer : [100 ]u8 = undefined ;
2092
+ var w : std.Io.Writer = .fixed (& write_buffer );
2093
+
2094
+ var i : usize = 0 ;
2095
+ while (true ) {
2096
+ i += file_reader .interface .stream (& w , .limited (3 )) catch | err | switch (err ) {
2097
+ error .EndOfStream = > break ,
2098
+ else = > | e | return e ,
2099
+ };
2100
+ }
2101
+ try std .testing .expectEqualStrings (contents , w .buffered ());
2102
+ try std .testing .expectEqual (contents .len , i );
2103
+ }
You can’t perform that action at this time.
0 commit comments