diff --git a/mod.zig b/mod.zig index f12d6009dee50c662b4d8deb68169790c87b8b71..208bf011bcc20866b04a12a72f0418df47b9fe0f 100644 --- a/mod.zig +++ b/mod.zig @@ -2649,6 +2649,7 @@ pub const libc = struct { pub extern fn gettid() pid_t; pub extern fn accept4(socket: c_int, noalias address: ?*struct_sockaddr, noalias address_len: *socklen_t, flags: c_int) c_int; pub extern fn memfd_create(name: [*:0]const u8, flags: c_uint) c_int; + pub extern fn sendfile(out_fd: c_int, in_fd: c_int, offset: ?*const off_t, count: usize) isize; }; pub const clock_t = c_long; @@ -3176,3 +3177,9 @@ pub fn getsockname(socketfd: c_uint, noalias address: *struct_sockaddr, noalias if (rc == -1) return errno.fromInt(errno.fromLibC()); std.debug.assert(rc == 0); } +pub fn sendfile(out_fd: c_int, in_fd: c_int, offset: ?*const off_t, count: usize) errno.Error!usize { + const rc = libc.sendfile(out_fd, in_fd, offset, count); + if (rc == -1) return errno.fromInt(errno.fromLibC()); + std.debug.assert(rc >= 0); + return @intCast(rc); +} diff --git a/test.zig b/test.zig index 372197947cee352306b05b6da0fca01288a89346..82ab24657f3fb3fd58ef037959d0760027e0653d 100644 --- a/test.zig +++ b/test.zig @@ -33,4 +33,5 @@ test { _ = &linux.write; _ = &linux.writev; _ = &linux.getsockname; + _ = &linux.sendfile; }