diff options
| author | Pat Tullmann <pat.github@tullmann.org> | 2024-07-31 22:49:39 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-08-07 13:05:42 -0700 |
| commit | 4d6429fc4fd299cdfb2256d4aac87bc6551ba09e (patch) | |
| tree | 8b7de21ad01c27119b19a0b18b0cf962f418c985 /lib/std/os/linux.zig | |
| parent | 979fd12be96d5f8eda3e02ba676aecea78e6c0db (diff) | |
| download | zig-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.zig | 7 |
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, ); } } |
