| ... | @@ -1803,9 +1803,15 @@ pub const Writer = struct { | ... | @@ -1803,9 +1803,15 @@ pub const Writer = struct { |
| 1803 | file_reader.size = file_reader.pos; | 1803 | file_reader.size = file_reader.pos; |
| 1804 | return error.EndOfStream; | 1804 | return error.EndOfStream; |
| 1805 | } | 1805 | } |
| 1806 | const consumed = io_w.consume(@intCast(sbytes)); | 1806 | const n = io_w.consume(@intCast(sbytes)); |
| 1807 | file_reader.seekTo(file_reader.pos + consumed) catch return error.ReadFailed; | 1807 | if (n <= file_reader.interface.bufferedLen()) { |
| 1808 | return consumed; | 1808 | file_reader.interface.toss(n); |
| | 1809 | } else { |
| | 1810 | const direct_n = n - file_reader.interface.bufferedLen(); |
| | 1811 | file_reader.interface.tossBuffered(); |
| | 1812 | file_reader.seekBy(@intCast(direct_n)) catch return error.ReadFailed; |
| | 1813 | } |
| | 1814 | return n; |
| 1809 | } | 1815 | } |
| 1810 | | 1816 | |
| 1811 | if (native_os.isDarwin() and w.mode == .streaming) sf: { | 1817 | if (native_os.isDarwin() and w.mode == .streaming) sf: { |
| ... | @@ -1864,9 +1870,15 @@ pub const Writer = struct { | ... | @@ -1864,9 +1870,15 @@ pub const Writer = struct { |
| 1864 | file_reader.size = file_reader.pos; | 1870 | file_reader.size = file_reader.pos; |
| 1865 | return error.EndOfStream; | 1871 | return error.EndOfStream; |
| 1866 | } | 1872 | } |
| 1867 | const consumed = io_w.consume(@bitCast(len)); | 1873 | const n = io_w.consume(@bitCast(len)); |
| 1868 | file_reader.seekTo(file_reader.pos + consumed) catch return error.ReadFailed; | 1874 | if (n <= file_reader.interface.bufferedLen()) { |
| 1869 | return consumed; | 1875 | file_reader.interface.toss(n); |
| | 1876 | } else { |
| | 1877 | const direct_n = n - file_reader.interface.bufferedLen(); |
| | 1878 | file_reader.interface.tossBuffered(); |
| | 1879 | file_reader.seekBy(@intCast(direct_n)) catch return error.ReadFailed; |
| | 1880 | } |
| | 1881 | return n; |
| 1870 | } | 1882 | } |
| 1871 | | 1883 | |
| 1872 | if (native_os == .linux and w.mode == .streaming) sf: { | 1884 | if (native_os == .linux and w.mode == .streaming) sf: { |
| ... | @@ -1998,7 +2010,7 @@ pub const Writer = struct { | ... | @@ -1998,7 +2010,7 @@ pub const Writer = struct { |
| 1998 | reader_buffered: []const u8, | 2010 | reader_buffered: []const u8, |
| 1999 | ) std.Io.Writer.FileError!usize { | 2011 | ) std.Io.Writer.FileError!usize { |
| 2000 | const n = try drain(io_w, &.{reader_buffered}, 1); | 2012 | const n = try drain(io_w, &.{reader_buffered}, 1); |
| 2001 | file_reader.seekTo(file_reader.pos + n) catch return error.ReadFailed; | 2013 | file_reader.interface.toss(n); |
| 2002 | return n; | 2014 | return n; |
| 2003 | } | 2015 | } |
| 2004 | | 2016 | |