authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-13 22:16:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-13 22:16:08-07:00
log6bcdcf85c7a26f03926bdb35120901545dc19206
treeaa97ba201e0a10c5083e64e1e42bd04350e7b03a
parent27d6614f81dfddcbd05b2a0b4afb8db83eaafb0b

std.fs.File.Writer.sendFile: handle sendfile errors

fixes #24842

1 files changed, 10 insertions(+), 0 deletions(-)

lib/std/fs/File.zig+10
...@@ -1823,6 +1823,11 @@ pub const Writer = struct {...@@ -1823,6 +1823,11 @@ pub const Writer = struct {
1823 .NOBUFS => w.sendfile_err = error.SystemResources,1823 .NOBUFS => w.sendfile_err = error.SystemResources,
1824 else => |err| w.sendfile_err = posix.unexpectedErrno(err),1824 else => |err| w.sendfile_err = posix.unexpectedErrno(err),
1825 }1825 }
1826 if (w.sendfile_err != null) {
1827 // Give calling code chance to observe the error before trying
1828 // something else.
1829 return 0;
1830 }
1826 if (sbytes == 0) {1831 if (sbytes == 0) {
1827 file_reader.size = file_reader.pos;1832 file_reader.size = file_reader.pos;
1828 return error.EndOfStream;1833 return error.EndOfStream;
...@@ -1879,6 +1884,11 @@ pub const Writer = struct {...@@ -1879,6 +1884,11 @@ pub const Writer = struct {
1879 .PIPE => w.sendfile_err = error.BrokenPipe,1884 .PIPE => w.sendfile_err = error.BrokenPipe,
1880 else => |err| w.sendfile_err = posix.unexpectedErrno(err),1885 else => |err| w.sendfile_err = posix.unexpectedErrno(err),
1881 }1886 }
1887 if (w.sendfile_err != null) {
1888 // Give calling code chance to observe the error before trying
1889 // something else.
1890 return 0;
1891 }
1882 if (len == 0) {1892 if (len == 0) {
1883 file_reader.size = file_reader.pos;1893 file_reader.size = file_reader.pos;
1884 return error.EndOfStream;1894 return error.EndOfStream;