| ... | ... | @@ -519,33 +519,33 @@ pub const Reader = struct { |
| 519 | 519 | w: *Writer, |
| 520 | 520 | limit: std.Io.Limit, |
| 521 | 521 | ) std.Io.Reader.StreamError!usize { |
| 522 | | const reader: *Reader = @fieldParentPtr("interface", io_r); |
| 522 | const reader: *Reader = @alignCast(@fieldParentPtr("interface", io_r)); |
| 523 | 523 | const remaining_content_length = &reader.state.body_remaining_content_length; |
| 524 | 524 | const remaining = remaining_content_length.*; |
| 525 | 525 | if (remaining == 0) { |
| 526 | 526 | reader.state = .ready; |
| 527 | 527 | return error.EndOfStream; |
| 528 | 528 | } |
| 529 | | const n = try reader.in.stream(w, limit.min(.limited(remaining))); |
| 529 | const n = try reader.in.stream(w, limit.min(.limited64(remaining))); |
| 530 | 530 | remaining_content_length.* = remaining - n; |
| 531 | 531 | return n; |
| 532 | 532 | } |
| 533 | 533 | |
| 534 | 534 | fn contentLengthDiscard(io_r: *std.Io.Reader, limit: std.Io.Limit) std.Io.Reader.Error!usize { |
| 535 | | const reader: *Reader = @fieldParentPtr("interface", io_r); |
| 535 | const reader: *Reader = @alignCast(@fieldParentPtr("interface", io_r)); |
| 536 | 536 | const remaining_content_length = &reader.state.body_remaining_content_length; |
| 537 | 537 | const remaining = remaining_content_length.*; |
| 538 | 538 | if (remaining == 0) { |
| 539 | 539 | reader.state = .ready; |
| 540 | 540 | return error.EndOfStream; |
| 541 | 541 | } |
| 542 | | const n = try reader.in.discard(limit.min(.limited(remaining))); |
| 542 | const n = try reader.in.discard(limit.min(.limited64(remaining))); |
| 543 | 543 | remaining_content_length.* = remaining - n; |
| 544 | 544 | return n; |
| 545 | 545 | } |
| 546 | 546 | |
| 547 | 547 | fn chunkedStream(io_r: *std.Io.Reader, w: *Writer, limit: std.Io.Limit) std.Io.Reader.StreamError!usize { |
| 548 | | const reader: *Reader = @fieldParentPtr("interface", io_r); |
| 548 | const reader: *Reader = @alignCast(@fieldParentPtr("interface", io_r)); |
| 549 | 549 | const chunk_len_ptr = switch (reader.state) { |
| 550 | 550 | .ready => return error.EndOfStream, |
| 551 | 551 | .body_remaining_chunk_len => |*x| x, |
| ... | ... | @@ -591,7 +591,7 @@ pub const Reader = struct { |
| 591 | 591 | } |
| 592 | 592 | } |
| 593 | 593 | if (cp.chunk_len == 0) return parseTrailers(reader, 0); |
| 594 | | const n = try in.stream(w, limit.min(.limited(cp.chunk_len))); |
| 594 | const n = try in.stream(w, limit.min(.limited64(cp.chunk_len))); |
| 595 | 595 | chunk_len_ptr.* = .init(cp.chunk_len + 2 - n); |
| 596 | 596 | return n; |
| 597 | 597 | }, |
| ... | ... | @@ -607,7 +607,7 @@ pub const Reader = struct { |
| 607 | 607 | continue :len .head; |
| 608 | 608 | }, |
| 609 | 609 | else => |remaining_chunk_len| { |
| 610 | | const n = try in.stream(w, limit.min(.limited(@intFromEnum(remaining_chunk_len) - 2))); |
| 610 | const n = try in.stream(w, limit.min(.limited64(@intFromEnum(remaining_chunk_len) - 2))); |
| 611 | 611 | chunk_len_ptr.* = .init(@intFromEnum(remaining_chunk_len) - n); |
| 612 | 612 | return n; |
| 613 | 613 | }, |
| ... | ... | @@ -615,7 +615,7 @@ pub const Reader = struct { |
| 615 | 615 | } |
| 616 | 616 | |
| 617 | 617 | fn chunkedDiscard(io_r: *std.Io.Reader, limit: std.Io.Limit) std.Io.Reader.Error!usize { |
| 618 | | const reader: *Reader = @fieldParentPtr("interface", io_r); |
| 618 | const reader: *Reader = @alignCast(@fieldParentPtr("interface", io_r)); |
| 619 | 619 | const chunk_len_ptr = switch (reader.state) { |
| 620 | 620 | .ready => return error.EndOfStream, |
| 621 | 621 | .body_remaining_chunk_len => |*x| x, |
| ... | ... | @@ -659,7 +659,7 @@ pub const Reader = struct { |
| 659 | 659 | } |
| 660 | 660 | } |
| 661 | 661 | if (cp.chunk_len == 0) return parseTrailers(reader, 0); |
| 662 | | const n = try in.discard(limit.min(.limited(cp.chunk_len))); |
| 662 | const n = try in.discard(limit.min(.limited64(cp.chunk_len))); |
| 663 | 663 | chunk_len_ptr.* = .init(cp.chunk_len + 2 - n); |
| 664 | 664 | return n; |
| 665 | 665 | }, |
| ... | ... | @@ -675,7 +675,7 @@ pub const Reader = struct { |
| 675 | 675 | continue :len .head; |
| 676 | 676 | }, |
| 677 | 677 | else => |remaining_chunk_len| { |
| 678 | | const n = try in.discard(limit.min(.limited(remaining_chunk_len.int() - 2))); |
| 678 | const n = try in.discard(limit.min(.limited64(remaining_chunk_len.int() - 2))); |
| 679 | 679 | chunk_len_ptr.* = .init(remaining_chunk_len.int() - n); |
| 680 | 680 | return n; |
| 681 | 681 | }, |
| ... | ... | @@ -758,7 +758,7 @@ pub const BodyWriter = struct { |
| 758 | 758 | |
| 759 | 759 | /// How many zeroes to reserve for hex-encoded chunk length. |
| 760 | 760 | const chunk_len_digits = 8; |
| 761 | | const max_chunk_len: usize = std.math.pow(usize, 16, chunk_len_digits) - 1; |
| 761 | const max_chunk_len: usize = std.math.pow(u64, 16, chunk_len_digits) - 1; |
| 762 | 762 | const chunk_header_template = ("0" ** chunk_len_digits) ++ "\r\n"; |
| 763 | 763 | |
| 764 | 764 | comptime { |
| ... | ... | @@ -918,7 +918,7 @@ pub const BodyWriter = struct { |
| 918 | 918 | } |
| 919 | 919 | |
| 920 | 920 | pub fn contentLengthDrain(w: *Writer, data: []const []const u8, splat: usize) Error!usize { |
| 921 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 921 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 922 | 922 | assert(!bw.isEliding()); |
| 923 | 923 | const out = bw.http_protocol_output; |
| 924 | 924 | const n = try out.writeSplatHeader(w.buffered(), data, splat); |
| ... | ... | @@ -927,7 +927,7 @@ pub const BodyWriter = struct { |
| 927 | 927 | } |
| 928 | 928 | |
| 929 | 929 | pub fn noneDrain(w: *Writer, data: []const []const u8, splat: usize) Error!usize { |
| 930 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 930 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 931 | 931 | assert(!bw.isEliding()); |
| 932 | 932 | const out = bw.http_protocol_output; |
| 933 | 933 | const n = try out.writeSplatHeader(w.buffered(), data, splat); |
| ... | ... | @@ -935,7 +935,7 @@ pub const BodyWriter = struct { |
| 935 | 935 | } |
| 936 | 936 | |
| 937 | 937 | pub fn elidingDrain(w: *Writer, data: []const []const u8, splat: usize) Error!usize { |
| 938 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 938 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 939 | 939 | const slice = data[0 .. data.len - 1]; |
| 940 | 940 | const pattern = data[slice.len]; |
| 941 | 941 | var written: usize = pattern.len * splat; |
| ... | ... | @@ -949,7 +949,7 @@ pub const BodyWriter = struct { |
| 949 | 949 | } |
| 950 | 950 | |
| 951 | 951 | pub fn elidingSendFile(w: *Writer, file_reader: *File.Reader, limit: std.Io.Limit) Writer.FileError!usize { |
| 952 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 952 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 953 | 953 | if (File.Handle == void) return error.Unimplemented; |
| 954 | 954 | if (builtin.zig_backend == .stage2_aarch64) return error.Unimplemented; |
| 955 | 955 | switch (bw.state) { |
| ... | ... | @@ -976,7 +976,7 @@ pub const BodyWriter = struct { |
| 976 | 976 | |
| 977 | 977 | /// Returns `null` if size cannot be computed without making any syscalls. |
| 978 | 978 | pub fn noneSendFile(w: *Writer, file_reader: *File.Reader, limit: std.Io.Limit) Writer.FileError!usize { |
| 979 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 979 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 980 | 980 | assert(!bw.isEliding()); |
| 981 | 981 | const out = bw.http_protocol_output; |
| 982 | 982 | const n = try out.sendFileHeader(w.buffered(), file_reader, limit); |
| ... | ... | @@ -984,7 +984,7 @@ pub const BodyWriter = struct { |
| 984 | 984 | } |
| 985 | 985 | |
| 986 | 986 | pub fn contentLengthSendFile(w: *Writer, file_reader: *File.Reader, limit: std.Io.Limit) Writer.FileError!usize { |
| 987 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 987 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 988 | 988 | assert(!bw.isEliding()); |
| 989 | 989 | const out = bw.http_protocol_output; |
| 990 | 990 | const n = try out.sendFileHeader(w.buffered(), file_reader, limit); |
| ... | ... | @@ -993,7 +993,7 @@ pub const BodyWriter = struct { |
| 993 | 993 | } |
| 994 | 994 | |
| 995 | 995 | pub fn chunkedSendFile(w: *Writer, file_reader: *File.Reader, limit: std.Io.Limit) Writer.FileError!usize { |
| 996 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 996 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 997 | 997 | assert(!bw.isEliding()); |
| 998 | 998 | const data_len = Writer.countSendFileLowerBound(w.end, file_reader, limit) orelse { |
| 999 | 999 | // If the file size is unknown, we cannot lower to a `sendFile` since we would |
| ... | ... | @@ -1041,7 +1041,7 @@ pub const BodyWriter = struct { |
| 1041 | 1041 | } |
| 1042 | 1042 | |
| 1043 | 1043 | pub fn chunkedDrain(w: *Writer, data: []const []const u8, splat: usize) Error!usize { |
| 1044 | | const bw: *BodyWriter = @fieldParentPtr("writer", w); |
| 1044 | const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w)); |
| 1045 | 1045 | assert(!bw.isEliding()); |
| 1046 | 1046 | const out = bw.http_protocol_output; |
| 1047 | 1047 | const data_len = w.end + Writer.countSplat(data, splat); |