feat(libzigc): move over some linux syscalls

* does not move all of them, only those which map almost 1:1
* also removes their musl implementation
This commit is contained in:
GasInfinity 2026-01-24 16:01:18 +01:00
parent b430cd62e4
commit 9cf34a8d81
No known key found for this signature in database
55 changed files with 289 additions and 477 deletions

View file

@ -26,6 +26,7 @@ comptime {
_ = @import("c/wchar.zig");
_ = @import("c/sys.zig");
_ = @import("c/unistd.zig");
if (builtin.target.isMuslLibC() or builtin.target.isWasiLibC()) {
// Files specific to musl and wasi-libc.

View file

@ -1,3 +1,7 @@
comptime {
_ = @import("sys/mman.zig");
_ = @import("sys/file.zig");
_ = @import("sys/reboot.zig");
_ = @import("sys/capability.zig");
_ = @import("sys/utsname.zig");
}

18
lib/c/sys/capability.zig Normal file
View file

@ -0,0 +1,18 @@
const std = @import("std");
const common = @import("../common.zig");
const builtin = @import("builtin");
comptime {
if (builtin.target.isMuslLibC()) {
@export(&capsetLinux, .{ .name = "capset", .linkage = common.linkage, .visibility = common.visibility });
@export(&capgetLinux, .{ .name = "capget", .linkage = common.linkage, .visibility = common.visibility });
}
}
fn capsetLinux(hdrp: *anyopaque, datap: *anyopaque) callconv(.c) c_int {
return common.errno(std.os.linux.capset(@ptrCast(@alignCast(hdrp)), @ptrCast(@alignCast(datap))));
}
fn capgetLinux(hdrp: *anyopaque, datap: *anyopaque) callconv(.c) c_int {
return common.errno(std.os.linux.capget(@ptrCast(@alignCast(hdrp)), @ptrCast(@alignCast(datap))));
}

13
lib/c/sys/file.zig Normal file
View file

@ -0,0 +1,13 @@
const std = @import("std");
const common = @import("../common.zig");
const builtin = @import("builtin");
comptime {
if (builtin.target.isMuslLibC()) {
@export(&flockLinux, .{ .name = "flock", .linkage = common.linkage, .visibility = common.visibility });
}
}
fn flockLinux(fd: c_int, operation: c_int) callconv(.c) c_int {
return common.errno(std.os.linux.flock(fd, operation));
}

57
lib/c/sys/mman.zig Normal file
View file

@ -0,0 +1,57 @@
const std = @import("std");
const common = @import("../common.zig");
const builtin = @import("builtin");
comptime {
if (builtin.target.isMuslLibC()) {
@export(&madviseLinux, .{ .name = "madvise", .linkage = common.linkage, .visibility = common.visibility });
@export(&madviseLinux, .{ .name = "__madvise", .linkage = common.linkage, .visibility = common.visibility });
@export(&mlockLinux, .{ .name = "mlock", .linkage = common.linkage, .visibility = common.visibility });
@export(&mlockallLinux, .{ .name = "mlockall", .linkage = common.linkage, .visibility = common.visibility });
@export(&mprotectLinux, .{ .name = "mprotect", .linkage = common.linkage, .visibility = common.visibility });
@export(&mprotectLinux, .{ .name = "__mprotect", .linkage = common.linkage, .visibility = common.visibility });
@export(&munlockLinux, .{ .name = "munlock", .linkage = common.linkage, .visibility = common.visibility });
@export(&munlockallLinux, .{ .name = "munlockall", .linkage = common.linkage, .visibility = common.visibility });
@export(&posix_madviseLinux, .{ .name = "posix_madvise", .linkage = common.linkage, .visibility = common.visibility });
}
}
fn madviseLinux(addr: *anyopaque, len: usize, advice: c_int) callconv(.c) c_int {
return common.errno(std.os.linux.madvise(@ptrCast(addr), len, @bitCast(advice)));
}
fn mincoreLinux(addr: *anyopaque, len: usize, vec: [*]u8) callconv(.c) c_int {
return common.errno(std.os.linux.mincore(@ptrCast(addr), len, vec));
}
fn mlockLinux(addr: *const anyopaque, len: usize) callconv(.c) c_int {
return common.errno(std.os.linux.mlock(@ptrCast(addr), len));
}
fn mlockallLinux(flags: c_int) callconv(.c) c_int {
return common.errno(std.os.linux.mlockall(@bitCast(flags)));
}
fn mprotectLinux(addr: *anyopaque, len: usize, prot: c_int) callconv(.c) c_int {
const page_size = std.heap.pageSize();
const start = std.mem.alignBackward(usize, @intFromPtr(addr), page_size);
const aligned_len = std.mem.alignForward(usize, len, page_size);
return common.errno(std.os.linux.mprotect(@ptrFromInt(start), aligned_len, @bitCast(prot)));
}
fn munlockLinux(addr: *const anyopaque, len: usize) callconv(.c) c_int {
return common.errno(std.os.linux.munlock(@ptrCast(addr), len));
}
fn munlockallLinux() callconv(.c) c_int {
return common.errno(std.os.linux.munlockall());
}
fn posix_madviseLinux(addr: *anyopaque, len: usize, advice: c_int) callconv(.c) c_int {
if (advice == std.os.linux.MADV.DONTNEED) return 0;
return @intCast(-@as(isize, @bitCast(std.os.linux.madvise(@ptrCast(addr), len, @bitCast(advice)))));
}

13
lib/c/sys/reboot.zig Normal file
View file

@ -0,0 +1,13 @@
const std = @import("std");
const common = @import("../common.zig");
const builtin = @import("builtin");
comptime {
if (builtin.target.isMuslLibC()) {
@export(&rebootLinux, .{ .name = "reboot", .linkage = common.linkage, .visibility = common.visibility });
}
}
fn rebootLinux(cmd: c_int) callconv(.c) c_int {
return common.errno(std.os.linux.reboot(.MAGIC1, .MAGIC2, @enumFromInt(cmd), null));
}

183
lib/c/unistd.zig Normal file
View file

@ -0,0 +1,183 @@
const std = @import("std");
const common = @import("common.zig");
const builtin = @import("builtin");
const linux = std.os.linux;
comptime {
if (builtin.target.isMuslLibC()) {
@export(&_exit, .{ .name = "_exit", .linkage = common.linkage, .visibility = common.visibility });
@export(&accessLinux, .{ .name = "access", .linkage = common.linkage, .visibility = common.visibility });
@export(&acctLinux, .{ .name = "acct", .linkage = common.linkage, .visibility = common.visibility });
@export(&chdirLinux, .{ .name = "chdir", .linkage = common.linkage, .visibility = common.visibility });
@export(&chownLinux, .{ .name = "chown", .linkage = common.linkage, .visibility = common.visibility });
@export(&fchownatLinux, .{ .name = "fchownat", .linkage = common.linkage, .visibility = common.visibility });
@export(&lchownLinux, .{ .name = "lchown", .linkage = common.linkage, .visibility = common.visibility });
@export(&chrootLinux, .{ .name = "chroot", .linkage = common.linkage, .visibility = common.visibility });
@export(&ctermidLinux, .{ .name = "ctermid", .linkage = common.linkage, .visibility = common.visibility });
@export(&dupLinux, .{ .name = "dup", .linkage = common.linkage, .visibility = common.visibility });
@export(&getegidLinux, .{ .name = "getegid", .linkage = common.linkage, .visibility = common.visibility });
@export(&geteuidLinux, .{ .name = "geteuid", .linkage = common.linkage, .visibility = common.visibility });
@export(&getgidLinux, .{ .name = "getgid", .linkage = common.linkage, .visibility = common.visibility });
@export(&getgroupsLinux, .{ .name = "getgroups", .linkage = common.linkage, .visibility = common.visibility });
@export(&getpgidLinux, .{ .name = "getpgid", .linkage = common.linkage, .visibility = common.visibility });
@export(&getpgrpLinux, .{ .name = "getpgrp", .linkage = common.linkage, .visibility = common.visibility });
@export(&setpgidLinux, .{ .name = "setpgid", .linkage = common.linkage, .visibility = common.visibility });
@export(&setpgrpLinux, .{ .name = "setpgrp", .linkage = common.linkage, .visibility = common.visibility });
@export(&getsidLinux, .{ .name = "getsid", .linkage = common.linkage, .visibility = common.visibility });
@export(&getpidLinux, .{ .name = "getpid", .linkage = common.linkage, .visibility = common.visibility });
@export(&getppidLinux, .{ .name = "getppid", .linkage = common.linkage, .visibility = common.visibility });
@export(&getuidLinux, .{ .name = "getuid", .linkage = common.linkage, .visibility = common.visibility });
@export(&rmdirLinux, .{ .name = "rmdir", .linkage = common.linkage, .visibility = common.visibility });
@export(&linkLinux, .{ .name = "link", .linkage = common.linkage, .visibility = common.visibility });
@export(&linkatLinux, .{ .name = "linkat", .linkage = common.linkage, .visibility = common.visibility });
@export(&pipeLinux, .{ .name = "pipe", .linkage = common.linkage, .visibility = common.visibility });
@export(&renameatLinux, .{ .name = "renameat", .linkage = common.linkage, .visibility = common.visibility });
@export(&symlinkLinux, .{ .name = "symlink", .linkage = common.linkage, .visibility = common.visibility });
@export(&symlinkatLinux, .{ .name = "symlinkat", .linkage = common.linkage, .visibility = common.visibility });
@export(&syncLinux, .{ .name = "sync", .linkage = common.linkage, .visibility = common.visibility });
@export(&unlinkLinux, .{ .name = "unlink", .linkage = common.linkage, .visibility = common.visibility });
@export(&unlinkatLinux, .{ .name = "unlinkat", .linkage = common.linkage, .visibility = common.visibility });
@export(&execveLinux, .{ .name = "execve", .linkage = common.linkage, .visibility = common.visibility });
}
}
fn _exit(exit_code: c_int) callconv(.c) noreturn {
std.c._Exit(exit_code);
}
fn accessLinux(path: [*:0]const c_char, amode: c_int) callconv(.c) c_int {
return common.errno(linux.access(@ptrCast(path), @bitCast(amode)));
}
fn acctLinux(path: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.acct(@ptrCast(path)));
}
fn chdirLinux(path: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.chdir(@ptrCast(path)));
}
fn chownLinux(path: [*:0]const c_char, uid: linux.uid_t, gid: linux.gid_t) callconv(.c) c_int {
return common.errno(linux.chown(@ptrCast(path), uid, gid));
}
fn fchownatLinux(fd: c_int, path: [*:0]const c_char, uid: linux.uid_t, gid: linux.gid_t, flags: c_int) callconv(.c) c_int {
return common.errno(linux.fchownat(fd, @ptrCast(path), uid, gid, @bitCast(flags)));
}
fn lchownLinux(path: [*:0]const c_char, uid: linux.uid_t, gid: linux.gid_t) callconv(.c) c_int {
return common.errno(linux.lchown(@ptrCast(path), uid, gid));
}
fn chrootLinux(path: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.chroot(@ptrCast(path)));
}
fn ctermidLinux(maybe_path: ?[*]c_char) callconv(.c) [*:0]c_char {
const default_tty = "/dev/tty";
return if (maybe_path) |path| blk: {
path[0..(default_tty.len + 1)].* = @bitCast(default_tty.*);
break :blk path[0..default_tty.len :0].ptr;
} else @ptrCast(@constCast(default_tty));
}
fn dupLinux(fd: c_int) callconv(.c) c_int {
return common.errno(linux.dup(fd));
}
fn getegidLinux() callconv(.c) linux.gid_t {
return linux.getegid();
}
fn geteuidLinux() callconv(.c) linux.uid_t {
return linux.geteuid();
}
fn getgidLinux() callconv(.c) linux.gid_t {
return linux.getgid();
}
fn getgroupsLinux(size: c_int, list: ?[*]linux.gid_t) callconv(.c) c_int {
return common.errno(linux.getgroups(@intCast(size), list));
}
fn getpgidLinux(pid: linux.pid_t) callconv(.c) linux.pid_t {
return common.errno(linux.getpgid(pid));
}
fn getpgrpLinux() callconv(.c) linux.pid_t {
return @intCast(linux.getpgid(0)); // @intCast as it cannot fail
}
fn setpgidLinux(pid: linux.pid_t, pgid: linux.pid_t) callconv(.c) c_int {
return common.errno(linux.setpgid(pid, pgid));
}
fn setpgrpLinux() callconv(.c) linux.pid_t {
return @intCast(linux.setpgid(0, 0)); // @intCast as it cannot fail
}
fn getpidLinux() callconv(.c) linux.pid_t {
return linux.getpid();
}
fn getppidLinux() callconv(.c) linux.pid_t {
return linux.getppid();
}
fn getsidLinux(pid: linux.pid_t) callconv(.c) linux.pid_t {
return common.errno(linux.getsid(pid));
}
fn getuidLinux() callconv(.c) linux.uid_t {
return linux.getuid();
}
fn linkLinux(old: [*:0]const c_char, new: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.link(@ptrCast(old), @ptrCast(new)));
}
fn linkatLinux(old_fd: c_int, old: [*:0]const c_char, new_fd: c_int, new: [*:0]const c_char, flags: c_int) callconv(.c) c_int {
return common.errno(linux.linkat(old_fd, @ptrCast(old), new_fd, @ptrCast(new), @bitCast(flags)));
}
fn pipeLinux(fd: *[2]c_int) callconv(.c) c_int {
return common.errno(linux.pipe(@ptrCast(fd)));
}
fn renameatLinux(old_fd: c_int, old: [*:0]const c_char, new_fd: c_int, new: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.renameat(old_fd, @ptrCast(old), new_fd, @ptrCast(new)));
}
fn rmdirLinux(path: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.rmdir(@ptrCast(path)));
}
fn symlinkLinux(existing: [*:0]const c_char, new: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.symlink(@ptrCast(existing), @ptrCast(new)));
}
fn symlinkatLinux(existing: [*:0]const c_char, fd: c_int, new: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.symlinkat(@ptrCast(existing), fd, @ptrCast(new)));
}
fn syncLinux() callconv(.c) void {
linux.sync();
}
fn unlinkLinux(path: [*:0]const c_char) callconv(.c) c_int {
return common.errno(linux.unlink(@ptrCast(path)));
}
fn unlinkatLinux(fd: c_int, path: [*:0]const c_char, flags: c_int) callconv(.c) c_int {
return common.errno(linux.unlinkat(fd, @ptrCast(path), @bitCast(flags)));
}
fn execveLinux(path: [*:0]const c_char, argv: [*:null]const ?[*:0]c_char, envp: [*:null]const ?[*:0]c_char) callconv(.c) c_int {
return common.errno(linux.execve(@ptrCast(path), @ptrCast(argv), @ptrCast(envp)));
}

