fix(platform/linux): use FCHOWNAT to implement lchown(2)

`LCHOWN` syscall is not available on aarch64.

Signed-off-by: Anhad Singh <andypython@protonmail.com>
This commit is contained in:
Anhad Singh
2025-12-01 14:44:40 +11:00
parent 6d68ca9957
commit 6bcdac4202
+16
View File
@@ -455,10 +455,26 @@ impl Pal for Sys {
unsafe { syscall!(GETUID) as uid_t }
}
#[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
fn lchown(path: CStr, owner: uid_t, group: gid_t) -> Result<()> {
e_raw(unsafe { syscall!(LCHOWN, path.as_ptr(), owner, group) }).map(|_| ())
}
#[cfg(target_arch = "aarch64")]
fn lchown(path: CStr, owner: uid_t, group: gid_t) -> Result<()> {
e_raw(unsafe {
syscall!(
FCHOWNAT,
AT_FDCWD,
path.as_ptr(),
owner as u32,
group as u32,
AT_SYMLINK_NOFOLLOW
)
})
.map(|_| ())
}
fn link(path1: CStr, path2: CStr) -> Result<()> {
e_raw(unsafe {
syscall!(