aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/linux.zig
diff options
context:
space:
mode:
authorPat Tullmann <pat.github@tullmann.org>2024-07-31 22:49:39 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-08-07 13:05:42 -0700
commit4d6429fc4fd299cdfb2256d4aac87bc6551ba09e (patch)
tree8b7de21ad01c27119b19a0b18b0cf962f418c985 /lib/std/os/linux.zig
parent979fd12be96d5f8eda3e02ba676aecea78e6c0db (diff)
downloadzig-4d6429fc4fd299cdfb2256d4aac87bc6551ba09e.tar.gz
zig-4d6429fc4fd299cdfb2256d4aac87bc6551ba09e.zip
POSIX link() syscall only takes two arguments (no flags)
The signature is documented as: int link(const char *, const char *); (see https://man7.org/linux/man-pages/man2/link.2.html or https://man.netbsd.org/link.2) And its not some Linux extension, the [syscall implementation](https://github.com/torvalds/linux/blob/21b136cc63d2a9ddd60d4699552b69c214b32964/fs/namei.c#L4794-L4797) only expects two arguments too. It probably *should* have a flags parameter, but its too late now. I am a bit surprised that linking glibc or musl against code that invokes a 'link' with three parameters doesn't fail (at least, I couldn't get any local test cases to trigger a compile or link error). The test case in std/posix/test.zig is currently disabled, but if I manually enable it, it works with this change.
Diffstat (limited to 'lib/std/os/linux.zig')
-rw-r--r--lib/std/os/linux.zig7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig
index a5a82c2e32..5f3f043d32 100644
--- a/lib/std/os/linux.zig
+++ b/lib/std/os/linux.zig
@@ -1339,13 +1339,12 @@ pub fn tgkill(tgid: pid_t, tid: pid_t, sig: i32) usize {
return syscall3(.tgkill, @as(usize, @bitCast(@as(isize, tgid))), @as(usize, @bitCast(@as(isize, tid))), @as(usize, @bitCast(@as(isize, sig))));
}
-pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: i32) usize {
+pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
if (@hasField(SYS, "link")) {
- return syscall3(
+ return syscall2(
.link,
@intFromPtr(oldpath),
@intFromPtr(newpath),
- @as(usize, @bitCast(@as(isize, flags))),
);
} else {
return syscall5(
@@ -1354,7 +1353,7 @@ pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: i32) usize {
@intFromPtr(oldpath),
@as(usize, @bitCast(@as(isize, AT.FDCWD))),
@intFromPtr(newpath),
- @as(usize, @bitCast(@as(isize, flags))),
+ 0,
);
}
}