| ... | ... | @@ -270,16 +270,17 @@ fn writeSplatHeaderLimitFinish( |
| 270 | 270 | remaining -= copy_len; |
| 271 | 271 | if (remaining == 0) break :v; |
| 272 | 272 | } |
| 273 | | for (data[0 .. data.len - 1]) |buf| if (buf.len != 0) { |
| 274 | | const copy_len = @min(header.len, remaining); |
| 275 | | vecs[i] = buf; |
| 273 | for (data[0 .. data.len - 1]) |buf| { |
| 274 | if (buf.len == 0) continue; |
| 275 | const copy_len = @min(buf.len, remaining); |
| 276 | vecs[i] = buf[0..copy_len]; |
| 276 | 277 | i += 1; |
| 277 | 278 | remaining -= copy_len; |
| 278 | 279 | if (remaining == 0) break :v; |
| 279 | 280 | if (vecs.len - i == 0) break :v; |
| 280 | | }; |
| 281 | } |
| 281 | 282 | const pattern = data[data.len - 1]; |
| 282 | | if (splat == 1) { |
| 283 | if (splat == 1 or remaining < pattern.len) { |
| 283 | 284 | vecs[i] = pattern[0..@min(remaining, pattern.len)]; |
| 284 | 285 | i += 1; |
| 285 | 286 | break :v; |
| ... | ... | @@ -915,7 +916,16 @@ pub fn sendFileHeader( |
| 915 | 916 | if (new_end <= w.buffer.len) { |
| 916 | 917 | @memcpy(w.buffer[w.end..][0..header.len], header); |
| 917 | 918 | w.end = new_end; |
| 918 | | return header.len + try w.vtable.sendFile(w, file_reader, limit); |
| 919 | const file_bytes = w.vtable.sendFile(w, file_reader, limit) catch |err| switch (err) { |
| 920 | error.ReadFailed, error.WriteFailed => |e| return e, |
| 921 | error.EndOfStream, error.Unimplemented => |e| { |
| 922 | // These errors are non-fatal, so if we wrote any header bytes, we will report that |
| 923 | // and suppress this error. Only if there was no header may we return the error. |
| 924 | if (header.len != 0) return header.len; |
| 925 | return e; |
| 926 | }, |
| 927 | }; |
| 928 | return header.len + file_bytes; |
| 919 | 929 | } |
| 920 | 930 | const buffered_contents = limit.slice(file_reader.interface.buffered()); |
| 921 | 931 | const n = try w.vtable.drain(w, &.{ header, buffered_contents }, 1); |