| ... | ... | @@ -1665,32 +1665,60 @@ pub const Writer = struct { |
| 1665 | 1665 | const handle = w.file.handle; |
| 1666 | 1666 | const buffered = io_w.buffered(); |
| 1667 | 1667 | if (is_windows) switch (w.mode) { |
| 1668 | | .positional, .positional_reading => @panic("TODO"), |
| 1668 | .positional, .positional_reading => { |
| 1669 | if (buffered.len != 0) { |
| 1670 | const n = windows.WriteFile(handle, buffered, w.pos) catch |err| { |
| 1671 | w.err = err; |
| 1672 | return error.WriteFailed; |
| 1673 | }; |
| 1674 | w.pos += n; |
| 1675 | return io_w.consume(n); |
| 1676 | } |
| 1677 | for (data[0 .. data.len - 1]) |buf| { |
| 1678 | if (buf.len == 0) continue; |
| 1679 | const n = windows.WriteFile(handle, buf, w.pos) catch |err| { |
| 1680 | w.err = err; |
| 1681 | return error.WriteFailed; |
| 1682 | }; |
| 1683 | w.pos += n; |
| 1684 | return io_w.consume(n); |
| 1685 | } |
| 1686 | const pattern = data[data.len - 1]; |
| 1687 | if (pattern.len == 0 or splat == 0) return 0; |
| 1688 | const n = windows.WriteFile(handle, pattern, w.pos) catch |err| { |
| 1689 | w.err = err; |
| 1690 | return error.WriteFailed; |
| 1691 | }; |
| 1692 | w.pos += n; |
| 1693 | return io_w.consume(n); |
| 1694 | }, |
| 1669 | 1695 | .streaming, .streaming_reading => { |
| 1670 | | var i: usize = 0; |
| 1671 | | while (i < buffered.len) { |
| 1672 | | const n = windows.WriteFile(handle, buffered[i..], null) catch |err| { |
| 1696 | if (buffered.len != 0) { |
| 1697 | const n = windows.WriteFile(handle, buffered, null) catch |err| { |
| 1673 | 1698 | w.err = err; |
| 1674 | | w.pos += i; |
| 1675 | | _ = io_w.consume(i); |
| 1676 | 1699 | return error.WriteFailed; |
| 1677 | 1700 | }; |
| 1678 | | i += n; |
| 1679 | | if (data.len > 0 and buffered.len - i < n) { |
| 1680 | | w.pos += i; |
| 1681 | | return io_w.consume(i); |
| 1682 | | } |
| 1701 | w.pos += n; |
| 1702 | return io_w.consume(n); |
| 1683 | 1703 | } |
| 1684 | | if (i != 0 or data.len == 0 or (data.len == 1 and splat == 0)) { |
| 1685 | | w.pos += i; |
| 1686 | | return io_w.consume(i); |
| 1704 | for (data[0 .. data.len - 1]) |buf| { |
| 1705 | if (buf.len == 0) continue; |
| 1706 | const n = windows.WriteFile(handle, buf, null) catch |err| { |
| 1707 | w.err = err; |
| 1708 | return error.WriteFailed; |
| 1709 | }; |
| 1710 | w.pos += n; |
| 1711 | return io_w.consume(n); |
| 1687 | 1712 | } |
| 1688 | | const n = windows.WriteFile(handle, data[0], null) catch |err| { |
| 1713 | const pattern = data[data.len - 1]; |
| 1714 | if (pattern.len == 0 or splat == 0) return 0; |
| 1715 | const n = windows.WriteFile(handle, pattern, null) catch |err| { |
| 1716 | std.debug.print("windows write file failed3: {t}\n", .{err}); |
| 1689 | 1717 | w.err = err; |
| 1690 | | return 0; |
| 1718 | return error.WriteFailed; |
| 1691 | 1719 | }; |
| 1692 | 1720 | w.pos += n; |
| 1693 | | return n; |
| 1721 | return io_w.consume(n); |
| 1694 | 1722 | }, |
| 1695 | 1723 | .failure => return error.WriteFailed, |
| 1696 | 1724 | }; |