View file

@ -1,11 +0,0 @@
#include "syscall.h"
int capset(void *a, void *b)
{
return syscall(SYS_capset, a, b);
}
int capget(void *a, void *b)
{
return syscall(SYS_capget, a, b);
}

View file

@ -1,8 +0,0 @@
#define _GNU_SOURCE
#include <unistd.h>
#include "syscall.h"
int chroot(const char *path)
{
return syscall(SYS_chroot, path);
}

View file

@ -1,7 +0,0 @@
#include <sys/file.h>
#include "syscall.h"
int flock(int fd, int op)
{
return syscall(SYS_flock, fd, op);
}

View file

@ -1,7 +0,0 @@
#include <sys/reboot.h>
#include "syscall.h"
int reboot(int type)
{
return syscall(SYS_reboot, 0xfee1dead, 672274793, type);
}

View file

@ -1,9 +0,0 @@
#include <sys/mman.h>
#include "syscall.h"
int __madvise(void *addr, size_t len, int advice)
{
return syscall(SYS_madvise, addr, len, advice);
}
weak_alias(__madvise, madvise);

View file

@ -1,8 +0,0 @@
#define _GNU_SOURCE
#include <sys/mman.h>
#include "syscall.h"
int mincore (void *addr, size_t len, unsigned char *vec)
{
return syscall(SYS_mincore, addr, len, vec);
}

