diff --git a/doc/langref.html.in b/doc/langref.html.in
index 2020d248c1..53ccac4803 100644
--- a/doc/langref.html.in
+++ b/doc/langref.html.in
@@ -525,7 +525,7 @@
| {#syntax#}isize{#endsyntax#} |
- intptr_t |
+ intptr_t, ssize_t |
signed pointer sized integer |
diff --git a/lib/c/fcntl.zig b/lib/c/fcntl.zig
index 29788fa922..e9a0630552 100644
--- a/lib/c/fcntl.zig
+++ b/lib/c/fcntl.zig
@@ -12,6 +12,7 @@ comptime {
symbol(&fallocateLinux, "fallocate");
symbol(&posix_fadviseLinux, "posix_fadvise");
symbol(&posix_fallocateLinux, "posix_fallocate");
+ symbol(&teeLinux, "tee");
}
}
@@ -26,3 +27,7 @@ fn posix_fadviseLinux(fd: c_int, offset: off_t, len: off_t, advice: c_int) callc
fn posix_fallocateLinux(fd: c_int, offset: off_t, len: off_t) callconv(.c) c_int {
return errno(linux.fallocate(fd, 0, offset, len));
}
+
+fn teeLinux(src: c_int, dest: c_int, len: usize, flags: c_uint) callconv(.c) isize {
+ return errno(linux.tee(src, dest, len, flags));
+}
diff --git a/lib/libc/musl/src/linux/tee.c b/lib/libc/musl/src/linux/tee.c
deleted file mode 100644
index a24748cfb0..0000000000
--- a/lib/libc/musl/src/linux/tee.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#define _GNU_SOURCE
-#include
-#include "syscall.h"
-
-ssize_t tee(int src, int dest, size_t len, unsigned flags)
-{
- return syscall(SYS_tee, src, dest, len, flags);
-}
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig
index ffe9ef15f3..8a3d1a3b76 100644
--- a/lib/std/os/linux.zig
+++ b/lib/std/os/linux.zig
@@ -2981,6 +2981,16 @@ pub fn map_shadow_stack(addr: usize, size: usize, flags: u32) usize {
return syscall3(.map_shadow_stack, addr, size, flags);
}
+pub fn tee(src: fd_t, dest: fd_t, len: usize, flags: u32) usize {
+ return syscall4(
+ .tee,
+ @as(u32, @bitCast(src)),
+ @as(u32, @bitCast(dest)),
+ len,
+ flags,
+ );
+}
+
pub const Sysinfo = switch (native_abi) {
.gnux32, .muslx32 => extern struct {
/// Seconds since boot
diff --git a/src/libs/musl.zig b/src/libs/musl.zig
index f53b406568..beb1c2ceb8 100644
--- a/src/libs/musl.zig
+++ b/src/libs/musl.zig
@@ -745,7 +745,6 @@ const src_files = [_][]const u8{
"musl/src/linux/sync_file_range.c",
"musl/src/linux/syncfs.c",
"musl/src/linux/sysinfo.c",
- "musl/src/linux/tee.c",
"musl/src/linux/timerfd.c",
"musl/src/linux/unshare.c",
"musl/src/linux/utimes.c",