zig/lib/std/os/plan9.zig

92 lines
2.2 KiB
Zig

const std = @import("../std.zig");
const builtin = @import("builtin");
pub const syscall_bits = switch (builtin.cpu.arch) {
.x86_64 => @import("plan9/x86_64.zig"),
else => @compileError("more plan9 syscall implementations (needs more inline asm in stage2"),
};
pub const SYS = enum(usize) {
SYSR1 = 0,
_ERRSTR = 1,
BIND = 2,
CHDIR = 3,
CLOSE = 4,
DUP = 5,
ALARM = 6,
EXEC = 7,
EXITS = 8,
_FSESSION = 9,
FAUTH = 10,
_FSTAT = 11,
SEGBRK = 12,
_MOUNT = 13,
OPEN = 14,
_READ = 15,
OSEEK = 16,
SLEEP = 17,
_STAT = 18,
RFORK = 19,
_WRITE = 20,
PIPE = 21,
CREATE = 22,
FD2PATH = 23,
BRK_ = 24,
REMOVE = 25,
_WSTAT = 26,
_FWSTAT = 27,
NOTIFY = 28,
NOTED = 29,
SEGATTACH = 30,
SEGDETACH = 31,
SEGFREE = 32,
SEGFLUSH = 33,
RENDEZVOUS = 34,
UNMOUNT = 35,
_WAIT = 36,
SEMACQUIRE = 37,
SEMRELEASE = 38,
SEEK = 39,
FVERSION = 40,
ERRSTR = 41,
STAT = 42,
FSTAT = 43,
WSTAT = 44,
FWSTAT = 45,
MOUNT = 46,
AWAIT = 47,
PREAD = 50,
PWRITE = 51,
TSEMACQUIRE = 52,
_NSEC = 53,
};
pub fn pwrite(fd: usize, buf: [*]const u8, count: usize, offset: usize) usize {
return syscall_bits.syscall4(.PWRITE, fd, @ptrToInt(buf), count, offset);
}
pub fn open(path: [*:0]const u8, omode: OpenMode) usize {
return syscall_bits.syscall2(.OPEN, @ptrToInt(path), @enumToInt(omode));
}
pub fn create(path: [*:0]const u8, omode: OpenMode, perms: usize) usize {
return syscall_bits.syscall3(.CREATE, @ptrToInt(path), @enumToInt(omode), perms);
}
pub fn exits(status: ?[*:0]const u8) void {
_ = syscall_bits.syscall1(.EXITS, if (status) |s| @ptrToInt(s) else 0);
}
pub fn close(fd: usize) usize {
return syscall_bits.syscall1(.CLOSE, fd);
}
pub const OpenMode = enum(usize) {
OREAD = 0, //* open for read
OWRITE = 1, //* write
ORDWR = 2, //* read and write
OEXEC = 3, //* execute, == read but check execute permission
OTRUNC = 16, //* or'ed in (except for exec), truncate file first
OCEXEC = 32, //* or'ed in (per file descriptor), close on exec
ORCLOSE = 64, //* or'ed in, remove on close
OEXCL = 0x1000, //* or'ed in, exclusive create
};