View file

@ -1,11 +0,0 @@
#include <sys/mman.h>
#include "syscall.h"
int mlock(const void *addr, size_t len)
{
#ifdef SYS_mlock
return syscall(SYS_mlock, addr, len);
#else
return syscall(SYS_mlock2, addr, len, 0);
#endif
}

View file

@ -1,7 +0,0 @@
#include <sys/mman.h>
#include "syscall.h"
int mlockall(int flags)
{
return syscall(SYS_mlockall, flags);
}

View file

@ -1,13 +0,0 @@
#include <sys/mman.h>
#include "libc.h"
#include "syscall.h"
int __mprotect(void *addr, size_t len, int prot)
{
size_t start, end;
start = (size_t)addr & -PAGE_SIZE;
end = (size_t)((char *)addr + len + PAGE_SIZE-1) & -PAGE_SIZE;
return syscall(SYS_mprotect, start, end-start, prot);
}
weak_alias(__mprotect, mprotect);

View file

@ -1,7 +0,0 @@
#include <sys/mman.h>
#include "syscall.h"
int munlock(const void *addr, size_t len)
{
return syscall(SYS_munlock, addr, len);
}

View file

@ -1,7 +0,0 @@
#include <sys/mman.h>
#include "syscall.h"
int munlockall(void)
{
return syscall(SYS_munlockall);
}

