| ... | @@ -1158,20 +1158,21 @@ pub const Reader = struct { | ... | @@ -1158,20 +1158,21 @@ pub const Reader = struct { |
| 1158 | // end. | 1158 | // end. |
| 1159 | fallback: { | 1159 | fallback: { |
| 1160 | if (r.size_err == null and r.seek_err == null) break :fallback; | 1160 | if (r.size_err == null and r.seek_err == null) break :fallback; |
| 1161 | var trash_buffer: [std.atomic.cache_line]u8 = undefined; | 1161 | var trash_buffer: [128]u8 = undefined; |
| 1162 | const trash = &trash_buffer; | 1162 | const trash = &trash_buffer; |
| 1163 | if (is_windows) { | 1163 | if (is_windows) { |
| 1164 | const n = windows.ReadFile(file.handle, trash, null) catch |err| { | 1164 | const n = windows.ReadFile(file.handle, trash, null) catch |err| { |
| 1165 | r.err = err; | 1165 | r.err = err; |
| 1166 | return error.ReadFailed; | 1166 | return error.ReadFailed; |
| 1167 | }; | 1167 | }; |
| | 1168 | if (n == 0) return error.EndOfStream; |
| 1168 | r.pos = pos + n; | 1169 | r.pos = pos + n; |
| 1169 | return n; | 1170 | return n; |
| 1170 | } | 1171 | } |
| 1171 | var iovecs: [max_buffers_len]std.posix.iovec = undefined; | 1172 | var iovecs: [max_buffers_len]std.posix.iovec = undefined; |
| 1172 | var iovecs_i: usize = 0; | 1173 | var iovecs_i: usize = 0; |
| 1173 | var remaining = @intFromEnum(limit); | 1174 | var remaining = @intFromEnum(limit); |
| 1174 | while (remaining > 0 and iovecs_i >= iovecs.len) { | 1175 | while (remaining > 0 and iovecs_i < iovecs.len) { |
| 1175 | iovecs[iovecs_i] = .{ .base = trash, .len = @min(trash.len, remaining) }; | 1176 | iovecs[iovecs_i] = .{ .base = trash, .len = @min(trash.len, remaining) }; |
| 1176 | remaining -= iovecs[iovecs_i].len; | 1177 | remaining -= iovecs[iovecs_i].len; |
| 1177 | iovecs_i += 1; | 1178 | iovecs_i += 1; |
| ... | @@ -1180,6 +1181,7 @@ pub const Reader = struct { | ... | @@ -1180,6 +1181,7 @@ pub const Reader = struct { |
| 1180 | r.err = err; | 1181 | r.err = err; |
| 1181 | return error.ReadFailed; | 1182 | return error.ReadFailed; |
| 1182 | }; | 1183 | }; |
| | 1184 | if (n == 0) return error.EndOfStream; |
| 1183 | r.pos = pos + n; | 1185 | r.pos = pos + n; |
| 1184 | return n; | 1186 | return n; |
| 1185 | } | 1187 | } |