View file

@ -1,9 +0,0 @@
#define _GNU_SOURCE
#include <sys/mman.h>
#include "syscall.h"
int posix_madvise(void *addr, size_t len, int advice)
{
if (advice == MADV_DONTNEED) return 0;
return -__syscall(SYS_madvise, addr, len, advice);
}

View file

@ -1,8 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int execve(const char *path, char *const argv[], char *const envp[])
{
/* do we need to use environ if envp is null? */
return syscall(SYS_execve, path, argv, envp);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include <stdlib.h>
_Noreturn void _exit(int status)
{
_Exit(status);
}

View file

@ -1,12 +0,0 @@
#include <unistd.h>
#include <fcntl.h>
#include "syscall.h"
int access(const char *filename, int amode)
{
#ifdef SYS_access
return syscall(SYS_access, filename, amode);
#else
return syscall(SYS_faccessat, AT_FDCWD, filename, amode, 0);
#endif
}

View file

@ -1,8 +0,0 @@
#define _GNU_SOURCE
#include <unistd.h>
#include "syscall.h"
int acct(const char *filename)
{
return syscall(SYS_acct, filename);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int chdir(const char *path)
{
return syscall(SYS_chdir, path);
}

View file

@ -1,12 +0,0 @@
#include <unistd.h>
#include <fcntl.h>
#include "syscall.h"
int chown(const char *path, uid_t uid, gid_t gid)
{
#ifdef SYS_chown
return syscall(SYS_chown, path, uid, gid);
#else
return syscall(SYS_fchownat, AT_FDCWD, path, uid, gid, 0);
#endif
}

View file

@ -1,7 +0,0 @@
#include <stdio.h>
#include <string.h>
char *ctermid(char *s)
{
return s ? strcpy(s, "/dev/tty") : "/dev/tty";
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int dup(int fd)
{
return syscall(SYS_dup, fd);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag)
{
return syscall(SYS_fchownat, fd, path, uid, gid, flag);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
gid_t getegid(void)
{
return __syscall(SYS_getegid);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
uid_t geteuid(void)
{
return __syscall(SYS_geteuid);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
gid_t getgid(void)
{
return __syscall(SYS_getgid);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int getgroups(int count, gid_t list[])
{
return syscall(SYS_getgroups, count, list);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
pid_t getpgid(pid_t pid)
{
return syscall(SYS_getpgid, pid);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
pid_t getpgrp(void)
{
return __syscall(SYS_getpgid, 0);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
pid_t getpid(void)
{
return __syscall(SYS_getpid);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
pid_t getppid(void)
{
return __syscall(SYS_getppid);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
pid_t getsid(pid_t pid)
{
return syscall(SYS_getsid, pid);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
uid_t getuid(void)
{
return __syscall(SYS_getuid);
}

View file

@ -1,12 +0,0 @@
#include <unistd.h>
#include <fcntl.h>
#include "syscall.h"
int lchown(const char *path, uid_t uid, gid_t gid)
{
#ifdef SYS_lchown
return syscall(SYS_lchown, path, uid, gid);
#else
return syscall(SYS_fchownat, AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW);
#endif
}

View file

@ -1,12 +0,0 @@
#include <unistd.h>
#include <fcntl.h>
#include "syscall.h"
int link(const char *existing, const char *new)
{
#ifdef SYS_link
return syscall(SYS_link, existing, new);
#else
return syscall(SYS_linkat, AT_FDCWD, existing, AT_FDCWD, new, 0);
#endif
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int linkat(int fd1, const char *existing, int fd2, const char *new, int flag)
{
return syscall(SYS_linkat, fd1, existing, fd2, new, flag);
}

View file

@ -1,20 +0,0 @@
.set noreorder
.global pipe
.type pipe,@function
pipe:
lui $gp, %hi(_gp_disp)
addiu $gp, %lo(_gp_disp)
addu $gp, $gp, $25
li $2, 4042
syscall
beq $7, $0, 1f
nop
lw $25, %call16(__syscall_ret)($gp)
jr $25
subu $4, $0, $2
1: sw $2, 0($4)
sw $3, 4($4)
move $2, $0
jr $ra
nop

View file

@ -1,19 +0,0 @@
.set noreorder
.global pipe
.type pipe,@function
pipe:
lui $3, %hi(%neg(%gp_rel(pipe)))
daddiu $3, $3, %lo(%neg(%gp_rel(pipe)))
daddu $3, $3, $25
li $2, 5021
syscall
beq $7, $0, 1f
nop
ld $25, %got_disp(__syscall_ret)($3)
jr $25
dsubu $4, $0, $2
1: sw $2, 0($4)
sw $3, 4($4)
move $2, $0
jr $ra
nop

View file

@ -1,19 +0,0 @@
.set noreorder
.global pipe
.type pipe,@function
pipe:
lui $3, %hi(%neg(%gp_rel(pipe)))
addiu $3, $3, %lo(%neg(%gp_rel(pipe)))
addu $3, $3, $25
li $2, 6021
syscall
beq $7, $0, 1f
nop
lw $25, %got_disp(__syscall_ret)($3)
jr $25
subu $4, $0, $2
1: sw $2, 0($4)
sw $3, 4($4)
move $2, $0
jr $ra
nop

View file

@ -1,11 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int pipe(int fd[2])
{
#ifdef SYS_pipe
return syscall(SYS_pipe, fd);
#else
return syscall(SYS_pipe2, fd, 0);
#endif
}

View file

@ -1,11 +0,0 @@
#include <stdio.h>
#include "syscall.h"
int renameat(int oldfd, const char *old, int newfd, const char *new)
{
#ifdef SYS_renameat
return syscall(SYS_renameat, oldfd, old, newfd, new);
#else
return syscall(SYS_renameat2, oldfd, old, newfd, new, 0);
#endif
}

View file

@ -1,12 +0,0 @@
#include <unistd.h>
#include <fcntl.h>
#include "syscall.h"
int rmdir(const char *path)
{
#ifdef SYS_rmdir
return syscall(SYS_rmdir, path);
#else
return syscall(SYS_unlinkat, AT_FDCWD, path, AT_REMOVEDIR);
#endif
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int setpgid(pid_t pid, pid_t pgid)
{
return syscall(SYS_setpgid, pid, pgid);
}

View file

@ -1,6 +0,0 @@
#include <unistd.h>
pid_t setpgrp(void)
{
return setpgid(0, 0);
}

View file

@ -1,12 +0,0 @@
#include <unistd.h>
#include <fcntl.h>
#include "syscall.h"
int symlink(const char *existing, const char *new)
{
#ifdef SYS_symlink
return syscall(SYS_symlink, existing, new);
#else
return syscall(SYS_symlinkat, existing, AT_FDCWD, new);
#endif
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int symlinkat(const char *existing, int fd, const char *new)
{
return syscall(SYS_symlinkat, existing, fd, new);
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
void sync(void)
{
__syscall(SYS_sync);
}

View file

@ -1,12 +0,0 @@
#include <unistd.h>
#include <fcntl.h>
#include "syscall.h"
int unlink(const char *path)
{
#ifdef SYS_unlink
return syscall(SYS_unlink, path);
#else
return syscall(SYS_unlinkat, AT_FDCWD, path, 0);
#endif
}

View file

@ -1,7 +0,0 @@
#include <unistd.h>
#include "syscall.h"
int unlinkat(int fd, const char *path, int flag)
{
return syscall(SYS_unlinkat, fd, path, flag);
}

View file

@ -704,8 +704,6 @@ const src_files = [_][]const u8{
"musl/src/linux/arch_prctl.c",
"musl/src/linux/brk.c",
"musl/src/linux/cache.c",
"musl/src/linux/cap.c",
"musl/src/linux/chroot.c",
"musl/src/linux/clock_adjtime.c",
"musl/src/linux/clone.c",
"musl/src/linux/copy_file_range.c",
@ -713,7 +711,6 @@ const src_files = [_][]const u8{
"musl/src/linux/eventfd.c",
"musl/src/linux/fallocate.c",
"musl/src/linux/fanotify.c",
"musl/src/linux/flock.c",
"musl/src/linux/getdents.c",
"musl/src/linux/getrandom.c",
"musl/src/linux/gettid.c",
@ -738,7 +735,6 @@ const src_files = [_][]const u8{
"musl/src/linux/pwritev2.c",
"musl/src/linux/quotactl.c",
"musl/src/linux/readahead.c",
"musl/src/linux/reboot.c",
"musl/src/linux/remap_file_pages.c",
"musl/src/linux/sbrk.c",
"musl/src/linux/sendfile.c",
@ -1157,18 +1153,10 @@ const src_files = [_][]const u8{
"musl/src/misc/syscall.c",
"musl/src/misc/syslog.c",
"musl/src/misc/wordexp.c",
"musl/src/mman/madvise.c",
"musl/src/mman/mincore.c",
"musl/src/mman/mlockall.c",
"musl/src/mman/mlock.c",
"musl/src/mman/mmap.c",
"musl/src/mman/mprotect.c",
"musl/src/mman/mremap.c",
"musl/src/mman/msync.c",
"musl/src/mman/munlockall.c",
"musl/src/mman/munlock.c",
"musl/src/mman/munmap.c",
"musl/src/mman/posix_madvise.c",
"musl/src/mman/shm_open.c",
"musl/src/mq/mq_close.c",
"musl/src/mq/mq_getattr.c",
@ -1304,7 +1292,6 @@ const src_files = [_][]const u8{
"musl/src/process/execle.c",
"musl/src/process/execlp.c",
"musl/src/process/execv.c",
"musl/src/process/execve.c",
"musl/src/process/execvp.c",
"musl/src/process/fexecve.c",
"musl/src/process/fork.c",
@ -1871,51 +1858,26 @@ const src_files = [_][]const u8{
"musl/src/time/utime.c",
"musl/src/time/wcsftime.c",
"musl/src/time/__year_to_secs.c",
"musl/src/unistd/access.c",
"musl/src/unistd/acct.c",
"musl/src/unistd/alarm.c",
"musl/src/unistd/chdir.c",
"musl/src/unistd/chown.c",
"musl/src/unistd/close.c",
"musl/src/unistd/ctermid.c",
"musl/src/unistd/dup2.c",
"musl/src/unistd/dup3.c",
"musl/src/unistd/dup.c",
"musl/src/unistd/_exit.c",
"musl/src/unistd/faccessat.c",
"musl/src/unistd/fchdir.c",
"musl/src/unistd/fchownat.c",
"musl/src/unistd/fchown.c",
"musl/src/unistd/fdatasync.c",
"musl/src/unistd/fsync.c",
"musl/src/unistd/ftruncate.c",
"musl/src/unistd/getcwd.c",
"musl/src/unistd/getegid.c",
"musl/src/unistd/geteuid.c",
"musl/src/unistd/getgid.c",
"musl/src/unistd/getgroups.c",
"musl/src/unistd/gethostname.c",
"musl/src/unistd/getlogin.c",
"musl/src/unistd/getlogin_r.c",
"musl/src/unistd/getpgid.c",
"musl/src/unistd/getpgrp.c",
"musl/src/unistd/getpid.c",
"musl/src/unistd/getppid.c",
"musl/src/unistd/getsid.c",
"musl/src/unistd/getuid.c",
"musl/src/unistd/isatty.c",
"musl/src/unistd/lchown.c",
"musl/src/unistd/linkat.c",
"musl/src/unistd/link.c",
"musl/src/unistd/lseek.c",
"musl/src/unistd/mips64/pipe.s",
"musl/src/unistd/mipsn32/lseek.c",
"musl/src/unistd/mipsn32/pipe.s",
"musl/src/unistd/mips/pipe.s",
"musl/src/unistd/nice.c",
"musl/src/unistd/pause.c",
"musl/src/unistd/pipe2.c",
"musl/src/unistd/pipe.c",
"musl/src/unistd/posix_close.c",
"musl/src/unistd/pread.c",
"musl/src/unistd/preadv.c",
@ -1925,13 +1887,9 @@ const src_files = [_][]const u8{
"musl/src/unistd/readlinkat.c",
"musl/src/unistd/readlink.c",
"musl/src/unistd/readv.c",
"musl/src/unistd/renameat.c",
"musl/src/unistd/rmdir.c",
"musl/src/unistd/setegid.c",
"musl/src/unistd/seteuid.c",
"musl/src/unistd/setgid.c",
"musl/src/unistd/setpgid.c",
"musl/src/unistd/setpgrp.c",
"musl/src/unistd/setregid.c",
"musl/src/unistd/setresgid.c",
"musl/src/unistd/setresuid.c",
@ -1940,17 +1898,12 @@ const src_files = [_][]const u8{
"musl/src/unistd/setuid.c",
"musl/src/unistd/setxid.c",
"musl/src/unistd/sleep.c",
"musl/src/unistd/symlinkat.c",
"musl/src/unistd/symlink.c",
"musl/src/unistd/sync.c",
"musl/src/unistd/tcgetpgrp.c",
"musl/src/unistd/tcsetpgrp.c",
"musl/src/unistd/truncate.c",
"musl/src/unistd/ttyname.c",
"musl/src/unistd/ttyname_r.c",
"musl/src/unistd/ualarm.c",
"musl/src/unistd/unlinkat.c",
"musl/src/unistd/unlink.c",
"musl/src/unistd/usleep.c",
"musl/src/unistd/write.c",
"musl/src/unistd/writev.c",